我测试了Drools Planner的检查示例。过了一会儿,我想解决一个未解决的问题。我启动了应用程序,选择了一个xml文件并点击了解决按钮。在我的XML文件中有5个不同主题的考试(t1,t2,t3,t4,t5)。
Drools生成了一个解决方案。在这个解决方案中有5个考试但是所有考试都有相同类型的主题(t1)。我没有找到为什么drools给我5个相同主题的考试的失败。在开始时(解决之前),调试器告诉我所有考试都有不同的主题。
通常不应更改考试的主题。
在我的 ExaminationSolutionInitializer.java 中,方法“ changeWorkingSolution ”返回错误的解决方案。 scoreDirector.getWorkingSolution()仅使用一个主题生成考试。
有人能帮助我吗?
答案 0 :(得分:1)
您的XML输入文件中可能存在错误。您可以将其粘贴到此处或gist.github.com上并将其链接并链接吗?
在Drools Planner的考试示例中,每个考试实例都有1个字段主题,并且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类将每个主题链接到它的Room和Period。
至于ExaminationSolutionInitializer.java:这是在Planner中添加构造启发式之前编写的。现在,通常最好只使用第一次拟合或第一次拟合减少。它仍然存在于考试示例中的唯一原因是因为它需要特定于域的代码来处理Exam.isCoincidenceLeader()
案例,因为需要在同一时间段安排多个考试,因此需要一起移动。
答案 1 :(得分:1)
问题是我在exam.java中将主题声明为@PlanningVariable
答案 2 :(得分:0)
也许问题是我的新计划变量“日”。我不想在这个时期有一个日期指数。所以我复制了期间课程并将它们变成了日课程。在我的ExaminationSolutionInitializer中,我有inititalizeExamList。在循环每个句点和每个ExamToHandle之前,我循环了几天。 但我认为问题可能是scheduleLeader()。在这个方法中,我找出了bestRoom和bestPeriod,但没有bestDay。你觉得怎么样?