source: src/main/java/agents/ai2014/group3/AgentUtils.java@ 126

Last change on this file since 126 was 126, checked in by Aron Hammond, 6 years ago

Added function to calculate opposition to MultiLateralAnalysis.java

Moved code to add RLBOA listeners to RLBOAUtils is misc package

Added input for strategyParameters to SessionPanel (gui)

!! close SessionInfo after tournament; this caused /tmp/ to fill up with GeniusData files

Our own package:

  • Added opponents and strategies that are mentioned in the report
  • Change class hierarchy, agents can now extend from RLBOAagentBilateral to inherit RL functionality.
  • States extend from AbstractState
File size: 4.1 KB
Line 
1package agents.ai2014.group3;
2
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.HashMap;
6import java.util.List;
7
8import genius.core.AgentID;
9import genius.core.Bid;
10import genius.core.BidHistory;
11import genius.core.issue.Issue;
12import genius.core.issue.Value;
13import genius.core.issue.ValueDiscrete;
14import genius.core.utility.EvaluatorDiscrete;
15
16public class AgentUtils {
17
18 AgentID agent;
19 BidHistory bidHistory;
20 ArrayList<EvaluatorDiscrete> issueList;
21 int nIssues;
22 int[] issueIds;
23
24 public AgentUtils(AgentID agent, BidHistory bidHistory, int nIssues) {
25 super();
26 this.agent = agent;
27 this.bidHistory = bidHistory;
28 this.nIssues = nIssues;
29 issueIds = new int[nIssues];
30 issueList = new ArrayList<EvaluatorDiscrete>();
31 for (int i = 0; i < nIssues; i++) {
32 issueList.add(new EvaluatorDiscrete());
33 }
34 }
35
36 // Calculates the utility of this bid for the Agent
37 public double getAgentUtil(Bid bid) {
38 double utility = 0;
39 // This HashMap connects the issues IDs to its values
40 HashMap<Integer, Value> bidValuesHashMap = bid.getValues();
41 for (int i = 0; i < nIssues; i++) {
42 double weight = issueList.get(i).getWeight();
43 ValueDiscrete VD = (ValueDiscrete) bidValuesHashMap
44 .get(issueIds[i]);
45 if (issueList.get(i).getValues().contains(VD))
46 utility = utility + issueList.get(i).getDoubleValue(VD)
47 * weight;
48 }
49 return utility;
50 }
51
52 // based on the most recent bids received recalculates the issue and value
53 // weights
54 public void recalculateUtilFunction() {
55 List<Issue> bidIssueList = bidHistory.getHistory().get(0).getBid()
56 .getIssues();
57 for (int i = 0; i < bidIssueList.size(); i++) {
58 issueIds[i] = bidIssueList.get(i).getNumber();
59 }
60
61 double[] bidWeights = calculateBidWeights();
62 int[] nChanges = calculateNChanges();
63
64 for (int i = 0; i < nIssues; i++) {
65 issueList.get(i).clear();
66 // First the weight of each issue
67 issueList.get(i).setWeight(calculateIssueWeight(i, nChanges));
68 ArrayList<ValueDiscrete> valueList = new ArrayList<ValueDiscrete>();
69 double[] valueEvaluation = new double[100]; // random large number,
70 // just so we don't have
71 // to use a List
72 for (int j = 0; j < bidHistory.getHistory().size(); j++) {
73 ValueDiscrete currentValue = (ValueDiscrete) bidHistory
74 .getHistory().get(j).getBid().getValues()
75 .get(bidIssueList.get(i).getNumber());
76 if (!valueList.contains(currentValue)) {
77 valueList.add(currentValue);
78 }
79 valueEvaluation[(valueList.indexOf(currentValue))] = valueEvaluation[valueList
80 .indexOf(currentValue)] + bidWeights[j];
81 }
82 int k = 0;
83 do {
84 try {
85 issueList.get(i).setEvaluationDouble(valueList.get(k),
86 valueEvaluation[k]);
87 } catch (Exception e) {
88 e.printStackTrace();
89 }
90 k++;
91 } while (valueEvaluation[k] != 0);
92 }
93 }
94
95 // Returns the number of changes in values for each issue through the entire
96 // bid history
97 private int[] calculateNChanges() {
98 int[] nChanges = new int[nIssues];
99 Arrays.fill(nChanges, 1);
100 Value oldValue = null;
101 for (int i = 0; i < nIssues; i++) {
102 for (int j = 0; j < bidHistory.getHistory().size(); j++) {
103 try {
104 if (oldValue != null
105 && !oldValue.equals(bidHistory.getHistory().get(j)
106 .getBid().getValue(issueIds[i]))) {
107 nChanges[i]++;
108 }
109 oldValue = bidHistory.getHistory().get(j).getBid()
110 .getValue(issueIds[i]);
111 } catch (Exception e) {
112 e.printStackTrace();
113 }
114
115 }
116 oldValue = null;
117 }
118 return nChanges;
119 }
120
121 // Calculates Issue i weight, based on the number of changes
122 private double calculateIssueWeight(int i, int[] nChanges) {
123 double weight = 0;
124 for (int j = 0; j < nIssues; j++) {
125 weight = weight + 1 / nChanges[j];
126 }
127 return 1 / nChanges[i] * 1 / weight;
128 }
129
130 // Gives a weight to each bid we received, the first bids are worth much
131 // more than the last ones
132 private double[] calculateBidWeights() {
133 int N = bidHistory.getHistory().size();
134 double factor = 0;
135 for (int i = 1; i <= N; i++) {
136 factor = factor + 1 / i;
137 }
138 double[] bidWeights = new double[N];
139 for (int i = 1; i <= N; i++) {
140 bidWeights[i - 1] = 1 / i * 1 / factor;
141 }
142 return bidWeights;
143 }
144
145}
Note: See TracBrowser for help on using the repository browser.