2017-10-12 59 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(); 
相关问题