使用Timefold列表模型配置Tabu Search报错,如何正确设置?
解决Timefold列表模型中Tabu Search的配置问题
报错原因
报错核心原因是:列表模型的ListAssignMove移动类型未实现getPlanningEntities()方法,无法支持Entity Tabu Search,这是列表模型移动的特性限制。
正确配置方案
针对Timefold列表模型,需改用以下兼容的Tabu Search类型:
Value Tabu Search:将列表中的值(如任务对象)纳入禁忌范围,避免重复分配相同值
<localSearch> <unionMoveSelector> <listAssignMoveSelector/> <listSwapMoveSelector/> </unionMoveSelector> <acceptor> <!-- 调整禁忌大小适配业务场景 --> <valueTabuSize>7</valueTabuSize> </acceptor> <forager> <acceptedCountLimit>1</acceptedCountLimit> </forager> </localSearch>Move Tabu Search:直接禁忌具体的移动操作(如某任务分配到特定位置的动作)
<localSearch> <unionMoveSelector> <listAssignMoveSelector/> <listSwapMoveSelector/> </unionMoveSelector> <acceptor> <!-- 调整禁忌大小适配业务场景 --> <moveTabuSize>10</moveTabuSize> </acceptor> <forager> <acceptedCountLimit>1</acceptedCountLimit> </forager> </localSearch>
额外注意事项
- 列表模型的所有内置移动类型(
ListAssignMove、ListSwapMove等)均不支持Entity Tabu,请勿配置entityTabuSize参数 - 调试时出现的“退出永不终止的选择器”警告,通常是值选择器未正确过滤无效候选值,需检查
@PlanningListVariable的约束或值范围配置,确保只生成合法值
内容的提问来源于stack exchange,提问作者heyif
相关产品推荐
相关产品推荐

