【发布时间】:2020-07-08 09:16:12
【问题描述】:
希望每个人都在家里平安无事!
我有以下问题:
若干“N”台机器,每台机器可以有若干“M”个状态。每个州都有不同的权力水平。我的目标是计算每台机器需要设置为低于负载阈值的状态。
例如,假设我有 5 台不同的机器和以下状态:
+---------+---------+---------+---------+---------+
| Machine | State 1 | State 2 | State 3 | State 4 |
+---------+---------+---------+---------+---------+
| 1 | 1000 | 600 | 400 | 50 |
| 2 | 1500 | 800 | 500 | 60 |
| 3 | 1000 | 500 | 400 | 50 |
| 4 | 500 | 300 | 100 | ---- |
| 5 | 700 | 600 | 100 | ---- |
+---------+---------+---------+---------+---------+
**注意机器 4 和 5 没有状态 4
假设一切都在状态 1 下运行,总功率将为 4700W。
但是假设我想降低700W,那么新的操作需要
**obs:真实数据可能有大约 1 到 2 k 台机器。
我可以用 LP 解决这个问题吗?我怎样才能解决这个问题?
我已经尝试过的事情:
1)我实现了一个遗传算法来解决这个问题,但是性能真的很差,解决问题需要几分钟,也许我的实现很糟糕,也许是变量的数量。
2) 我尝试暴力破解并生成所有可能的排列并生成一个大查找表,但是机器和状态可能会经常更改,因此这不是一个有效的解决方案。
3) 当前实现在状态 1 上启动所有机器,并减少一台机器,按状态将所有状态从低到高排序。它运行得非常快,但有时结果不是最佳的。
更新 (03/30)
如果不清楚,我的目标是为每台机器计算一组状态,以最小化它们的功率与 SET TARGET 之间的差异。
对于上面的示例,如果我绘制可能的状态和总功率,我会得到如下结果:
所以如果我想以 3000 的最大功率运行两台机器(1 和 2),我需要在状态 1 下运行两台机器,因为该状态的最大功率是 2500。
如果我想以 2300 的最大功率运行两台机器(1 和 2),我需要在状态 2 下运行机器 1,在状态 1 下运行机器 1。
换句话说,我需要在设定的负载下,并在最大可能的功率下。
【问题讨论】:
-
我认为您没有明确定义目标函数来最小化或最大化使用 LP 找到解决方案。总功率值看起来像一个约束而不是一个目标函数。
-
你确定你没有忘记什么吗?如果没有额外的限制,这看起来并不那么有趣。如当前所述:只需为每台机器选择最小状态/每行的最小值。这是最小化功耗的全局最优值,并且将保持全局选择,因为没有描述动态修改的过程。未来查询 x 和未来查询 y 将被视为相同,因为您已经知道全局最优并且每个查询都是一个简单的 if 语句。如果您有侧面约束或其他东西:只需使用约束编程。但是细节很重要......
-
感谢 cmets,我的目标函数是设定功率与计算的“可能的新功率”的差异。我想要做的是有一个设定的目标,并计算机器需要在哪里以最小化这种差异。
标签: python algorithm numpy optimization linear-programming