从Optaplanner解决方案中检索drools工作内存
问题描述:
当解决约束条件时使用drl文件时,可以使用insertLogical()
,它只在drools的工作内存中插入事实,直到解决方案完成后LHS才会被收回(LHS始终保持为insertLogical()
)。当我们从Optaplanner的solver.solve()
获得解决方案时,我们会收到我们自己的解决方案类选项,如NurseRoster,CloudBalance。但是,我怎么能检索事实,直到我的解决方案停留在Drools的工作记忆,所以我可以看到是什么造成了解决方案?从Optaplanner解决方案中检索drools工作内存
我在寻找类似:
solver.solve(nurseRoster);
scoreDirector.getDroolsWorkingMemory().getNotRetractedFacts()
任何帮助表示赞赏。由于
答
工作记忆是不是可用的编缉解决方案已被处理之后,但使用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();