当前位置 : 首页 » 互动问答 » 正文

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

分类 : 互动问答 | 发布时间 : 2018-04-27 16:27:06 | 评论 : 1 | 浏览 : 28 | 喜欢 : 0

当解决约束时使用drl文件时,可以使用 insertLogical(),它仅在drools的工作内存中插入事实,并且可能不会被撤回直到解决方案完成(LHS始终保持为 insertLogical())。当我们从Optaplanner的 solver.solve()获得解决方案时,我们会收到我们自己的解决方案类选项,如NurseRoster,CloudBalance。但是,我怎么能检索事实,留在Drools工作记忆,直到我的解决方案保持,所以我可以看到是什么原因造成的解决方案?

我寻找像这样的东西:

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

任何帮助表示赞赏。谢谢

回答(1)

  • 1楼
  • 工作内存在处理完解决方案后不可用,但是使用 scoreDirector 以这种方式从活动会话中检索:

     solver.getScoreDirectorFactory()。buildScoreDirector()
        导演=(DroolsScoreDirector <解决办法>)((DefaultSolver)解算器).getSolverScope()getScoreDirector();
        LegacyDroolsScoreDirectorFactory <TaskPlanningSolution> scoreDirectorFactory =(LegacyDroolsScoreDirectorFactory)director.getScoreDirectorFactory();
        KnowledgeBaseImpl kbase =(KnowledgeBaseImpl)scoreDirectorFactory.getKieBase(); // newKieSession();
        InternalWorkingMemory internalWorkingMemory =((StatefulKnowledgeSessionImpl)kbase.getWorkingMemories()[0])。getInternalWorkingMemory();

相关阅读: