0

DroolsPlannerの試験例を試してみました。しばらくして、未解決の問題を解決したかった。アプリを起動し、xmlファイルを選択して、解決ボタンを押しました。私のXMLファイルには、5つの異なるトピック(t1、t2、t3、t4、t5)を含む5つの試験がありました。

Droolsはソリューションを生成しました。このソリューションには5つの試験がありますが、それらはすべて同じタイプのトピック(t1)を持っています。よだれが同じトピックで5つの試験を私に与える理由の失敗は見つかりません。最初に(解決する前に)、デバッガーはすべての試験に異なるトピックがあることを教えてくれます。

通常、試験のトピックは変更しないでください。

私のExaminationSolutionInitializer.javaでは、メソッド「changeWorkingSolution」が間違ったソリューションを返します。scoreDirector.getWorkingSolution()は、トピックが1つだけの試験を生成しました。

誰か助けてもらえますか?

4

3 に答える 3

1

XML 入力ファイルにバグがある可能性があります。ここまたは gist.github.com にコピーして貼り付けてリンクできますか?

Drools Planner の検査の例では、各 Exam インスタンスには 1 つのフィールド Topic があり、Planner によって変更されることはありません。Planner によって変更されるのは、試験のフィールドの部屋と期間です。

public class Exam ... {

    private Topic topic;
    ...

    // Planning variables: changes during planning, between score calculations.
    private Period period;
    private Room room;
    ...
}

また、試験とトピックの関係は 1 対 1 の関係です。それらは 1 つのクラスとして設計された可能性がありますが、そうではありません。Topic クラスは、計画中に変更されないすべての試験情報を保持します。Exam クラスは、部屋と期間である各トピックをリンクします。

検査ドメイン図

ExaminationSolutionInitializer.java について: Planner に構築ヒューリスティックが追加される前に作成されました。通常は、最初のフィットまたは最初のフィットの減少を代わりに使用する方が適切です。試験の例にそれがまだ残っている唯一の理由は、Exam.isCoincidenceLeader()複数の試験を同じ期間にスケジュールする必要があり、したがって一緒に移動する必要がある場合に対処するためのドメイン固有のコードがあるためです。

于 2012-08-07T06:09:27.430 に答える
1

問題は、exam.java でトピックを @PlanningVariable として宣言したことです。

于 2012-08-08T14:40:12.663 に答える
0

多分問題は私の新しいplanningVariable「日」です。その期間に日指数を入れたくありませんでした。そこで、ピリオドクラスをコピーして、デイクラスにしました。ExaminationSolutionInitializer には、inititalizeExamList があります。すべての期間とすべての ExamToHandle をループする前に、日をループします。しかし、問題は scheduleLeader() である可能性があると思います。この方法では、bestRoom と bestPeriod はわかりますが、bestDay はわかりません。どう思いますか?

于 2012-08-20T10:08:11.363 に答える