How can I add innequalities to a minimum cost-flow problem?

3 次查看(过去 30 天)
Hello everyone. I have the following optimization code:
f =[2 , 4 , 9 , 3 , 1 , 3 , 2 ] ;
Aeq=[1 1 1 0 0 0 0
-1 0 0 1 0 0 0
0 -1 0 -1 1 0 0
0 0 -1 0 0 1 -1
0 0 0 0 -1 -1 1 ] ;
Beq=[50; 40 ; 0 ; -30; -60] ;
lb =[0 0 0 0 0 0 0 ] ;
ub=[10 inf inf inf 80 inf inf] ;
intcon =[1 ,2, 3, 4, 5, 6, 7 ] ;
[x, v, s]= intlinprog( f, intcon, [], [], Aeq , Beq , lb , ub )
LP: Optimal objective value is 490.000000. Optimal solution found. Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
x = 7×1
0 40 10 40 80 0 20
v = 490
s = 1
This code represents a minimum cost-flow problem in which, the same amount of product goes from two sources to two desiny nodes as per the attached image called problem.PNG. However, my slides say that if there is an excess of demand, (E demands 70 units instead), the conditions on nodes D and E would be:
from And from
I have tried to implement this by introducing A and B as:
f =[2 , 4 , 9 , 3 , 1 , 3 , 2 ] ;
Aeq=[1 1 1 0 0 0 0;
-1 0 0 1 0 0 0;
0 -1 0 -1 1 0 0] ;
A=[0 0 -1 0 0 1 -1;
0 0 0 0 -1 -1 1];
B=[-30; -70];
Beq=[50; 40 ; 0] ;
lb =[0 0 0 0 0 0 0 ] ;
ub=[10 inf inf inf 80 inf inf] ;
intcon =[1 ,2, 3, 4, 5, 6, 7 ] ;
[x, v, s]= intlinprog( f, intcon, A, B, Aeq , Beq , lb , ub)
No feasible solution found. Intlinprog stopped because no point satisfies the constraints. x = [] v = []
s = -2
Unfortunately, as it can be seen, I obtain unfeasible as result.
Can someone please tell me if they can spot my mistake?
Best regards.
  7 个评论
Jaime De La Mota Sanchis
@Torsten Well, thanks for the answer. It seems to work, but I don't understand why. You have multiplied A and B by -1. I will try to figure it out.
Torsten
Torsten 2022-7-16
Yes, what arrives in D must be less or equal 30, not greater or equal 30, and what arrives in E must be less or equal 70, not greater or equal 70. If you use >= in both cases, you cannot satisfy this demand because in sum it would be >=100, but as supply you only have 90 to distribute among D and E.

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Linear Programming and Mixed-Integer Linear Programming 的更多信息

产品


版本

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by