LinProg Python,让设备不间断运行

问题描述 投票:0回答:1

我正在尝试为我的设备创建一个约束,即它一旦启动就必须不可中断。

我的设备有最短启动时间和最长启动时间,比如说 10:00 和 20:00。它也有持续时间,比如说 6 小时。

我现在的问题是,当我运行代码时,结果并不符合预期,它在 10,11,13,14,15,16 时给了我这些时间。它不应该跳过 12 并在 15 处停止,因为我希望它继续。我试图给它某种约束,即 StartTime+Duration = Endtime

这是我正在尝试修复的代码

for idx, appliance in enumerate(appliances):
   if appliance['continuous']:
        for i in range(appliance['time_min'], appliance['time_max'] - appliance['duration_time'] + 2):
        A_eq[idx, i + idx * 24: i + idx * 24 + appliance['duration_time']] = 1
        # Ensure continuity by adding the constraint that start + duration = end
        A_eq[idx, i + idx * 24 + appliance['duration_time'] - 1] = -1
   else:
    for i in range(appliance['time_min'], appliance['time_max'] - appliance['duration_time'] + 1):
        A_eq[idx, i + idx * 24: i + idx * 24 + appliance['duration_time']] = 1

任何帮助都很棒:) 对于 linprog 来说这是否可能,或者这是一个 milp 问题?

mathematical-optimization linear-programming
1个回答
0
投票

最好从代码中退一步。这个问题通常使用初创企业的概念来建模。启动是指机器从关闭 (0) 变为开启 (1)。我们只想看到 0 或 1 家初创企业。我们可以将其实现为:

 start[t] >= x[t] - x[t-1]
 sum(t, start[t]) <= 1
 x, start: binary variables

在第一个月期间必须要小心。这是调度文献中众所周知的方法。

© www.soinside.com 2019 - 2024. All rights reserved.