package com.datascience.gal.commands; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.datascience.core.base.LObject; import com.datascience.core.nominal.decision.LabelProbabilityDistributionCostCalculators; import com.datascience.core.nominal.decision.WorkerEstimator; import com.datascience.core.nominal.decision.WorkerQualityCalculator; import com.datascience.datastoring.jobs.JobCommand; import com.datascience.gal.DatumValue; import com.datascience.core.nominal.NominalProject; import com.datascience.core.nominal.Quality; import com.datascience.gal.evaluation.DataEvaluator; import com.datascience.gal.evaluation.WorkerEvaluator; import com.datascience.utils.MathHelpers; /** * * @author artur */ public class EvaluationCommands { static public class GetDataCost extends JobCommand<Collection<DatumValue>, NominalProject> { private DataEvaluator dataEvaluator; public GetDataCost(DataEvaluator dataEvaluator){ super(false); this.dataEvaluator = dataEvaluator; } @Override protected void realExecute() { Collection<DatumValue> cp = new ArrayList<DatumValue>(); for (Entry<LObject<String>, Double> e : dataEvaluator.evaluate(project).entrySet()){ cp.add(new DatumValue(e.getKey().getName(), e.getValue())); } setResult(cp); } } static public class GetDataCostSummary extends JobCommand<Map<String, Object>, NominalProject> { public GetDataCostSummary(){ super(false); } @Override protected void realExecute() throws Exception { HashMap<String, Object> ret = new HashMap<String, Object>(); for (String s : new String[] {"MinCost", "MaxLikelihood"}){ DataEvaluator de = new DataEvaluator(s); ret.put(s, MathHelpers.getAverage(de.evaluate(project))); } setResult(ret); } } static public class GetDataQuality extends JobCommand<Collection<DatumValue>, NominalProject> { private DataEvaluator dataEvaluator; public GetDataQuality(DataEvaluator dataEvaluator){ super(false); this.dataEvaluator = dataEvaluator; } @Override protected void realExecute() { Collection<DatumValue> cp = new ArrayList<DatumValue>(); for (Entry<LObject<String>, Double> e : Quality.fromCosts(project, dataEvaluator.evaluate(project)).entrySet()){ cp.add(new DatumValue(e.getKey().getName(), e.getValue())); } setResult(cp); } } static public class GetDataQualitySummary extends JobCommand<Map<String, Object>, NominalProject> { public GetDataQualitySummary(){ super(false); } @Override protected void realExecute() throws Exception { HashMap<String, Object> ret = new HashMap<String, Object>(); for (String s : new String[] {"MinCost", "MaxLikelihood"}){ DataEvaluator de = new DataEvaluator(s); ret.put(s, Quality.fromCost(project, MathHelpers.getAverage(de.evaluate(project)))); } setResult(ret); } } static public class GetWorkersQualitySummary extends JobCommand<Map<String, Object>, NominalProject> { public GetWorkersQualitySummary(){ super(false); } @Override protected void realExecute() throws Exception { HashMap<String, Object> ret = new HashMap<String, Object>(); for (String s : new String[] {"MinCost", "MaxLikelihood"}){ WorkerQualityCalculator wqc = new WorkerEvaluator(LabelProbabilityDistributionCostCalculators.get(s)); ret.put(s, Quality.fromCost(project, MathHelpers.getAverageNotNaN(wqc.getCosts(project)))); } setResult(ret); } } }