source: src/main/java/agents/anac/y2014/BraveCat/OfferingStrategies/BRTOfferingStrategy.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: 6.7 KB
Line 
1package agents.anac.y2014.BraveCat.OfferingStrategies;
2
3import java.util.HashMap;
4import java.util.Random;
5
6import agents.anac.y2014.BraveCat.OpponentModelStrategies.OMStrategy;
7import agents.anac.y2014.BraveCat.OpponentModels.NoModel;
8import agents.anac.y2014.BraveCat.OpponentModels.OpponentModel;
9import agents.anac.y2014.BraveCat.necessaryClasses.BidGenerator;
10import agents.anac.y2014.BraveCat.necessaryClasses.NegotiationSession;
11import agents.anac.y2014.BraveCat.necessaryClasses.Schedular;
12import genius.core.bidding.BidDetails;
13import genius.core.utility.NonlinearUtilitySpace;
14
15public class BRTOfferingStrategy extends OfferingStrategy {
16 private BidGenerator bidGenerator;
17 private Random random300;
18 private BidDetails LastBestBid = null;
19 private double k;
20 private double Pmax;
21 private double Pmin;
22 private double e;// This value should be adjusted by the estimated
23 // concession value of the opponent.
24
25 public BRTOfferingStrategy(NegotiationSession negoSession,
26 OpponentModel model, OMStrategy oms, double e, double k) {
27 random300 = new Random();
28 this.e = e;// beta value.
29 this.k = k;
30 this.negotiationSession = negoSession;
31 bidGenerator = new BidGenerator(negotiationSession);
32
33 if (this.negotiationSession.getUtilitySpace() instanceof NonlinearUtilitySpace)
34 System.out.println("Nonlinear Utility Space!");
35 this.omStrategy = oms;
36 try {
37 this.Pmax = 1;
38 System.out.println("Pmax: " + this.Pmax);
39 this.Pmin = this.negotiationSession.getUtilitySpace()
40 .getReservationValueUndiscounted();
41 System.out.println("Pmin: " + this.Pmin);
42 this.schedular = new Schedular(negotiationSession);
43 } catch (Exception ex) {
44 System.out
45 .println("Exception occured when determining Pmax and Pmin!");
46 }
47 }
48
49 @Override
50 public void init(NegotiationSession negoSession, OpponentModel model,
51 OMStrategy oms, HashMap<String, Double> parameters)
52 throws Exception {
53 if (parameters.get("e") != null) {
54 this.negotiationSession = negoSession;
55
56 this.e = ((Double) parameters.get("e")).doubleValue();
57
58 if (parameters.get("k") != null)
59 this.k = ((Double) parameters.get("k")).doubleValue();
60 else {
61 this.k = 0.0D;
62 }
63 if (parameters.get("min") != null)
64 this.Pmin = ((Double) parameters.get("min")).doubleValue();
65 else {
66 this.Pmin = negoSession.getMinBidinDomain()
67 .getMyUndiscountedUtil();
68 }
69 if (parameters.get("max") != null) {
70 this.Pmax = ((Double) parameters.get("max")).doubleValue();
71 } else {
72 BidDetails maxBid = negoSession.getMaxBidinDomain();
73 this.Pmax = maxBid.getMyUndiscountedUtil();
74 }
75
76 this.opponentModel = model;
77 this.omStrategy = oms;
78 } else {
79 throw new Exception(
80 "Constant \"e\" for the concession speed was not set.");
81 }
82 }
83
84 @Override
85 public BidDetails determineOpeningBid() {
86 BidDetails temp = null;
87 try {
88 temp = this.bidGenerator.selectBid(Pmax);
89 System.out.println("Opening Bid Utility is: "
90 + this.negotiationSession.getUtilitySpace().getUtility(
91 temp.getBid()));
92 } catch (Exception ex) {
93 }
94 return temp;
95 }
96
97 @Override
98 public BidDetails determineNextBid() {
99 double time = this.negotiationSession.getTime();
100
101 this.Pmin = this.negotiationSession.getUtilitySpace()
102 .getReservationValueWithDiscount(time);
103
104 // If this is the last bid, the agent chooses to send the best bid
105 // received from the opponent, so as to avoid a break off,
106 // hoping that this bid is still acceptable for the opponent, and it
107 // will result in an agreement.
108 if (this.schedular.FinalRounds() || this.schedular.LastRound())
109 return negotiationSession.getOpponentBidHistory()
110 .getBestDiscountedBidDetails(
111 negotiationSession.getUtilitySpace());
112 double targetUtility = TargetUtilityGenerator(time, this.Pmax,
113 this.Pmin, this.e, this.k);
114 // System.out.println(targetUtility);
115 targetUtility = TargetUtilityRandomizer(targetUtility);
116 // System.out.println(targetUtility);
117 try {
118 targetUtility = BehaviouralTargetUtility(targetUtility);
119 } catch (Exception ex) {
120 System.out
121 .println("Exception occured when calculating behavioral target utility!");
122 }
123 // System.out.println(targetUtility);
124 try {
125 if (targetUtility > 1)
126 targetUtility = 1;
127 } catch (Exception ex) {
128 System.out
129 .println("Exception occured when bringing the target utility into the range!");
130 }
131
132 // System.out.println(targetUtility);
133
134 if ((this.opponentModel instanceof NoModel))
135 this.nextBid = this.negotiationSession.getOutcomeSpace()
136 .getBidNearUtility(targetUtility);
137 else {
138 try {
139 this.nextBid = this.omStrategy.getBid(this.bidGenerator
140 .NBidsNearUtility(targetUtility, 10));
141 } catch (Exception ex) {
142 }
143 }
144 return this.nextBid;
145 }
146
147 public double BehaviouralTargetUtility(double targetUtility)
148 throws Exception {
149 if (LastBestBid == null) {
150 // System.out.println(this.negotiationSession.getOpponentBidHistory().size());
151 LastBestBid = this.negotiationSession.getOpponentBidHistory()
152 .getLastBidDetails();
153 return targetUtility;
154 } else {
155 if (this.negotiationSession.getUtilitySpace().getUtility(
156 LastBestBid.getBid()) < this.negotiationSession
157 .getUtilitySpace().getUtility(
158 this.negotiationSession.getOpponentBidHistory()
159 .getLastBid())) {
160 double NewUtility = targetUtility
161 - (this.negotiationSession.getUtilitySpace()
162 .getUtility(
163 this.negotiationSession
164 .getOpponentBidHistory()
165 .getLastBid()) - this.negotiationSession
166 .getUtilitySpace().getUtility(
167 LastBestBid.getBid()));
168 LastBestBid = this.negotiationSession.getOpponentBidHistory()
169 .getLastBidDetails();
170 // System.out.println(NewUtility - targetUtility);
171 return NewUtility;
172 }
173 }
174 return targetUtility;
175 }
176
177 public double TargetUtilityRandomizer(double targetUtility) {
178 Random r = new Random();
179 double z = Math.abs(r.nextGaussian());
180 return targetUtility
181 - ((double) ((1 - targetUtility) * z * (1 - this.negotiationSession
182 .getTime())) / 2.58);
183 }
184
185 public double TargetUtilityGenerator(double t, double Pmax, double Pmin,
186 double e, double k) {
187 double temp = Pmin + (Pmax - Pmin) * (1.0D - f(t, e, k));
188 return temp;
189 }
190
191 public double f(double t, double e, double k) {
192 if (e == 0.0D)
193 return k;
194 double ft = k + (1.0D - k) * Math.pow(t, 1.0D / e);
195 return ft;
196 }
197
198 public NegotiationSession getNegotiationSession() {
199 return this.negotiationSession;
200 }
201
202 public double EstimateOpponentConcession() {
203 return 1 - ((double) this.negotiationSession.getOpponentBidHistory().numberOfUniqueBidsInBidHistory / this.negotiationSession
204 .getOpponentBidHistory().numberOfTotalBidsInBidHistory);
205 }
206
207 @Override
208 public String GetName() {
209 return "BRTOfferingStrategy";
210 }
211}
Note: See TracBrowser for help on using the repository browser.