package convergence; import util.Asymptote; public class ModifiedBasicPEST extends AbstractConvergence{ Asymptote data = new Asymptote(); double MIN_CAP = 0.0; double MAX_CAP = 1.0; double currentStep = 0.0; double base; double difference; int numTrialsToAdjustStep = Integer.MAX_VALUE; int currentTrialNum = 1; boolean isConvergeFromAbove = false; double incorrectMultiplier = 3.0; /** * Constructor. * * @param base the base value * @param difference the initial difference * @param isConvergeFromAbove is this convergence from above or below? * @param stepSize the step size */ public ModifiedBasicPEST(double base, double difference, boolean isConvergeFromAbove, double stepSize){ this.base = base; this.difference = difference; this.currentStep = stepSize; this.isConvergeFromAbove = isConvergeFromAbove; data.addValue(difference); } public boolean setNumTrialsToAdjustStep(int trials){ if (trials < 1) return false; return true; } public boolean isConverged(){ return data.isConverged(); } public double getTrialParam() { return isConvergeFromAbove?(base+difference):(base-difference); } public double getTrialCompare(){ return base; } public double getBase(){ return this.base; } public double getDifference(){ return this.difference; } public int getCurrentTrialNum(){ return currentTrialNum; } public double getWindowAverage(){ return data.getConvergeWindowAverage(); } public double getTrialsToConverge(){ return data.getTrialsToConverge(); } public void setTrialResponse(boolean isCorrect) { this.currentTrialNum++; adjustDifference(isCorrect); data.addValue(difference); // TODO: some test to change step size } protected void adjustDifference(boolean isCorrect){ if(isCorrect){ difference = Math.max(MIN_CAP, difference-currentStep); }else{ if(isConvergeFromAbove){ difference = Math.min(MAX_CAP-base, difference+currentStep*incorrectMultiplier); }else{ //difference = difference+currentStep*incorrectMultiplier; difference = Math.min(base-MIN_CAP, difference+currentStep*incorrectMultiplier); } } } public String toString(){ return data.toString(); } public static void main(String args[]){ Convergence myConv = new ModifiedBasicPEST(8.0, 2.0, true, 0.5); myConv.toString(); boolean trials[] = {true, true, true, false, false, true, false, false, true, false, true}; for(int i=0; i < trials.length; i++){ myConv.setTrialResponse(trials[i]); } System.out.println(myConv.toString()); } }