(把它从 math.se 移到这里——它没有得到足够的爱。对不起!)
因此,我被分配使用线性(整数)编程对多处理器设置进行建模。基本上,有五个处理器之间有链接,目标是找到通信/处理的最佳调度,以最大限度地减少处理一组数据的时间。图表如下:
---
|A|
---
|
|
--- ---
|B|----|D|
--- ---
| |
| |
--- ---
|C|----|E|
--- ---
以 A 为数据源。现在,有几种不同的场景(与流向和发送/接收数据的顺序有关),并且对于每种场景,表示处理时间的不等式是不同的。
例如,如果数据从 B 流向 D,从 B 流向 C,从 D 流向 E,从 C 流向 E,则 B 先与 C 通信,再与 D 通信,E 先从 C 接收,再从 D 接收, C 的总处理时间等于:
Tc >= Cab + Cbc + Cce + Sc*Dc //Sc is constant
但是,如果 B 先将数据发送给 D,然后再发送给 C,那么它是
Tc >= Cab + Cbd + Cbc + Cce + Sc*Dc //Sc is constant
等等。总的来说,有 10 种这样的场景,每一种都需要满足一些不等式。我需要的是一种与我的求解器沟通的方式“选择其中一组不等式,不介意其余的”。我想我将不得不使用一些二进制变量来对它们进行编码,我也听说过将变量乘以一个巨大的值来“模拟”一个条件,但目前我找不到一种方法来“合并”所有这些迷你模型合二为一,让求解器选择最佳方案。