从Optaplanner解决方案中检索drools工作记忆

时间:2017-10-12 07:23:20

标签: drools optaplanner drools-guvnor drools-planner

当解决约束时使用drl文件时,可以使用insertLogical()仅在drools工作内存中插入事实,并且可能直到解决方案完成时才撤回(LHS对于insertLogical()永远保持真实)。当我们从Optaplanner的solver.solve()获得解决方案时,我们会收到我们自己的解决方案类选项,如NurseRoster,CloudBalance。但是,我怎么能找到留在Drools工作记忆中的事实,直到我的解决方案停留,所以我可以看到是什么导致了解决方案?

我正在寻找类似的东西:

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

感谢任何帮助。感谢

1 个答案:

答案 0 :(得分: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();