model:
sets:
factory /1..6/ : a;
plant /1..8/ : d;
Cooperation(factory,plant) : c, x;
endsets
data:
a=60,55,51,43,41,52;
d=35,37,22,32,41,32,43,38;
c=6,2,6,7,4,2,5,8
4,9,5,3,8,5,8,2
5,2,1,9,7,4,3,3
7,6,7,3,9,2,7,1
2,3,9,5,7,2,6,5
5,5,2,2,8,1,4,3;
enddata
min = @sum( factory(i) :@sum(plant(j) : c(i,j)*x(i,j) ));
@for(factory(i):@sum(plant(j):x(i,j))<=a(i));
@for(plant(j):@sum(factory(i):x(i,j))=d(j));
end
min的另一种写法:
min = @sum( Cooperation(i,j):c(i,j)*x(i,j));
model:
sets:
factory/1..6/: a , x ;
plant/1..5/: b;
coo(factory,plant): c;
endsets
data:
a = 2.1,1.0,1.8,1.2,2.0,1.2;
b = 6,125,12500,345,5;
c = 0.45 20 415 22 0.3
0.45 28 4065 5 0.35
0.65 40 850 43 0.6
0.4 25 75 27 0.2
0.5 26 76 48 0.4
0.5 75 235 8 0.6 ;
enddata
max = @sum(factory(i):a(i)*x(i));
@for(plant(j): @sum(factory(i): c(i,j) * x(i) ) <= b(j) );
@sum(factory(i):x(i))=14;
x(2)<=3;
x(4)<=2;
@for(factory(i) | i#eq#1 #or# i#eq#3 #or# i#ge#5 : @bnd(1,x(i),4) );
@for(factory(i): @gin( x(i) ) );
end
最后一个约束也可以写成:
@for(factory(i) | i#ne#2 #and# i#ne#4: @bnd(1,x(i),4) );