0

我测试了 Drools Planner 的考试示例。过了一会儿,我想解决一个未解决的问题。我启动了应用程序,选择了一个 xml 文件并点击了解决按钮。在我的 XML 文件中有 5 个考试,有 5 个不同的主题(t1、t2、t3、t4、t5)。

Drools 生成了一个解决方案。在这个解决方案中,有 5 门考试,但它们都有相同类型的主题 (t1)。我没有发现为什么流口水给我 5 次相同主题的考试失败。一开始(在解决之前)调试器告诉我所有考试都有不同的主题。

通常不应该改变考试的主题。

在我的ExamSolutionInitializer.java中,方法“ changeWorkingSolution ”返回错误的解决方案。scoreDirector.getWorkingSolution()生成的考试只有一个主题。

有人可以帮助我吗?

4

3 回答 3

1

您的 XML 输入文件中可能存在错误。您可以将其复制粘贴到此处或 gist.github.com 上并链接吗?

在 Drools Planner 的考试示例中,每个 Exam 实例正好有 1 个字段 Topic,并且 Planner 永远不会更改它。Planner 更改的是考试的字段 Room 和 Period。

public class Exam ... {

    private Topic topic;
    ...

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

此外,考试与主题的关系是一对一的关系。它们本可以设计为 1 类,但没有。主题类包含在计划期间不会更改的所有考试信息,考试类将每个主题链接到它的房间和时期。

考试域图

至于 ExamSolutionInitializer.java:这是在 Planner 中添加构造启发式之前编写的。现在,通常最好只使用首次拟合或首次拟合递减。它仍然存在于考试示例中的唯一原因是,它具有特定领域的代码来处理Exam.isCoincidenceLeader()需要同时安排多个考试并因此需要一起移动的情况。

于 2012-08-07T06:09:27.430 回答
1

问题是我在我的exam.java中将主题声明为@PlanningVariable

于 2012-08-08T14:40:12.663 回答
0

也许问题是我的新规划变量“天”。我不想在此期间有一个日索引。所以我复制了期间的课程并将它们变成了日间课程。在我的 ExamSolutionInitializer 中,我有 initializeExamList。在遍历每个时间段和每个 ExamToHandle 之前,我会遍历这些天。但我认为问题可能出在 scheduleLeader() 上。在这种方法中,我找出了 bestRoom 和 bestPeriod,但没有找出 bestDay。你怎么看?

于 2012-08-20T10:08:11.363 回答