2012-08-06 75 views
0

我測試了Drools Planner的考試範例。過了一段時間,我想解決一個未解決的問題。我啓動了應用程序,選擇了一個xml文件並點擊解決按鈕。在我的XML文件中,有5個不同主題的考試(t1,t2,t3,t4,t5)。Drools Planner考試範例只有一個主題

Drools生成了一個解決方案。在這個解決方案中有5個考試,但他們都有相同類型的主題(t1)。我沒有發現爲什麼流口水給了我5個相同主題的考試失敗。在開始(解決之前)調試器告訴我所有的考試都有不同的主題。

通常不應改變考試的主題。

在我ExaminationSolutionInitializer.java的methhod 「changeWorkingSolution」 返回一個錯誤的解決方案。 scoreDirector.getWorkingSolution()只生成一個主題的考試。

有人能幫助我嗎?

回答

1

您的XML輸入文件中可能存在一個錯誤。你可以複製粘貼它在這裏或gist.github.com並鏈接它?

在Drools Planner的考試範例中,每個考試實例都只有1個字段,並且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對1關係。他們本來可以設計爲1班,但沒有。 Topic課程包含在規劃期間不會更改的所有考試信息,考試課程將每個主題連接到Room和Period。

examination domain diagram

對於ExaminationSolutionInitializer.java:這是寫在計劃加建啓發式之前。現在,通常使用第一次適合或第一次適合減少通常會更好。在考試範例中它仍然存在的唯一原因是因爲它具有域特定的代碼來處理Exam.isCoincidenceLeader()的情況,因爲多個考試需要安排在同一時間段,因此需要一起移動。

1

問題是,我宣佈主題爲@PlanningVariable我exam.java

+1

有趣的:)我想你也宣佈了一個有效的@ValueRange。我想知道Planner能檢測到這樣的問題嗎?對於很多常見的錯誤,它會自動快速失敗,但對於這一個我不認爲它可以? – 2012-08-09 07:25:27

+1

不要問我爲什麼這麼做;-)但是像你提到的檢測將是非常有用的。也許在控制檯上的輸出包括所有的PlanningVariables將是一個想法。用戶應該看到哪個實體是計劃實體以及它具有哪些靜態和計劃變量。 :) – Vivid 2012-08-09 22:06:17

0

也許問題是我的新planningVariable「天」。我不想在這個時期有一個指數。所以我抄了週期班,讓他們上了日班。在我的ExamSolutionInitializer中,我有inititalizeExamList。在循環遍歷每個時期和每個ExamToHandle之前,我循環了幾天。 但我認爲問題可能是scheduleLeader()。在這種方法中,我找出最好的房間和最好的時間,但沒有最好的日子。你怎麼看?