source: src/main/java/agents/ai2014/group3/Strategy.java@ 126

Last change on this file since 126 was 126, checked in by Aron Hammond, 6 years ago

Added function to calculate opposition to MultiLateralAnalysis.java

Moved code to add RLBOA listeners to RLBOAUtils is misc package

Added input for strategyParameters to SessionPanel (gui)

!! close SessionInfo after tournament; this caused /tmp/ to fill up with GeniusData files

Our own package:

  • Added opponents and strategies that are mentioned in the report
  • Change class hierarchy, agents can now extend from RLBOAagentBilateral to inherit RL functionality.
  • States extend from AbstractState
File size: 4.6 KB
Line 
1package agents.ai2014.group3;
2
3import java.util.ArrayList;
4
5import genius.core.AgentID;
6import genius.core.Bid;
7
8public class Strategy {
9 // Just Static methods
10 private Strategy() {
11 super();
12 }
13 /*
14 * Generate the next Bid based on the Utility value for this round.
15 */
16 public static Bid calculateMyBid(Group3 info) {
17 double U = nextBidUtility(info);
18 // Get a List of bids with this utility or more 10%
19 ArrayList<Bid> bidsInRange = BidGenerator.getBidsInRange(info.getPossibleBids(), U, U*1.1, info);
20 if(bidsInRange.isEmpty())
21 return null;
22 // Select the best bid for our opponents
23 return bidSelect(bidsInRange,info.getAgentUtilsList());
24 }
25
26 // Receives a List of bids, and a list of agentUtils, selects the bid that maximizes the minimum utility over all agents
27 public static Bid bidSelect(ArrayList<Bid> bids, ArrayList<AgentUtils> agentUtils) {
28 Bid bestBid =null;
29 double bestBidUtil=0;
30 for(int i=0; i<bids.size();i++) {
31 double lowestUtil=1;
32 for(int j=0;j<agentUtils.size();j++) {
33 double currentUtil =agentUtils.get(j).getAgentUtil(bids.get(i));
34 if(currentUtil<lowestUtil)
35 lowestUtil=currentUtil;
36 }
37 if(bestBidUtil<lowestUtil) {
38 bestBid=bids.get(i);
39 bestBidUtil=lowestUtil;
40 }
41 }
42 if(bestBid==null)
43 bestBid=bids.get(0);
44 return bestBid;
45 }
46
47
48 // Returns the target utility of our Bid on this round-
49 public static double nextBidUtility(Group3 info) {
50 //return 1- ((double) info.getRoundN())/info.roundDeadline()*(1-info.getUtilitySpace().getReservationValue());
51 // changed from a linear decrease to a non linear.
52 // In the first 20% of the rounds our target utility goes linearly from 1 to 0.8*(1-ReservationValue)
53 // In the 20% to 80% of the rounds our target utility stays constant
54 // In the last 20% of the round our target utility goes linearly from 0.8*(1-ReservationValue) to our Reservation value
55
56 if(((double) info.getRoundN())/info.roundDeadline()<=0.2 ){
57 return 1- ((double) info.getRoundN())/info.roundDeadline()*(1-info.getUtilitySpace().getReservationValue());
58 } else if ((0.8 > ((double) info.getRoundN())/info.roundDeadline()) && (((double) info.getRoundN())/info.roundDeadline() >=0.2)){
59 return 1-(0.2*(1-info.getUtilitySpace().getReservationValue()));
60 } else {
61 return 1- (4*((double) info.getRoundN())/info.roundDeadline()-3)*(1-info.getUtilitySpace().getReservationValue());
62 }
63
64 }
65
66 // Returns true if we should accept.
67 public static boolean acceptingConditions(Group3 info) {
68 // Check if the offer we received has higher utility than our target utility
69 if(nextBidUtility(info)>lastOfferUtility(info)) {
70 return false;
71 }
72 // check if we received an offer that has larger utility than this one
73 else if(lastOfferUtility(info)<biggestReceivedOffer(info)) {
74 return false;
75 }
76 return true;
77 }
78
79 // Returns true if we should offer a previously unaccepted offer.
80 public static boolean offerPreviousOffer(Group3 info) {
81 if(nextBidUtility(info)<biggestReceivedOffer(info)) {
82 return true;
83 }
84 return false;
85 }
86
87 // Returns the biggest received offer that we haven't resent
88 public static Bid bestPreviousBid(Group3 info) {
89 Bid biggestBid = null;
90 double biggestUtil=0;
91 if(info.getPartylist().isEmpty())
92 return null;
93 for(int i=0; i<info.getPartylist().size();i++) {
94 AgentID agent = info.getPartylist().get(i);
95 for(int j=0;j<info.getBidhistory(agent).getHistory().size();j++) {
96 if(!info.getAlreadyProposed().contains(info.getBidhistory(agent).getHistory().get(j).getBid())){
97 if(biggestUtil<info.getBidhistory(agent).getHistory().get(j).getMyUndiscountedUtil()) {
98 biggestBid = info.getBidhistory(agent).getHistory().get(j).getBid();
99 biggestUtil= info.getBidhistory(agent).getHistory().get(j).getMyUndiscountedUtil();
100 }
101 }
102 }
103 }
104 return biggestBid;
105 }
106
107 // Returns the utility of the biggest received offer, that hasn't been proposed by us.
108 public static double biggestReceivedOffer(Group3 info) {
109
110 double biggestUtil=0;
111 if(info.getPartylist().isEmpty())
112 return 0;
113 for(int i=0; i<info.getPartylist().size();i++) {
114 AgentID agent = info.getPartylist().get(i);
115 for(int j=0;j<info.getBidhistory(agent).getHistory().size();j++) {
116 if(!info.getAlreadyProposed().contains(info.getBidhistory(agent).getHistory().get(j).getBid())){
117 if(biggestUtil<info.getBidhistory(agent).getHistory().get(j).getMyUndiscountedUtil()) {
118 biggestUtil= info.getBidhistory(agent).getHistory().get(j).getMyUndiscountedUtil();
119 }
120 }
121 }
122 }
123 return biggestUtil;
124
125 }
126
127
128
129 // Returns the our Utility for the current offer
130
131 public static double lastOfferUtility(Group3 info) {
132 return info.getUtility(info.getLastbid());
133 }
134
135
136
137}
Note: See TracBrowser for help on using the repository browser.