blob: 32900a2aa88010f421372cc76ddfea5ec88de425 [file] [log] [blame]
package edu.brook;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.amp.agf.IGraphicsAdapted;
import org.eclipse.amp.agf.IGraphicsAdapter;
import org.eclipse.swt.graphics.Color;
import org.eclipse.jface.viewers.IColorProvider;
import org.ascape.model.Agent;
import org.ascape.model.Cell;
import org.ascape.model.CellOccupant;
import org.ascape.model.HostCell;
import org.ascape.model.LocatedAgent;
import org.ascape.model.Scape;
import org.ascape.model.event.ScapeEvent;
import org.ascape.model.rule.Rule;
import org.ascape.model.rule.ExecuteThenUpdate;
import org.ascape.model.space.CollectionSpace;
import org.ascape.model.space.Coordinate;
import org.ascape.model.space.Coordinate2DDiscrete;
import org.ascape.model.space.Graph;
import org.ascape.model.space.Location;
import org.ascape.model.space.Singleton;
import org.ascape.runtime.NonGraphicRunner;
import org.ascape.util.Conditional;
import org.ascape.util.data.DataPoint;
import org.ascape.util.data.DataPointConcrete;
import org.ascape.util.vis.ColorFeature;
import org.ascape.util.vis.ColorFeatureConcrete;
import org.ascape.view.vis.ChartView;
import org.ascape.view.vis.GEFView;
import org.ascape.view.vis.GraphView;
import org.eclipse.amp.escape.runtime.extension.IAgentChild;
/**
* <!-- begin-user-doc -->
* Player Java Implementation.
*
* Generated by AMF for model: DemographicPrisoner_sDilemma.metaabm in project: org.eclipse.amp.amf.examples.escape
* <!-- end-user-doc -->
* @generated
*/
public class Player extends CellOccupant {
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private boolean cooperate = false;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private int age = 0;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private int wealth = 0;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private List<IAgentChild> children;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public List<IAgentChild> getChildren() {
return children;
}
/**
* <!-- begin-user-doc -->
* Constructs a new Player.
* <!-- end-user-doc -->
* @generated
*/
public Player() {
children = new ArrayList<IAgentChild>();
}
//todo, make this a useful value for evaluating compatibility of different versions of generated classes
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private static final long serialVersionUID = 89989998L;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private static long nextUniqueID;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private long uniqueID;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public long getUID() {
if (uniqueID == 0) {
uniqueID = nextUniqueID++;
}
return uniqueID;
}
/**
* <!-- begin-user-doc -->
* Clones the agent, ensuring that a unique id is assigned.
* <!-- end-user-doc -->
* @generated
*/
public Object clone() {
try {
Player clone = (Player) super.clone();
clone.uniqueID = 0;
return clone;
} catch (Exception e) {
throw new RuntimeException("Unexpected cloning exception: " + e);
}
}
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public DemographicPrisonersDilemma getDemographicPrisoner_sDilemma() {
return (DemographicPrisonersDilemma) getScape().getScape();
}
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public void startSimulationAgentChild(int timeStep) {
if (timeStep == getRoot().getRunner().getEarliestPeriod()) {
for (IAgentChild tmp : children) {
tmp.startSimulation(timeStep);
}
}
}
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public void calculateTimeStep(int timeStep) {
for (IAgentChild tmp : children) {
tmp.calculate(timeStep);
}
}
/**
* <!-- begin-user-doc -->
* Initialize Initialization. Executed once at the beginning of each model run.
* <!-- end-user-doc -->
* @generated
*/
public void intializeNonFramework() {
setWealth(getDemographicPrisoner_sDilemma().getInitialWealth());
int randomToMaxAge = randomToLimit(getDemographicPrisoner_sDilemma()
.getMaximumAge());
boolean randomStrategy = getRandom().nextBoolean();
setAge(randomToMaxAge);
setCooperate(randomStrategy);
}
/**
* <!-- begin-user-doc -->
* Move To Random Location Initialization. Executed once at the beginning of each model run.
* <!-- end-user-doc -->
* @generated
*/
public void moveToRandomLocation() {
PlayCell randomCell2 = (PlayCell) ((org.ascape.model.space.Discrete) getDemographicPrisoner_sDilemma()
.getGameSpace().getSpace()).findRandomAvailable();
if (randomCell2 != null) {
if (getHostScape() != ((Agent) randomCell2).getScape()) {
die();
getDemographicPrisoner_sDilemma().getPlayerScape().add(this);
}
moveTo(randomCell2);
}
}
/**
* <!-- begin-user-doc -->
* Random Walk Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void randomWalk() {
PlayCell randomNeighbor = (PlayCell) ((org.ascape.model.space.Discrete) getDemographicPrisoner_sDilemma()
.getGameSpace().getSpace())
.findRandomAvailableNeighbor(((org.ascape.model.CellOccupant) this)
.getHostCell());
if (randomNeighbor != null) {
if (getHostScape() != ((Agent) randomNeighbor).getScape()) {
die();
getDemographicPrisoner_sDilemma().getPlayerScape().add(this);
}
moveTo(randomNeighbor);
}
}
/**
* <!-- begin-user-doc -->
* Play Neighbor Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void playNeighbor() {
Conditional otherPlayerCondition = new Conditional() {
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private static final long serialVersionUID = 6846144446402098985L;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public boolean meetsCondition(Object otherPlayerCell) {
if (otherPlayerCell instanceof Player) {
return true;
} else {
return false;
}
}
};
Player otherPlayer = (Player) ((org.ascape.model.space.Discrete) getDemographicPrisoner_sDilemma()
.getGameSpace().getSpace()).findRandomNeighbor(this,
otherPlayerCondition);
if (otherPlayer != null) {
if ((otherPlayer.isCooperate() && isCooperate())) {
int valueWealthAddPayoffCooperateCooperate = getWealth()
+ getDemographicPrisoner_sDilemma().getPayoffCC();
int valueWealthAddPayoffCooperateCooperateCopy = otherPlayer
.getWealth()
+ otherPlayer.getDemographicPrisoner_sDilemma()
.getPayoffCC();
setWealth(valueWealthAddPayoffCooperateCooperate);
otherPlayer
.setWealth(valueWealthAddPayoffCooperateCooperateCopy);
}
if ((otherPlayer.isCooperate() && !isCooperate())) {
int valueWealthAddPayoffDefectCooperate = getWealth()
+ getDemographicPrisoner_sDilemma().getPayoffDC();
int valueWealthAddPayoffCooperateDefectCopy = otherPlayer
.getWealth()
+ otherPlayer.getDemographicPrisoner_sDilemma()
.getPayoffCD();
setWealth(valueWealthAddPayoffDefectCooperate);
otherPlayer.setWealth(valueWealthAddPayoffCooperateDefectCopy);
}
if ((!otherPlayer.isCooperate() && isCooperate())) {
int valueWealthAddPayoffCooperateDefect = getWealth()
+ getDemographicPrisoner_sDilemma().getPayoffCD();
int valueWealthAddPayoffDefectCooperateCopy = otherPlayer
.getWealth()
+ otherPlayer.getDemographicPrisoner_sDilemma()
.getPayoffDC();
setWealth(valueWealthAddPayoffCooperateDefect);
otherPlayer.setWealth(valueWealthAddPayoffDefectCooperateCopy);
}
if ((!isCooperate() && !otherPlayer.isCooperate())) {
int valueWealthAddPayoffDefectDefect = getWealth()
+ getDemographicPrisoner_sDilemma().getPayoffDD();
int valueWealthAddPayoffDefectDefectCopy = otherPlayer
.getWealth()
+ otherPlayer.getDemographicPrisoner_sDilemma()
.getPayoffDD();
setWealth(valueWealthAddPayoffDefectDefect);
otherPlayer.setWealth(valueWealthAddPayoffDefectDefectCopy);
}
}
}
/**
* <!-- begin-user-doc -->
* Update Age Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void updateAge() {
int incrementAge = getAge() + 1;
setAge(incrementAge);
}
/**
* <!-- begin-user-doc -->
* Fission Rule Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void fissionRule() {
if (getWealth() >= getDemographicPrisoner_sDilemma().getFissionWealth()) {
PlayCell birthLocation = (PlayCell) ((org.ascape.model.space.Discrete) getDemographicPrisoner_sDilemma()
.getGameSpace().getSpace())
.findRandomAvailableNeighbor(((org.ascape.model.CellOccupant) this)
.getHostCell());
if (birthLocation != null) {
Player createAgents = (Player) getDemographicPrisoner_sDilemma()
.getPlayerScape().getSpace().newLocation(false);
if (createAgents.getHostScape() != ((Agent) birthLocation)
.getScape()) {
die();
getDemographicPrisoner_sDilemma().getPlayerScape().add(
createAgents);
}
createAgents.moveTo(birthLocation);
createAgents.setWealth(getDemographicPrisoner_sDilemma()
.getInheiritedWealth());
double valueRandomUnit = getRandom().nextDouble();
int wealthChildWealth = getWealth()
- createAgents.getDemographicPrisoner_sDilemma()
.getInheiritedWealth();
if (valueRandomUnit < createAgents
.getDemographicPrisoner_sDilemma().getMutationRate()) {
boolean valueRandomBoolean = getRandom().nextBoolean();
createAgents.setCooperate(valueRandomBoolean);
}
if (!(valueRandomUnit < createAgents
.getDemographicPrisoner_sDilemma().getMutationRate())) {
createAgents.setCooperate(isCooperate());
}
setWealth(wealthChildWealth);
}
}
}
/**
* <!-- begin-user-doc -->
* Die At Age Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void dieAtAge() {
if (getAge() > getDemographicPrisoner_sDilemma().getDeathAge()) {
die();
}
}
/**
* <!-- begin-user-doc -->
* Die At Wealth 0 Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void dieAtWealth0() {
if (getWealth() < 0) {
die();
}
}
/**
* <!-- begin-user-doc -->
* Gets the Cooperate property for Player.
* @return
* <!-- end-user-doc -->
* @generated
*/
public boolean isCooperate() {
return cooperate;
}
/**
* <!-- begin-user-doc -->
* Sets the Cooperate property for Player.
*
* @param _cooperate the new Cooperate value
* <!-- end-user-doc -->
* @generated
*/
public void setCooperate(boolean _cooperate) {
cooperate = _cooperate;
}
/**
* <!-- begin-user-doc -->
* Gets the Age property for Player.
* @return
* <!-- end-user-doc -->
* @generated
*/
public int getAge() {
return age;
}
/**
* <!-- begin-user-doc -->
* Sets the Age property for Player.
*
* @param _age the new Age value
* <!-- end-user-doc -->
* @generated
*/
public void setAge(int _age) {
age = _age;
}
/**
* <!-- begin-user-doc -->
* Gets the Wealth property for Player.
* @return
* <!-- end-user-doc -->
* @generated
*/
public int getWealth() {
return wealth;
}
/**
* <!-- begin-user-doc -->
* Sets the Wealth property for Player.
*
* @param _wealth the new Wealth value
* <!-- end-user-doc -->
* @generated
*/
public void setWealth(int _wealth) {
wealth = _wealth;
}
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public String getName() {
if (name == null) {
return "Player " + getUID();
} else {
return name;
}
}
}