final long start = (new Date()).getTime();
PhysicalOptimizations.addReplacement("multiinput.join.", "IndexJoinWithDuplicateElimination", "HashMapIndexJoinWithDuplicateElimination");
this.evaluator.physicalOptimization();
final RIFRules15RulePackage rules15 = new RIFRules15RulePackage();
rules15.applyRules(this.evaluator.getRootNode());
final RIFRules16RulePackage rules16 = new RIFRules16RulePackage();
rules16.applyRules(this.evaluator.getRootNode());
this.getRootNode().deleteParents();
this.getRootNode().setParents();
this.getRootNode().detectCycles();
// this.getRootNode().sendMessage(new BoundVariablesMessage());
return (new Date()).getTime() - start;