我正在使用时间折叠车辆路线快速入门,我添加的主要更改是每次访问所需的技能以及每辆车的车辆技能。
就目前情况而言,我正在使用约束来限制车辆被分配到不具备适当技能的访问。
我想实现一个值范围提供程序,以便只有具有正确技能的车辆才能分配给访问,既可以避免发送错误的车辆,又可以缩小搜索范围以加快计算速度。
我的问题是,我不知道如何解决这个问题,因为车辆使用其分配的访问的计划列表变量。根据我对文档的理解,您不能将值范围提供程序与计划列表变量一起使用。有什么方法可以在车辆实体或访问实体中实现此功能吗?如果没有还有什么其他选择?
我尝试查看文档,并认为答案可能会更改为使用链式变量,但我不确定如何在车辆路由示例中实现它
您正在寻找的是过滤选择。对于列表变量,当前只能为本地搜索配置过滤选择(有关详细信息,请参阅此 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>