<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> </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 <ge0ffrey.spam@gmail.com><br> <b><span style="font-weight: bold;">To:</span></b> Michiel Vermandel <mvermand@yahoo.com>; Rules Users List <rules-users@lists.jboss.org> <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->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>
private Logger logger =
LoggerFactory.getLogger(this.getClass());<br>
<br>
public void changeWorkingSolution(ScoreDirector
scoreDirector) {<br>
<br>
InspectionSchedule schedule = (InspectionSchedule)
scoreDirector.getWorkingSolution();<br>
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>
scoreDirector.beforeEntityAdded(task);<br>
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>
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>
task.setPeriod(schedule.getPeriods().get(0));<br>
scoreDirector.afterVariableChanged(task, "period");<br>
<br>
score = scoreDirector.calculateScore();<br>
logger.debug("Score after custom: " + score);<br>
<br>
}<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;"><?xml version="1.0"
encoding="UTF-8"?><br>
<solver><br>
<environmentMode>DEBUG</environmentMode><br>
<br>
<!-- Domain model configuration --><br>
<solutionClass>be.axi.planner.app.InspectionSchedule</solutionClass><br>
<planningEntityClass>be.axi.planner.domain.Task</planningEntityClass><br>
<br>
<!-- Score configuration --><br>
<scoreDirectorFactory><br>
<scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType><br>
<scoreDrl>/inspectionRules.drl</scoreDrl><br>
</scoreDirectorFactory><br>
<br>
<span style="font-weight:bold;"> <customSolverPhase><br>
<customSolverPhaseCommandClass>be.axi.planner.solution.SolutionInitializer</customSolverPhaseCommandClass><br>
</customSolverPhase></span><br>
<br>
<localSearch><br>
<termination><br>
<terminationCompositionStyle>OR</terminationCompositionStyle><br>
<maximumSecondsSpend>3600</maximumSecondsSpend><br>
<scoreAttained>0hard/0soft</scoreAttained><br>
</termination><br>
<unionMoveSelector><br>
<changeMoveSelector><br>
<valueSelector><br>
<planningVariableName>type</planningVariableName><br>
</valueSelector><br>
</changeMoveSelector><br>
<changeMoveSelector><br>
<valueSelector><br>
<planningVariableName>spector</planningVariableName><br>
</valueSelector><br>
</changeMoveSelector><br>
<changeMoveSelector><br>
<valueSelector><br>
<planningVariableName>period</planningVariableName><br>
</valueSelector><br>
</changeMoveSelector><br>
</unionMoveSelector><br>
<br>
<acceptor><br>
<planningEntityTabuSize>7</planningEntityTabuSize><br>
</acceptor><br>
<forager><br>
<minimalAcceptedSelection>1000</minimalAcceptedSelection><br>
</forager><br>
</localSearch><br>
</solver><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->3] null null})
was never added to this ScoreDirector.<br>
at
org.drools.planner.core.score.director.drools.DroolsScoreDirector.afterVariableChanged(DroolsScoreDirector.java:125)<br>
at
planner.solution.SolutionInitializer.changeWorkingSolution(SolutionInitializer2.java:24)<br>
at
org.drools.planner.core.phase.custom.DefaultCustomSolverPhase.solve(DefaultCustomSolverPhase.java:58)<br>
at
org.drools.planner.core.solver.DefaultSolver.runSolverPhases(DefaultSolver.java:190)<br>
at
org.drools.planner.core.solver.DefaultSolver.solve(DefaultSolver.java:155)<br>
at
planner.app.InspectionSchedule.solve(InspectionSchedule.java:192)<br>
at
planner.testcore.AbstractPlanningTestClass.solve(AbstractPlanningTestClass.java:288)<br>
at
planner.testcore.AbstractPlanningTestClass.solve(AbstractPlanningTestClass.java:298)<br>
at
planner.testcore.AbstractPlanningTestClass.solve(AbstractPlanningTestClass.java:315)<br>
at
planner.TaskGroupingTest.communitySuccess02(TaskGroupingTest.java:289)<br>
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)<br>
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
Source)<br>
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)<br>
at java.lang.reflect.Method.invoke(Unknown Source)<br>
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)<br>
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)<br>
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)<br>
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)<br>
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)<br>
at
org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)<br>
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)<br>
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)<br>
at
org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)<br>
at
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)<br>
at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)<br>
at
org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)<br>
at
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)<br>
at
org.junit.runners.ParentRunner.run(ParentRunner.java:236)<br>
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)<br>
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)<br>
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)<br>
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)<br>
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)<br>
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> </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>