我正在使用Drools 5.4.0.CR1,当我开始使用
时...
XmlSolverFactory configurer = new XmlSolverFactory();
configurer.configure(SOLVER_CONFIG);
Solver solver = configurer.buildSolver();
solver.setPlanningProblem(initialSolution);
solver.solve();
....
我有这个输出
[exec:exec]
2012-04-30 11:10:46,296 [main] INFO Solving started: time spend (169), score (-13hard/0soft), new best score (-13hard/0soft), random seed (0).
2012-04-30 11:10:46,338 [main] DEBUG Step index (0), time spend (213), score (-12hard/0soft), new best score (null), accepted move size (10) for picked step (03-05-2012 P emp:EMPLOYEE1 => L).
2012-04-30 11:10:46,356 [main] DEBUG Step index (1), time spend (231), score (-12hard/0soft), new best score (null), accepted move size (10) for picked step (02-05-2012 P emp:EMPLOYEE2 => S).
java.lang.NullPointerException
at org.drools.planner.core.score.buildin.hardandsoft.DefaultHardAndSoftScore.compareTo(DefaultHardAndSoftScore.java:125)
at org.drools.planner.core.score.buildin.hardandsoft.DefaultHardAndSoftScore.compareTo(DefaultHardAndSoftScore.java:27)
at org.drools.planner.core.localsearch.decider.acceptor.tabu.AbstractTabuAcceptor.isAccepted(AbstractTabuAcceptor.java:121)
at org.drools.planner.core.localsearch.decider.acceptor.CompositeAcceptor.isAccepted(CompositeAcceptor.java:58)
at org.drools.planner.core.localsearch.decider.DefaultDecider.processMove(DefaultDecider.java:159)
这是TRACE日志:
2012-04-30 11:40:16,745 [main] INFO Solving started: time spend (110), score (-13hard/0soft), new best score (-13hard/0soft), random seed (0).
2012-04-30 11:40:16,781 [main] TRACE Move score (-13hard/0soft), accepted (true) for move (01-05-2012 M emp:EMPLOYEE1 => P).
2012-04-30 11:40:16,794 [main] TRACE Move score (-13hard/0soft), accepted (true) for move (04-05-2012 L emp:EMPLOYEE2 => G).
2012-04-30 11:40:16,794 [main] TRACE Ignoring not doable move (01-05-2012 P emp:EMPLOYEE3 => P).
2012-04-30 11:40:16,807 [main] TRACE Move score (-13hard/0soft), accepted (true) for move (01-05-2012 M emp:EMPLOYEE4 => S).
2012-04-30 11:40:16,819 [main] TRACE Move score (-13hard/0soft), accepted (true) for move (03-05-2012 P emp:EMPLOYEE5 => A).
...
2012-04-30 11:40:16,876 [main] TRACE Move score (-12hard/0soft), accepted (true) for move (03-05-2012 P emp:EMPLOYEE21 => L).
2012-04-30 11:40:16,876 [main] TRACE Ignoring not doable move (01-05-2012 L emp:EMPLOYEE22 => L).
2012-04-30 11:40:16,876 [main] TRACE Ignoring not doable move (03-05-2012 N emp:EMPLOYEE23 => N).
2012-04-30 11:40:16,887 [main] TRACE Move score (-13hard/0soft), accepted (true) for move (02-05-2012 N emp:EMPLOYEE14 => TS).
2012-04-30 11:40:16,898 [main] DEBUG Step index (0), time spend (265), score (-12hard/0soft), new best score (null), accepted move size (10) for picked step (03-05-2012 P emp:EMPLOYEE21 => L).
似乎最好的解决方案没有使用得分值更新,但我们将解决方案类定义为具有getter和setter得分的示例(女王示例)。
任何人都有关于“新的最佳得分”的建议是否为空?
谢谢!
答案 0 :(得分:3)
狂野猜测,但是你的解决方案的cloneSolution
是否能够有效地克隆分数和所有其他问题事实?
我在那里经历了一些无声错误。
答案 1 :(得分:0)
这条线是不可能的(理论上):
2012-04-30 ... Step index (0), ..., new best score (null), ...
调试并找出产生空分数的原因。这肯定是一个错误(在计划者或代码中)。
我以前没见过这个。您使用的是自定义分数定义吗?
答案 2 :(得分:0)
我得到了与上面相同的错误,我能够解决它,只需在我的解决方案类的克隆中设置得分就像----->
public EmployeeRoster cloneSolution() {
EmployeeRoster employeeRoster=new EmployeeRoster();
employeeRoster.id=id;
employeeRoster.shiftList=shiftList;
employeeRoster.employeeList=employeeList;
employeeRoster.score=score;
return employeeRoster;
}
线程“main”java.lang.NullPointerException中的异常 at org.drools.planner.core.score.buildin.hardandsoft.DefaultHardAndSoftScore.compareTo(DefaultHardAndSoftScore.java:125) 在org.drools.planner.core.score.buildin.hardandsoft.DefaultHardAndSoftScore.compareTo(DefaultHardAndSoftScore.java:27) at org.drools.planner.core.localsearch.decider.acceptor.tabu.AbstractTabuAcceptor.isAccepted(AbstractTabuAcceptor.java:121) at org.drools.planner.core.localsearch.decider.DefaultDecider.processMove(DefaultDecider.java:159) at org.drools.planner.core.localsearch.decider.DefaultDecider.doMove(DefaultDecider.java:129) at org.drools.planner.core.localsearch.decider.DefaultDecider.decideNextStep(DefaultDecider.java:103) 在org.drools.planner.core.localsearch.DefaultLocalSearchSolverPhase.solve(DefaultLocalSearchSolverPhase.java:57) at org.drools.planner.core.solver.DefaultSolver.runSolverPhases(DefaultSolver.java:183) 在org.drools.planner.core.solver.DefaultSolver.solve(DefaultSolver.java:151)