Data structures 线性规划中负系数的求解
我试图用线性规划来解决一个指派问题。 我正在使用CLRS中提到的单纯形算法 考虑以下示例:Data structures 线性规划中负系数的求解,data-structures,linear-programming,clrs,Data Structures,Linear Programming,Clrs,我试图用线性规划来解决一个指派问题。 我正在使用CLRS中提到的单纯形算法 考虑以下示例: --(1/1)--->|a|---(10/1)------>|d|-----------> | | ^ | | |_(7/1)__ | | |s| ________|_(1
--(1/1)--->|a|---(10/1)------>|d|----------->
| | ^ |
| |_(7/1)__ | |
|s| ________|_(12/1)__| |t|
| | |_______ |
| | | |
| | v |
--(1/1)--->|b|---(10/1)---->|c|--(1/1)----->
--(1/1)——————————————————————————————————————————————————————————————————————
| | ^ |
| |_(7/1)__ | |
|s | | | | | | | | | | | | | t(12/1)|
| | |_______ |
| | | |
||v|
--(1/1)-->|b |--(10/1)-->|c |--(1/1)--->
顶点a和b是人
顶点c和d是作业
我将其建模为最小成本最大流量问题
已添加源S和汇t
所有边权重都已设置为1
从源到顶点a和b的边成本设置为1
从d、c到接收器的边缘成本设置为1
边缘中的(a/b)值表示该边缘的(成本/流量)
我用W表示边缘成本,用C表示容量
线性规划是:
减少
所有紫外线的总和(W(uv).f(uv))
The Standard Form is:
Maximize,
-(Summation(W(uv).f(uv)) over all uv)
Such that,
f(uv) >= 0 , for all (u,v) in E
f(uv) <= C(u,v) , C(u,v)=1 in this case, for all (u,v) in E
Flow conservation for each vertex except the source and the sink.
So Sum(f(uv)) = Sum(f(vu)), for all u,v
Demand:
f(sa) + f(sb) = 2
这样,
对于E中的所有(u,v),f(uv)>=0
f(uv)=0,对于E中的所有(u,v)
f(uv)实际上,上述问题的问题是,在这种情况下,“初始化单纯形”方法需要更加复杂。由于x_i=0(对于所有i)不是问题的可行解决方案,因此需要执行“第一阶段”操作,以找到问题的初始基本可行解决方案。(满足x1+x2=2的解)。
我建议谷歌搜索“第一阶段单纯形法”。
我不认为CLRS是一本解释单纯形法所有细节的好书。像希利尔和利伯曼或温斯顿这样的运筹学入门教材会更好。祝你好运 (1)输入变量的选择基于降低的成本(而非目标系数)。(2) 该算法与实际单纯形码的实现方式几乎没有共同之处。它只能作为一种教学工具使用,而不能作为实际实现的蓝图。@ErwinKalvelagen,但根据CLRS,选择输入变量是基于客观系数的。通过增加那些具有+ive系数的非基本变量的值,可以在每次迭代中增加目标值。这可能并不是说。同样,在单纯形法中,选择输入变量是基于降低的成本(而不是目标系数)。引用CLRS:“如果目标函数中的所有系数都为负,则while循环终止。否则,第4行选择一个变量xe作为输入变量,该变量在目标函数中的系数为正。”@Abis您提供的引用必须在存在PIVOT
[从INITIALIZE-SIMPLEX
]对c
所做的事情的情况下进行解释,即“目标函数”——正如@Erwin所指出的,它基本上将c
处理为“s”的函数。
The Standard Form is:
Maximize,
-(Summation(W(uv).f(uv)) over all uv)
Such that,
f(uv) >= 0 , for all (u,v) in E
f(uv) <= C(u,v) , C(u,v)=1 in this case, for all (u,v) in E
Flow conservation for each vertex except the source and the sink.
So Sum(f(uv)) = Sum(f(vu)), for all u,v
Demand:
f(sa) + f(sb) = 2
Which reduces to
maximize (- { W(sa).f(sa) + W(sb).f(sb) + W(ad).f(ad) + W(ac).f(ac) + W(bd).f(bd) + W(bc).f(bc) + W(dt).f(dt) + W(ct).f(ct) } )
Maximize
-x1-x2-10(x3)-7(x4)-12(x5)-7(x6)-x7-x8 (objective function)
Given that (constraints)
Capacity constraints:
x{1-8} <= 1
Flow conversations:
x1 = x3+x4 --> ( x1-x3-x4 <=0 & -x1+x3+x4 <= 0)
x2 = x6+x5 --> ( x2-x6-x5 <=0 & -x2+x6+x5 <= 0)
x7 = x3+x5 --> ( x7-x3-x5 <=0 & -x7+x3+x5 <= 0)
x8 = x4+x6 --> ( x8-x4-x6 <=0 & -x8+x4+x6 <= 0)
Demand:
x1 + x2 =2 --> ( x1+x2 <=2 && -x1-x2 <=2)