package eu.scape_project.planning.efficiency; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.persistence.EntityManager; import org.supercsv.cellprocessor.Optional; import eu.scape_project.planning.model.Plan; import eu.scape_project.planning.model.tree.Leaf; public class CriteriaImpactAnalysis extends StatisticsGenerator { private Plan plan; private double actualScores[]; private double calculatedScores[]; private List<Leaf> allCriteria; private List<Leaf> criteriaSet; class HeuristicResult { } public CriteriaImpactAnalysis(Writer writer, EntityManager em) throws IOException { super(writer, em); } public void initialize(final Plan plan) throws IOException { this.plan = plan; int numAlternatives = plan.getAlternativesDefinition() .getAlternatives().size(); actualScores = new double[numAlternatives]; calculatedScores = new double[numAlternatives]; allCriteria.addAll(plan.getTree().getRoot().getAllLeaves()); // 1. Rank all criteria according to IMPACT descending Collections.sort(allCriteria, new Comparator<Leaf>() { @Override public int compare(Leaf leaf1, Leaf leaf2) { // TODO Auto-generated method stub return Double.compare(leaf2.getPotentialImpact(), leaf1.getPotentialImpact()); } }); // 2. Start with empty set of criteria criteriaSet = new ArrayList<Leaf>(); setupColumns(); // write the header listWriter.writeHeader(headers); } @Override public void writeStatistics(Plan plan) throws IOException { initialize(plan); calculateHeuristic(); } private void calculateHeuristic() throws IOException { HeuristicResult result = new HeuristicResult(); // 3. Repeat till set is full for (Leaf leaf : allCriteria) { // a. add top criterion to set criteriaSet.add(leaf); // b. populate values // c. Calculate preliminary ranking // d. compare to actual ranking and note whether identical. note scores. } listWriter.write(result, headers, processors); listWriter.flush(); } @Override protected void setupColumns() { addColumn("id", new LUndef()); addColumn("setSize", new LUndef()); addColumn("numOfMeasurements", new LUndef()); addColumn("match", new Optional()); for (int i = 1; i < plan.getAlternativesDefinition().getAlternatives() .size(); i++) { addColumn("A" + i, new Optional()); } } }