1 | package parties.in4010.q12015.group10;
|
---|
2 |
|
---|
3 | import genius.core.timeline.TimeLineInfo;
|
---|
4 |
|
---|
5 | public class OpponentModelEstimator {
|
---|
6 |
|
---|
7 | public static void updateAllModels(Opponent[] opponents,
|
---|
8 | TimeLineInfo timeline) {
|
---|
9 |
|
---|
10 | double weightIncrement = 0.1;
|
---|
11 | // for every opponent: update the model
|
---|
12 | for (int opponentNumber = 0; opponentNumber < opponents.length; opponentNumber++) {
|
---|
13 |
|
---|
14 | int totalNumberOfValues = opponents[opponentNumber].getListSize();
|
---|
15 | int numberOfIssues = opponents[opponentNumber]
|
---|
16 | .getEstimatedUtilitySpace().getNrOfEvaluators();
|
---|
17 | double[] weights = new double[numberOfIssues];
|
---|
18 | double[] valueValue = new double[totalNumberOfValues];
|
---|
19 |
|
---|
20 | // define new weight:
|
---|
21 | // weight = previous weight + (increment if value has not changed)
|
---|
22 | // Normalize weights
|
---|
23 | double sumWeight = 0;
|
---|
24 | for (int issueIndex = 0; issueIndex < numberOfIssues; issueIndex++) {
|
---|
25 | weights[issueIndex] = opponents[opponentNumber].getEvaluator(
|
---|
26 | issueIndex).getWeight();
|
---|
27 | if (opponents[opponentNumber].IssueUnChanged(issueIndex)) {
|
---|
28 | weights[issueIndex] = weights[issueIndex] + weightIncrement;
|
---|
29 | }
|
---|
30 | sumWeight = sumWeight + weights[issueIndex];
|
---|
31 | }
|
---|
32 | // normalize weights
|
---|
33 | for (int issueIndex = 0; issueIndex < numberOfIssues; issueIndex++) {
|
---|
34 | weights[issueIndex] = weights[issueIndex] / sumWeight;
|
---|
35 | opponents[opponentNumber].setWeightAtIndex(issueIndex,
|
---|
36 | weights[issueIndex]);
|
---|
37 | }
|
---|
38 |
|
---|
39 | // Value "values" are calculated as follows:
|
---|
40 | // valueValue = (value frequency )/ (max frequency of this issue)
|
---|
41 | // or do the same as with the weights: if value is chosen, do plus
|
---|
42 | // 0.1, and divide by the maximum
|
---|
43 | int parIssueIndex;
|
---|
44 | for (int listIndex = 0; listIndex < totalNumberOfValues; listIndex++) {
|
---|
45 | parIssueIndex = opponents[opponentNumber]
|
---|
46 | .getIssueIndexFromListIndex(listIndex);
|
---|
47 | valueValue[listIndex] = opponents[opponentNumber]
|
---|
48 | .getValueFreq(listIndex);
|
---|
49 | if (opponents[opponentNumber].getIssueMaxFreq(parIssueIndex) == 0) {
|
---|
50 | valueValue[listIndex] = 1;
|
---|
51 | } else {
|
---|
52 | valueValue[listIndex] = valueValue[listIndex]
|
---|
53 | / opponents[opponentNumber]
|
---|
54 | .getIssueMaxFreq(parIssueIndex);
|
---|
55 | }
|
---|
56 | opponents[opponentNumber].setValueValueAtIndex(parIssueIndex,
|
---|
57 | listIndex, valueValue[listIndex]);
|
---|
58 | opponents[opponentNumber].setValueValueListAtIndex(listIndex,
|
---|
59 | valueValue[listIndex]);
|
---|
60 | }
|
---|
61 | }
|
---|
62 |
|
---|
63 | }
|
---|
64 |
|
---|
65 | } |
---|