source: src/main/java/bargainingchips/utilityfunctions/UF_LessPriceCloseToQuantity.java@ 339

Last change on this file since 339 was 338, checked in by Faria Nassiri Mofakham, 5 years ago

An extended version of Buyer (BuyerExtended), which can be constructed using one among many utility functions. UF_LessPrice and seven complex utility functions based on price+quantity and two types of weights: UF_LessPriceCloseToQuantity, UF_IntensifiedLessPriceCloseToQuantity, UF_PeakedPricePeakedQuantity, UF_PeakedFlatPricePeakedFlatQuantity, UF_PeakedFlatCurvePriceGaussianQuantity, UF_BezierPriceBezierQuantity, and UF_BezierPriceGaussianQuantity. Two more fundamental helper classes: ChipIssueValue, ChipIssueValueBuilder. Adding a validity check to Stack. An update in Bundle main. Adding getSampleBid function to Bid. An update in k variable in Agent. A UF class and UtilityHelperMethods for individual passing utility functions. Adding some more tests in UF_CloseToQuantity main. An update on BundleTest.

File size: 5.1 KB
RevLine 
[338]1/**
2 *
3 */
4package bargainingchips.utilityfunctions;
5
6import bargainingchips.Bundle;
7import bargainingchips.BundleBuilder;
8import bargainingchips.Chip;
9import bargainingchips.ChipIssueValue;
10import bargainingchips.ChipIssueValueBuilder;
11import bargainingchips.WishList;
12import bargainingchips.WishListBuilder;
13
14/**
15 *
16 * This utility function evaluates the utility of an offer based on its separate utilities regarding the ratio of its total price {@link UF_LessPrice}
17 * with respect to the break even prices as well as the total deviation of the chips quantities {@link UF_CloseToQuantity} by considering the importance of price vs. quantity.
18 * It calculates two separate utility functions uP for total offered vs. desired prices as well as uQ for total offered vs desired quantities.
19 * The utility of the offered bundle is then is calculated by uP * uQ (dependent values).
20 *
21 *
22 * @author Faria Nassiri-Mofakham
23 *
24 */
25public class UF_LessPriceCloseToQuantity implements UtilityFunction {
26
27 private WishList wishlist;
28 private ChipIssueValue<Double> breakEvenPrices;
29
30
31 public UF_LessPriceCloseToQuantity(WishList w, ChipIssueValue<Double> bEP)
32 {
33 this.wishlist = w;
34 this.breakEvenPrices = bEP;
35 }
36
37
38 @Override
39 public Double getUtility(Bundle b)
40 {
41 int totalDeviationQ = 0;
42 double desiredP=0.0;
43 for (Chip c : wishlist)
44 {
45 int desiredQ = wishlist.getQuantity(c);
46 Integer offeredQ = b.getQuantity(c);
47 if (offeredQ == null)
48 offeredQ = 0;
49
50 int deviationOfferedQ = Math.abs(desiredQ - offeredQ);
51 totalDeviationQ += deviationOfferedQ;
52
53 desiredP += ((c!=null) ? breakEvenPrices.getUnitValue(c) : 0.0);
54 }
55 double offeredP = ((b!=null) ? b.getTotalPrice() : 0.0);
56 if (offeredP > desiredP)
57 {
58 //System.out.println("offeredPrice "+ offeredP + " > desiredPrice "+ desiredP);
59 return 0.0;
60 }
61 double uP = 1.0 - offeredP/desiredP;
62 double uQ = 1.0 / (1 + totalDeviationQ);
63
64 //System.out.println("uP "+uP+"\n"+"uQ "+uQ);
65
66 double u = uP * uQ;
67 return ( Double.isNaN(u)? 0.0 : ( (u>1) ? 1 : ( u < 0) ? 0 : u));
68 }
69
70 @Override
71 public String toString()
72 {
73 return this.getClass().getSimpleName() + ": WishList " + wishlist.toString() + ": BreakEvenPrices "+ breakEvenPrices.toString();
74 }
75
76 public static void main(String[] args)
77 {
78
79 WishList wishlist1 = new WishListBuilder().addWish("Red", 7).addWish("Green", 5).build();
80 ChipIssueValue<Double> prices1 = new ChipIssueValueBuilder<Double>().addIssue("Red", 100.0).addIssue("Green", 200.0).addIssue("Blue", 700.0).build();
81
82 UF_LessPriceCloseToQuantity u1 = new UF_LessPriceCloseToQuantity(wishlist1, prices1);
83
84
85
86 WishList wishlist2 = new WishListBuilder().addWish("Red", 7).addWish("Green", 5).build();
87 ChipIssueValue<Double> prices2 = new ChipIssueValueBuilder<Double>().addIssue("Red", 10.0).addIssue("Green", 20.0).addIssue("Blue", 70.0).build();
88
89 UF_LessPriceCloseToQuantity u2 = new UF_LessPriceCloseToQuantity(wishlist2, prices2);
90
91
92
93 WishList wishlist3 = new WishListBuilder().addWish("Green", 4).addWish("Yellow", 6).addWish("Orange", 40).build();
94 ChipIssueValue<Double> prices3 = new ChipIssueValueBuilder<Double>().addIssue("Green", 3.0).addIssue("Yellow", 5.0).addIssue("Orange", 1.0).build();
95
96 UF_LessPriceCloseToQuantity u3 = new UF_LessPriceCloseToQuantity(wishlist3, prices3);
97
98
99
100 Bundle offer1 = new BundleBuilder()
101 .addStack("Red", 1.0, 6)
102 .addStack("Green", 3.0, 15)
103 .addStack("Purple", 0.10, 10)
104 .build();
105
106 Bundle offer2 = new BundleBuilder()
107 .addStack("Red", 1.0, 1)
108 .addStack("Green", 3.0, 1)
109 .addStack("Purple", 0.10, 1)
110 .build();
111
112 Bundle offer3 = new BundleBuilder()
113 // .addStack("Green", 2.0, 3)
114 // .addStack("Yellow", 5.0, 4)
115 // .addStack("Orange", 1.0, 17)
116 //---
117 .addStack("Green", 3.0, 4)
118 .addStack("Yellow", 5.0, 6)
119 .addStack("Orange", 1.0, 40)
120 //---
121 // .addStack("Green", 10.0, 1)
122 // .addStack("Yellow", 10.0, 1)
123 // .addStack("Orange", 10.0, 1)
124 .build();
125
126 System.out.println("\nu1 : "+u1 +"\nOffer1 = "+offer1);
127 System.out.println("=> "+u1.getUtility(offer1));
128 System.out.println("\nu1 : "+u1 +"\nOffer2 = "+offer2);
129 System.out.println("=> "+u1.getUtility(offer2));
130 System.out.println("\nu1 : "+u1 +"\nOffer3 = "+offer3);
131 System.out.println("=> "+u1.getUtility(offer3));
132
133 System.out.println("\nu2 : "+u2 +"\nOffer1 = "+offer1);
134 System.out.println("=> "+u2.getUtility(offer1));
135 System.out.println("\nu2 : "+u2 +"\nOffer2 = "+offer2);
136 System.out.println("=> "+u2.getUtility(offer2));
137 System.out.println("\nu2 : "+u2 +"\nOffer3 = "+offer3);
138 System.out.println("=> "+u2.getUtility(offer3));
139
140
141 System.out.println("\nu3 : "+u3 +"\nOffer1 = "+offer1);
142 System.out.println("=> "+u3.getUtility(offer1));
143 System.out.println("\nu3 : "+u3 +"\nOffer2 = "+offer2);
144 System.out.println("=> "+u3.getUtility(offer2));
145 System.out.println("\nu3 : "+u3 +"\nOffer3 = "+offer3);
146 System.out.println("=> "+u3.getUtility(offer3));
147
148
149 }
150
151}
Note: See TracBrowser for help on using the repository browser.