source: src/main/java/agents/anac/y2010/Southampton/similarity/SimilarityAgent.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.5 KB
Line 
1package agents.anac.y2010.Southampton.similarity;
2
3import java.util.ArrayList;
4
5import agents.anac.y2010.Southampton.SouthamptonAgent;
6import agents.anac.y2010.Southampton.utils.OpponentModel;
7import agents.anac.y2010.Southampton.utils.Pair;
8import genius.core.Bid;
9import genius.core.utility.AdditiveUtilitySpace;
10
11public abstract class SimilarityAgent extends SouthamptonAgent {
12
13 /**
14 * The best bids (in terms of our utility) that we have seen from the
15 * opponent.
16 */
17 protected ArrayList<Pair<Double, Double>> bestOpponentBidUtilityHistory;
18 /**
19 * The best bid (in terms of our utility) that we have seen from the
20 * opponent.
21 */
22 private Bid bestOpponentBid;
23
24 /**
25 * The utility (to us) of the best bid (in terms of our utility) that we
26 * have seen from the opponent.
27 */
28 private double bestOpponentUtility;
29
30 /**
31 * The utility (to us) of the first bid made by the opponent.
32 */
33 protected double utility0 = 0;
34
35 /**
36 * The expected utility (to us) of the final bid made by the opponent.
37 */
38 protected final double utility1 = 0.95;
39
40 public SimilarityAgent() {
41 super();
42 bestOpponentBidUtilityHistory = new ArrayList<Pair<Double, Double>>();
43 // CONCESSIONFACTOR = 0.01;
44 }
45
46 public void init() {
47 super.init();
48 prepareOpponentModel();
49 }
50
51 @Override
52 public String getVersion() {
53 return "1.0";
54 }
55
56 protected Bid proposeInitialBid() {
57 Bid bid = null;
58
59 try {
60 bid = bidSpace.getMaxUtilityBid();
61 } catch (Exception e) {
62 e.printStackTrace();
63 }
64 return bid;
65 }
66
67 protected Bid proposeNextBid(Bid opponentBid) {
68 try {
69 performUpdating(opponentBid);
70 } catch (Exception e) {
71 e.printStackTrace();
72 }
73
74 double myUtility = 0, opponentUtility = 0, targetUtility;
75 // Both parties have made an initial bid. Compute associated utilities
76 // from my point of view.
77 try {
78 myUtility = utilitySpace.getUtility(myLastBid);
79 opponentUtility = utilitySpace.getUtility(opponentBid);
80 if (opponentPreviousBid == null)
81 utility0 = opponentUtility;
82 } catch (Exception e) {
83 e.printStackTrace();
84 }
85 targetUtility = getTargetUtility(myUtility, opponentUtility);
86 Bid nextBid = getTradeOffExhaustive(targetUtility, opponentBid, 1000);
87 return nextBid;
88 }
89
90 protected abstract double getTargetUtility(double myUtility,
91 double opponentUtility);
92
93 /*
94 * (non-Javadoc)
95 *
96 * @see agents.southampton.SouthamptonAgent#getRandomBidInRange(double,
97 * double)
98 */
99 @Override
100 protected Bid getRandomBidInRange(double lowerBound, double upperBound)
101 throws Exception {
102 throw new Exception(
103 "Method 'getRandomBidInRange' is not implemented in this agent.");
104 }
105
106 private Bid getTradeOffExhaustive(double ourUtility, Bid opponentBid,
107 int count) {
108 // Project a point onto the bidspace...
109 bestOpponentBid = getBestBid(opponentBid);
110
111 if (bestOpponentUtility * acceptMultiplier >= ourUtility) {
112 return bestOpponentBid;
113 }
114
115 ArrayList<Bid> bids = bidSpace.Project(
116 bidSpace.getPoint(bestOpponentBid), ourUtility, count,
117 (AdditiveUtilitySpace) this.utilitySpace, this.opponentModel);
118 if (bids.size() == 0) {
119 return getTradeOffExhaustive(ourUtility, opponentBid, count + 10000);
120 }
121 double maxOpponentUtility = 0;
122 Bid bestBid = null;
123
124 for (Bid bid : bids) {
125 try {
126 double opponentUtility = opponentModel
127 .getNormalizedUtility(bid);
128 if (opponentUtility > maxOpponentUtility) {
129 maxOpponentUtility = opponentUtility;
130 bestBid = bid;
131 }
132 } catch (Exception e) {
133 e.printStackTrace();
134 }
135 }
136
137 return bestBid;
138 }
139
140 private Bid getBestBid(Bid opponentBid) {
141 double utility;
142 try {
143 utility = utilitySpace.getUtility(opponentBid);
144 if (utility >= bestOpponentUtility) {
145 bestOpponentUtility = utility;
146 bestOpponentBid = opponentBid;
147 }
148 storeDataPoint(bestOpponentUtility);
149 } catch (Exception e) {
150 e.printStackTrace();
151 }
152 return bestOpponentBid;
153 }
154
155 private void storeDataPoint(double utility) {
156 double time = timeline.getTime();
157 // bestOpponentBidUtilityHistory.add(new Pair<Double,
158 // Double>(-Math.log(1 - ((utility - utility0) / (utility1 -
159 // utility0))), time));
160 bestOpponentBidUtilityHistory.add(new Pair<Double, Double>(utility,
161 time));
162 }
163
164 private void performUpdating(Bid opponentBid) throws Exception {
165 double currentTime = timeline.getTime() * timeline.getTotalTime()
166 * 1000;
167 double totalTime = timeline.getTotalTime() * 1000;
168 opponentModel.updateBeliefs(opponentBid, Math.round(currentTime),
169 totalTime);
170 }
171
172 private void prepareOpponentModel() {
173 opponentModel = new OpponentModel((AdditiveUtilitySpace) utilitySpace);
174 }
175}
Note: See TracBrowser for help on using the repository browser.