<html><body><div style="color:#000; background-color:#fff; font-family:arial, helvetica, sans-serif;font-size:10pt">works like a charm :-)<br><br><div><span>thanks</span></div><div>&nbsp;</div><div>-----------------<br>http://www.codessentials.com - Your essential software, for free!<br>Follow us at http://twitter.com/#!/Codessentials<br></div>  <div style="font-family: arial, helvetica, sans-serif; font-size: 10pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> <hr size="1">  <b><span style="font-weight:bold;">From:</span></b> Geoffrey De Smet &lt;ge0ffrey.spam@gmail.com&gt;<br> <b><span style="font-weight: bold;">To:</span></b> Michiel Vermandel &lt;mvermand@yahoo.com&gt;; Rules Users List &lt;rules-users@lists.jboss.org&gt; <br> <b><span style="font-weight: bold;">Sent:</span></b> Wednesday, January 23, 2013 2:26 PM<br> <b><span style="font-weight:
 bold;">Subject:</span></b> Re: CustomSolverPhaseCommand throws The entity ... was never added to this ScoreDirector.<br> </font> </div> <br>
<div id="yiv2087587736">
  

    
  
  <div>
    Basically, this is fixed for 6.0.0.Beta1 (unreleased).<br>
    <br>
    Read further if you want to understand why this was a problem before
    6.0.0.Beta1<br>
    <div class="yiv2087587736moz-cite-prefix">Op 23-01-13 14:13, Michiel Vermandel
      schreef:<br>
    </div>
    <blockquote type="cite">
      <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>
          </span></div>
      </div>
    </blockquote>
    if task.getPeriod() returns null, then 5.5 has not inserted that
    Task into the working memory yet (while 6.0 will),<br>
    so you need to do something like<br>
    if (task.getPeriod() == null) {<br>
    &nbsp;&nbsp; scoreDirector.beforeEntityAdded(task);<br>
    &nbsp;&nbsp; scoreDirector.afterEntityAdded(task);<br>
    }<br>
    // and continue with <span>beforeVariableChanged (although you can
      optimize this if-else stuff)<br>
    </span>
    <blockquote type="cite">
      <div style="color:#000;background-color:#fff;font-family:arial, helvetica, sans-serif;font-size:10pt;">
        <div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:arial, helvetica, sans-serif;
background-color:transparent;font-style:normal;"><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
            scoreDirector.beforeVariableChanged(task, "period");<br>
          </span></div>
      </div>
    </blockquote>
    <blockquote type="cite">
      <div style="color:#000;background-color:#fff;font-family:arial, helvetica, sans-serif;font-size:10pt;">
        <div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:arial, helvetica, sans-serif;
background-color:transparent;font-style:normal;"><span>&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>
          <a rel="nofollow" class="yiv2087587736moz-txt-link-freetext" target="_blank" href="http://www.codessentials.com/">http://www.codessentials.com</a> - Your essential software, for
          free!<br>
          Follow us at <a rel="nofollow" class="yiv2087587736moz-txt-link-freetext" target="_blank" href="http://twitter.com/#!/Codessentials">http://twitter.com/#!/Codessentials</a></div>
      </div>
      <br>
      <fieldset class="yiv2087587736mimeAttachmentHeader"></fieldset>
      <br>
      <pre>_______________________________________________
rules-users mailing list
<a rel="nofollow" class="yiv2087587736moz-txt-link-abbreviated" ymailto="mailto:rules-users@lists.jboss.org" target="_blank" href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>
<a rel="nofollow" class="yiv2087587736moz-txt-link-freetext" target="_blank" href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a>
</pre>
    </blockquote>
    <br>
  </div>

</div><br><br> </div> </div>  </div></body></html>