如果您在规划实体中使用列表变量,可以使用哪些替代值范围提供程序来限制搜索?

问题描述 投票:0回答:1

我正在使用时间折叠车辆路线快速入门,我添加的主要更改是每次访问所需的技能以及每辆车的车辆技能。

就目前情况而言,我正在使用约束来限制车辆被分配到不具备适当技能的访问。

我想实现一个值范围提供程序,以便只有具有正确技能的车辆才能分配给访问,既可以避免发送错误的车辆,又可以缩小搜索范围以加快计算速度。

我的问题是,我不知道如何解决这个问题,因为车辆使用其分配的访问的计划列表变量。根据我对文档的理解,您不能将值范围提供程序与计划列表变量一起使用。有什么方法可以在车辆实体或访问实体中实现此功能吗?如果没有还有什么其他选择?

我尝试查看文档,并认为答案可能会更改为使用链式变量,但我不确定如何在车辆路由示例中实现它

java optaplanner timefold
1个回答
0
投票

您正在寻找的是过滤选择。对于列表变量,当前只能为本地搜索配置过滤选择(有关详细信息,请参阅此 GitHub 讨论)。 本期跟踪为构造启发式配置移动选择器(以及过滤选择)。

所以我推荐的是:

  • 在您的

    ConstraintProvider
    中设置限制,以确保车辆的技能与访问所需的技能相匹配。这样构建启发式不会将访问分配给不具备所需技能的车辆。

  • 在 SolverConfig 中配置本地搜索的过滤选择,这将导致本地搜索仅将访问分配给具有所需技能的车辆。

<solver xmlns="https://timefold.ai/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://timefold.ai/xsd/solver https://timefold.ai/xsd/solver/solver.xsd">
  <!-- ... -->
  <constructionHeuristic />
  <localSearch>
    <unionMoveSelector>
      <listChangeMoveSelector>
        <filterClass>...Filter</filterClass>
          <!-- ... -->
      </listChangeMoveSelector>
      <!-- ... -->
    </unionMoveSelector>
  </localSearch>
</solver>
© www.soinside.com 2019 - 2024. All rights reserved.