source: src/main/java/bargainingchips/BargainingChips.java@ 326

Last change on this file since 326 was 324, checked in by Tim Baarslag, 5 years ago
File size: 3.7 KB
RevLine 
[316]1package bargainingchips;
[315]2
3import java.util.concurrent.BlockingQueue;
4import java.util.concurrent.LinkedBlockingQueue;
5
[316]6import bargainingchips.actions.Offer;
[323]7import bargainingchips.actions.OfferBy;
[316]8import bargainingchips.players.Agent;
9import bargainingchips.players.BoulwareAgent;
10import bargainingchips.players.CoordinationMessage;
11import bargainingchips.players.Coordinator;
12import bargainingchips.players.StatusMessage;
[323]13import bargainingchips.protocol.AsynchronousOffersProtocol;
[316]14import bargainingchips.utilityfunctions.UF_CloseToQuantity;
15import bargainingchips.utilityfunctions.UtilityFunction;
[315]16
17/**
18 * This main class showcases the fundamental concepts in the Bargaining Chips game.
19 *
20 * Bargaining Chips is played by a buyer who seeks to acquire a number of chips for a good price.
21 * For example, the wish list of the buyer may consist of 2 red chips and 1 blue chip.
22 * Chips represents arbitrary indivisible items, such as products or tasks and are differentiated
23 * from others by a unique color.
24 *
25 * Bargaining Chips is played using an asynchronous offer protocol for each bilateral negotiation thread.
26 * Multiple deals in simultaneous threads of one-to-many negotiation need to be coordinated; therefore,
27 * the buyer is equipped with two modules, one coordinator and multiple negotiators one per each thread.
28 *
29 * Each of the individual negotiations is itself a bilateral negotiation over multiple items and multiple
30 * issues, i.e. a multi-issue multi-item thread. As each thread could reach a deal, the whole negotiation
31 * could reach multiple deals.
32 *
33 * Negotiating in this setting needs some coordination efforts to synchronize threads according to the
34 * progress of each individual negotiation as well as the multiple deals compared with the party's preference.
35 *
36 * Bargaining Chips is a testbed for evaluating agents in such settings.
37 *
38 */
39public class BargainingChips
40{
41 public static void main(String[] args) throws InterruptedException
42 {
[323]43 // Set up the protocol
44 BlockingQueue<OfferBy> from = new LinkedBlockingQueue<OfferBy>();
45 BlockingQueue<Offer> toBuyer = new LinkedBlockingQueue<Offer>();
46 BlockingQueue<Offer> toSeller = new LinkedBlockingQueue<Offer>();
[315]47
[323]48 String nameBuyer = "Bob 1";
49 String nameSeller = "Sam";
50
51 AsynchronousOffersProtocol aop = new AsynchronousOffersProtocol(from, nameBuyer, toBuyer, nameSeller, toSeller);
[324]52
53
54
[323]55
[315]56 BlockingQueue<CoordinationMessage> cin = new LinkedBlockingQueue<CoordinationMessage>();
57 BlockingQueue<StatusMessage> cout = new LinkedBlockingQueue<StatusMessage>();
58
59 NegotiationContext context = new NegotiationContext();
60
61 // Bob
62 WishList wishlist = new WishListBuilder().addWish("Green", 2).build(); // Bob wishes for 2 Green chips
63 UtilityFunction u = new UF_CloseToQuantity(wishlist);
[323]64 Agent bob1 = new BoulwareAgent(nameBuyer, u, context, toBuyer, from, cin, cout);
[315]65
66 // Coordinator
67 Coordinator c = new Coordinator(wishlist, cout, cin);
68
69 // Sam
70 WishList wishlistSam = new WishListBuilder().addWish("Green", 10).build(); // Sam wishes for 10 Green chips
71 UtilityFunction uSam = new UF_CloseToQuantity(wishlistSam);
[323]72 Agent sam = new BoulwareAgent(nameSeller, uSam, context, toSeller, from);
[315]73
74 // Start threads
75 System.out.println(bob1.toDescription());
76 System.out.println("playing vs");
77 System.out.println(sam.toDescription());
78
[323]79 Thread aopThread = new Thread(aop);
80 aopThread.start();
81
[315]82 Thread threadBuyer = new Thread(bob1);
83 threadBuyer.start();
84
85 Thread threadSeller = new Thread(sam);
86 threadSeller.start();
87
88 Thread threadCoordinator = new Thread(c);
89 threadCoordinator.start();
90 }
91
92}
Note: See TracBrowser for help on using the repository browser.