【问题标题】:How to implement a custom termination in Optaplanner如何在 Optaplanner 中实现自定义终止
【发布时间】:2018-07-24 00:06:26
【问题描述】:

我正在尝试实现自定义终止类,但我无法注入 TerminationConfig 类的扩展以便加载并读取新终止所需的自定义字段(包含在求解器 config.xml)。

我已经实现了两个:通过扩展 AbstractTermination 的自定义终止以及 TerminationConfig 的扩展。

缺少的部分是我如何告诉 Optaplanner 使用我的自定义配置类

提前谢谢你。

【问题讨论】:

    标签: optaplanner


    【解决方案1】:

    使用TerminationConfig.setTerminationClass(myClass)

    <termination>
      <terminationClass>org.foo.Bar</terminationClass>
    </termination>
    

    如果这还不够,请尝试

    <termination class="org.foo.BarTerminationConfig">
      <barField>7</barField>
    </termination>
    
    • 1) 您的自定义终止有什么作用?我想了解用例来评估我们是否可以在未来的版本中立即支持它。
    • 2) 我们可以很容易地添加customProperties 支持。看起来像这样:

      <termination>
        <terminationClass>org.foo.Bar</terminationClass>
        <customProperties>
          <barField>7</barField>
        </customerProperties>
      </termination>
      

      注意不需要 BarConfig 类。 Create a jira for it and link it here.

    【讨论】:

    • 使用第一种方式 (terminationClass) 自定义配置参数无法传递给自定义终止。第二种方法是在我添加类属性时引发解组错误(我尝试只扩展官方 TerminationConfig 而没有额外的代码)
    • 动机:是因为我有一些情况(通常是简单的 vrp 问题),其中没有移动可以提高分数,并且求解器在此处的 LocalSearchDecider link 中进入无限循环。我的自定义终止检测分数何时停留在阶段步骤中并避免无限循环。检查这里的实现link
    • PS:我不想按时间使用终止符
    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多