(把它从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个这样的场景,每个场景都有一些需要满足的不平等。我需要的是一种与我的求解者沟通的方式“选择其中一组不平等而不介意其余的”。我假设我将不得不使用一些二进制变量来编码那些,我也听说过将变量乘以一个巨大的值来“模拟”一个条件,但目前我找不到一种方法来“合并”所有将这些迷你模型合二为一,让解算器选择最佳方案。
答案 0 :(得分: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
让我们使用您的场景......让我们称之为场景s
。对于在情景s
下需要满足的每个不等式,我们将L(M-1_s)项引入大于不等式的LHS。
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
...
...
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
..
...
...
and so on.
取决于Y_i为1的那些,那些M(1-Y_i)项将变为零。因此,不平等将得到执行。 对于所有M(1-Y_j)..左侧将是一个巨大的数字,不平等将始终保持平凡。
好消息是,由于总体目标是最小化T,而T最多是Ta ... Te ...在所有10个场景中,解算器将自动选择最佳场景。
希望有所帮助。