【发布时间】:2021-04-20 21:49:45
【问题描述】:
我开始使用 Gurobi 优化器进行调度,需要一些帮助以使事情变得更复杂。
这是一个调度 3 个事件的工作示例,其约束条件是事件不能在连续的时间段中,并且成本随时间线性上升。
import numpy as np
import gurobipy as gp
from gurobipy import GRB
m = gp.Model("example")
days = np.arange(10)
sched = m.addMVar(10, vtype=GRB.BINARY)
# Demand 3 scheduled events
m.addConstr(sched.sum() == 3)
# Constrain that can't schedule consecutive time slots
m.addConstrs(sched[i+1] @ sched[i] == 0 for i in range(9))
# Cost increases linearly with time
cost = np.arange(1, 11)
# Objective function
m.setObjective(sched @ cost, GRB.MINIMIZE)
m.optimize()
print(m.X)
这给出了正确的结果:[1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]
我现在想扩展我的目标函数,以奖励 N 天的计划间隔(例如,每次计划相隔 4 天的事件都会产生 -20 的成本)。我可以用gap_array = days[:, np.newaxis] - days 列出所有可能的日程安排间隔。我是否通过蛮力循环,并且 gap_array 是我的目标差距的每个点都在目标中添加一个术语?
【问题讨论】: