package edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.step; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.DreamTaskRecord; /** * Created with IntelliJ IDEA. * User: masoud * Date: 10/26/13 * Time: 4:20 PM * ------------------------------------------------------------------------------------------------------------<br/> * <pre> * Old \ New |Poor |Rich |Middle * Change |>=0 |< 0 |>=0 |< 0 |>=0 |< 0 * Poor |A+=mc/A |A+=c |R-=mc/R |R=max(A,c) -|A=A-mc/A,R=A-mc/A |A=c,R=max(A,c) * Rich |A=max(R,c) |A-=mc/A |R+=c |R+=mc/A |A=max(R,c),R=c |A=R-mc/R,R=R-mc/R * Middle |A=max(R,c) |A+=c |R+=c |R=max(A,c) |- |- * c can be summed over delayed ones * </pre> */ public class AIADStepUpdater extends AIMDStepUpdater { @Override protected void RichGavePoor(DreamTaskRecord taskRecord, int change) { taskRecord.setAdditionStep(taskRecord.getReductionStep() - probAdd * change / taskRecord.getReductionStep()); } @Override protected void PoorGotRich(DreamTaskRecord taskRecord, int change) { taskRecord.setReductionStep(taskRecord.getAdditionStep() - probAdd * change / taskRecord.getAdditionStep()); } @Override protected void PoorGotMiddle(DreamTaskRecord taskRecord, int change) { int v = taskRecord.getAdditionStep() - probAdd * change / taskRecord.getAdditionStep(); taskRecord.setAdditionStep(v); taskRecord.setReductionStep(v); } @Override protected void RichGaveMiddle(DreamTaskRecord taskRecord, int change) { int v = taskRecord.getReductionStep() - probAdd * change / taskRecord.getReductionStep(); taskRecord.setAdditionStep(v); taskRecord.setReductionStep(v); } }