source: src/main/java/agents/anac/y2019/agentperaltav2/ConstraintsTable.java@ 204

Last change on this file since 204 was 204, checked in by Katsuhide Fujita, 5 years ago

Fixed errors of ANAC2019 agents

  • Property svn:executable set to *
File size: 4.5 KB
Line 
1package agents.anac.y2019.agentperaltav2;
2
3import java.util.ArrayList;
4import java.util.HashMap;
5import java.util.List;
6import java.util.Map;
7
8import agents.anac.y2019.agentperaltav2.it.ssc.pl.milp.ConsType;
9import genius.core.Bid;
10import genius.core.issue.Value;
11
12
13
14
15public 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}
Note: See TracBrowser for help on using the repository browser.