GameMaster.java: Difference between revisions
From Santa Fe Institute Events Wiki
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[Base model]] | |||
<pre> | |||
/* | /* | ||
* GameMaster.java | * GameMaster.java | ||
Line 141: | Line 143: | ||
} | } | ||
</pre> |
Latest revision as of 04:02, 16 June 2006
/* * GameMaster.java * * Created on June 13 2006 * Last Modified June 14 2006 * * This class oversees games played between agents */ package CoopNetBlue; import uchicago.src.sim.gui.NetworkDrawable; import uchicago.src.sim.network.DefaultDrawableNode; import uchicago.src.sim.gui.DrawableNonGridNode; import uchicago.src.sim.util.Random; import uchicago.src.sim.gui.OvalNetworkItem; import java.awt.Color; import uchicago.src.sim.gui.ColorMap; import uchicago.src.sim.engine.CustomProbeable; import java.util.ArrayList; /** * * @author Jack Waddell * * */ // GameMaster Constructor public class GameMaster { // GUIModel: Stores the model class that runs the graphics public static GUIModel guiModel = null; // model: stores the base model public static CoopNetBlue model; // agentList: Stores a pointer to the agents list public ArrayList<CustomNode> agentList; public GameMaster (ArrayList agentList) { // If the agent list pointer is sent from CoopNetBlue // then changing the list here changes it there as well. this.agentList = agentList; } //////////////////////////////////////////////////////////// // playPair // Inputs: nodei, nodej // Output: none // Plays a game between two nodes nodei, nodej (symmetric) public void playPair(CustomNode nodei, CustomNode nodej){ if (nodei.getUtility() > 0 & nodej.getUtility() > 0 ){ // Dumb game. Flip a coin. double randn = model.getUniformDoubleFromTo(0,1); if (randn < 0.5){ nodei.incUtility(); nodej.decUtility(); } else{ nodej.incUtility(); nodei.decUtility(); } } } ///////////////////////////////////////////////////////////// // playAll // Inputs: none // Output: none // Traverses the agent list, playing a game once between // all pairs of neighbors on the network. public void playAll(){ //for (CustomNode nodej : agentList){ CustomNode nodei, nodej; // Traverse the agent list for (int i = 0; i < agentList.size(); i++){ nodei = agentList.get(i); // Get current node's neighbors: symmetric network // means that out neighbors are just neighbors. ArrayList<CustomNode> neighbors = nodei.getOutNodes(); for (int j = 0; j < neighbors.size(); j++){ nodej = neighbors.get(j); // To ensure game played once between each pair // only play in one direction. if (nodej.getID() < nodei.getID()) playPair(nodej, nodei); } } } ////////////////////////////////////////////////////////////// // evolveAgents // Inputs: none // Output: none public void evolveAgents(){ // Need this to draw the node in the graphics mode. OvalNetworkItem drawable = new OvalNetworkItem(0,0); int i=0,j=1; // These will be two random values, unequal CustomNode nodei, nodej; int numAgents = agentList.size(); do{ i = model.getUniformIntFromTo(0, numAgents-1); j = model.getUniformIntFromTo(0, numAgents-1); nodei = agentList.get(i); nodej = agentList.get(j); } while (nodei.getUtility() == nodej.getUtility()); // This makes sure that there are no ties, and also that // i and j are different. CustomNode winner, loser; // Find which wins if (nodei.getUtility() > nodej.getUtility()){ winner = nodei; loser = nodej; } else{ loser = nodei; winner = nodej; } winner.bearChild(); loser.die(); } //*********************************************************** // Getters and Setters public static void setModel(CoopNetBlue m) {model = m;} public static void setGUIModel(GUIModel m) {guiModel = m;} }