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

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

BargainingChips creates bob calling BargainingBuyer. OutcomeSpace is Iterable<Bundle>, also getAllBids, getRandom, getRandom(r), getAverageUtility(u), size(), checkReadyForNegotiation, getName(), getUtility(u, b), getReservationValue(u), and getDiscountFactor added. An update on Bid getSampleBid type. An update on Agent. A history' package of BidEvent, BidEventHistory, BidEventHisoryKeeper, BidEventSortedUtility, and BidEventStrictSortedUtility added. HistoryAgent added. An analysis' package of BundleUtilityPoint, BundleUtilitySpace, and ParetoFrontier added. BargainingAgent added. TitForTatNegotiationAgent. Now, Buyer extended to BargainingBuyer which is created using Boulware or TitForTatNegotiationAgent using one among 9 utility functions. Name of strategy added toDescription in BoulwareAgent. A few small updates on several utility function classes.

File size: 2.3 KB
Line 
1package bargainingchips.utilityfunctions;
2
3import bargainingchips.Chip;
4import bargainingchips.ChipIssueValue;
5
6/**
7 *
8 * This class contains mathematical methods helping computational procedures mostly in utility functions,
9 * namely,
10 * - Bezier // mathematical curve
11 * - comb // mathematical combination
12 * - fc // mathematical factorial
13 * - uSlope // y value respected to x value at a sloped line
14 * - writeT // String list of values (e.g., prices, quantities, etc) assigned to a single variable (e.g. {@link Chip})
15 *
16 *
17 * @author Faria Nassiri-Mofakham
18 *
19 */
20
21public class UtilityHelperMethods<T>
22{
23 /**
24 * @param input parameter (e.g., an offered price per a {@link Chip},
25 * and `n' data points of type T (e.g., as of Double[], Integer[], etc).
26 *
27 * @return Bezier value of rank `n' for the offered parameter.
28 **/
29 public double bezier(T[] desired, Double offered)
30 {
31 double bez = 0.0;
32 int n= desired.length;
33 for (int i=0; i<n; i++)
34 {
35 bez = ( (offered < (double) desired[0]) ? 1.0 : ( (offered > (double) desired[n-1]) ? 0.0 : comb(n,i)*Math.pow(1-offered, n)*Math.pow(i, n)*(double)desired[i]));
36 }
37 return ( (bez>1) ? 1 : (bez<0) ? 0 : bez);
38 }
39
40 /**
41 * @return combination of `n' and `k'
42 **/
43 public int comb(int n, int k)
44 {
45 return fc(n)/(fc(n-k)*fc(k));
46 }
47
48 /**
49 * @return factorial of `n'
50 **/
51 public int fc(int n) {
52 int result = 1;
53 for (; n > 1; n--) {
54 result *= n;
55 }
56 return result;
57 }
58
59 /**
60 * @param a param and 2 data points and respected utilities, showing a sloped line
61 * @return utility of param
62 **/
63 public double uSlope(double param, T tData1, T tData2, Double uData1, Double uData2)
64 {
65 Double data1 = (Double) tData1;
66 Double data2 = (Double) tData2;
67
68 return (param-data1)*(uData1-uData2)/(data1-data2)+uData1;
69 }
70
71 /**
72 * @return an String list of values assigned to a single variable, e.g. list of quantities or prices per a {@link Chip}
73 **/
74 public String writeT(ChipIssueValue<T[]> t)
75 {
76 String s = "{";
77 T[] j;
78 for (Chip c: t)
79 {
80 s += " " + c.toString() + "={";
81 j= t.getUnitValue(c);
82 //System.out.println("j: "+j);
83 for (int k=0; k<j.length; k++)
84 s += j[k].toString()+((k<j.length-1) ? ", " : "");
85 s += "}";
86 }
87 s += " }";
88 return s;
89 }
90}
Note: See TracBrowser for help on using the repository browser.