2012-04-09 46 views
1

就像问题所说。之后破硬(或软)限制

solver.solve(); 

我想查看违反的具体规则(与值)。我如何从解决方案中获得他们?

+0

嗨。你解决了你的问题吗? – Nurlan 2012-04-19 05:35:24

+0

我还没有尝试过**但是**因为被绑起来。但我个人会保证对所有非不可能的但非常不利的状态使用软约束(具有较大的负分),并使用计划实体难度来告诉Drools分配更难以分配的实体。我的程序需要处理来自许多用户的“流氓”规则,因此移除严格的约束条件会有所帮助。 – aitchnyu 2012-04-19 06:36:26

回答

1

的例子已经做到这一点,看看这个方法:

org.drools.planner.examples.common.business.SolutionBusiness#getScoreDetailList() 

但它尚不规范,见this issue

+0

我修改了这个方法到我的代码,但流程总是去'if(workingMemory == null){return Collections.emptyList(); }'。这可能是什么原因?这很奇怪,因为在文档中说DroolsScoreDirector.getWorkingMemory()永远不会返回null,但它确实如此。 – kolobok 2013-03-05 10:11:52

+0

@akapelko在手册中,寻找guiScoreDirector。我的猜测是你没有使用Solver.getScoreDirectorFactory()为你创建一个ScoreDirector。或者你还没有调用ScoreDirector.resetSolution()来告诉它你的解决方案。 – 2013-03-06 11:06:27