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