2017-10-12 135 views
0

當解決約束條件時使用drl文件時,可以使用insertLogical(),它只在drools的工作內存中插入事實,直到解決方案完成後LHS纔會被收回(LHS始終保持爲insertLogical())。當我們從Optaplanner的solver.solve()獲得解決方案時,我們會收到我們自己的解決方案類選項,如NurseRoster,CloudBalance。但是,我怎麼能檢索事實,直到我的解決方案停留在Drools的工作記憶,所以我可以看到是什麼造成了解決方案?從Optaplanner解決方案中檢索drools工作內存

我在尋找類似:

solver.solve(nurseRoster); 
scoreDirector.getDroolsWorkingMemory().getNotRetractedFacts() 

任何幫助表示讚賞。由於

回答

0

工作記憶是不是可用的編緝解決方案已被處理之後,但使用scoreDirector以這種方式從活動的會話檢索:

solver.getScoreDirectorFactory().buildScoreDirector()  
    director=(DroolsScoreDirector<Solution>)((DefaultSolver)solver).getSolverScope().getScoreDirector(); 
    LegacyDroolsScoreDirectorFactory<TaskPlanningSolution> scoreDirectorFactory = (LegacyDroolsScoreDirectorFactory)director.getScoreDirectorFactory(); 
    KnowledgeBaseImpl kbase=(KnowledgeBaseImpl)scoreDirectorFactory.getKieBase();//.newKieSession(); 
    InternalWorkingMemory internalWorkingMemory =((StatefulKnowledgeSessionImpl)kbase.getWorkingMemories()[0]).getInternalWorkingMemory();