作业帮 > 综合 > 作业

lingo中如何输类求和时上限不定的约束

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/18 04:14:24
lingo中如何输类求和时上限不定的约束
lingo中如何输入此类求和时上限不定的约束
对于这个约束来说 s=1 2 3 4 5时
还有更为困难的一种 若s
lingo中如何输类求和时上限不定的约束
可以设置一个控制变量来乘,比如m(i)*k(i,j)*n(i)>=D(j)*n(i);
再加上@if()语句,利用n(i)=@if(i#le#s,1,0)来给n(i)赋值,使得当is时有n(i)=0;则问题轻易可解!
举例如下:
MODEL:
sets:
row/1..5/:m,n;!这里n为控制参数;
col/1..5/:D;
AZ(row,col):k;
endsets
data:
D=1 2 3 4 5;
k=1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
1 1 1 1 1;
enddata
min=@sum(row:m);
s=5*@exp(-@abs(@sum(row:m)));
@for(row(i):n(i)=@if(i#LE#s,1,0));
@for(col(j):@sum(row(i):m(j)*k(i,j)*n)>=D(j)*n);!这里n发生作用;
@gin(s);
END
运行结果:
Linearization components added:
Constraints:79
Variables:54
Integers:31
Local optimal solution found.
Objective value:0.9162907
Extended solver steps:30
Total solver iterations:2396
Variable Value Reduced Cost
S 2.000000 -0.4999998
M( 1) 0.2000000 0.000000
M( 2) 0.000000 0.000000
M( 3) 0.2204016 0.000000
M( 4) 0.3636364 0.000000
M( 5) 0.1322528 0.000000
N( 1) 1.000000 0.000000
N( 2) 0.000000 0.000000
N( 3) 0.000000 0.000000
N( 4) 1.000000 0.000000
N( 5) 0.000000 0.000000
D( 1) 1.000000 0.000000
D( 2) 2.000000 0.000000
D( 3) 3.000000 0.000000
D( 4) 4.000000 0.000000
D( 5) 5.000000 0.000000
K( 1,1) 1.000000 0.000000
K( 1,2) 2.000000 0.000000
K( 1,3) 3.000000 0.000000
K( 1,4) 4.000000 0.000000
K( 1,5) 5.000000 0.000000
K( 2,1) 2.000000 0.000000
K( 2,2) 3.000000 0.000000
K( 2,3) 4.000000 0.000000
K( 2,4) 5.000000 0.000000
K( 2,5) 6.000000 0.000000
K( 3,1) 3.000000 0.000000
K( 3,2) 4.000000 0.000000
K( 3,3) 5.000000 0.000000
K( 3,4) 6.000000 0.000000
K( 3,5) 7.000000 0.000000
K( 4,1) 4.000000 0.000000
K( 4,2) 5.000000 0.000000
K( 4,3) 6.000000 0.000000
K( 4,4) 7.000000 0.000000
K( 4,5) 8.000000 0.000000
K( 5,1) 1.000000 0.000000
K( 5,2) 1.000000 0.000000
K( 5,3) 1.000000 0.000000
K( 5,4) 1.000000 0.000000
K( 5,5) 1.000000 0.000000
Row Slack or Surplus Dual Price
1 0.9162907 -1.000000
2 0.000000 -0.4999998
3 0.000000 0.000000
4 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 0.000000
7 0.000000 0.000000
8 0.000000 0.000000
9 0.000000 0.000000
10 1.983614 0.000000
11 0.000000 0.000000
12 1.719286 0.000000
说明该方法是可行的.