2016-04-06 10 views
2

私は、ナースロスタリングのような問題で、OptaplannerにカスタムConstruction Heuristicを実装しようとしています。OptaPlanner - 計画エンティティは、計画エンティティとして構成されていないentitySubclass(クラスjava.lang.Integer)のインスタンスです。

すべてが正常に注釈を付けているように見える、とSolverConfigurationに追加されますが、私はこのエラーを取得しておいてください。

Exception in thread "main" java.lang.IllegalArgumentException: A planning entity is an instance of an entitySubclass (class java.lang.Integer) that is not configured as a planning entity. 
If that class (Integer) (or superclass thereof) is not a entityClass ([class org.optaplanner.examples.nurserostering.domain.SkillRequirement, class org.optaplanner.examples.nurserostering.domain.ShiftAssignment]), check your Solution implementation's annotated methods. 
If it is, check your solver configuration. 
at org.optaplanner.core.impl.domain.solution.descriptor.SolutionDescriptor.findEntityDescriptorOrFail(SolutionDescriptor.java:398) 
at org.optaplanner.core.impl.domain.solution.descriptor.SolutionDescriptor.findVariableDescriptorOrFail(SolutionDescriptor.java:443) 
at org.optaplanner.core.impl.score.director.AbstractScoreDirector.beforeVariableChanged(AbstractScoreDirector.java:226) 
at org.optaplanner.examples.nurserostering.domain.solver.CustomConstructionHeuristic.changeWorkingSolution (CustomConstructionHeuristic.java:86) 
at org.optaplanner.core.impl.phase.custom.DefaultCustomPhase.doStep(DefaultCustomPhase.java:89) 
at org.optaplanner.core.impl.phase.custom.DefaultCustomPhase.solve(DefaultCustomPhase.java:71) 
at org.optaplanner.core.impl.solver.DefaultSolver.runPhases(DefaultSolver.java:214) 
at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:176) 
at org.optaplanner.examples.nurserostering.app.NurseRosterConsoleApp.main(NurseRosterConsoleApp.java:142) 

私はこれらの参照を使用してそれを修正しようとした:

OptaPlanner Xml configuration and entitySubclass is not configured as a planning entity error

OptaPlanner: java.lang.IllegalArgumentException

https://groups.google.com/forum/#!topic/optaplanner-dev/wCdeSQhGdaQ

これまでのところ何も働いていませんでした。どのように私はこれを解決することができますか?

+0

あなたのクラスについて 'org.optaplanner.examples.nurserostering.domain.solver.CustomConstructionHeuristic' - 自分のプロジェクトにorg.optaplannerパッケージを使わないでください(特にMavenリポジトリに展開するつもりなら)それは混乱しているから(私はそれが私たちのものだと思った)。例えば、 'com.xy.nurserostering'のように(あなたがコピーした)nurseroteringの例の名前空間をリファクタリングするだけです。 –

答えて

1

はい、そのエラーメッセージは100%ユーザーフレンドリーではありませんが、私は7.0用に修正します。

とにかく、何だそれは言っていることは、あなたのソリューションクラスでこのような何かを持っている:だからあなただけのインスタンスのうち、これだけ(エンティティの外に存在するはずのコレクションへの整数を追加している

@PlanningEntityCollectionProperty 
public List<Object> getMyEntities() { 
    List<Object> entities = new ArrayList<>(); 
    entities.add(Integer.valueOf(1)); 
    ... 
    return entities; 
} 

SkillRequirementまたはShiftAssignmentのいずれか)。

PS:SkillRequirementが計画エンティティであることは間違いですが、あなたはそのクラスをナースロッキングのバリエーションでより良い名前にしたいと思うかもしれません。

+0

同様にgetterとsetterの 'Integer'ではなく' int'としてリストを宣言しました。私はそれらをすべてInteger'sとして修正しました。そして今問題はなくなりました。 –

+0

Wierd、Integer'sは計画エンティティではないため(Integerクラスは変更可能でなく、@PlanningEntityアノテーションもありませんが、xmlアノテーションによって後で最後の問題が許可されます)。 –

関連する問題