<html><body><div style="color:#000; background-color:#fff; font-family:arial, helvetica, sans-serif;font-size:10pt"><div>Hi,</div><div><br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">I am trying to use a <span>CustomSolverPhaseCommand (</span><span><span></span><span>SolutionInitializer</span>) to analyze what happens if I start with a given configuration.</span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span><br></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">I get <span>java.lang.IllegalArgumentException:
 The entity ({T= Inspect B747-XA2.I#0 [1-&gt;3] null null}) was never 
added to this ScoreDirector.</span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span><br></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">If I keep the constructionHeuristic phase before the <span></span><span>SolutionInitializer then it works, but if I remove the </span>constructionHeuristic phase and thus start with my <span></span><span>SolutionInitializerthen I get the exception.<br></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span>I reduced my
 </span><span>SolutionInitializer to a minmal but the issue remains.</span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">What am I doing wrong?</div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span style="text-decoration: underline;">This is my <span></span><span>SolutionInitializer:</span></span><br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span></span><br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family:
 arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span>package planner.solution;<br><br>import org.drools.planner.core.phase.custom.CustomSolverPhaseCommand;<br>import org.drools.planner.core.score.Score;<br>import org.drools.planner.core.score.director.ScoreDirector;<br>import org.slf4j.Logger;<br>import org.slf4j.LoggerFactory;<br><br>import planner.app.InspectionSchedule;<br>import planner.domain.Task;<br><br>public class SolutionInitializer implements CustomSolverPhaseCommand {<br><br>&nbsp;&nbsp;&nbsp; private Logger logger = LoggerFactory.getLogger(this.getClass());<br><br>&nbsp;&nbsp;&nbsp; public void changeWorkingSolution(ScoreDirector scoreDirector) {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; InspectionSchedule schedule = (InspectionSchedule) scoreDirector.getWorkingSolution();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Task task = schedule.getTasks().get(0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
 scoreDirector.beforeVariableChanged(task, "period");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; task.setPeriod(schedule.getPeriods().get(0));<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scoreDirector.afterVariableChanged(task, "period");<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; score = scoreDirector.calculateScore();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; logger.debug("Score after custom: " + score);<br><br>&nbsp;&nbsp;&nbsp; }<br><br>}</span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span style="text-decoration: underline;">planning configuration:</span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent;
 font-style: normal;"><br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;solver&gt;<br>&nbsp;&nbsp;&nbsp; &lt;environmentMode&gt;DEBUG&lt;/environmentMode&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;!-- Domain model configuration --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;solutionClass&gt;be.axi.planner.app.InspectionSchedule&lt;/solutionClass&gt;<br>&nbsp;&nbsp;&nbsp; &lt;planningEntityClass&gt;be.axi.planner.domain.Task&lt;/planningEntityClass&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;!-- Score configuration --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;scoreDirectorFactory&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;scoreDefinitionType&gt;HARD_AND_SOFT&lt;/scoreDefinitionType&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;scoreDrl&gt;/inspectionRules.drl&lt;/scoreDrl&gt;<br>&nbsp;&nbsp;&nbsp;
 &lt;/scoreDirectorFactory&gt;<br>&nbsp;&nbsp;&nbsp; <br><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp; &lt;customSolverPhase&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;customSolverPhaseCommandClass&gt;be.axi.planner.solution.SolutionInitializer&lt;/customSolverPhaseCommandClass&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/customSolverPhase&gt;</span><br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;localSearch&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;termination&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;terminationCompositionStyle&gt;OR&lt;/terminationCompositionStyle&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;maximumSecondsSpend&gt;3600&lt;/maximumSecondsSpend&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;scoreAttained&gt;0hard/0soft&lt;/scoreAttained&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/termination&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
 &lt;unionMoveSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;changeMoveSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;valueSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;planningVariableName&gt;type&lt;/planningVariableName&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/valueSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/changeMoveSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;changeMoveSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;valueSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;planningVariableName&gt;spector&lt;/planningVariableName&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/valueSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/changeMoveSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;changeMoveSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;valueSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;planningVariableName&gt;period&lt;/planningVariableName&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/valueSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/changeMoveSelector&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/unionMoveSelector&gt;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;acceptor&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;planningEntityTabuSize&gt;7&lt;/planningEntityTabuSize&gt;<br>&nbsp;&nbsp;&nbsp;
 &nbsp;&nbsp;&nbsp; &lt;/acceptor&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;forager&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;minimalAcceptedSelection&gt;1000&lt;/minimalAcceptedSelection&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/forager&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/localSearch&gt;<br>&lt;/solver&gt;<br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span style="text-decoration: underline;">Stack trace:</span><br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br><span></span></div><div style="color: rgb(0, 0, 0); font-size:
 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span>java.lang.IllegalArgumentException: The entity ({T= Inspect B747-XA2.I#0 [1-&gt;3] null null}) was never added to this ScoreDirector.<br>&nbsp;&nbsp;&nbsp; at org.drools.planner.core.score.director.drools.DroolsScoreDirector.afterVariableChanged(DroolsScoreDirector.java:125)<br>&nbsp;&nbsp;&nbsp; at planner.solution.SolutionInitializer.changeWorkingSolution(SolutionInitializer2.java:24)<br>&nbsp;&nbsp;&nbsp; at org.drools.planner.core.phase.custom.DefaultCustomSolverPhase.solve(DefaultCustomSolverPhase.java:58)<br>&nbsp;&nbsp;&nbsp; at org.drools.planner.core.solver.DefaultSolver.runSolverPhases(DefaultSolver.java:190)<br>&nbsp;&nbsp;&nbsp; at org.drools.planner.core.solver.DefaultSolver.solve(DefaultSolver.java:155)<br>&nbsp;&nbsp;&nbsp; at planner.app.InspectionSchedule.solve(InspectionSchedule.java:192)<br>&nbsp;&nbsp;&nbsp; at
 planner.testcore.AbstractPlanningTestClass.solve(AbstractPlanningTestClass.java:288)<br>&nbsp;&nbsp;&nbsp; at planner.testcore.AbstractPlanningTestClass.solve(AbstractPlanningTestClass.java:298)<br>&nbsp;&nbsp;&nbsp; at planner.testcore.AbstractPlanningTestClass.solve(AbstractPlanningTestClass.java:315)<br>&nbsp;&nbsp;&nbsp; at planner.TaskGroupingTest.communitySuccess02(TaskGroupingTest.java:289)<br>&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at java.lang.reflect.Method.invoke(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)<br>&nbsp;&nbsp;&nbsp; at
 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)<br>&nbsp;&nbsp;&nbsp; at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)<br>&nbsp;&nbsp;&nbsp; at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)<br>&nbsp;&nbsp;&nbsp; at
 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)<br>&nbsp;&nbsp;&nbsp; at org.junit.runners.ParentRunner.run(ParentRunner.java:236)<br>&nbsp;&nbsp;&nbsp; at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)<br>&nbsp;&nbsp;&nbsp; at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)<br>&nbsp;&nbsp;&nbsp; at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)<br>&nbsp;&nbsp;&nbsp; at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)<br>&nbsp;&nbsp;&nbsp; at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)<br>&nbsp;&nbsp;&nbsp; at
 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)<br><br>Thanks,</span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><span>Michiel</span></div><div>&nbsp;</div><div>-----------------<br>http://www.codessentials.com - Your essential software, for free!<br>Follow us at http://twitter.com/#!/Codessentials</div></div></body></html>