package com.datascience.scheduler; import com.datascience.core.base.IData; import com.datascience.core.base.LObject; import com.datascience.core.base.Project; import com.datascience.core.nominal.NominalProject; import com.datascience.core.nominal.decision.DecisionEngine; import com.datascience.core.nominal.decision.ILabelProbabilityDistributionCostCalculator; /** * I know that at some point we will be able to calculate cost for continuous project * but for now ... * @Author: konrad */ public class CostBasedPriorityCalculator implements IPriorityCalculator<String> { protected DecisionEngine dEngine; protected NominalProject project; public CostBasedPriorityCalculator(ILabelProbabilityDistributionCostCalculator labelProbabilityDistributionCostCalculator){ dEngine = new DecisionEngine(labelProbabilityDistributionCostCalculator, null); } @Override public double getPriority(LObject<String> object) { double val; if (project.getResults().hasDatumResult(object)){ val = dEngine.estimateMissclassificationCost(project, object); } else { val = Double.MAX_VALUE; } return -val; } @Override public <V, W> void registerOnProject(Project<String, ?, V, W> project){ if (!(project instanceof NominalProject)) { throw new IllegalArgumentException(this.getClass().toString() + " supports only NominalProjects, not " + project.getClass().toString()); } this.project = (NominalProject) project; } @Override public String getId() { return "costbased"; } @Override public <U extends IData<String>, V, W> ISchedulerNotificator<String> getSchedulerNotificator(Project<String, U, V, W> project) { return new SchedulerNewResultsNotificator<String, U, V>(); } }