跳转至

调度问题示例

调度问题示例展示 sequence_varinterval_varno_overlapprecedence 等语义如何降低到 CP-SAT 路径。

https://github.com/Dongbox/optagent-examples

问题说明

  • flow_shop_cp_sat.py:多个作业按相同工艺路线经过机器,目标是压缩整体完工时间。
  • job_shop_small.py:两个作业以不同机器顺序加工,机器容量通过 no_overlap 表达,工序链通过 precedence 表达。

目录结构

examples/scheduling/
  README.md
  flow_shop_cp_sat.py
  job_shop_small.py

代码示例

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