sets:
zone/A,B,C/; !A,B,C三个地区;
number/1..4/; !各地区可选择新建的销售点数目,可选1~4中的一个数,通过links把zone和number联系起来;
links(zone,number):c,profit; !若在i地区新建j个销售点,则c(i,j)=1,否则c(i,j)=0.profit(i,j)表示在i地区新建j个销售点的利润; endsets data:
profit=200 280 330 340 210 220 225 230 160 170 180 200; enddata
max=@sum(links:c*profit); @for(zone(I):
@sum(number(J):c(I,J))=1); !对于每一个地区,新建销售点的数目是一定的,c的和为1;
@sum(zone(I):@sum(number(J):c(I,J)*J))=6; !三个地区新建的销售点总数为6; @for(links(i,j):@bin(c(i,j))); !每一个c(i,j)只能取0或1; end
用Lingo求解,结果如下: Global optimal solution found.
Objective value: 710.0000 Extended solver steps: 0 Total solver iterations: 0
Variable Value Reduced Cost C( A, 1) 0.000000 -200.0000 C( A, 2) 0.000000 -280.0000 C( A, 3) 1.000000 -330.0000 C( A, 4) 0.000000 -340.0000 C( B, 1) 1.000000 -210.0000 C( B, 2) 0.000000 -220.0000 C( B, 3) 0.000000 -225.0000 C( B, 4) 0.000000 -230.0000 C( C, 1) 0.000000 -160.0000 C( C, 2) 1.000000 -170.0000 C( C, 3) 0.000000 -180.0000 C( C, 4) 0.000000 -200.0000
则在A,B,C区域应分别新增3,1,2个销售点,可获得的最大利润为710万元。
四、目标规划
有11件任务(A—K)分配到4个工作站(1—4),任务的优先次序如下图。每件任务所花费的时间如下表。
(F) (A)
(B) (C)
(G)
(H) (D)
(E) (J) (K)
(I)
任务 A B C
D E F G H I J K 9 ?1,2,3,4)时间 45 11 9 50 15 12 12 12 12 8 解:用变量xik表示任务i(i况,xik?1表示分配,xik目标函数为
11?A,B,?,K)分配给工作站k(k的情
?0表示不分配,ti表示完成各项任务所需时间,则
minmax1?k?4?ti?1ixik
约束条件(1):每项任务只能且必须分配至一个工作站来做,可以表示为:
4?k?1xik?1,i?1,2,?,11;
约束条件(2):各项任务间如果有优先关系,则排在前面的任务i对应的工作站(序号)应当小于(或等于)排在后面的任务j所对应的工作站(序
4号),即对所有有顺序的任务i约束条件(3):xik?j:?k?1(kxjk?kxik)?0;
?0或1。
这是一个非线性规划(目标函数非线性),但可以化为线性规划,增加一个
11变量,再增加四个约束条件:?i?1tixik?Z,k?1,2,3,4,目标函数变为minZ。
LINGO程序为:
model: sets:
task/ A B C D E F G H I J K/:t;
pred(task,task)/ A,B B,C C,F C,G F,J G,J J,K D,E E,H E,I H,J I,J /;
station/1..4/;
tsx(task, station):x; endsets data:
T = 45 11 9 50 15 12 12 12 12 8 9; enddata
@for(task(i): @sum(station(k):x(i,k)) = 1);
@for(pred(i,j): @sum(station(k):k*x(j,k)-k*x(i,k))>= 0); @for(station(k):
@sum(txs(i,k):t(i)*x(i,k))<=cyctime); min= cyctime;
@for(txs:@bin(x)); end
计算的部分结果为
Global optimal solution found at iteration: 1255 Objective value: 50.00000
Variable Value Reduced Cost CYCTIME 50.00000 0.000000 X( A, 1) 1.000000 0.000000 X( A, 2) 0.000000 0.000000 X( A, 3) 0.000000 45.00000 X( A, 4) 0.000000 0.000000 X( B, 1) 0.000000 0.000000 X( B, 2) 0.000000 0.000000 X( B, 3) 1.000000 11.00000 X( B, 4) 0.000000 0.000000 X( C, 1) 0.000000 0.000000 X( C, 2) 0.000000 0.000000 X( C, 3) 0.000000 9.000000 X( C, 4) 1.000000 0.000000 X( D, 1) 0.000000 0.000000 X( D, 2) 1.000000 0.000000 X( D, 3) 0.000000 50.00000 X( D, 4) 0.000000 0.000000 X( E, 1) 0.000000 0.000000 X( E, 2) 0.000000 0.000000 X( E, 3) 1.000000 15.00000 X( E, 4) 0.000000 0.000000 X( F, 1) 0.000000 0.000000 X( F, 2) 0.000000 0.000000 X( F, 3) 0.000000 12.00000 X( F, 4) 1.000000 0.000000 X( G, 1) 0.000000 0.000000 X( G, 2) 0.000000 0.000000 X( G, 3) 0.000000 12.00000 X( G, 4) 1.000000 0.000000 X( H, 1) 0.000000 0.000000 X( H, 2) 0.000000 0.000000 X( H, 3) 1.000000 12.00000 X( H, 4) 0.000000 0.000000
X( I, 1) 0.000000 0.000000 X( I, 2) 0.000000 0.000000 X( I, 3) 1.000000 12.00000 X( I, 4) 0.000000 0.000000 X( J, 1) 0.000000 0.000000 X( J, 2) 0.000000 0.000000 X( J, 3) 0.000000 8.000000 X( J, 4) 1.000000 0.000000 X( K, 1) 0.000000 0.000000 X( K, 2) 0.000000 0.000000 X( K, 3) 0.000000 9.000000 X( K, 4) 1.000000 0.000000
五、非线性规划
现要做一百套钢管, 每套要长为2.9m、2.1m和1.5m的钢管各一根。已知原料长7.4m,问应如何下料,使用的原料最省。 2.9m 2.1m 1.5m 料头 I 2 0 1 0.1 II 1 2 0 0.3 III 1 1 1 0.9 IV 1 0 3 0 V 0 3 0 1.1 VI 0 2 2 0.2 VII 0 1 3 0.8 VIII 0 0 4 1.4 设用方案Ⅰ,Ⅱ,…,Ⅷ分别裁原料钢管x1,x2, ?,x8根, 则:
Min z= x1+ x2+ x3+x4+ x5+x6+x7+x8 2x1+ x2+x3 + x4?100???2x2+x3+ 3x5 +2x6+ x7? 100 ??x1+x3+3x4+2x6+3x7+4x8?100?x,x,x,x,x,x,x,x ?012345678?上题中,如果每套1.8m的钢管要70根,要求使用的切割模式不超过3种.问应如何下料,使用的原料最省。
解:设xi—按第i种模式切割的原料钢管根数(i=1,2,3)r1i,r2i,r3i,r4i—第i种切割模式下,每根原料生产2.9m、2.1m和1.5m,1.8m的钢管的数量. 目标函数(总根数)
minx1?x2?x3?r11x1?r12x2?r13x3?100??r21x1?r22x2?r23x3?100 s.t.??r31x1?r32x2?r33x3?100?rx?rx?rx?70422433?411