8.2. solver 环境模式


解决方案环境模式允许您检测实施中的常见错误。它不会影响日志级别。

寻址程序只有一个随机实例。有些解决方法配置使用随机实例,其随机实例数量不止于其他实例。例如,Simulated Anneing 算法依赖于随机数字,而 Tabu Search 仅依赖于它解析分数绑定。环境模式会影响该随机实例的影响。

您可以在解决器配置 XML 文件中设置环境模式。以下示例设置了 FAST_ASSERT 模式:

<solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd">
  <environmentMode>FAST_ASSERT</environmentMode>
  ...
</solver>

以下列表描述了您可以在解析器配置文件中使用的环境模式:

  • FULL_ASSERT 模式会开启所有断言,例如,在每次移动中递增分数计算未损坏,导致移动实施、约束、引擎本身等问题的快速失败。这个模式是可重复生成的。它还容易受到入侵,因为它调用了方法 computeScore() 比非assert 模式更频繁。FULL_ASSERT 模式非常慢,因为它不依赖于增量分数计算。
  • NON_INTRUSIVE_FULL_ASSERT 模式开启一些断言,在移动实施、约束、引擎本身等方面快速失败。这个模式是可重复生成的。它是非侵入性,因为它不调用 计算Score() 比一个非断模式更频繁。NON_INTRUSIVE_FULL_ASSERT 模式非常慢,因为它不依赖于增量分数计算。
  • FAST_ASSERT 模式开启大多数断言,例如,撤消Move 的分数与移动前的分数相同,以在 Move 实施、移动实施、约束、引擎本身等时快速出现失败。这个模式是可重复生成的。它还容易受到入侵,因为它调用了方法 computeScore() 比非assert 模式更频繁。FAST_ASSERT 模式很慢。编写与 FAST_ASSERT 模式的简短运行情况的测试案例。
  • REPRODUCIBLE 模式是默认模式,因为建议在开发过程中。在这个模式中,两个以相同的 OptaPlanner 版本运行,会以相同的顺序执行相同的代码。这两个运行在每个步骤都具有相同的结果,但适用下列注释时除外。这可让您持续复制错误。它还可让您对某些重构进行基准测试,如分数约束性能优化,并在运行时非常公平。

    注意

    尽管使用 REPRODCIBLE 模式,但出于以下原因,您的应用程序可能仍不能完全重复:

    • 使用 HashSet 或另一个 集合,JVM 运行之间有不一致的顺序,用于计划实体或规划值的集合,但并非正常问题事实,特别是在解决方案实现中。使用 LinkedHashSet 替换它。
    • 将有时间的依赖算法合并起来,特别是模拟算法,以及所花费的时间和终止时间。分配的 CPU 时间有足够大的差异会影响时间值。将 Simulated Anneing 算法替换为 Late Acceptance 算法,或者用步骤数终止替换终止所花费的时间。
  • REPRODUCIBLE 模式可能比 NON_REPRODUCIBLE 模式稍慢。如果您的生产环境可从可重复生成的可复制性中受益,则在生产环境中使用此模式。在实践中,如果未指定任何 seed,则 REPRODUCIBLE 模式使用默认固定随机 seed,同时还会禁用某些并发优化,比如加速工作。
  • NON_REPRODUCIBLE 模式可能比 REPRODUCIBLE 模式更快。避免在开发过程中使用它,因为它进行了调试和修复困难。如果在生产环境中复制性不重要,请在生产中使用 NON_REPRODUCIBLE 模式。在实践中,如果没有指定任何 seed,这个模式不使用固定的随机 seed。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部