关于Bavet约束流不可复现问题的技术咨询
Bavet约束流切换后的可复现性问题
我现有一套基于Drools约束流的可行解决方案,包含两类测试:
- 约束测试:涵盖单个约束测试及使用
ConstraintVerifier的组合测试 - 集成式测试:通过求解器处理已知最优解的golden问题并断言结果
为确保环境完全可复现,我做了如下配置:
- 采用基于步骤的终止策略
- 设置随机种子为0
- 局部搜索使用SA(模拟退火)
在Drools约束流方案下,多次运行测试的结果及步骤数完全一致。
为优化性能,我尝试将约束流从Drools切换至Bavet,测试结果如下:
- 约束测试仍全部通过,分数计算速度提升约20倍
- 部分集成测试失败:无法找到最优解,且每次运行得到的非最优解均不同
请问Bavet实现中是否存在固有不可复现机制?例如是否使用独立的Random实例,或是依赖System.identityHashCode()这类非确定性逻辑?
我希望获得更快的分数计算速度,但可复现性是我更看重的需求。
补充说明:为适配Bavet,我用大量groupBy改写了原约束逻辑(原Drools中的map方式会抛出UnsupportedOperationException),会不会是groupBy与Bavet的组合导致了这个问题?
内容的提问来源于stack exchange,提问作者whiskeysierra
相关产品推荐
相关产品推荐

