[316] | 1 | package bargainingchips;
|
---|
[315] | 2 |
|
---|
[338] | 3 | //import bargainingchips.players.Buyer;
|
---|
[339] | 4 | import bargainingchips.players.BargainingBuyer;
|
---|
[340] | 5 | import bargainingchips.wishlist.WishList;
|
---|
| 6 | import bargainingchips.wishlist.WishListBuilder;
|
---|
[315] | 7 |
|
---|
| 8 | /**
|
---|
| 9 | * This main class showcases the fundamental concepts in the Bargaining Chips game.
|
---|
| 10 | *
|
---|
| 11 | * Bargaining Chips is played by a buyer who seeks to acquire a number of chips for a good price.
|
---|
| 12 | * For example, the wish list of the buyer may consist of 2 red chips and 1 blue chip.
|
---|
| 13 | * Chips represents arbitrary indivisible items, such as products or tasks and are differentiated
|
---|
| 14 | * from others by a unique color.
|
---|
| 15 | *
|
---|
| 16 | * Bargaining Chips is played using an asynchronous offer protocol for each bilateral negotiation thread.
|
---|
| 17 | * Multiple deals in simultaneous threads of one-to-many negotiation need to be coordinated; therefore,
|
---|
| 18 | * the buyer is equipped with two modules, one coordinator and multiple negotiators one per each thread.
|
---|
| 19 | *
|
---|
| 20 | * Each of the individual negotiations is itself a bilateral negotiation over multiple items and multiple
|
---|
| 21 | * issues, i.e. a multi-issue multi-item thread. As each thread could reach a deal, the whole negotiation
|
---|
| 22 | * could reach multiple deals.
|
---|
| 23 | *
|
---|
| 24 | * Negotiating in this setting needs some coordination efforts to synchronize threads according to the
|
---|
| 25 | * progress of each individual negotiation as well as the multiple deals compared with the party's preference.
|
---|
| 26 | *
|
---|
| 27 | * Bargaining Chips is a testbed for evaluating agents in such settings.
|
---|
| 28 | *
|
---|
[338] | 29 | *
|
---|
| 30 | *@author Tim Baarslag and Faria Nassiri-Mofakham
|
---|
| 31 | *
|
---|
[315] | 32 | */
|
---|
| 33 | public class BargainingChips
|
---|
| 34 | {
|
---|
| 35 | public static void main(String[] args) throws InterruptedException
|
---|
| 36 | {
|
---|
[331] | 37 | WishList overallWishlist = new WishListBuilder().addWish("Green", 2).build(); // Bob wishes for 2 Green chips
|
---|
[338] | 38 |
|
---|
| 39 | // ChipIssueValue<Double> breakEvenPrices = new ChipIssueValueBuilder()
|
---|
| 40 | // .addIssue("Red", 2.0)
|
---|
| 41 | // .addIssue("Green", 4.0)
|
---|
| 42 | // .build();
|
---|
| 43 | // boolean priceVSQuantity = true; // True means that price is more important than quantity.
|
---|
| 44 |
|
---|
| 45 | //Buyer bob = new Buyer(overallWishlist);
|
---|
[339] | 46 | BargainingBuyer bob = new BargainingBuyer(overallWishlist);//, breakEvenPrices, priceVSQuantity);
|
---|
[331] | 47 |
|
---|
[338] | 48 |
|
---|
[315] | 49 | // Sam
|
---|
[331] | 50 | WishList wishlistSam = new WishListBuilder().addWish("Green", 10).build(); // Sam wishes for 10 Green chips
|
---|
| 51 | String sam = "Sam";
|
---|
[315] | 52 |
|
---|
[331] | 53 | // Steve
|
---|
[338] | 54 | WishList wishlistSteve = new WishListBuilder().addWish("Green", 5).build(); // Steve wishes for 5 Green chips
|
---|
[331] | 55 | String steve = "Steve";
|
---|
[315] | 56 |
|
---|
[338] | 57 | // Sally
|
---|
| 58 | WishList wishlistSally = new WishListBuilder().addWish("Yellow", 6).build(); // Sam wishes for 6 Yellow chips
|
---|
| 59 | String sally = "Sally";
|
---|
| 60 |
|
---|
| 61 | // Sandra
|
---|
| 62 | WishList wishlistSandra = new WishListBuilder().addWish("Orange", 2).build(); // Sandra wishes for 2 Orange chips
|
---|
| 63 | String sandra = "Sandra";
|
---|
| 64 |
|
---|
| 65 |
|
---|
[331] | 66 | bob.connectSeller(sam, wishlistSam);
|
---|
| 67 | bob.connectSeller(steve, wishlistSteve);
|
---|
[338] | 68 | bob.connectSeller(sally, wishlistSally);
|
---|
| 69 | bob.connectSeller(sandra, wishlistSandra);
|
---|
[323] | 70 |
|
---|
[331] | 71 | bob.startThreads();
|
---|
| 72 |
|
---|
[315] | 73 | }
|
---|
| 74 |
|
---|
| 75 | }
|
---|