source: src/main/java/bargainingchips/utilityfunctions/UF.java@ 341

Last change on this file since 341 was 340, checked in by Tim Baarslag, 5 years ago

Change BilateralProtocol loop to avoid busy wait; note that this fixes only a part of the busy wait problem.

Package structure now in line with latest Acumex discussions.

Pinpointed error avoidance in Agent.

File size: 5.2 KB
Line 
1package bargainingchips.utilityfunctions;
2
3import java.util.Random;
4import bargainingchips.Bundle;
5import bargainingchips.ChipIssueValue;
6import bargainingchips.utilityfunctions.UF_BezierPriceBezierQuantity;
7import bargainingchips.utilityfunctions.UF_BezierPriceGaussianQuantity;
8import bargainingchips.utilityfunctions.UF_CloseToQuantity;
9import bargainingchips.utilityfunctions.UF_IntensifiedLessPriceCloseToQuantity;
10import bargainingchips.utilityfunctions.UF_LessPrice;
11import bargainingchips.utilityfunctions.UF_LessPriceCloseToQuantity;
12import bargainingchips.utilityfunctions.UF_PeakedFlatCurvePriceGaussianQuantity;
13import bargainingchips.utilityfunctions.UF_PeakedFlatPricePeakedFlatQuantity;
14import bargainingchips.utilityfunctions.UF_PeakedPricePeakedQuantity;
15import bargainingchips.wishlist.WishList;
16
17/**
18 *
19 * This class works to pick a random utility function and pass the buyer's preferences to.
20 *
21 * Besides the buyer operator, it is useful for the experiments in which it is required
22 * to create several random agents to negotiate on behalf of the buyer.
23 *
24 * The utility functions are UF_CloseToQuantity, UF_LessPrice, UF_LessPriceCloseToQuantity,
25 * UF_IntensifiedLessPriceCloseToQuantity, UF_PeakedPricePeakedQuantity, UF_PeakedFlatPricePeakedFlatQuantity,
26 * UF_PeakedFlatCurvePriceGaussianQuantity, UF_BezierPriceBezierQuantity, and UF_BezierPriceGaussianQuantity.
27 *
28 * They receive different number and types of parameters.
29 *
30 *
31 * @author Faria Nassiri-Mofakham
32 *
33 */
34public class UF implements UtilityFunction
35{
36 WishList wishlist; // example: {Yellow=6, Orange=40, Green=4}
37 ChipIssueValue<Double> breakEvenPrices; // example: {Yellow=5.0, Orange=1.0, Green=3.0}
38 ChipIssueValue<Double[]> prices1; // example: ChipIssueValueBuilder<Double[]>().addIssue("Green", new Double[] {3.0, 4.8}).addIssue("Yellow", new Double[] {5.0, 8.0}).addIssue("Orange", new Double[] {1.0, 2.5}).build();
39 ChipIssueValue<Double> uPrices1; // example: ChipIssueValueBuilder<Double>().addIssue("Green", 1.0).addIssue("Yellow", 0.8).addIssue("Orange", 0.75).build();
40 ChipIssueValue<Integer> deviations1; // example: {Yellow=1, Orange=10, Green=1}
41 ChipIssueValue<Double[]> prices2; // example: { Yellow={5.0, 5.2, 6.2, 8.0} Orange={1.0, 1.8, 2.5, 3.0} Green={3.0, 3.5, 4.8, 5.0} }
42 ChipIssueValue<Double[]> uPrices2; // example: { Yellow={0.8, 0.1} Orange={0.9, 0.3} Green={0.7, 0.2} }
43 ChipIssueValue<Double[]> deviations2; // example: { Yellow={50.0, 30.0, 30.0, 50.0} Orange={200.0, 40.0, 60.0, 1000.0} Green={100.0, 20.0, 50.0, 500.0} }
44 ChipIssueValue<Double[]> uDev2; // example: { Yellow={0.3, 0.7, 0.7, 0.3} Orange={0.15, 0.95, 0.85, 0.3} Green={0.25, 0.8, 0.9, 0.1} }
45 ChipIssueValue<Integer[]> deviations3; // example: { Yellow={3, 2, 2, 3} Orange={10, 2, 5, 10} Green={2, 1, 2, 3} }
46 ChipIssueValue<Double> wC; // example: {Yellow=0.3, Orange=0.2, Green=0.5}
47 double wP; // example: 0.6;
48 double wQ; // example: 0.4;
49 boolean pVq; // example: true; true, if less price is more important; false, if close to quantity is important.
50 int m; // example: 4; input Bezier points
51
52 UtilityFunction u = null;
53
54 public UF (
55 WishList wish,
56 ChipIssueValue<Double> breakEvenP,
57 ChipIssueValue<Double[]> pr1,
58 ChipIssueValue<Double> uPr1,
59 ChipIssueValue<Integer> dev1,
60 ChipIssueValue<Double[]> pr2,
61 ChipIssueValue<Double[]> uPr2,
62 ChipIssueValue<Double[]> dev2,
63 ChipIssueValue<Double[]> uDv2,
64 ChipIssueValue<Integer[]> dev3,
65 ChipIssueValue<Double> c,
66 double p,
67 double q,
68 boolean pq,
69 int n
70 )
71 {
72 wishlist = wish;
73 breakEvenPrices = breakEvenP;
74 prices1 = pr1;
75 uPrices1 = uPr1;
76 deviations1 = dev1;
77 prices2 = pr2;
78 uPrices2 = uPr2;
79 deviations2 = dev2;
80 uDev2 = uDv2;
81 deviations3 = dev3;
82 wC = c;
83 wP = p;
84 wQ = q;
85 pVq = pq;
86 m = n;
87 }
88
89 @Override
90 public Double getUtility(Bundle b)
91 {
92 // boolean priceVSQuantity = ((new Random().nextInt(2)+1 == 1) ? true : false);
93 switch(new Random().nextInt(9)+1)
94 {
95 case 1: u = new UF_CloseToQuantity(wishlist); break;
96 case 2: u = new UF_LessPrice(wishlist, breakEvenPrices); break;
97 case 3: u = new UF_LessPriceCloseToQuantity(wishlist, breakEvenPrices); break;
98 case 4: u = new UF_IntensifiedLessPriceCloseToQuantity(wishlist, breakEvenPrices, pVq); break;
99 case 5: u = new UF_PeakedPricePeakedQuantity(wishlist, breakEvenPrices, deviations1, wC, wP, wQ); break;
100 case 6: u = new UF_PeakedFlatPricePeakedFlatQuantity(wishlist, deviations2, uDev2, prices2, uPrices2, wC, wP, wQ); break;
101 case 7: u = new UF_PeakedFlatCurvePriceGaussianQuantity<Double>(wishlist, prices1, uPrices1, deviations1, wC, wP, wQ); break;
102 case 8: u = new UF_BezierPriceBezierQuantity<Double> (wishlist, m, prices2, deviations3, wC, wP, wQ); break;
103 case 9: u = new UF_BezierPriceGaussianQuantity<Double> (wishlist, m, prices2, deviations1, wC, wP, wQ); break;
104 }
105 return u.getUtility(b);
106 }
107
108 @Override
109 public String toString()
110 {
111 return u.toString();
112 }
113
114// public static void main(String[] args)
115// {
116// System.out.println(u.getClass().getName());
117// }
118
119}
Note: See TracBrowser for help on using the repository browser.