Newer
Older
package Heuristics;
import java.util.HashMap;
import java.util.Map;
import FaultTree.*;
import Heuristics.Helpers.DepthFirstByWeightOrderer;
public class ByWeightHeuristic implements Heuristic {
private class FaultTreeScale extends AbstractFaultTreeVisitor {
private Map<FaultTree, Integer> weights = new HashMap<>();
@Override
public void visitIntermediateEvent(IntermediateEvent event) {
visit(event.left);
visit(event.right);
weights.put(event, weights.get(event.left) + weights.get(event.right));
}
@Override
public void visitBasicEvent(BasicEvent event) {
weights.put(event, 1);
}
public Map<FaultTree, Integer> getWeights() {
return weights;
}
}
@Override
public Map<BasicEvent, Integer> getOrder(FaultTree tree) {
var scale = new FaultTreeScale();
scale.visit(tree);
var weights = scale.getWeights();
var orderer = new DepthFirstByWeightOrderer(weights);
orderer.visit(tree);
return orderer.getOrder();
}
}