2015-03-24 64 views
0

我試圖解決時間表問題OptaPlanner但我與可連接到克隆問題面臨的問題。爲什麼當我的計劃實體收集方法看起來像克隆PlanningSolution在OptaPlanner

@PlanningEntityCollectionProperty 
public List<Lesson> getLessons() { 
    return getProject().getLessons(); 
} 

我收到錯誤

java.lang.IllegalStateException:本solutionProperty(教訓)沒有克隆預期。該FieldAccessingSolutionCloner沒有認識到財產的領域,可能是因爲它的字段名稱是不同的。

但是,當方法看起來像

@PlanningEntityCollectionProperty 
public List<Lesson> getLessons() { 
    if (lessons == null) { 
     lessons = getProject().getLessons(); 
    } 
    return lessons; 
} 

一切正常。什麼可能是一個原因?爲什麼我得到這個錯誤?謝謝你的幫助。

回答

0

通用克隆(規劃克隆最好的解決方案使工作液可降解)目前還不能搞定第一段代碼很遺憾。

有2個解決方法:

  • 實現自定義規劃克隆器(這並不簡單,但它在文檔中部分解釋
  • 製作規範場「4.3.7.6克隆一個解決方案。」 (或重構項目來實現解決方案)

我不會這樣做的懶惰的初始化技巧,因爲你可能不總是能夠保證getter已經至少在ap之前至少調用一次蘭寧克隆發生了。