本片将会接着上篇实例来写,如要參照能够看下上篇的http://blog.csdn.net/yzu_120702117/article/details/38453791
如有句法上的问题能够參照我之前总结的基础篇,传送门:http://blog.csdn.net/yzu_120702117/article/details/38444485和http://blog.csdn.net/yzu_120702117/article/details/38415153
6、最优选择问题
某钻井队要从10个可供选择的井位中确定5个钻井探油,使总的钻探费用为最小。若10个井位的代号为s1,s2,...,s10,对应的钻探费用c1,c2,...,c10为5,8,10,6,9,5,7,6,10,8.而且井位选择上要满足下列限制条件:
(1) 或选择s1和s7,或选择钻探s9;
(2) 选择了s3或s4就不能选s5,或反过来也一样;
(3) 在s5,s6,s7,s8中最多仅仅能选两个.
试建立这个问题的整数规划模型,确定选择的井位。
取0-1变量s_i,若s_i=1,则表示选取第i个井。若s_i=0,则表示不选取第i个井。
建立数学模型例如以下:
解决的代码例如以下
model: sets: variables/1..10/:s,cost; endsets data: cost=5 8 10 6 9 5 7 6 10 8; enddata min=@sum(variables:cost*s); (s(1)+s(7)-2)*(s(9)-1)=0; !约束条件 s(3)*s(5)+s(4)*s(5)=0; @sum(variables(i)|i#ge#5 #and# i#le#8:s(i))<=2; @sum(variable:s)=5; @for(variables:@bin(s)); end
7.运输加选址问题
某公司有六个建筑工地,位置坐标(ai,bi)(单位:公里),水泥日用量di(单位:吨)
(1)现有2个料场。位于A(5,1),B(2,7),记(xj。yj)。及,2,日存储量ej各有20吨。
如果工地和料场之间有直线道路。制定每天的供应计划,即从A,B两料场分别向工地运送水泥,是得总的吨公里数最小,当中Cij表示i工地从j料场运来的水泥量。则能够建立模型
这个模型能够这样解答
model: sets: demand/1..6/:a,b,d; supply/1..2/:x,y,e; link(demand,supply):c; endsets data: a=1.25 8.75 0.5 5.75 3 7.25; b=1.25 0.75 4.75 5 6.5 7.75; d=3 5 4 7 6 11; x=5 2; y=1 7; e=20 20; enddata min=@sum(link(i,j):c(i,j)*@sqrt((a(i)-x(j))^2+(b(i)-y(j))^2)); !目标函数 @for(demand(i):@sum(supply(j):c(i,j))=d(i)); @for(supply(j):@sum(demand(i):c(i,j))<=e(j)); end
(2)改建两个新料场。须要确定新料场位置(xj,yj)和运量cij。在其它条件不变下使总公里数最小。模型与上面的一样,位置变量变为料场位置(xj,yj),变为非线性优化问题。
model: sets: demand/1..6/:a,b,d; supply/1..2/:x,y,e; link(demand,supply):c; endsets data: a=1.25 8.75 0.5 5.75 3 7.25; b=1.25 0.75 4.75 5 6.5 7.75; d=3 5 4 7 6 11; e=20 20; enddata init: !这里对x,y赋初值 x=5 2; y=1 7; endinit [obj]min=@sum(link(i,j):c(i,j)*@sqrt((a(i)-x(j))^2+(b(i)-y(j))^2));!目标函数; @for(demand(i):@sum(supply(j):c(i,j))=d(i)); @for(supply(j):@sum(demand(i):c(i,j))<=e(j)); @for(supply:@free(x);@free(y)); end
7.选址问题
某海岛上有12个基本的居民点,每一个居民点的位置(用平面坐标x,y表示。单位km)和居住人数(r)例如以下表所看到的。如今准备在海岛上建一个服务中心为居民提供各种服务。那么服务中心应该建在那里?
如果建在(a,b)处最合理。
建立模型
求解这个模型:
MODEL: SETS: VAR/1..12/:X,Y,R; ENDSETS DATA: X=0 8.20 0.50 5.70 0.77 2.87 4.43 2.58 0.72 9.76 3.19 5.55; Y=0 0.50 4.90 5.00 6.49 8.76 3.26 9.32 9.96 3.16 7.20 7.88; R=600 1000 800 1400 1200 700 600 800 1000 1200 1000 1100; ENDDATA MIN=@SUM(VAR:@SQRT((X-A)^2+(Y-B)^2)*R); END
8.非线性整数规划:
model: sets: row/1..4/:b; col/1..5/:c1,c2,x; link(row,col):a; endsets data: c1=1,1,3,4,2; c2=-8,-2,-3,-1,-2; a=1 1 1 1 1 1 2 2 1 6 2 1 6 0 0 0 0 1 1 5; b=400,800,200,200; enddata max=@sum(col:c1*x^2+c2*x); @for(row(i):@sum(col(j):a(i,j)*x(j))<b(i)); @for(col:@gin(x)); @for(col:@bnd(0,x,99)); End
9.婚配问题
10对年龄相当的青年,随意一对男女青年配对的概率pij见下表。
试给出一个配对方案。使总的配对概率最大。
m1 0.5828
m2 0.4235
m3
m4
m5
m6
m7