调度问题示例¶
调度问题示例展示 sequence_var、interval_var、no_overlap、precedence 等语义如何降低到 CP-SAT 路径。
https://github.com/Dongbox/optagent-examples
问题说明¶
flow_shop_cp_sat.py:多个作业按相同工艺路线经过机器,目标是压缩整体完工时间。job_shop_small.py:两个作业以不同机器顺序加工,机器容量通过no_overlap表达,工序链通过precedence表达。
目录结构¶
代码示例¶
from optagent import ExactBackendName, ModelBuilder, Orchestrator, OrchestratorConfig
builder = ModelBuilder(metadata={"case": "small_job_shop"})
machine = builder.sequence_var(size=2, default=[0, 1], name="machine")
op_a = builder.interval_var(start=0, length=2, lb_start=0, ub_start=8, lb_length=2, ub_length=2)
op_b = builder.interval_var(start=0, length=3, lb_start=0, ub_start=8, lb_length=3, ub_length=3)
builder.constraint(builder.no_overlap(machine, op_a, op_b), name="machine_capacity")
builder.constraint(builder.precedence(op_a, op_b), name="job_flow")
builder.minimize(builder.interval_end(op_b), name="makespan")
result = Orchestrator().run(
builder.freeze(),
config=OrchestratorConfig(required_backend=ExactBackendName.CP_SAT_NATIVE),
)
运行¶
PYTHONPATH=. python examples/scheduling/flow_shop_cp_sat.py
PYTHONPATH=. python examples/scheduling/job_shop_small.py
注意事项¶
- CP-SAT native 路径需要
ortools。 - 输出重点看 makespan、各机器上的工序顺序、每个 interval 的开始和结束时间。
- 如果只想看序列黑盒搜索,不需要 interval 精确约束,可以先看 黑盒优化。
调度建模 API 见 建模接口,预设对象和选择入口见 Presets API。