blob: 6422b425a0ad31d88df6f22e0b07ca566d051272 [file] [log] [blame]
package name.milesparker.markets;
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 -->
* Trader Java Implementation.
*
* Generated by AMF for model: Markets.metaabm in project: org.eclipse.amp.amf.examples.escape
* <!-- end-user-doc -->
* @generated
*/
public class Trader extends CellOccupant {
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private StrategyEnum strategy = StrategyEnum.random;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private double funds = 100000;
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
private int instrumentCount = 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 Trader.
* <!-- end-user-doc -->
* @generated
*/
public Trader() {
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 {
Trader clone = (Trader) 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 Markets getMarkets() {
return (Markets) getScape().getScape();
}
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public List getNetwork() {
List network = new ArrayList();
network.addAll(((Graph) getMarkets().getTargetBuyFirms().getSpace())
.getNeighborsFor(this));
network.addAll(((Graph) getMarkets().getInstrumentHolders().getSpace())
.getNeighborsFor(this));
return network;
}
/**
* <!-- 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() {
StrategyEnum randomState_Strategy_ = StrategyEnum.values()[randomToLimit(StrategyEnum
.values().length)];
double initialTraderFunds = initialTraderFunds();
setStrategy(randomState_Strategy_);
setFunds(initialTraderFunds);
}
/**
* <!-- begin-user-doc -->
* Ask Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void ask() {
Instrument selling = (Instrument) ((org.ascape.model.space.Discrete) getMarkets()
.getInstrumentHolders().getSpace()).findRandomNeighbor(this);
if (selling != null) {
Firm instrumentFirm = (Firm) ((org.ascape.model.space.Discrete) selling
.getMarkets().getFirmInstruments().getSpace())
.findRandomNeighbor(selling);
if (instrumentFirm != null) {
double sharePriceAdjustment = sharePriceAdjustment();
double newSharePrice = sharePriceAdjustment
* instrumentFirm.getLastPrice();
selling.setOfferPrice(newSharePrice);
selling.setStatus(StatusEnum.ask);
}
}
}
/**
* <!-- begin-user-doc -->
* Buy Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void buy() {
((org.ascape.model.space.Graph) getMarkets().getTargetBuyFirms()
.getSpace()).clearNeighbors(this);
Firm offeredFirm = (Firm) getMarkets().getFirmScape().findRandom();
if (offeredFirm != null) {
((org.ascape.model.space.Graph) getMarkets().getTargetBuyFirms()
.getSpace()).addNeighborSafe(this, offeredFirm, false);
}
}
/**
* <!-- begin-user-doc -->
* Calculate Share Price Adjustment.
* <!-- end-user-doc -->
* @generated
*/
public double sharePriceAdjustment() {
double sharePriceAdjustmentMinimum = getMarkets()
.getSharePriceAdjustmentMinimum();
double sharePriceAdjustmentMaximum = getMarkets()
.getSharePriceAdjustmentMaximum();
return randomInRange(sharePriceAdjustmentMinimum,
sharePriceAdjustmentMaximum);
}
/**
* <!-- begin-user-doc -->
* Calculate Initial Trader Funds.
* <!-- end-user-doc -->
* @generated
*/
public double initialTraderFunds() {
double initialTraderFundsMinimum = getMarkets()
.getInitialTraderFundsMinimum();
double initialTraderFundsMaximum = getMarkets()
.getInitialTraderFundsMaximum();
return randomInRange(initialTraderFundsMinimum,
initialTraderFundsMaximum);
}
/**
* <!-- begin-user-doc -->
* Execute Rule. Executed every period.
* <!-- end-user-doc -->
* @generated
*/
public void execute() {
Firm firm = (Firm) ((org.ascape.model.space.Discrete) getMarkets()
.getTargetBuyFirms().getSpace()).findRandomNeighbor(this);
if (firm != null) {
Instrument boughtInstrument = (Instrument) ((org.ascape.model.space.Discrete) firm
.getMarkets().getFirmInstruments().getSpace())
.findRandomNeighbor(firm);
if (boughtInstrument != null) {
boughtInstrument.setStatus(StatusEnum.held);
double fundsSubtractTotalPrice = getFunds()
- boughtInstrument.getTotalPrice();
setFunds(fundsSubtractTotalPrice);
double offerPriceAddZero = boughtInstrument.getOfferPrice() + 0;
firm.setLastPrice(offerPriceAddZero);
Trader seller = (Trader) ((org.ascape.model.space.Discrete) getMarkets()
.getInstrumentHolders().getSpace())
.findRandomNeighbor(boughtInstrument);
if (seller != null) {
double fundsAddTotalPrice = seller.getFunds()
+ boughtInstrument.getTotalPrice();
seller.setFunds(fundsAddTotalPrice);
((org.ascape.model.space.Graph) getMarkets()
.getInstrumentHolders().getSpace())
.clearNeighbors(seller);
((org.ascape.model.space.Graph) getMarkets()
.getInstrumentHolders().getSpace())
.addNeighborSafe(this, boughtInstrument, false);
int incrementCount = getInstrumentCount() + 1;
setInstrumentCount(incrementCount);
int decrementSellerCount = seller.getInstrumentCount() - 1;
seller.setInstrumentCount(decrementSellerCount);
}
}
}
}
/**
* <!-- begin-user-doc -->
* Gets the Strategy property for Trader.
* @return
* <!-- end-user-doc -->
* @generated
*/
public StrategyEnum getStrategy() {
return strategy;
}
/**
* <!-- begin-user-doc -->
* Sets the Strategy property for Trader.
*
* @param _strategy the new Strategy value
* <!-- end-user-doc -->
* @generated
*/
public void setStrategy(StrategyEnum _strategy) {
strategy = _strategy;
}
/**
* <!-- begin-user-doc -->
* Gets the Funds property for Trader.
* @return
* <!-- end-user-doc -->
* @generated
*/
public double getFunds() {
return funds;
}
/**
* <!-- begin-user-doc -->
* Sets the Funds property for Trader.
*
* @param _funds the new Funds value
* <!-- end-user-doc -->
* @generated
*/
public void setFunds(double _funds) {
funds = _funds;
}
/**
* <!-- begin-user-doc -->
* Gets the Instrument Count property for Trader.
* @return
* <!-- end-user-doc -->
* @generated
*/
public int getInstrumentCount() {
return instrumentCount;
}
/**
* <!-- begin-user-doc -->
* Sets the Instrument Count property for Trader.
*
* @param _instrumentCount the new Instrument Count value
* <!-- end-user-doc -->
* @generated
*/
public void setInstrumentCount(int _instrumentCount) {
instrumentCount = _instrumentCount;
}
/**
* <!-- begin-user-doc -->
*
* <!-- end-user-doc -->
* @generated
*/
public String getName() {
if (name == null) {
return "Trader " + getUID();
} else {
return name;
}
}
}