package net.sourceforge.jabm.strategy; import java.io.Serializable; import net.sourceforge.jabm.agent.Agent; import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.annotation.Required; public abstract class AbstractRlStrategy extends AbstractStrategy implements Serializable { protected Strategy[] actions; protected Strategy currentStrategy; protected transient ObjectFactory<Strategy> strategyFactory; protected double[] initialPropensities; public AbstractRlStrategy(Agent agent) { super(agent); } public AbstractRlStrategy() { } @Override public void unsubscribeFromEvents() { for(int i=0; i<actions.length; i++) { actions[i].unsubscribeFromEvents(); } super.unsubscribeFromEvents(); } public ObjectFactory<Strategy> getStrategyFactory() { return strategyFactory; } @Required public void setStrategyFactory(ObjectFactory<Strategy> strategyFactory) { this.strategyFactory = strategyFactory; } public double[] getInitialPropensities() { return initialPropensities; } public void initialise() { int numActions = getNumberOfActions(); actions = new Strategy[numActions]; for(int i=0; i<numActions; i++) { Strategy strategy = strategyFactory.getObject(); strategy.setAgent(agent); actions[i] = strategy; } } public abstract int getNumberOfActions(); }