source: src/main/java/agents/anac/y2013/MetaAgent/AgentManager.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: 6.4 KB
Line 
1package agents.anac.y2013.MetaAgent;
2
3import java.io.Serializable;
4import java.util.AbstractMap.SimpleEntry;
5import java.util.HashMap;
6import java.util.Set;
7
8import agents.anac.y2013.MetaAgent.agentsData.AgentData;
9import agents.anac.y2013.MetaAgent.agentsData.agents.DataAgentLG;
10import agents.anac.y2013.MetaAgent.agentsData.agents.DataBRAMAgent2;
11import agents.anac.y2013.MetaAgent.agentsData.agents.DataCUHKAgent;
12import agents.anac.y2013.MetaAgent.agentsData.agents.DataIAMhaggler2012;
13import agents.anac.y2013.MetaAgent.agentsData.agents.DataOMACagent;
14import agents.anac.y2013.MetaAgent.agentsData.agents.DataTheNegotiatorReloaded;
15import agents.anac.y2013.MetaAgent.portfolio.AgentLG.*;
16import agents.anac.y2013.MetaAgent.portfolio.AgentMR.*;
17import agents.anac.y2013.MetaAgent.portfolio.BRAMAgent2.*;
18import agents.anac.y2013.MetaAgent.portfolio.CUHKAgent.*;
19import agents.anac.y2013.MetaAgent.portfolio.IAMhaggler2012.*;
20import agents.anac.y2013.MetaAgent.portfolio.OMACagent.*;
21import agents.anac.y2013.MetaAgent.portfolio.thenegotiatorreloaded.*;
22import genius.core.*;
23
24
25@SuppressWarnings("serial")
26public class AgentManager implements Serializable{
27 HashMap<String, SimpleEntry<Integer, SimpleEntry<Double, Double>>> agents; //<Agent name, <countUsages, predictedScore>>
28 int playsCount = 0;
29 int predictionFactor = 5;
30 String selectedAgent = "";
31 SimpleEntry<Integer, SimpleEntry<Double, Double>> selectedInfo = new SimpleEntry<Integer, SimpleEntry<Double, Double>>(0,new SimpleEntry<Double, Double>(0.0,0.0)); //<counter,predicted,previousScores>
32 double averageUtility = 0;
33 double stdev = 0;
34
35 public AgentManager(){
36 agents = new HashMap<String, SimpleEntry<Integer, SimpleEntry<Double, Double>>>();
37 agents.put("AgentLG", new SimpleEntry<Integer, SimpleEntry<Double, Double>>(0,new SimpleEntry<Double, Double>(0.0,0.0)));
38 //agents.put("AgentMR", new SimpleEntry<Integer, Double>(0, 0.0));
39 agents.put("BRAMAgent2", new SimpleEntry<Integer, SimpleEntry<Double, Double>>(0,new SimpleEntry<Double, Double>(0.0,0.0)));
40 agents.put("CUHKAgent", new SimpleEntry<Integer, SimpleEntry<Double, Double>>(0,new SimpleEntry<Double, Double>(0.0,0.0)));
41 agents.put("IAMhaggler2012", new SimpleEntry<Integer, SimpleEntry<Double, Double>>(0,new SimpleEntry<Double, Double>(0.0,0.0)));
42 agents.put("OMACagent", new SimpleEntry<Integer, SimpleEntry<Double, Double>>(0,new SimpleEntry<Double, Double>(0.0,0.0)));
43 agents.put("TheNegotiatorReloaded", new SimpleEntry<Integer, SimpleEntry<Double, Double>>(0,new SimpleEntry<Double, Double>(0.0,0.0)));
44
45 }
46
47 private Agent GetAgent(String name){
48
49 if (name.equalsIgnoreCase("AgentLG")) return new AgentLG();
50 else if (name.equalsIgnoreCase("AgentMR")) return new AgentMR();
51 else if (name.equalsIgnoreCase("BRAMAgent2")) return new BRAMAgent2();
52 else if (name.equalsIgnoreCase("CUHKAgent")) return new CUHKAgent();
53 else if (name.equalsIgnoreCase("IAMhaggler2012")) return new IAMhaggler2012();
54 else if (name.equalsIgnoreCase("OMACagent")) return new OMACagent();
55 else if (name.equalsIgnoreCase("TheNegotiatorReloaded")) return new TheNegotiatorReloaded();
56
57 return new CUHKAgent(); //default, as winner of 2012 contest.
58 }
59
60 public AgentData GetAgentData(String name){
61 if (name.equalsIgnoreCase("AgentLG")) return new DataAgentLG();
62 else if (name.equalsIgnoreCase("AgentMR")) return new DataAgentLG();
63 else if (name.equalsIgnoreCase("BRAMAgent2")) return new DataBRAMAgent2();
64 else if (name.equalsIgnoreCase("CUHKAgent")) return new DataCUHKAgent();
65 else if (name.equalsIgnoreCase("IAMhaggler2012")) return new DataIAMhaggler2012();
66 else if (name.equalsIgnoreCase("OMACagent")) return new DataOMACagent();
67 else if (name.equalsIgnoreCase("TheNegotiatorReloaded")) return new DataTheNegotiatorReloaded();
68
69 return new DataCUHKAgent(); //default, as winner of 2012 contest.
70 }
71
72 public Agent SelectBestAgent(){
73 String bestAgent = "";
74 double bestScore = -1;
75
76 //String fileName = "MetaAgent_Log.csv"; //need to delete!
77 //BufferedWriter out = null; //
78 //try { //
79 // FileWriter fstream = new FileWriter(fileName,true); //
80 // out = new BufferedWriter(fstream); //
81
82 for (String agent : agents.keySet()) {
83 SimpleEntry<Integer, SimpleEntry<Double, Double>> information = agents.get(agent);
84 double curr = (information.getValue().getValue()*information.getKey() + information.getValue().getKey()*predictionFactor)/(information.getKey()+predictionFactor) ;
85 double curr2 = Math.sqrt(stdev * Math.log(playsCount+agents.size()*predictionFactor)/(information.getKey()+predictionFactor)); //UCB MAB: X_j + sqrt(2ln(n)/n_j)
86 curr += curr2;
87 // out.append(agent + "," + information.getKey() + "," + information.getValue().getValue() + "," + information.getValue().getKey() + "," + curr); //
88 // out.newLine();//
89
90 if (bestScore < curr || //regular win
91 (bestScore == curr && agents.get(bestAgent).getKey() > information.getKey())){ //tieBreak - take the agent with less performances
92 bestScore = curr;
93 bestAgent = agent;
94 selectedInfo = information;
95 }
96 }
97 selectedAgent = bestAgent;
98
99
100 //System.out.println("selected Agent: " + bestAgent + " --> " + bestScore); //
101 //out.append(",,,"+bestAgent+","+bestScore); //
102 //out.newLine(); //
103
104 //} catch (Exception e) { System.out.println("Error in WriteFile: " + e.toString()); } //
105 //finally{ try { //
106 // out.close(); //
107 //} catch (Exception e2) { }} //
108
109 return GetAgent(selectedAgent);
110 }
111
112 public boolean IsUsed(){
113 return playsCount > agents.size();
114 }
115
116 public Set<String> GetAgents(){
117 return agents.keySet();
118 }
119
120 public void UpdateUtility (String agent, double util){
121 if (agent == ""){
122 selectedInfo = new SimpleEntry<Integer, SimpleEntry<Double, Double>>
123 (selectedInfo.getKey()+1, new SimpleEntry<Double, Double>
124 (selectedInfo.getValue().getKey(),
125 (selectedInfo.getValue().getValue()*selectedInfo.getKey() + util - averageUtility)/(selectedInfo.getKey() + 1)));
126 agents.put(selectedAgent, selectedInfo);
127 //averageUtility = (averageUtility * playsCount + util) / (playsCount + 1); //receiveMessage the average utility measure
128 playsCount ++;
129 }
130 else
131 {
132 SimpleEntry<Integer, SimpleEntry<Double, Double>> info = new SimpleEntry<Integer, SimpleEntry<Double, Double>>(0, new SimpleEntry<Double, Double>(util, 0.0));
133 agents.put(agent,info);
134 //System.out.println(agent + " --> " + util); //delete
135 }
136
137 }
138
139 public void SetAvgUtil (double avg, double stdev){
140 averageUtility = avg;
141 this.stdev = stdev;
142 }
143}
Note: See TracBrowser for help on using the repository browser.