01 / 01 / 01
TimeFold 是什么与适用场景
Timefold Solver 是一个嵌入式规划求解器,用来在大量可行/不可行方案中搜索“尽量好的方案”。它不负责替你发现业务规则,而是要求你把业务对象、可变决策和约束评分讲清楚。
30秒速览#
Timefold Solver 是一个嵌入式规划求解器,用来在大量可行/不可行方案中搜索“尽量好的方案”。它不负责替你发现业务规则,而是要求你把业务对象、可变决策和约束评分讲清楚。
最重要的一句话:Timefold 优化的是你写进 Score 的东西,不是你脑子里默认重要的东西。
它适合什么问题#
适合 Timefold 的问题通常有这些特征:
- 有一批任务、订单、车辆、员工、工件或资源需要分配。
- 决策变量是离散的,例如分配到哪台机器、排在第几个、选择哪个时间段。
- 约束很多,且硬约束和软目标混在一起。
- 业务希望在有限时间内得到一个足够好的方案,而不是穷举最优解。
典型场景:
- 生产排程:订单分配到产线,并决定顺序。
- 车辆路径:车辆访问客户的顺序和分配。
- 员工排班:班次、人员、技能、休息和公平性。
- 装箱/分配:物品放入有限容量的资源中。
它不适合什么问题#
- 规则很少、直接排序或贪心就能稳定解决的问题。
- 纯连续优化问题,例如只求一组连续参数最优。
- 业务目标尚未定义清楚,无法写出约束评分的问题。
- 需要严格证明全局最优,且问题规模又很大的场景。
和普通业务代码的区别#
普通业务代码通常是“按规则一步步构造结果”。Timefold 的方式是:
- 你给出模型:哪些对象能被改变。
- 你给出评分:什么方案更好。
- 求解器不断尝试改变方案。
- 分数更高的方案被保留,直到时间或条件结束。
因此,Timefold 项目的成败关键不在“调用 Solver”,而在:
- 领域模型是否表达了真实决策。
- 约束是否覆盖了业务底线和优化目标。
- 分数权重是否能表达优先级。
- 数据规模是否在可搜索范围内。
在生产排程里的直觉#
以订单排程为例:
订单/任务往往是规划实体,因为它们的位置、产线、时间会变。产线/模具/产品规格/换型矩阵往往是问题事实,因为求解过程中它们不变。订单属于哪条产线、排在谁后面是规划变量。开始时间、结束时间、所属产线可以由规划变量推导,适合作为影子变量。延期、换型时间、产线不兼容、资源冲突是约束。
易错点#
| 易错点 | 正确理解 |
|---|---|
| 以为求解器会自动懂业务 | 业务必须被写成约束和分数 |
| 只建模时间,不给换型惩罚 | 求解器只优化分数,时间正确不代表换型会少 |
| 把所有规则都做成硬约束 | 可能导致无可行解,软目标也失去优化空间 |
| 只在小数据集上验证 | 小数据表现好不代表生产规模能跑 |
关联笔记#
待补#
- 对照 2.0.0 文档补“PlanningAI”和开源 Solver / ready-made REST model 的边界。