source: src/main/java/agents/anac/y2015/pnegotiator/BestBids.java@ 345

Last change on this file since 345 was 1, checked in by Wouter Pasman, 6 years ago

Initial import : Genius 9.0.0

File size: 4.6 KB
Line 
1package agents.anac.y2015.pnegotiator;
2
3import java.util.Arrays;
4import java.util.Random;
5
6import genius.core.Bid;
7import genius.core.issue.IssueDiscrete;
8import genius.core.issue.ValueDiscrete;
9import genius.core.utility.AdditiveUtilitySpace;
10import genius.core.utility.EvaluatorDiscrete;
11
12/**
13 * Created by chad on 2/27/15.
14 */
15public class BestBids {
16 // private Bid minBid;
17 // private ArrayList<Tuple<Bid,Double>> preferredBids;
18
19 int[] iprefs;
20 ValueDiscrete[][] vs;
21 int[][] vprefs;
22
23 AdditiveUtilitySpace utilitySpace;
24
25 public BestBids(AdditiveUtilitySpace utilitySpace) {
26 this.utilitySpace = utilitySpace;
27 try {
28 this.genIssuePreferenceOrder();
29 } catch (Exception e) {
30 e.printStackTrace();
31 }
32 }
33
34 private void genIssuePreferenceOrder() throws Exception {
35 int N = utilitySpace.getDomain().getIssues().size();
36 Tuple<Integer, Double> issues[] = new Tuple[N];
37 iprefs = new int[N];
38 vprefs = new int[N][];
39 vs = new ValueDiscrete[N][];
40 for (int i = 0; i < N; i++) {
41 IssueDiscrete di = (IssueDiscrete) utilitySpace.getDomain()
42 .getIssues().get(i);
43 EvaluatorDiscrete de = (EvaluatorDiscrete) utilitySpace
44 .getEvaluator(i + 1);
45 issues[i] = new Tuple<Integer, Double>(i, de.getWeight());
46 int M = di.getNumberOfValues();
47 Tuple<Integer, Double> values[] = new Tuple[M];
48 vs[i] = new ValueDiscrete[M];
49 for (int j = 0; j < M; j++) {
50 double w = de.getEvaluation(di.getValue(j));
51 values[j] = new Tuple<Integer, Double>(j, w);
52 vs[i][j] = di.getValue(j);
53 }
54 Arrays.sort(values);
55 vprefs[i] = new int[M];
56 for (int k = 0; k < M; k++)
57 vprefs[i][k] = values[k].key;
58 }
59 Arrays.sort(issues);
60 for (int i = 0; i < N; i++)
61 iprefs[i] = issues[i].key;
62 }
63
64 public int getValue(int issue, ValueDiscrete v) {
65 for (int j = 0; j < vs[issue].length; j++) {
66 if (vs[issue][j] == v)
67 return j;
68 }
69 return -1;
70 }
71
72 private static <T> int indexOf(int[] arr, int item) {
73 for (int i = 0; i < arr.length; i++) {
74 if (arr[i] == item)
75 return i;
76 }
77 return -1;
78 }
79
80 public Bid getRandomBid(Bid r, Random rand, double minValue, double maxValue)
81 throws Exception {
82 Bid b = new Bid(r);
83 int N = iprefs.length;
84 // int[] vs = new int[N];
85 // for(int i = 0; i < N; i++)
86 // vs[iprefs[i]] = getValue(i, (ValueDiscrete)b.getValue(i));
87 double U = utilitySpace.getUtility(b);
88 System.out.println(Arrays.toString(iprefs));
89 int t = 0;
90 while (U < minValue || U >= maxValue) {
91 t++;
92 if (t > 100)
93 break;
94 // System.out.println(U);
95 int ri = rand.nextInt(N);// .get((int)((1.-rand.nextDouble()*rand.nextDouble())*(available.size()-1)));
96 int rI = iprefs[ri];
97 int v = getValue(rI, (ValueDiscrete) b.getValue(rI + 1));
98 int V = indexOf(vprefs[rI], v);
99 int M = vprefs[rI].length;
100 if (U < minValue) { // increase the preference of an issue to the
101 // next highest level
102 if (V >= M - 1) {
103 continue;
104 }
105 // System.out.format("%d %d %d", vs[ri].length,
106 // vprefs[ri].length, V+1);
107 // System.out.println(vs[ri][vprefs[ri][V+1]]);
108 b = b.putValue(rI + 1, vs[rI][vprefs[rI][V + 1]]);
109 } else if (U >= maxValue) { // decrease the preference of an issue
110 // to the next lowest level
111 if (V <= 0) {
112 continue;
113 }
114 b = b.putValue(rI + 1, vs[rI][vprefs[rI][V - 1]]);
115 }
116 U = utilitySpace.getUtility(b);
117 }
118 return b;
119 // return preferredBids.get(rand.nextInt(preferredBids.size())).key;
120 }
121
122 // public Bid getMinBid() {
123 // if(minBid == null) {
124 // minBid = Collections.min(preferredBids).key;
125 // }
126 // return minBid;
127 // }
128
129 // public void genPreferredBids(int count) throws Exception {
130 // Bid best = utilitySpace.getMaxUtilityBid();
131 // genIssuePreferenceOrder();
132 // System.out.println(Arrays.toString(iprefs));
133 // System.out.println(Arrays.toString(vprefs));
134 // maxCount = count;
135 // preferredBids = genBids(best, 0);
136 // }
137
138 // int maxCount;
139 // int count = 0;
140 // private ArrayList<Tuple<Bid,Double>> genBids(Bid b, int i) throws
141 // Exception {
142 // ArrayList<Tuple<Bid,Double>> bids = new ArrayList<Tuple<Bid,Double>>();
143 // int I = iprefs[i];
144 // int M = vprefs[I].length;
145 // if(i < iprefs.length-1) {
146 // for(int j = M-1; j >= 0 && count < maxCount; j--) {
147 // Bid b1 = new Bid(b);
148 // Value v =
149 // ((IssueDiscrete)utilitySpace.getDomain().getIssue(I)).getValue(vprefs[I][j]);
150 // b1.setValue(I+1,v);
151 // bids.addAll(genBids(b1, i + 1));
152 // }
153 // }
154 // else {
155 // for(int j = M-1; j >= 0 && count < maxCount; j--) {
156 // Bid b1 = new Bid(b);
157 // Value v =
158 // ((IssueDiscrete)utilitySpace.getDomain().getIssue(I)).getValue(vprefs[I][j]);
159 // b1.setValue(I+1,v);
160 // bids.add(new Tuple<Bid,Double>(b1,utilitySpace.getUtility(b1)));
161 // count++;
162 // }
163 // }
164 // return bids;
165 // }
166}
Note: See TracBrowser for help on using the repository browser.