1

(把它从 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 种这样的场景,每一种都需要满足一些不等式。我需要的是一种与我的求解器沟通的方式“选择其中一组不等式,不介意其余的”。我想我将不得不使用一些二进制变量来对它们进行编码,我也听说过将变量乘以一个巨大的值来“模拟”一个条件,但目前我找不到一种方法来“合并”所有这些迷你模型合二为一,让求解器选择最佳方案。

4

1 回答 1

1

这是配方的草图:

你有十个场景,S1 到 S10

让我们引入二进制变量Y_i来表示 10 个场景中的哪一个在起作用。所以这些变成了Specially Ordered Set

 Sum (over i in 1..10 )  Y_i = 1 (Only one scenario holds at a time.)

要求

对于每种情况,都必须遵守一些不等式。应忽略所有其他不等式(适用于其他情况)。

M是一个大数。说比任何数据集的最大可能处理时间大两个数量级。

目标函数:

Min T

约束:

T >= Ta
...
T >= Tc
..
T >= Te

让我们使用您的场景......让我们称之为 Scenario s。对于场景 下需要满足的每个不等式s,我们将 M(1-Y_s) 项引入大于不等式的 LHS。

场景 s 的不等式:

Tc + M(1-Y_s) >= Cab + Cbc + Cce + Sc*Dc //Sc is constant
Tc + M(1-Y_s) >= Cab + Cbd + Cbc + Cce + Sc*Dc //Sc is constant
...
...

其他一些场景 t 的不等式:

Td + M(1-Y_t) >= Cde + Cbc + Sd*Dd //Sd is constant
Td + M(1-Y_t) >= Cde + Cbd + Cbc + Cce + Sd*Dd //Sd is constant
..

场景 u 的不等式:

...
...
and so on.

根据 Y_i 为 1,那些 M(1-Y_i) 项将变为零。所以不平等将被强制执行。对于所有的 M(1-Y_j).. 左边将是一个巨大的数字,并且不等式将总是微不足道的。

好消息是,由于总体目标是最小化 T,而 T 又是 Ta...Te... 在所有 10 个场景中的最大值,Solver 将自动选择最佳场景。

希望有帮助。

于 2013-11-15T20:56:43.400 回答