当解决约束时使用drl文件时,可以使用insertLogical()
仅在drools工作内存中插入事实,并且可能直到解决方案完成时才撤回(LHS对于insertLogical()
永远保持真实)。当我们从Optaplanner的solver.solve()
获得解决方案时,我们会收到我们自己的解决方案类选项,如NurseRoster,CloudBalance。但是,我怎么能找到留在Drools工作记忆中的事实,直到我的解决方案停留,所以我可以看到是什么导致了解决方案?
我正在寻找类似的东西:
solver.solve(nurseRoster);
scoreDirector.getDroolsWorkingMemory().getNotRetractedFacts()
感谢任何帮助。感谢
答案 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();