笔记 / Timefold Solver / 求解算法配置
01 / 04 / 04

MoveSelector 移动选择器

状态
持续整理
来源
Obsidian
创建
2026/05/14
公开整理
2026/07/31

30 秒速览#

MoveSelector 决定 Solver 每一步“尝试怎样改变方案”。变量模型不同,可用 move 类型也不同。

基本变量的 move#

Move含义
ChangeMove改一个实体的一个变量
SwapMove交换两个实体的变量值
PillarChangeMove一组同值实体一起改
PillarSwapMove两组同值实体交换
RuinRecreateMove拆掉一部分再用 CH 重建

list variable 的 move#

适合车辆路径、任务列表:

  • ListChangeMove:移动列表元素。
  • ListSwapMove:交换列表元素。
  • SubListChangeMove:移动一段连续子列表。
  • SubListSwapMove:交换两段子列表。
  • KOpt:路径类问题常见边重连。

chained variable 的 move#

适合链式排程、路径:

  • TailChainSwap:交换链尾。
  • SubChainChange:移动一段子链。
  • SubChainSwap:交换两段子链。

链式问题里,move 不只是换一个字段,而是改变一段顺序,可能连带影响后续影子变量。

ChangeMove 为什么重要#

ChangeMove 是最细粒度 move,几乎所有 metaheuristic 都应该包含它。它保证理论上能通过一系列小步到达各种解。

粗粒度 move 可以提高跳出局部最优的能力,但不能完全替代细粒度 move。

Ruin and Recreate#

RuinRecreate 会把一部分实体取消分配,再用构建启发式重建。它适合跳出局部最优,但代价较高,频率要控制。

生产排程中可以理解为:把一小段计划拆开,重新插入。

易错点#

  • 只用粗粒度 move,局部细调能力不足。
  • 只用细粒度 move,跳不出某些局部最优。
  • RuinRecreate 频率过高,拖慢整体求解。
  • chained/list 模型套错 move 类型。

关联笔记#