线性编程 - 组合模型

时间:2013-11-14 14:59:14

标签: linear-programming

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

1 个答案:

答案 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。

方案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个场景中,解算器将自动选择最佳场景。

希望有所帮助。