1 | package agents.anac.y2019.agentperaltav2;
|
---|
2 |
|
---|
3 | import java.util.ArrayList;
|
---|
4 | import java.util.HashMap;
|
---|
5 | import java.util.List;
|
---|
6 | import java.util.Map;
|
---|
7 |
|
---|
8 | import agents.anac.y2019.agentperaltav2.it.ssc.pl.milp.ConsType;
|
---|
9 | import genius.core.Bid;
|
---|
10 | import genius.core.issue.Value;
|
---|
11 |
|
---|
12 |
|
---|
13 |
|
---|
14 |
|
---|
15 | public class ConstraintsTable {
|
---|
16 | public ArrayList <Value> valueList = new ArrayList<Value>();
|
---|
17 | public double[][] constraintLeftSide;
|
---|
18 | public double[] constraintRightSide;
|
---|
19 | public double[] objectiveFunc;
|
---|
20 | public ConsType[] constraintOperator;
|
---|
21 | public double[] simplexResults;
|
---|
22 |
|
---|
23 | public ConstraintsTable() {
|
---|
24 | }
|
---|
25 |
|
---|
26 | public void estimateSides(List<Bid> bidOrder) throws Exception {
|
---|
27 | HashMap<Integer, Value> map = new HashMap<Integer, Value>();
|
---|
28 | map = bidOrder.get(0).getValues();
|
---|
29 | Value[][] nameValues = new Value[bidOrder.size()][map.size()];
|
---|
30 | Double [] pointValues = new Double[bidOrder.size()];
|
---|
31 | //System.out.println("to megethos einai:"+bidOrder.size());
|
---|
32 | for(int k=0;k<bidOrder.size();k++) {
|
---|
33 | map = bidOrder.get(k).getValues();
|
---|
34 | int[] keys = new int[map.size()];
|
---|
35 | Value[] values = new Value[map.size()];
|
---|
36 | int i=0;
|
---|
37 | for (Map.Entry<Integer, Value> entry : map.entrySet()) {
|
---|
38 | keys[i] = entry.getKey();
|
---|
39 | values[i++] = entry.getValue();
|
---|
40 | }
|
---|
41 | pointValues[k] = (double)k;
|
---|
42 | for (i = 0; i < map.size(); i++) {
|
---|
43 | nameValues[k][i] = values[i];
|
---|
44 | }
|
---|
45 | }
|
---|
46 | valueList.add(nameValues[0][0]);
|
---|
47 | for (int j=0;j<map.size();j++) {
|
---|
48 | for (int i=0;i<bidOrder.size();i++) {
|
---|
49 | if(!valueList.contains(nameValues[i][j])) {
|
---|
50 | valueList.add(nameValues[i][j]);
|
---|
51 | }
|
---|
52 | }
|
---|
53 | }
|
---|
54 | int numOfCompares = 0;
|
---|
55 | //initialize of arrays
|
---|
56 | numOfCompares = bidOrder.size()+1;
|
---|
57 | constraintLeftSide = new double[numOfCompares][valueList.size()];
|
---|
58 | constraintRightSide = new double[numOfCompares];
|
---|
59 | objectiveFunc = new double[valueList.size()];
|
---|
60 | constraintOperator = new ConsType[numOfCompares];
|
---|
61 | simplexResults = new double[valueList.size()];
|
---|
62 | for (int i=0; i<numOfCompares; i++) {
|
---|
63 | constraintRightSide[i]=0;
|
---|
64 | constraintOperator[i] = ConsType.GE;
|
---|
65 | if (i == numOfCompares-2|| i==numOfCompares-1) {
|
---|
66 | constraintRightSide[i] = 1;
|
---|
67 | constraintOperator[i] = ConsType.EQ;
|
---|
68 | }
|
---|
69 | for (int j=0; j<valueList.size(); j++) {
|
---|
70 | constraintLeftSide[i][j] = 0;
|
---|
71 | objectiveFunc[j] = 0;
|
---|
72 | simplexResults[j] = 0;
|
---|
73 | }
|
---|
74 | }
|
---|
75 |
|
---|
76 | for (int i=numOfCompares-2; i>=1; i--) {
|
---|
77 | for (int j=0; j<map.size(); j++) {
|
---|
78 | if (nameValues[i][j] == nameValues[i-1][j]) {
|
---|
79 | for (int k=0; k<valueList.size(); k++) {
|
---|
80 | if (nameValues[i][j]==valueList.get(k)) {
|
---|
81 | constraintLeftSide[i-1][k] = 0;
|
---|
82 | }
|
---|
83 | }
|
---|
84 | }
|
---|
85 | else if(nameValues[i][j] != nameValues[i-1][j]) {
|
---|
86 | for (int k=0; k<valueList.size(); k++) {
|
---|
87 | if (nameValues[i][j]==valueList.get(k)) {
|
---|
88 | constraintLeftSide[i-1][k] = 1;
|
---|
89 | }
|
---|
90 | if (nameValues[i-1][j]==valueList.get(k)) {
|
---|
91 | constraintLeftSide[i-1][k] = -1;
|
---|
92 | }
|
---|
93 | }
|
---|
94 |
|
---|
95 | }
|
---|
96 | }
|
---|
97 | }
|
---|
98 | for (int j=0; j<map.size(); j++) {
|
---|
99 | for (int k=0; k<valueList.size(); k++) {
|
---|
100 | if (nameValues[bidOrder.size()-1][j]==valueList.get(k)) {
|
---|
101 | constraintLeftSide[numOfCompares-1][k] = 1;
|
---|
102 | }
|
---|
103 | }
|
---|
104 | }
|
---|
105 |
|
---|
106 | for (int i=0;i<numOfCompares-2;i++) {
|
---|
107 | for (int j =0; j<valueList.size();j++) {
|
---|
108 | constraintLeftSide[numOfCompares-2][j] = constraintLeftSide[numOfCompares-2][j]+constraintLeftSide[i][j];
|
---|
109 | }
|
---|
110 | }
|
---|
111 |
|
---|
112 | /*for (int i=0;i<valueList.size();i++) {
|
---|
113 | System.out.println("to "+valueList.get(i)+" exei arithmo:" +i);
|
---|
114 | }
|
---|
115 | for (int i=0;i<numOfCompares;i++) {
|
---|
116 | for (int j =0; j<valueList.size();j++) {
|
---|
117 | //System.out.println("{"+objectiveFunc[j]+"}");
|
---|
118 | System.out.print(""+constraintLeftSide[i][j]+", ");
|
---|
119 | }
|
---|
120 | System.out.println("");
|
---|
121 | }*/
|
---|
122 |
|
---|
123 | MySimplex mySimplex = new MySimplex();
|
---|
124 | mySimplex.RunSimplexAlgorithm(constraintLeftSide,constraintRightSide,objectiveFunc,constraintOperator);
|
---|
125 | simplexResults = mySimplex.d.clone();
|
---|
126 |
|
---|
127 |
|
---|
128 | }
|
---|
129 |
|
---|
130 |
|
---|
131 | public double estimateUtilityBid(Bid receivedBid){
|
---|
132 | HashMap<Integer, Value> map = new HashMap<Integer, Value>();
|
---|
133 | map = receivedBid.getValues();
|
---|
134 | int[] keys = new int[map.size()];
|
---|
135 | Value[] values = new Value[map.size()];
|
---|
136 | int i=0;
|
---|
137 | for (Map.Entry<Integer, Value> entry : map.entrySet()) {
|
---|
138 | keys[i] = entry.getKey();
|
---|
139 | values[i++] = entry.getValue();
|
---|
140 | }
|
---|
141 | double bidUtility = 0;
|
---|
142 | for (int j=0; j<map.size();j++) {
|
---|
143 | if (valueList.contains(values[j])) {
|
---|
144 | bidUtility = bidUtility + simplexResults[valueList.indexOf(values[j])];
|
---|
145 | }
|
---|
146 | }
|
---|
147 | return bidUtility;
|
---|
148 |
|
---|
149 | }
|
---|
150 |
|
---|
151 | }
|
---|