2012-04-09 10 views
1

Wie die Frage sagt. Nach einerErhalten Sie gebrochene (oder weiche) Einschränkungen

solver.solve(); 

Ich möchte bestimmte Regeln (mit Werten) sehen, die verletzt wurden. Wie kann ich sie von der Lösung bekommen?

+0

Hallo. Hast du dein Problem gelöst? – Nurlan

+0

Ich habe es noch nicht ** probiert ** wie ich gefesselt bin. Aber ich würde persönlich dafür plädieren, weiche Einschränkungen (mit einem großen negativen Score) für alle nicht-unmöglich, aber höchst unerwünschten Zustände zu verwenden und Drools mit Hilfe von Planning-Entity-Schwierigkeiten zu beauftragen, schwer zuzuordnende Entitäten zuzuweisen. Mein Programm muss mit "Rogue" -Regeln von vielen Benutzern umgehen, daher hilft das Entfernen von harten Beschränkungen. – aitchnyu

Antwort

1

Die Beispiele tun dies bereits, werfen Sie einen Blick auf diese Methode:

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

Aber es ist noch nicht standardisiert, this issue sehen.

+0

Ich änderte diese Methode zu meinem Code, aber der Fluss geht immer zu 'if (workingMemory == null) {return Collections.emptyList(); } '. Was können Gründe dafür sein? Es ist seltsam, weil in der Dokumentation gesagt wird, dass DroolsScoreDirector.getWorkingMemory() nie null zurückgibt, aber es tut. – kolobok

+0

@akapelko im Handbuch, suchen Sie nach guiScoreDirector. Ich schätze, Sie verwenden Solver.getScoreDirectorFactory() nicht, um einen ScoreDirector für Sie zu erstellen. Oder Sie haben ScoreDirector.resetSolution() nicht aufgerufen, um Ihre Lösung zu beschreiben. –