package edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.drop; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.aggregator.AccuracyAggregator; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.aggregator.EWMAAccuracyAggregatorImpl; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.PriorityDropPolicy; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.TaskRecord2; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.DreamTaskRecord; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.DummyTaskRecord; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.dream.ThresholdGuaranteeAlgorithm2; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * Created with IntelliJ IDEA. * User: masoud * Date: 9/24/13 * Time: 7:53 PM */ public class NotSatisfiedPoorDropAll3 extends NotSatisfiedPoor { private AccuracyAggregator averageToDropAgg; public NotSatisfiedPoorDropAll3(ThresholdGuaranteeAlgorithm2 algorithm1, PriorityDropPolicy dropPolicy1) { super(algorithm1, dropPolicy1); averageToDropAgg = new EWMAAccuracyAggregatorImpl(1.0 / dropPolicy1.getDropEpochs()); } @Override public List<DreamTaskRecord> checkDrop(Collection<DreamTaskRecord> poorTaskRecords, Collection<DreamTaskRecord> richTaskRecords, DummyTaskRecord dummyTaskRecord) { // algorithm.cleanupDropped(); ArrayList<DreamTaskRecord> output = new ArrayList<>(); int sumGive = dummyTaskRecord.getTask().getResourceShare(); int sumGet = 0; for (DreamTaskRecord richTaskRecord : richTaskRecords) { sumGive += richTaskRecord.getReductionStep2(); } for (DreamTaskRecord poorTaskRecord : poorTaskRecords) { sumGet += poorTaskRecord.getAdditionStep2(); } Collection<? extends TaskRecord2> tasks = new ArrayList<>(algorithm.getTasks()); // averageToDropAgg.update(sumGet - sumGive); TaskRecord2 dropped = dropPolicy.checkForDrop(sumGet > sumGive, tasks); if (dropped != null) { double averageToDrop = sumGet - sumGive; //averageToDropAgg.getAccuracy(); while (averageToDrop > 0) { dropped = dropPolicy.getDropCandidate(tasks); tasks.remove(dropped); DreamTaskRecord dropped1 = (DreamTaskRecord) dropped; int minResource = algorithm.getMinResource(); output.add(dropped1); if (dropped1.wasPoor()) { averageToDrop -= dropped1.getAdditionStep2(); averageToDrop -= dropped1.getTask().getResourceShare() - minResource; } else if (dropped1.wasRich()) { averageToDrop += dropped1.getReductionStep2(); averageToDrop -= dropped1.getTask().getResourceShare() - minResource; } else { averageToDrop -= dropped1.getTask().getResourceShare() - minResource; } } } return output; } }