1 | package agents.anac.y2015.ParsAgent;
|
---|
2 |
|
---|
3 | import java.util.ArrayList;
|
---|
4 | import java.util.HashMap;
|
---|
5 | import java.util.List;
|
---|
6 |
|
---|
7 | import genius.core.AgentID;
|
---|
8 | import genius.core.Bid;
|
---|
9 | import genius.core.actions.Accept;
|
---|
10 | import genius.core.actions.Action;
|
---|
11 | import genius.core.actions.Offer;
|
---|
12 | import genius.core.issue.Issue;
|
---|
13 | import genius.core.issue.IssueDiscrete;
|
---|
14 | import genius.core.issue.IssueInteger;
|
---|
15 | import genius.core.issue.Value;
|
---|
16 | import genius.core.issue.ValueInteger;
|
---|
17 | import genius.core.utility.AdditiveUtilitySpace;
|
---|
18 | import negotiator.parties.AbstractTimeDependentNegotiationParty;
|
---|
19 |
|
---|
20 | /**
|
---|
21 | * This is ParsAgent party.
|
---|
22 | */
|
---|
23 | public class ParsAgent extends AbstractTimeDependentNegotiationParty {
|
---|
24 | Bid lastBid;
|
---|
25 | Action lastAction;
|
---|
26 | String oppAName;
|
---|
27 | String oppBName;
|
---|
28 | int round;
|
---|
29 | double myutility = 0.8d;
|
---|
30 | boolean Imfirst = false;
|
---|
31 | Boolean withDiscount = null;
|
---|
32 | boolean fornullAgent = false;
|
---|
33 | ArrayList<BidUtility> opponentAB = new ArrayList<BidUtility>();
|
---|
34 | OpponentPreferences oppAPreferences = new OpponentPreferences();
|
---|
35 | OpponentPreferences oppBPreferences = new OpponentPreferences();
|
---|
36 |
|
---|
37 | /**
|
---|
38 | * Each round this method gets called and ask you to accept or offer. The
|
---|
39 | * first party in the first round is a bit different, it can only propose an
|
---|
40 | * offer.
|
---|
41 | *
|
---|
42 | * @param validActions
|
---|
43 | * Either a list containing both accept and offer or only offer.
|
---|
44 | * @return The chosen action.
|
---|
45 | */
|
---|
46 | @Override
|
---|
47 | public Action chooseAction(List<Class<? extends Action>> validActions) {
|
---|
48 |
|
---|
49 | try {
|
---|
50 | if (lastBid == null) {
|
---|
51 | Imfirst = true;
|
---|
52 | Bid b = getMybestBid(utilitySpace.getMaxUtilityBid(), 0);
|
---|
53 | return new Offer(getPartyId(), b);
|
---|
54 | } /*
|
---|
55 | * Comment for Bug else if (round == 0) { if (Imfirst) { return
|
---|
56 | * new Offer(getPartyId(),offerMyNewBid()); } else if
|
---|
57 | * (utilitySpace.getUtility(lastBid) > 0.6d) { return new
|
---|
58 | * Accept(getPartyId()); } }
|
---|
59 | */
|
---|
60 | else {
|
---|
61 | if (lastAction instanceof Accept) {
|
---|
62 | if (utilitySpace.getUtility(lastBid) > getMyutility()) {
|
---|
63 | return new Accept(getPartyId(), lastBid);
|
---|
64 | } else {
|
---|
65 | Bid b = offerMyNewBid();
|
---|
66 | return new Offer(getPartyId(), b);
|
---|
67 | }
|
---|
68 | } else {
|
---|
69 | if (utilitySpace.getUtility(lastBid) > getMyutility()) {
|
---|
70 | return new Accept(getPartyId(), lastBid);
|
---|
71 | } else {
|
---|
72 | Bid b = offerMyNewBid();
|
---|
73 | if (utilitySpace.getUtility(b) < getMyutility())
|
---|
74 | return new Offer(getPartyId(), getMybestBid(
|
---|
75 | utilitySpace.getMaxUtilityBid(), 0));
|
---|
76 | else
|
---|
77 | return new Offer(getPartyId(), b);
|
---|
78 |
|
---|
79 | }
|
---|
80 | }
|
---|
81 | }
|
---|
82 | } catch (Exception e) {
|
---|
83 | System.out.println("Error Occured " + e.getMessage());
|
---|
84 | }
|
---|
85 | Bid mb = null;
|
---|
86 | try {
|
---|
87 | mb = utilitySpace.getMaxUtilityBid();
|
---|
88 | return new Offer(getPartyId(), getMybestBid(mb, 0));
|
---|
89 | } catch (Exception e) {
|
---|
90 | try {
|
---|
91 | return new Offer(getPartyId(), mb);
|
---|
92 | } catch (Exception e2) {
|
---|
93 |
|
---|
94 | }
|
---|
95 | }
|
---|
96 | return new Accept(getPartyId(), lastBid);
|
---|
97 | }
|
---|
98 |
|
---|
99 | /**
|
---|
100 | * All offers proposed by the other parties will be received as a message.
|
---|
101 | * You can use this information to your advantage, for example to predict
|
---|
102 | * their utility.
|
---|
103 | *
|
---|
104 | * @param sender
|
---|
105 | * The party that did the action.
|
---|
106 | * @param action
|
---|
107 | * The action that party did.
|
---|
108 | */
|
---|
109 | @Override
|
---|
110 | public void receiveMessage(AgentID sender, Action action) {
|
---|
111 | super.receiveMessage(sender, action);
|
---|
112 | String agentName = sender == null ? "null" : sender.toString();
|
---|
113 | // action.getAgent() != null ? action.getAgent().toString() :
|
---|
114 | // fornullAgent ? "null1" : "null2";
|
---|
115 | fornullAgent = !fornullAgent;
|
---|
116 | if (action != null && action instanceof Offer) {
|
---|
117 | Bid newBid = ((Offer) action).getBid();
|
---|
118 | if (withDiscount == null) {
|
---|
119 | try {
|
---|
120 | if (utilitySpace.getUtilityWithDiscount(newBid,
|
---|
121 | timeline) != utilitySpace.getUtility(newBid)) {
|
---|
122 | withDiscount = Boolean.TRUE;
|
---|
123 | } else
|
---|
124 | withDiscount = Boolean.FALSE;
|
---|
125 | } catch (Exception e) {
|
---|
126 | System.out.println("Exception " + e.getMessage());
|
---|
127 | }
|
---|
128 | }
|
---|
129 | BidUtility opBid;
|
---|
130 | try {
|
---|
131 | opBid = new BidUtility(newBid, utilitySpace.getUtility(newBid),
|
---|
132 | System.currentTimeMillis());
|
---|
133 |
|
---|
134 | if (oppAName != null && oppAName.equals(agentName)) {
|
---|
135 | addBidToList(oppAPreferences.getOpponentBids(), opBid);
|
---|
136 |
|
---|
137 | } else if (oppBName != null && oppBName.equals(agentName)) {
|
---|
138 | addBidToList(oppBPreferences.getOpponentBids(), opBid);
|
---|
139 | } else if (oppAName == null) {
|
---|
140 | oppAName = agentName;
|
---|
141 | oppAPreferences.getOpponentBids().add(opBid);
|
---|
142 | } else if (oppBName == null) {
|
---|
143 | oppBName = agentName;
|
---|
144 | oppBPreferences.getOpponentBids().add(opBid);
|
---|
145 | }
|
---|
146 | calculateParamForOpponent((oppAName.equals(agentName)
|
---|
147 | ? oppAPreferences : oppBPreferences), newBid);
|
---|
148 | System.out.println("opp placed bid:" + newBid);
|
---|
149 | lastBid = newBid;
|
---|
150 | } catch (Exception e) {
|
---|
151 | e.printStackTrace();
|
---|
152 | }
|
---|
153 | } else if (action != null && action instanceof Accept) {
|
---|
154 | BidUtility opBid = null;
|
---|
155 | try {
|
---|
156 | opBid = new BidUtility(lastBid,
|
---|
157 | utilitySpace.getUtility(lastBid),
|
---|
158 | System.currentTimeMillis());
|
---|
159 | } catch (Exception e) {
|
---|
160 | System.out.println("Exception 44" + e.getMessage());
|
---|
161 | }
|
---|
162 | addBidToList(opponentAB, opBid);
|
---|
163 | }
|
---|
164 | lastAction = action;
|
---|
165 |
|
---|
166 | // Here you can listen to other parties' messages
|
---|
167 | }
|
---|
168 |
|
---|
169 | /**
|
---|
170 | * @param issueindex
|
---|
171 | * the issue for which we need the best value (index).
|
---|
172 | * @return the best value-index for issue <issueindex>. For integer values,
|
---|
173 | * returns the best value itself, no 'index'.
|
---|
174 | */
|
---|
175 | public int MyBestValue(int issueindex) {
|
---|
176 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
177 | Issue isu = dissues.get(issueindex);
|
---|
178 | HashMap<Integer, Value> map = new HashMap<Integer, Value>();
|
---|
179 | double maxutil = 0d;
|
---|
180 | int maxvalIndex = 0;
|
---|
181 | try {
|
---|
182 | map = utilitySpace.getMaxUtilityBid().getValues();
|
---|
183 | } catch (Exception e) {
|
---|
184 | e.printStackTrace();
|
---|
185 | }
|
---|
186 | if (isu instanceof IssueDiscrete) {
|
---|
187 | IssueDiscrete is = (IssueDiscrete) isu;
|
---|
188 |
|
---|
189 | // Bizarre way to get the value-index of this issue in the max-util
|
---|
190 | // bid?
|
---|
191 | for (int num = 0; num < is.getNumberOfValues(); ++num) {
|
---|
192 | map.put(new Integer(issueindex + 1), is.getValue(num));
|
---|
193 | Bid temp;
|
---|
194 | double u = 0d;
|
---|
195 | try {
|
---|
196 | temp = new Bid(utilitySpace.getDomain(), map);
|
---|
197 | u = utilitySpace.getUtility(temp);
|
---|
198 | } catch (Exception e) {
|
---|
199 | e.printStackTrace();
|
---|
200 | }
|
---|
201 | if (u > maxutil) {
|
---|
202 | maxutil = u;
|
---|
203 | maxvalIndex = num;
|
---|
204 | }
|
---|
205 | break;
|
---|
206 |
|
---|
207 | }
|
---|
208 | } else if (isu instanceof IssueInteger) {
|
---|
209 | if (map != null) {
|
---|
210 | // +1 because the map has first issue = 1.
|
---|
211 | return ((ValueInteger) map.get(issueindex + 1)).getValue();
|
---|
212 | }
|
---|
213 | }
|
---|
214 | return maxvalIndex;
|
---|
215 | }
|
---|
216 |
|
---|
217 | /**
|
---|
218 | * @return a next bid.
|
---|
219 | */
|
---|
220 | public Bid offerMyNewBid() {
|
---|
221 | Bid bidNN = null;
|
---|
222 | if (opponentAB != null && opponentAB.size() != 0)
|
---|
223 | bidNN = getNNBid(opponentAB);
|
---|
224 | try {
|
---|
225 | if (bidNN == null
|
---|
226 | || utilitySpace.getUtility(bidNN) < getMyutility()) {
|
---|
227 | List<List<Object>> isues = getMutualIssues();
|
---|
228 | HashMap<Integer, Value> map = new HashMap<Integer, Value>();
|
---|
229 | Bid bid;
|
---|
230 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
231 | for (int i = 0; i < isues.size(); ++i) {
|
---|
232 | List<Object> keyVal = isues.get(i);
|
---|
233 |
|
---|
234 | Issue dissue = dissues.get(i);
|
---|
235 | if (dissue instanceof IssueDiscrete) {
|
---|
236 | if (keyVal != null) {
|
---|
237 | IssueDiscrete is = (IssueDiscrete) dissues.get(i);
|
---|
238 | // search the value that matches keyVal(0) and put
|
---|
239 | // in map.
|
---|
240 | // fails silently!
|
---|
241 | for (int num = 0; num < is
|
---|
242 | .getNumberOfValues(); ++num) {
|
---|
243 | if (is.getValue(num).toString()
|
---|
244 | .equals(keyVal.get(0).toString())) {
|
---|
245 | map.put(new Integer(i + 1),
|
---|
246 | is.getValue(num));
|
---|
247 | break;
|
---|
248 | }
|
---|
249 |
|
---|
250 | }
|
---|
251 | } else { // keyVal == null
|
---|
252 | IssueDiscrete is = (IssueDiscrete) dissues.get(i);
|
---|
253 | map.put(new Integer(i + 1),
|
---|
254 | is.getValue(MyBestValue(i)));
|
---|
255 | }
|
---|
256 | } else if (dissue instanceof IssueInteger) {
|
---|
257 | if (keyVal != null) {
|
---|
258 | map.put(new Integer(i + 1),
|
---|
259 | (ValueInteger) keyVal.get(0));
|
---|
260 | } else { // keyVal==null
|
---|
261 | // IssueInteger is = (IssueInteger) dissues.get(i);
|
---|
262 | map.put(i + 1, new ValueInteger(MyBestValue(i)));
|
---|
263 | }
|
---|
264 | } else {
|
---|
265 | throw new IllegalStateException(
|
---|
266 | "not supported issue " + dissue);
|
---|
267 | }
|
---|
268 |
|
---|
269 | }
|
---|
270 | try {
|
---|
271 | bid = new Bid(utilitySpace.getDomain(),
|
---|
272 | (HashMap) map.clone());
|
---|
273 | if (utilitySpace.getUtility(bid) > getMyutility())
|
---|
274 | return bid;
|
---|
275 | else {
|
---|
276 | return getMybestBid(utilitySpace.getMaxUtilityBid(), 0);
|
---|
277 | }
|
---|
278 | } catch (Exception e) {
|
---|
279 | System.out.println("Exception 55 " + e.getMessage());
|
---|
280 | }
|
---|
281 | } else
|
---|
282 | return bidNN;
|
---|
283 | } catch (Exception e) {
|
---|
284 | e.printStackTrace();
|
---|
285 | }
|
---|
286 | return null;
|
---|
287 | }
|
---|
288 |
|
---|
289 | /**
|
---|
290 | * Seems that this determines for each issue the top-2 of occuring values.
|
---|
291 | *
|
---|
292 | * @return list of <issue, maxval1, maxval2 > triplets (triplets
|
---|
293 | * encoded as List<Object>...). maxval1 is mostly used value;
|
---|
294 | * maxval2 is one-but-mostly used.
|
---|
295 | */
|
---|
296 | public List<List<Object>> getMutualIssues() {
|
---|
297 | List<List<Object>> mutualList = new ArrayList<List<Object>>();
|
---|
298 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
299 | int twocycle = 2;
|
---|
300 | while (twocycle > 0) {
|
---|
301 | mutualList = new ArrayList<List<Object>>();
|
---|
302 | for (int i = 0; i < dissues.size(); ++i) {
|
---|
303 | updateMutualList(mutualList, dissues, twocycle, i);
|
---|
304 | if (((HashMap) oppAPreferences.getRepeatedissue()
|
---|
305 | .get(dissues.get(i).getName())).size() == 0
|
---|
306 | || ((HashMap) oppAPreferences.getRepeatedissue()
|
---|
307 | .get(dissues.get(i).getName())).size() == 0) {
|
---|
308 | twocycle--;
|
---|
309 | }
|
---|
310 | }
|
---|
311 | if (twocycle != 0) {
|
---|
312 | twocycle--;
|
---|
313 | if (opponentAB.size() == 0) {
|
---|
314 | float nullval = 0.0f;
|
---|
315 | for (int i = 0; i < mutualList.size(); ++i) {
|
---|
316 | if (mutualList.get(i) != null) {
|
---|
317 | ++nullval;
|
---|
318 | }
|
---|
319 | }
|
---|
320 |
|
---|
321 | nullval = nullval / mutualList.size();
|
---|
322 | if (nullval >= 0.5)
|
---|
323 | twocycle--;
|
---|
324 | } else
|
---|
325 | twocycle--;
|
---|
326 | }
|
---|
327 | }
|
---|
328 | return mutualList;
|
---|
329 | }
|
---|
330 |
|
---|
331 | /**
|
---|
332 | * Search two highest repeated issues for each issue
|
---|
333 | *
|
---|
334 | * @param mutualList
|
---|
335 | * @param dissues
|
---|
336 | * @param twocycle
|
---|
337 | * @param i
|
---|
338 | */
|
---|
339 | private void updateMutualList(List<List<Object>> mutualList,
|
---|
340 | List<Issue> dissues, int twocycle, int i) {
|
---|
341 | if (oppAPreferences.getRepeatedissue()
|
---|
342 | .get(dissues.get(i).getName()) != null) {
|
---|
343 | HashMap<Value, Integer> vals = oppAPreferences.getRepeatedissue()
|
---|
344 | .get(dissues.get(i).getName());
|
---|
345 | HashMap<Value, Integer> valsB = oppBPreferences.getRepeatedissue()
|
---|
346 | .get(dissues.get(i).getName());
|
---|
347 |
|
---|
348 | Object[] keys = vals.keySet().toArray();
|
---|
349 | int[] max = new int[] { 0, 0 };
|
---|
350 | Object[] maxkey = new Object[] { null, null };
|
---|
351 | for (int j = 0; j < keys.length; ++j) {
|
---|
352 | Integer temp = vals.get(keys[j]);
|
---|
353 | if (temp.intValue() > max[0]) {
|
---|
354 | max[0] = temp.intValue();
|
---|
355 | maxkey[0] = keys[j];
|
---|
356 | } else if (temp.intValue() > max[1]) {
|
---|
357 | max[1] = temp.intValue();
|
---|
358 | maxkey[1] = keys[j];
|
---|
359 | }
|
---|
360 | }
|
---|
361 | if (valsB != null) {
|
---|
362 | Object[] keysB = valsB.keySet().toArray();
|
---|
363 | int[] maxB = new int[] { 0, 0 };
|
---|
364 | ;
|
---|
365 | Object[] maxkeyB = new Object[] { null, null };
|
---|
366 | for (int j = 0; j < keysB.length; ++j) {
|
---|
367 | Integer temp = valsB.get(keysB[j]);
|
---|
368 | if (temp.intValue() > maxB[0]) {
|
---|
369 | maxB[0] = temp.intValue();
|
---|
370 | maxkeyB[0] = keysB[j];
|
---|
371 | } else if (temp.intValue() > maxB[1]) {
|
---|
372 | maxB[1] = temp.intValue();
|
---|
373 | maxkeyB[1] = keysB[j];
|
---|
374 | }
|
---|
375 | }
|
---|
376 | if (twocycle == 2) {
|
---|
377 | if (maxkey[0] != null && maxkeyB[0] != null
|
---|
378 | && maxkey[0].equals(maxkeyB[0])) {
|
---|
379 | ArrayList<Object> l = new ArrayList();
|
---|
380 | l.add(maxkey[0]);
|
---|
381 | l.add(maxB[0]);
|
---|
382 | l.add(max[0]);
|
---|
383 | mutualList.add(i, l);
|
---|
384 | } else
|
---|
385 | mutualList.add(i, null);
|
---|
386 | } else {
|
---|
387 | boolean insideloop = true;
|
---|
388 | for (int m = 0; insideloop && m < 2; ++m) {
|
---|
389 | for (int z = 0; insideloop && z < 2; ++z) {
|
---|
390 | if (maxkey[m] != null && maxkeyB[z] != null
|
---|
391 | && maxkey[m].equals(maxkeyB[z])) {
|
---|
392 | ArrayList<Object> l = new ArrayList();
|
---|
393 | l.add(maxkey[m]);
|
---|
394 | l.add(maxB[z]);
|
---|
395 | l.add(max[m]);
|
---|
396 | mutualList.add(i, l);
|
---|
397 | insideloop = false;
|
---|
398 | }
|
---|
399 | }
|
---|
400 | }
|
---|
401 | if (insideloop)
|
---|
402 | mutualList.add(i, null);
|
---|
403 |
|
---|
404 | }
|
---|
405 | } else {
|
---|
406 | mutualList.add(i, null);
|
---|
407 | oppBPreferences.getRepeatedissue().put(dissues.get(i).getName(),
|
---|
408 | new HashMap());
|
---|
409 | }
|
---|
410 | } else {
|
---|
411 | oppAPreferences.getRepeatedissue().put(dissues.get(i).getName(),
|
---|
412 | new HashMap());
|
---|
413 | mutualList.add(i, null);
|
---|
414 | }
|
---|
415 | }
|
---|
416 |
|
---|
417 | public Bid getNNBid(ArrayList<BidUtility> oppAB) {
|
---|
418 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
419 | Bid maxBid = null;
|
---|
420 | double maxutility = 0d;
|
---|
421 | int size = 0;
|
---|
422 | int exloop = 0;
|
---|
423 | Bid newBid;
|
---|
424 | while (exloop < dissues.size()) {
|
---|
425 | int bi = chooseBestIssue();
|
---|
426 | size = 0;
|
---|
427 | while (oppAB != null && oppAB.size() > size) {
|
---|
428 | Bid b = oppAB.get(size).getBid();
|
---|
429 | newBid = new Bid(b);
|
---|
430 | try {
|
---|
431 | HashMap vals = b.getValues();
|
---|
432 | vals.put(bi, getRandomValue(dissues.get(bi - 1)));
|
---|
433 | newBid = new Bid(utilitySpace.getDomain(), vals);
|
---|
434 | if (utilitySpace.getUtility(newBid) > getMyutility()
|
---|
435 | && utilitySpace.getUtility(newBid) > maxutility) {
|
---|
436 | maxBid = new Bid(newBid);
|
---|
437 | maxutility = utilitySpace.getUtility(maxBid);
|
---|
438 | }
|
---|
439 |
|
---|
440 | } catch (Exception e) {
|
---|
441 | System.out.println("Exception 66 " + e.getMessage());
|
---|
442 | }
|
---|
443 | size++;
|
---|
444 | }
|
---|
445 | exloop++;
|
---|
446 | }
|
---|
447 | return maxBid;
|
---|
448 | }
|
---|
449 |
|
---|
450 | public int chooseBestIssue() {
|
---|
451 | double random = Math.random();
|
---|
452 | double sumWeight = 0d;
|
---|
453 | AdditiveUtilitySpace utilitySpace1 = (AdditiveUtilitySpace) utilitySpace;
|
---|
454 |
|
---|
455 | for (int i = utilitySpace1.getDomain().getIssues().size(); i > 0; --i) {
|
---|
456 | sumWeight += utilitySpace1.getWeight(i);
|
---|
457 | if (sumWeight > random)
|
---|
458 | return i;
|
---|
459 | }
|
---|
460 | return 0;
|
---|
461 | }
|
---|
462 |
|
---|
463 | public int chooseWorstIssue() {
|
---|
464 | double random = Math.random() * 100;
|
---|
465 | double sumWeight = 0d;
|
---|
466 | int minin = 1;
|
---|
467 | double min = 1.0d;
|
---|
468 | AdditiveUtilitySpace utilitySpace1 = (AdditiveUtilitySpace) utilitySpace;
|
---|
469 | for (int i = utilitySpace1.getDomain().getIssues().size(); i > 0; --i) {
|
---|
470 | sumWeight += 1.0d / utilitySpace1.getWeight(i);
|
---|
471 | if (utilitySpace1.getWeight(i) < min) {
|
---|
472 | min = utilitySpace1.getWeight(i);
|
---|
473 | minin = i;
|
---|
474 | }
|
---|
475 | if (sumWeight > random)
|
---|
476 | return i;
|
---|
477 | }
|
---|
478 | return minin;
|
---|
479 | }
|
---|
480 |
|
---|
481 | public Bid getMybestBid(Bid sugestBid, int time) {
|
---|
482 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
483 | Bid newBid = new Bid(sugestBid);
|
---|
484 | int index = chooseWorstIssue();
|
---|
485 | boolean loop = true;
|
---|
486 | long bidTime = System.currentTimeMillis();
|
---|
487 | while (loop) {
|
---|
488 | if ((System.currentTimeMillis() - bidTime) * 1000 > 3)
|
---|
489 | break;
|
---|
490 | newBid = new Bid(sugestBid);
|
---|
491 | try {
|
---|
492 | HashMap map = newBid.getValues();
|
---|
493 | map.put(index, getRandomValue(dissues.get(index - 1)));
|
---|
494 | newBid = new Bid(utilitySpace.getDomain(), map);
|
---|
495 | if (utilitySpace.getUtility(newBid) > getMyutility()) {
|
---|
496 | return newBid;
|
---|
497 | }
|
---|
498 | } catch (Exception e) {
|
---|
499 | // System.out.println("Exception in my best bid : " +
|
---|
500 | // e.getMessage());
|
---|
501 | loop = false;
|
---|
502 | }
|
---|
503 | }
|
---|
504 | return newBid;
|
---|
505 | }
|
---|
506 |
|
---|
507 | public void addBidToList(ArrayList<BidUtility> mybids, BidUtility newbid) {
|
---|
508 | int index = mybids.size();
|
---|
509 | for (int i = 0; i < mybids.size(); ++i) {
|
---|
510 | if (mybids.get(i).getUtility() <= newbid.getUtility()) {
|
---|
511 | if (!mybids.get(i).getBid().equals(newbid.getBid()))
|
---|
512 | index = i;
|
---|
513 | else
|
---|
514 | return;
|
---|
515 | }
|
---|
516 | }
|
---|
517 | mybids.add(index, newbid);
|
---|
518 |
|
---|
519 | }
|
---|
520 |
|
---|
521 | /**
|
---|
522 | * Updates the opponent preferences model. Basically updates the number of
|
---|
523 | * times the issue values occurred.
|
---|
524 | *
|
---|
525 | * @param op
|
---|
526 | * @param bid
|
---|
527 | */
|
---|
528 | public void calculateParamForOpponent(OpponentPreferences op, Bid bid) {
|
---|
529 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
530 | HashMap<Integer, Value> bidVal = bid.getValues();
|
---|
531 | Integer[] keys = new Integer[0];
|
---|
532 | keys = bidVal.keySet().toArray(keys);
|
---|
533 |
|
---|
534 | for (int i = 0; i < dissues.size(); ++i) {
|
---|
535 | if (op.getRepeatedissue().get(dissues.get(i).getName()) != null) {
|
---|
536 |
|
---|
537 | HashMap<Value, Integer> vals = op.getRepeatedissue()
|
---|
538 | .get(dissues.get(i).getName());
|
---|
539 |
|
---|
540 | try {
|
---|
541 | if (vals.get(bidVal.get(keys[i])) != null) {
|
---|
542 | Integer repet = vals.get(bidVal.get(keys[i]));
|
---|
543 | repet = repet + 1;
|
---|
544 | vals.put(bidVal.get(keys[i]), repet);
|
---|
545 | } else {
|
---|
546 | vals.put(bidVal.get(keys[i]), new Integer(1));
|
---|
547 | }
|
---|
548 | } catch (Exception e) {
|
---|
549 | // System.out.println("Exception 88 " + e.getMessage());
|
---|
550 | }
|
---|
551 | } else {
|
---|
552 | HashMap<Value, Integer> h = new HashMap<Value, Integer>();
|
---|
553 | // op.getRepeatedissue().get(dissues.get(i).getName());
|
---|
554 | try {
|
---|
555 |
|
---|
556 | h.put(bidVal.get(keys[i]), new Integer(1));
|
---|
557 | } catch (Exception e) {
|
---|
558 | // System.out.println("Exception 99 " + e.getMessage());
|
---|
559 | }
|
---|
560 | op.getRepeatedissue().put(dissues.get(i).getName(), h);
|
---|
561 | }
|
---|
562 | }
|
---|
563 |
|
---|
564 | }
|
---|
565 |
|
---|
566 | public void setMyutility(double myutility) {
|
---|
567 | this.myutility = myutility;
|
---|
568 | }
|
---|
569 |
|
---|
570 | public double getMyutility() {
|
---|
571 | myutility = getTargetUtility();
|
---|
572 | if (myutility < 0.7)
|
---|
573 | return 0.7d;
|
---|
574 | return myutility;
|
---|
575 | }
|
---|
576 |
|
---|
577 | @Override
|
---|
578 | public double getE() {
|
---|
579 | if (withDiscount)
|
---|
580 | return 0.20d;
|
---|
581 | return 0.15d;
|
---|
582 | }
|
---|
583 |
|
---|
584 | private class OpponentPreferences {
|
---|
585 | /**
|
---|
586 | * map with number of times an issue values occurred in an opponent bid.
|
---|
587 | */
|
---|
588 | private HashMap<String, HashMap<Value, Integer>> repeatedissue = new HashMap();
|
---|
589 | private ArrayList selectedValues;
|
---|
590 | ArrayList<BidUtility> opponentBids = new ArrayList<BidUtility>();
|
---|
591 |
|
---|
592 | /**
|
---|
593 | * actually, not used. Code modifies map returned from
|
---|
594 | * {@link #getRepeatedissue()} directly.
|
---|
595 | *
|
---|
596 | * @param repeatedissue
|
---|
597 | */
|
---|
598 | public void setRepeatedissue(
|
---|
599 | HashMap<String, HashMap<Value, Integer>> repeatedissue) {
|
---|
600 | this.repeatedissue = repeatedissue;
|
---|
601 | }
|
---|
602 |
|
---|
603 | /**
|
---|
604 | * @return map with number of times an issue values occurred in an
|
---|
605 | * opponent bid
|
---|
606 | */
|
---|
607 | public HashMap<String, HashMap<Value, Integer>> getRepeatedissue() {
|
---|
608 | return repeatedissue;
|
---|
609 | }
|
---|
610 |
|
---|
611 | public void setSelectedValues(ArrayList selectedValues) {
|
---|
612 | this.selectedValues = selectedValues;
|
---|
613 | }
|
---|
614 |
|
---|
615 | public ArrayList getSelectedValues() {
|
---|
616 | return selectedValues;
|
---|
617 | }
|
---|
618 |
|
---|
619 | public void setOpponentBids(
|
---|
620 | ArrayList<ParsAgent.BidUtility> opponentBids) {
|
---|
621 | this.opponentBids = opponentBids;
|
---|
622 | }
|
---|
623 |
|
---|
624 | public ArrayList<ParsAgent.BidUtility> getOpponentBids() {
|
---|
625 | return opponentBids;
|
---|
626 | }
|
---|
627 | }
|
---|
628 |
|
---|
629 | private class BidUtility {
|
---|
630 | private Bid bid;
|
---|
631 | private double utility;
|
---|
632 | private long time;
|
---|
633 |
|
---|
634 | BidUtility(Bid b, double u, long t) {
|
---|
635 | this.bid = b;
|
---|
636 | this.utility = u;
|
---|
637 | this.time = t;
|
---|
638 | }
|
---|
639 |
|
---|
640 | BidUtility(BidUtility newbid) {
|
---|
641 | this.bid = newbid.getBid();
|
---|
642 | this.utility = newbid.getUtility();
|
---|
643 | this.time = newbid.getTime();
|
---|
644 | }
|
---|
645 |
|
---|
646 | public void setBid(Bid bid) {
|
---|
647 | this.bid = bid;
|
---|
648 | }
|
---|
649 |
|
---|
650 | public Bid getBid() {
|
---|
651 | return bid;
|
---|
652 | }
|
---|
653 |
|
---|
654 | public void setUtility(double utility) {
|
---|
655 | this.utility = utility;
|
---|
656 | }
|
---|
657 |
|
---|
658 | public double getUtility() {
|
---|
659 | return utility;
|
---|
660 | }
|
---|
661 |
|
---|
662 | public void setTime(long time) {
|
---|
663 | this.time = time;
|
---|
664 | }
|
---|
665 |
|
---|
666 | public long getTime() {
|
---|
667 | return time;
|
---|
668 | }
|
---|
669 | }
|
---|
670 |
|
---|
671 | @Override
|
---|
672 | public String getDescription() {
|
---|
673 | return "ANAC2015";
|
---|
674 | }
|
---|
675 |
|
---|
676 | }
|
---|
677 |
|
---|
678 | /*
|
---|
679 | * package negotiator.ui;
|
---|
680 | *
|
---|
681 | * import java.util.ArrayList; import java.util.HashMap; import java.util.List;
|
---|
682 | * import java.util.Map; import java.util.Vector; import negotiator.Bid; import
|
---|
683 | * negotiator.DeadlineType; import negotiator.Timeline; import
|
---|
684 | * negotiator.actions.Accept; import negotiator.actions.Action; import
|
---|
685 | * negotiator.actions.Offer; import negotiator.issue.Issue; import
|
---|
686 | * negotiator.issue.IssueDiscrete; import negotiator.issue.IssueInteger; import
|
---|
687 | * negotiator.issue.IssueReal; import negotiator.issue.Objective; import
|
---|
688 | * negotiator.issue.Value; import negotiator.issue.ValueInteger; import
|
---|
689 | * negotiator.issue.ValueReal; import
|
---|
690 | * negotiator.parties.AbstractNegotiationParty; import
|
---|
691 | * negotiator.parties.AbstractTimeDependentNegotiationParty; import
|
---|
692 | * negotiator.utility.UtilitySpace;
|
---|
693 | *
|
---|
694 | *
|
---|
695 | * public class ParsAgent extends AbstractTimeDependentNegotiationParty { Bid
|
---|
696 | * lastBid; Action lastAction; String oppAName; String oppBName; int round;
|
---|
697 | * double myutility = 0.8d; boolean Imfirst = false; Boolean withDiscount =
|
---|
698 | * null; boolean fornullAgent = false; ArrayList<BidUtility> opponentAB = new
|
---|
699 | * ArrayList<BidUtility>(); OpponentPreferences oppAPreferences = new
|
---|
700 | * OpponentPreferences(); OpponentPreferences oppBPreferences = new
|
---|
701 | * OpponentPreferences(); // boolean myturn;
|
---|
702 | *
|
---|
703 | *
|
---|
704 | * public ParsAgent(UtilitySpace utilitySpace, Map<DeadlineType, Object>
|
---|
705 | * deadlines, Timeline timeline, long randomSeed) { // Make sure that this
|
---|
706 | * constructor calls it's parent. super(utilitySpace, deadlines, timeline,
|
---|
707 | * randomSeed); // Object[] keys = deadlines.keySet().toArray(); // for (int i =
|
---|
708 | * 0; i < keys.length; ++i) { // System.out.println("keys[i] ==== "+keys[i]);
|
---|
709 | * // if (keys[i] instanceof DeadlineType) { // // round =
|
---|
710 | * Integer.parseInt(deadlines.get(keys[i]).toString()); //
|
---|
711 | * System.out.println("round ====== "+round); // } // }
|
---|
712 | *
|
---|
713 | *
|
---|
714 | * }
|
---|
715 | *
|
---|
716 | *
|
---|
717 | * @Override public Action chooseAction(List<Class> validActions) { //
|
---|
718 | * myturn=true; round--; try { if (lastBid == null) { Imfirst = true; Bid b =
|
---|
719 | * getMybestBid(utilitySpace.getMaxUtilityBid(), 0); return new
|
---|
720 | * Offer(getPartyId(), b); } else if (round == 0) { if (Imfirst) { return new
|
---|
721 | * Offer(getPartyId(),offerMyNewBid()); } else if
|
---|
722 | * (utilitySpace.getUtility(lastBid) > 0.6d) { return new Accept(getPartyId());
|
---|
723 | * } } else { if (lastAction instanceof Accept) { if
|
---|
724 | * (utilitySpace.getUtility(lastBid) > getMyutility()) { return new
|
---|
725 | * Accept(getPartyId()); } else { Bid b = offerMyNewBid(); return new
|
---|
726 | * Offer(getPartyId(),b); } } else { if (utilitySpace.getUtility(lastBid) >
|
---|
727 | * getMyutility()) { return new Accept(getPartyId()); } else { Bid b =
|
---|
728 | * offerMyNewBid(); if (utilitySpace.getUtility(b) < getMyutility()) return new
|
---|
729 | * Offer(getPartyId(),getMybestBid(utilitySpace.getMaxUtilityBid(), 0)); else
|
---|
730 | * return new Offer(getPartyId(),b);
|
---|
731 | *
|
---|
732 | * } } } } catch (Exception e) { System.out.println("Error Occured " +
|
---|
733 | * e.getMessage()); } Bid mb = null; try { mb = utilitySpace.getMaxUtilityBid();
|
---|
734 | * return new Offer(getPartyId(),getMybestBid(mb, 0)); } catch (Exception e) {
|
---|
735 | * try { return new Offer(getPartyId(),mb); } catch (Exception e2) {
|
---|
736 | *
|
---|
737 | * } } return new Accept(getPartyId()); }
|
---|
738 | *
|
---|
739 | *
|
---|
740 | * @Override public void receiveMessage(Object sender, Action action ) {
|
---|
741 | * super.receiveMessage(sender, action); String agentName =sender.toString();
|
---|
742 | * fornullAgent = !fornullAgent; if (action != null && action instanceof Offer)
|
---|
743 | * { // myturn=false; Bid newBid = ((Offer)action).getBid(); if (withDiscount ==
|
---|
744 | * null) { try { if (utilitySpace.getUtilityWithDiscount(newBid, timeline) !=
|
---|
745 | * utilitySpace.getUtility(newBid)) { withDiscount = Boolean.TRUE; } else
|
---|
746 | * withDiscount = Boolean.FALSE; } catch (Exception e) {
|
---|
747 | * System.out.println("Exception " + e.getMessage()); } } BidUtility opBid; try
|
---|
748 | * { opBid = new BidUtility(newBid, utilitySpace.getUtility(newBid),
|
---|
749 | * System.currentTimeMillis());
|
---|
750 | *
|
---|
751 | * if (oppAName != null && oppAName.equals(agentName)) {
|
---|
752 | * addBidToList(oppAPreferences.getOpponentBids(), opBid);
|
---|
753 | *
|
---|
754 | * } else if (oppBName != null && oppBName.equals(agentName)) {
|
---|
755 | * addBidToList(oppBPreferences.getOpponentBids(), opBid); } else if (oppAName
|
---|
756 | * == null) { oppAName = agentName;
|
---|
757 | * oppAPreferences.getOpponentBids().add(opBid); } else if (oppBName == null) {
|
---|
758 | * oppBName = agentName; oppBPreferences.getOpponentBids().add(opBid); }
|
---|
759 | * calculateParamForOpponent((oppAName.equals(agentName) ? oppAPreferences :
|
---|
760 | * oppBPreferences), newBid); lastBid = newBid; } catch (Exception e) { //
|
---|
761 | * System.out.println("Exception 33 " + e.getMessage()); } } else if (action !=
|
---|
762 | * null && action instanceof Accept ) { //&& !myturn BidUtility opBid = null;
|
---|
763 | * try { opBid = new BidUtility(lastBid, utilitySpace.getUtility(lastBid),
|
---|
764 | * System.currentTimeMillis()); } catch (Exception e) { //
|
---|
765 | * System.out.println("Exception 44" + e.getMessage()); }
|
---|
766 | * addBidToList(opponentAB, opBid); } lastAction = action;
|
---|
767 | *
|
---|
768 | * // Here you can listen to other parties' messages }
|
---|
769 | *
|
---|
770 | * public int MyBestValue(int issueindex) { ArrayList<Issue> dissues =
|
---|
771 | * utilitySpace.getDomain().getIssues(); Issue isu = dissues.get(issueindex);
|
---|
772 | * HashMap map = new HashMap(); double maxutil = 0d; int maxvalIndex = 0; try {
|
---|
773 | * map = utilitySpace.getMaxUtilityBid().getValues(); } catch (Exception e) {
|
---|
774 | * System.out.println("Exception 3323 " + e.getMessage()); } if (isu instanceof
|
---|
775 | * IssueDiscrete) { IssueDiscrete is = (IssueDiscrete)isu; for (int num = 0; num
|
---|
776 | * < is.getNumberOfValues(); ++num) { map.put(new Integer(issueindex + 1),
|
---|
777 | * is.getValue(num)); Bid temp; double u = 0d; try { temp = new
|
---|
778 | * Bid(utilitySpace.getDomain(), map); u = utilitySpace.getUtility(temp); }
|
---|
779 | * catch (Exception e) { System.out.println("Exception 98989 " +
|
---|
780 | * e.getMessage()); } if (u > maxutil) { maxutil = u; maxvalIndex = num; }
|
---|
781 | * break;
|
---|
782 | *
|
---|
783 | *
|
---|
784 | * } } return maxvalIndex; }
|
---|
785 | *
|
---|
786 | * public Bid offerMyNewBid() { Bid bidNN = null; if (opponentAB != null &&
|
---|
787 | * opponentAB.size() != 0) bidNN = getNNBid(opponentAB); try { if (bidNN == null
|
---|
788 | * || utilitySpace.getUtility(bidNN) < getMyutility()) { ArrayList isues =
|
---|
789 | * getMutualIssues(); HashMap map = new HashMap(); Bid bid; ArrayList<Issue>
|
---|
790 | * dissues = utilitySpace.getDomain().getIssues(); for (int i = 0; i <
|
---|
791 | * isues.size(); ++i) { ArrayList keyVal = (ArrayList)isues.get(i); if (keyVal
|
---|
792 | * != null && dissues.get(i) instanceof IssueDiscrete) { IssueDiscrete is =
|
---|
793 | * (IssueDiscrete)dissues.get(i); for (int num = 0; num <
|
---|
794 | * is.getNumberOfValues(); ++num) { if
|
---|
795 | * (is.getValue(num).toString().equals(keyVal.get(0).toString())) { map.put(new
|
---|
796 | * Integer(i + 1), is.getValue(num)); break; }
|
---|
797 | *
|
---|
798 | * }
|
---|
799 | *
|
---|
800 | * } else if (keyVal == null && dissues.get(i) instanceof IssueDiscrete) {
|
---|
801 | * IssueDiscrete is = (IssueDiscrete)dissues.get(i); map.put(new Integer(i + 1),
|
---|
802 | * is.getValue(MyBestValue(i)));
|
---|
803 | *
|
---|
804 | * } else if (keyVal != null) { map.put(new Integer(i + 1), keyVal.get(0)); }
|
---|
805 | *
|
---|
806 | * } try { bid = new Bid(utilitySpace.getDomain(), (HashMap)map.clone()); if
|
---|
807 | * (utilitySpace.getUtility(bid) > getMyutility()) return bid; else return
|
---|
808 | * getMybestBid(utilitySpace.getMaxUtilityBid(), 0); } catch (Exception e) {
|
---|
809 | * System.out.println("Exception 55 " + e.getMessage()); } } else return bidNN;
|
---|
810 | * } catch (Exception e) { // System.out.println("Exception 121212 == " +
|
---|
811 | * e.getMessage()); } return null; }
|
---|
812 | *
|
---|
813 | * public ArrayList getMutualIssues() { ArrayList mutualList = new ArrayList();
|
---|
814 | * ArrayList<Issue> dissues = utilitySpace.getDomain().getIssues(); int twocycle
|
---|
815 | * = 2; while (twocycle > 0) { mutualList = new ArrayList(); for (int i = 0; i <
|
---|
816 | * dissues.size(); ++i) { if
|
---|
817 | * (oppAPreferences.getRepeatedissue().get(dissues.get(i).getName()) != null) {
|
---|
818 | * HashMap vals =
|
---|
819 | * (HashMap)oppAPreferences.getRepeatedissue().get(dissues.get(i).getName());
|
---|
820 | * HashMap valsB =
|
---|
821 | * (HashMap)oppBPreferences.getRepeatedissue().get(dissues.get(i).getName());
|
---|
822 | *
|
---|
823 | * Object[] keys = vals.keySet().toArray(); int[] max = new int[] { 0,0 };
|
---|
824 | * Object[] maxkey = new Object[] {null,null }; for (int j = 0; j < keys.length;
|
---|
825 | * ++j) { Integer temp = (Integer)vals.get(keys[j]); if (temp.intValue() >
|
---|
826 | * max[0]) { max[0] = temp.intValue(); maxkey[0] = keys[j]; } else if
|
---|
827 | * (temp.intValue() > max[1]) { max[1] = temp.intValue(); maxkey[1] = keys[j]; }
|
---|
828 | * } if (valsB != null) { Object[] keysB = valsB.keySet().toArray(); int[] maxB
|
---|
829 | * = new int[] { 0,0 }; ; Object[] maxkeyB = new Object[] { null,null}; for (int
|
---|
830 | * j = 0; j < keysB.length; ++j) { Integer temp = (Integer)valsB.get(keysB[j]);
|
---|
831 | * if (temp.intValue() > maxB[0]) { maxB[0] = temp.intValue(); maxkeyB[0] =
|
---|
832 | * keysB[j]; } else if (temp.intValue() > maxB[1]) { maxB[1] = temp.intValue();
|
---|
833 | * maxkeyB[1] = keysB[j]; } } if (twocycle == 2) { if (maxkey[0] != null &&
|
---|
834 | * maxkeyB[0] != null && maxkey[0].equals(maxkeyB[0])) { ArrayList l = new
|
---|
835 | * ArrayList(); l.add(maxkey[0]); l.add(maxB[0]); l.add(max[0]);
|
---|
836 | * mutualList.add(i, l); } else mutualList.add(i, null); } else { boolean
|
---|
837 | * insideloop=true; for(int m=0;insideloop &&m<2;++m){ for(int
|
---|
838 | * z=0;insideloop&&z<2;++z){ if (maxkey[m] != null && maxkeyB[z] != null &&
|
---|
839 | * maxkey[m].equals(maxkeyB[z])) { ArrayList l = new ArrayList();
|
---|
840 | * l.add(maxkey[m]); l.add(maxB[z]); l.add(max[m]); mutualList.add(i, l);
|
---|
841 | * insideloop=false; } } } if(insideloop) mutualList.add(i, null);
|
---|
842 | *
|
---|
843 | * } } else { mutualList.add(i, null);
|
---|
844 | * oppBPreferences.getRepeatedissue().put(dissues.get(i).getName(), new
|
---|
845 | * HashMap()); } } else {
|
---|
846 | * oppAPreferences.getRepeatedissue().put(dissues.get(i).getName(), new
|
---|
847 | * HashMap()); mutualList.add(i, null); }
|
---|
848 | * if(((HashMap)oppAPreferences.getRepeatedissue
|
---|
849 | * ().get(dissues.get(i).getName())).size()==0 ||
|
---|
850 | * ((HashMap)oppAPreferences.getRepeatedissue
|
---|
851 | * ().get(dissues.get(i).getName())).size()==0){ twocycle--; } } if (twocycle !=
|
---|
852 | * 0) { twocycle--; if (opponentAB.size() == 0) { float nullval = 0.0f; for (int
|
---|
853 | * i = 0; i < mutualList.size(); ++i) { if (mutualList.get(i) != null) {
|
---|
854 | * ++nullval; } }
|
---|
855 | *
|
---|
856 | * nullval = nullval / mutualList.size(); if (nullval >= 0.5) twocycle--; }else
|
---|
857 | * twocycle--; } } return mutualList; }
|
---|
858 | *
|
---|
859 | * public Bid getNNBid(ArrayList<BidUtility> oppAB) { ArrayList<Issue> dissues =
|
---|
860 | * utilitySpace.getDomain().getIssues(); Bid maxBid = null; double maxutility =
|
---|
861 | * 0d; int size = 0; int exloop = 0; Bid newBid; while (exloop < dissues.size())
|
---|
862 | * { int bi = chooseBestIssue(); size = 0; while (oppAB != null && oppAB.size()
|
---|
863 | * > size) { Bid b = oppAB.get(size).getBid(); newBid = new Bid(b); try {
|
---|
864 | * HashMap vals = b.getValues(); vals.put(bi, getRandomValue(dissues.get(bi -
|
---|
865 | * 1))); newBid = new Bid(utilitySpace.getDomain(), vals); if
|
---|
866 | * (utilitySpace.getUtility(newBid) > getMyutility() &&
|
---|
867 | * utilitySpace.getUtility(newBid) > maxutility) { maxBid = new Bid(newBid);
|
---|
868 | * maxutility = utilitySpace.getUtility(maxBid); }
|
---|
869 | *
|
---|
870 | * } catch (Exception e) { System.out.println("Exception 66 " + e.getMessage());
|
---|
871 | * } size++; } exloop++; } return maxBid; }
|
---|
872 | *
|
---|
873 | *
|
---|
874 | * public int chooseBestIssue() { double random = Math.random(); double
|
---|
875 | * sumWeight = 0d;
|
---|
876 | *
|
---|
877 | * for (int i = utilitySpace.getDomain().getIssues().size(); i > 0; --i) {
|
---|
878 | * sumWeight += utilitySpace.getWeight(i); if (sumWeight > random) return i; }
|
---|
879 | * return 0; }
|
---|
880 | *
|
---|
881 | * public int chooseWorstIssue() { double random = Math.random() * 100; double
|
---|
882 | * sumWeight = 0d; int minin = 1; double min = 1.0d; for (int i =
|
---|
883 | * utilitySpace.getDomain().getIssues().size(); i > 0; --i) { sumWeight += 1.0d
|
---|
884 | * / utilitySpace.getWeight(i); if (utilitySpace.getWeight(i) < min) { min =
|
---|
885 | * utilitySpace.getWeight(i); minin = i; } if (sumWeight > random) return i; }
|
---|
886 | * return minin; }
|
---|
887 | *
|
---|
888 | * public Bid getMybestBid(Bid sugestBid, int time) { ArrayList<Issue> dissues =
|
---|
889 | * utilitySpace.getDomain().getIssues(); Bid newBid = new Bid(sugestBid); int
|
---|
890 | * index = chooseWorstIssue(); boolean loop = true; while (loop) { newBid = new
|
---|
891 | * Bid(sugestBid); try { HashMap map = newBid.getValues(); map.put(index,
|
---|
892 | * getRandomValue(dissues.get(index - 1))); newBid = new
|
---|
893 | * Bid(utilitySpace.getDomain(), map); if (utilitySpace.getUtility(newBid) >
|
---|
894 | * getMyutility()) { return newBid; } } catch (Exception e) { //
|
---|
895 | * System.out.println("Exception in my best bid : " + // e.getMessage()); loop =
|
---|
896 | * false; } } return newBid; }
|
---|
897 | *
|
---|
898 | *
|
---|
899 | * public void addBidToList(ArrayList<BidUtility> mybids, BidUtility newbid) {
|
---|
900 | * int index = mybids.size(); for (int i = 0; i < mybids.size(); ++i) { if
|
---|
901 | * (mybids.get(i).getUtility() <= newbid.getUtility()) { if
|
---|
902 | * (!mybids.get(i).getBid().equals(newbid.getBid())) index = i; else return; } }
|
---|
903 | * mybids.add(index, newbid);
|
---|
904 | *
|
---|
905 | * }
|
---|
906 | *
|
---|
907 | *
|
---|
908 | * public void calculateParamForOpponent(OpponentPreferences op, Bid bid) {
|
---|
909 | * ArrayList<Issue> dissues = utilitySpace.getDomain().getIssues(); HashMap
|
---|
910 | * bidVal = bid.getValues(); Object[] keys = bidVal.keySet().toArray();
|
---|
911 | *
|
---|
912 | * for (int i = 0; i < dissues.size(); ++i) { if
|
---|
913 | * (op.getRepeatedissue().get(dissues.get(i).getName()) != null) {
|
---|
914 | *
|
---|
915 | * HashMap vals = (HashMap)op.getRepeatedissue().get(dissues.get(i).getName());
|
---|
916 | *
|
---|
917 | * try { if (vals.get(bidVal.get(keys[i])) != null) { Integer repet =
|
---|
918 | * (Integer)vals.get(bidVal.get(keys[i])); repet = repet + 1;
|
---|
919 | * vals.put(bidVal.get(keys[i]), repet); } else { vals.put(bidVal.get(keys[i]),
|
---|
920 | * new Integer(1)); } } catch (Exception e) { //
|
---|
921 | * System.out.println("Exception 88 " + e.getMessage()); } } else { HashMap h =
|
---|
922 | * new HashMap(); // op.getRepeatedissue().get(dissues.get(i).getName()); try {
|
---|
923 | *
|
---|
924 | * h.put(bidVal.get(keys[i]), new Integer(1)); } catch (Exception e) { //
|
---|
925 | * System.out.println("Exception 99 " + e.getMessage()); }
|
---|
926 | * op.getRepeatedissue().put(dissues.get(i).getName(), h); } }
|
---|
927 | *
|
---|
928 | * }
|
---|
929 | *
|
---|
930 | * public void setMyutility(double myutility) { this.myutility = myutility; }
|
---|
931 | *
|
---|
932 | * public double getMyutility() { myutility = getTargetUtility(); if (myutility
|
---|
933 | * < 0.7) return 0.7d; return myutility; }
|
---|
934 | *
|
---|
935 | * public double getE() { if (withDiscount) return 0.25d; return 0.19d; }
|
---|
936 | *
|
---|
937 | * private class OpponentPreferences { private HashMap repeatedissue = new
|
---|
938 | * HashMap(); private ArrayList selectedValues; ArrayList<BidUtility>
|
---|
939 | * opponentBids = new ArrayList<BidUtility>();
|
---|
940 | *
|
---|
941 | * public void setRepeatedissue(HashMap repeatedissue) { this.repeatedissue =
|
---|
942 | * repeatedissue; }
|
---|
943 | *
|
---|
944 | * public HashMap getRepeatedissue() { return repeatedissue; }
|
---|
945 | *
|
---|
946 | * public void setSelectedValues(ArrayList selectedValues) { this.selectedValues
|
---|
947 | * = selectedValues; }
|
---|
948 | *
|
---|
949 | * public ArrayList getSelectedValues() { return selectedValues; }
|
---|
950 | *
|
---|
951 | * public void setOpponentBids(ArrayList<ParsAgent.BidUtility> opponentBids) {
|
---|
952 | * this.opponentBids = opponentBids; }
|
---|
953 | *
|
---|
954 | * public ArrayList<ParsAgent.BidUtility> getOpponentBids() { return
|
---|
955 | * opponentBids; } }
|
---|
956 | *
|
---|
957 | * private class BidUtility { private Bid bid; private double utility; private
|
---|
958 | * long time;
|
---|
959 | *
|
---|
960 | * BidUtility(Bid b, double u, long t) { this.bid = b; this.utility = u;
|
---|
961 | * this.time = t; }
|
---|
962 | *
|
---|
963 | * BidUtility(BidUtility newbid) { this.bid = newbid.getBid(); this.utility =
|
---|
964 | * newbid.getUtility(); this.time = newbid.getTime(); }
|
---|
965 | *
|
---|
966 | * public void setBid(Bid bid) { this.bid = bid; }
|
---|
967 | *
|
---|
968 | * public Bid getBid() { return bid; }
|
---|
969 | *
|
---|
970 | * public void setUtility(double utility) { this.utility = utility; }
|
---|
971 | *
|
---|
972 | * public double getUtility() { return utility; }
|
---|
973 | *
|
---|
974 | * public void setTime(long time) { this.time = time; }
|
---|
975 | *
|
---|
976 | * public long getTime() { return time; } }
|
---|
977 | *
|
---|
978 | * }
|
---|
979 | */ |
---|