1 | package agents.anac.y2014.Sobut;
|
---|
2 |
|
---|
3 | import java.io.Serializable;
|
---|
4 |
|
---|
5 | import genius.core.Agent;
|
---|
6 | import genius.core.Bid;
|
---|
7 | import genius.core.NegotiationResult;
|
---|
8 | import genius.core.actions.Accept;
|
---|
9 | import genius.core.actions.Action;
|
---|
10 | import genius.core.actions.DefaultAction;
|
---|
11 | import genius.core.actions.Offer;
|
---|
12 |
|
---|
13 | public class Sobut extends Agent {
|
---|
14 | private double MINIMUM_BID_UTILITY;
|
---|
15 | private Bid opponentLastBid;
|
---|
16 | private Bid maxBid;
|
---|
17 |
|
---|
18 | public Sobut() {
|
---|
19 | }
|
---|
20 |
|
---|
21 | @Override
|
---|
22 | public void init() {
|
---|
23 | Serializable prev = this.loadSessionData();
|
---|
24 | if (prev != null) {
|
---|
25 | double previousOutcome = (Double) prev;
|
---|
26 | double r = Math.min(Math.random(), 0.5);
|
---|
27 | MINIMUM_BID_UTILITY = Math.max(
|
---|
28 | Math.max(utilitySpace.getReservationValueUndiscounted(),
|
---|
29 | previousOutcome),
|
---|
30 | r);
|
---|
31 | } else {
|
---|
32 | MINIMUM_BID_UTILITY = utilitySpace
|
---|
33 | .getReservationValueUndiscounted();
|
---|
34 | }
|
---|
35 | System.out.println("Minimum bid utility: " + MINIMUM_BID_UTILITY);
|
---|
36 | }
|
---|
37 |
|
---|
38 | @Override
|
---|
39 | public String getVersion() {
|
---|
40 | return "1.0";
|
---|
41 | }
|
---|
42 |
|
---|
43 | @Override
|
---|
44 | public String getName() {
|
---|
45 | return "ANAC2014Agent";
|
---|
46 | }
|
---|
47 |
|
---|
48 | @Override
|
---|
49 | public void endSession(NegotiationResult result) {
|
---|
50 | if (result.getMyDiscountedUtility() > MINIMUM_BID_UTILITY) {
|
---|
51 | saveSessionData(new Double(result.getMyDiscountedUtility()));
|
---|
52 | }
|
---|
53 | System.out.println(result);
|
---|
54 | }
|
---|
55 |
|
---|
56 | @Override
|
---|
57 | public void ReceiveMessage(Action opponentAction) {
|
---|
58 | opponentLastBid = DefaultAction.getBidFromAction(opponentAction);
|
---|
59 | }
|
---|
60 |
|
---|
61 | @Override
|
---|
62 | public Action chooseAction() {
|
---|
63 | if (opponentLastBid != null
|
---|
64 | && getUtility(opponentLastBid) >= MINIMUM_BID_UTILITY) {
|
---|
65 | return new Accept(getAgentID(), opponentLastBid);
|
---|
66 | }
|
---|
67 | return getRandomBid(MINIMUM_BID_UTILITY);
|
---|
68 | }
|
---|
69 |
|
---|
70 | private Action getRandomBid(double target) {
|
---|
71 | Bid bid = null;
|
---|
72 | try {
|
---|
73 | int loops = 0;
|
---|
74 | do {
|
---|
75 | bid = utilitySpace.getDomain().getRandomBid(null);
|
---|
76 | loops++;
|
---|
77 | } while (loops < 100000 && utilitySpace.getUtility(bid) < target);
|
---|
78 | if (bid == null) {
|
---|
79 | if (maxBid == null) {
|
---|
80 | // this is a computationally expensive operation, therefore
|
---|
81 | // cache result
|
---|
82 | maxBid = utilitySpace.getMaxUtilityBid();
|
---|
83 | }
|
---|
84 | bid = maxBid;
|
---|
85 | }
|
---|
86 | } catch (Exception e) {
|
---|
87 | e.printStackTrace();
|
---|
88 | }
|
---|
89 | return new Offer(getAgentID(), bid);
|
---|
90 | }
|
---|
91 |
|
---|
92 | @Override
|
---|
93 | public String getDescription() {
|
---|
94 | return "ANAC2014 compatible with non-linear utility spaces";
|
---|
95 | }
|
---|
96 | } |
---|