/* * JABM - Java Agent-Based Modeling Toolkit * Copyright (C) 2013 Steve Phelps * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. */ package net.sourceforge.jabm.examples.elfarolbar; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Required; import cern.jet.random.AbstractContinousDistribution; public class AutoregressivePredictionStrategy extends AbstractPredictionStrategy implements InitializingBean { protected double[] coefficients; protected double offset; protected int windowSize; protected AbstractContinousDistribution coefficientDistribution; protected AbstractContinousDistribution offsetDistribution; public AutoregressivePredictionStrategy(int memorySize, AbstractContinousDistribution coefficientDistribution) { super(); this.coefficientDistribution = coefficientDistribution; afterPropertiesSet(); } public AutoregressivePredictionStrategy() { super(); } public void randomlyInitialise() { for(int i=0; i<windowSize; i++) { coefficients[i] = coefficientDistribution.nextDouble(); } offset = offsetDistribution.nextDouble(); } @Override public void makePrediction() { currentPrediction = 0.0; for(int i=0; i<windowSize; i++) { currentPrediction += barTender.getAttendanceAtLag(i+1) * coefficients[i]; } currentPrediction += offset * 100; } public AbstractContinousDistribution getCoefficientDistribution() { return coefficientDistribution; } /** * The probability distribution used to draw coefficient values. * @param coefficientDistribution */ @Required public void setCoefficientDistribution( AbstractContinousDistribution coefficientDistribution) { this.coefficientDistribution = coefficientDistribution; } /** * The probability distribution used to draw the offset value. * @return */ @Required public AbstractContinousDistribution getOffsetDistribution() { return offsetDistribution; } public void setOffsetDistribution( AbstractContinousDistribution offsetDistribution) { this.offsetDistribution = offsetDistribution; } @Override public void afterPropertiesSet() { coefficients = new double[windowSize]; randomlyInitialise(); } public int getWindowSize() { return windowSize; } public void setWindowSize(int windowSize) { this.windowSize = windowSize; } @Override public String toString() { return "AutoregressivePredictionStrategy [offset=" + offset + ", windowSize=" + windowSize + ", coefficientDistribution=" + coefficientDistribution + ", offsetDistribution=" + offsetDistribution + "]"; } }