'杂交'得分(Drools + Java)

时间:2017-09-07 11:20:35

标签: optaplanner

我基本上试图为OptaPlanner实现某种混合(drools + java)评分。 大多数规则是drools,但是,如果我在java中执行它,我可以更快地执行某些规则的约束检查。 因此,在解决方案更改后,drools记分器将运行,我的Java记分员将被调用,然后将修改drools计算的结果。 AbstractIncrementalScoreCalculator接口看起来很有前途。 (我不是试图实现完全增量评分,只是一些性能改进。)

有什么提示吗?我是在正确的轨道上吗?有人得到提示/建议吗?

由于 蒂博尔

UPDATE1: 所以,根据Geoffrey的提示,我做了以下几点:

所以,我修改了ScoreDirectorFactoryConfig,所以如果配置了incremental和drools记分器,它现在不会抛出一个excpetion,而是创建一个HybridScoreDirector。 (使用修改版本的LegacyDroolsScoreDirectorFactory,它将IncrementalScoreCalculator实例注入HybridScoreDirector。)HybridScoreDirector本身是一个修改过的DroolsScoreDirector,其中calculateScore在执行drools评分后调用增量记分员的calculateScore方法。接口方法(afterVariableChanged,beforeVariableChanged也是从ScoreDirector中调用的,虽然我没有在我的测试中使用它们。目前我使用延迟接受在我的笔记本电脑上实现了大约1200步/秒。

1 个答案:

答案 0 :(得分:0)

它目前只能使用1个ScoreDirector:drools xor inc java xor easy java。那是一个死胡同。

从drools调用java代码是可能的,但是修改后的通知需要对你有利...例如:在影子实体上放置InverseRelationShadowVariable如果你想对所有的ShiftAssignments进行计算,那么Employee会发生这种情况。雇员。