0

私は 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).

最良のソリューションはスコア値で更新されないようですが、Solution クラスを getter と setter スコアを持つ例 (queens の例) として定義しました。

「新しいベストスコア」が null であるという提案はありますか?

ありがとう!

4

3 に答える 3

3

勝手な推測ですが、cloneSolutionあなたのソリューションはスコアと他のすべての問題事実を確実に複製しますか?

そこでいくつかのサイレントエラーが発生しました。

于 2012-05-01T07:02:36.933 に答える
0

上記と同じエラーが発生し、Solutionクラスのクローンにスコアを設定するだけで解決できます----->

public EmployeeRoster cloneSolution() {
    EmployeeRoster employeeRoster=new EmployeeRoster();
    employeeRoster.id=id;
    employeeRoster.shiftList=shiftList;
    employeeRoster.employeeList=employeeList;
    employeeRoster.score=score;
    return employeeRoster;
}

org.drools.planner.core.score.buildin.hardandsoftのorg.drools.planner.core.score.buildin.hardandsoft.DefaultHardAndSoftScore.compareTo(DefaultHardAndSoftScore.java:125)のスレッド"main"java.lang.NullPointerExceptionの例外.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で。org.drools.planner.core.solver.DefaultSolver.runSolverPhases(DefaultSolver.java:183)のsolve(DefaultLocalSearchSolverPhase.java:57)org.drools.planner.core.solver.DefaultSolver.solve(DefaultSolver.java:151)

于 2012-08-31T06:32:26.597 に答える
0

その行は(理論的には)不可能です:

2012-04-30 ...     Step index (0), ..., new best score (null), ...

デバッグして、null スコアを生成している原因を突き止めます。これは間違いなくバグです (プランナーまたはコード内)。

これは見たことがありません。カスタム スコア定義を使用していますか?

于 2012-04-30T09:30:21.767 に答える