精心整理§7综合举例例7.1求解非线性方程组其LINGO代码如下:model:x^2+y^2=2;2*x^2+x+y^2+y=4;end计算的部分结果为Feasiblesolutionfoundatiteration:0VariableValue!工作站集合;STATION/1..4/;TXS(TASK,STATION):X;!X是派生集合TXS的一个属性。
如果X(I,K)=1,则表示第I个任务指派给第K个工作站完成;ENDSETSDATA:!任务ABCDEFGHIJK的完成时间估计如下;T=4511950151212121289;ENDDATA!当任务超过15个时,模型的求解将变得很慢;!每一个作业必须指派到一个工作站,即满足约束①;@FOR(TASK(I):@SUM(STATION(K):X(I,K))=1);!对于每一个存在优先关系的作业对来说,前者对应的工作站I必须小于后者对应的工作站J,即满足约束②;@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;!指定X(I,J)为0/1变量;@FOR(TXS:@BIN(X));END计算的部分结果为Globaloptimalsolutionfoundatiteration:1255X(G,3)0.00000012.00000X(G,4)1.0000000.000000X(H,1)0.0000000.000000X(H,2)0.0000000.000000X(H,3)1.00000012.00000X(H,4)0.0000000.000000X(I,1)0.0000000.000000X(I,2)0.0000000.000000X(I,3)1.00000012.00000X(I,4)0.0000000.000000X(J,1)0.0000000.000000X(J,2)0.0000000.000000X(J,3)0.0000008.000000X(J,4)1.0000000.000000X(K,1)0.0000000.000000 X(K,2)0.0000000.000000 X(K,3)0.0000009.000000 X(K,4)1.0000000.000000例7.3旅行售货员问题(又称货郎担问题,TravelingSalesmanProblem )有一个推销员,从城市1出发,要遍访城市2,3,…,n 各一次,最后返回城市1。
已知从城市i 到j 的旅费为ij c,问他应按怎样的次序访问这些城市,使得总旅费最少?可以用多种方法把TSP 表示成整数规划模型。
这里介绍的一种建立模型的方法,是把该问题的每个解(不一定是最优的)看作是一次“巡回”。
在下述意义下,引入一些0-1整数变量: 其目标只是使∑=nj i ij ij x c 1,为最小。
(2)这样我们把TSP 转化成了一个混合整数线性规划问题。
显然,当城市个数较大(大于30)时,该混合整数线性规划问题的规模会很大,从而给求解带来很大问题。
TSP 已被证明是NP 难问题,目前还没有发现多项式时间的算法。
对于小规模问题,我们求解这个混合整数线性规划问题的方式还是有效的。
TSP 是一个重要的组合优化问题,除了有直观的应用外,许多其它看似无联系的优化问题也可转化为TSP 。
例如:问题1现需在一台机器上加工n 个零件(如烧瓷器),这些零件可按任意先后顺序在机器上加工。
我们希望加工完成所有零件的总时间尽可能少。
由于加工工艺的要求,加工零件j 时机器必须处于相应状态j s(如炉温)。
设起始未加工任何零件时机器处于状态0s ,且当所有零件加工完成后需恢复到0s 状态。
已知从状态i s 调整到状态)(i j s j ≠需要时间ij c 。
零件j 本身加工时间为j p。
为方便起见,引入一个虚零件0,其加工时间为0,要求状态为0s ,则{0,1,2,…,n}的一个圈置换π就表示对所有零件的一个加工顺序,在此置换下,完成所有加工所需要的总时间为 由于∑=nj j p 0是一个常数,故该零件的加工顺序问题变成TSP 。
!旅行售货员问题; model : sets :city/1..5/:u; link(city,city): dist,!距离矩阵; x;endsetsn=@size (city);data :!距离矩阵,它并不需要是对称的;dist=enddata !min =@sum @FOR !@sum !@sum );!@for @for );!限制u @for !定义X @for endU(5)0.0000000.000000DIST(1,1)0.44917740.000000 DIST(1,2)0.27245060.000000 DIST(1,3)0.12404300.000000 DIST(1,4)0.92468480.000000 DIST(1,5)0.40217060.000000 DIST(2,1)0.70914690.000000 DIST(2,2)0.16851990.000000 DIST(2,3)0.89896460.000000 DIST(2,4)0.25027470.000000 DIST(2,5)0.89475710.000000DIST(3,1)0.8648940E-010.000000 DIST(3,2)0.60205910.000000 DIST(3,3)0.33808840.000000DIST(3,4)0.68131640.000000DIST(3,5)0.22362710.000000DIST(4,1)0.97629870.000000DIST(4,2)0.88663430.000000DIST(4,3)0.71390080.000000DIST(4,4)0.22887700.000000DIST(4,5)0.71342500.000000DIST(5,1)0.85246790.000000DIST(5,2)0.23965380.000000DIST(5,3)0.57355250.000000DIST(5,4)0.14033140.000000DIST(5,5)0.69197080.000000X(1,1)0.0000000.4491774例7.4j p的距离用ij c N p,要求从决策时,过程停止。
显然这是一个不定期多阶段决策过程。
f是由i p点出发至终点N p的最短路程,由最优化原理可得定义)(i这是一个函数方程,用LINGO可以方便的解决。
!最短路问题;model:data:n=10;enddatasets:cities/1..n/:F;!10个城市;roads(cities,cities)/1,21,32,42,52,63,43,53,64,74,85,75,85,96,86,97,108,109,10/:D,P;endsetsdata:D=65369751191875410579;enddataF(n)=0;@forF(i)=);!@forP(i,j)=);endF(8)7.000000F(9)9.000000F(10)0.000000 P(1,2)1.000000 P(1,3)0.000000 P(2,4)1.000000 P(2,5)0.000000 P(2,6)0.000000 P(3,4)1.000000 P(3,5)0.000000 P(3,6)0.000000 P(4,7)0.000000 P(4,8)1.000000 P(5,7)1.000000P(5,8)0.000000P(5,9)0.000000P(6,8)1.000000P(6,9)0.000000P(7,10)1.000000P(8,10)1.000000P(9,10)1.000000例7.5露天矿生产的车辆安排(CMCM2003B)钢铁工业是国家工业的基础之一,铁矿是钢铁工业的主要原料基地。
许多现代化铁矿是露天开采的,它的生产主要是由电动铲车(以下简称电铲)装车、电动轮自卸卡车(以下简称卡车)运输来完成。
提高这些大型设备的利用率是增加露天矿经济效益的首要任务。
露天矿里有若干个爆破生成的石料堆,每堆称为一个铲位,每个铲位已预先根据铁含量将石料1卡车1.2.的解)。
矿石漏title CUMCM-2003B-01;sets:cai/1..10/:crate,cnum,cy,ck,flag;xie/1..5/:xsubject,xnum;link(xie,cai):distance,lsubject,number,che,b; endsetsdata:crate=30282932313332313331;xsubject=1.21.31.31.91.3;distance=5.265.194.214.002.952.742.461.900.641.27 1.900.991.901.131.272.251.482.043.093.51enddata!min=@sum@sum!@forb(i,j)=!@for!@for(cai(j):cnum(j)=@sum(xie(i):number(i,j)));!计算各个卸点的总产量;@for(xie(i):xnum(i)=@sum(cai(j):number(i,j)));!道路能力约束;@for(link(i,j):number(i,j)<=lsubject(i,j));!电铲能力约束;@for(cai(j):cnum(j)<=flag(j)*8*60/5);!电铲数量约束----addedbyXieJinxing,2003-09-07;@sum(cai(j):flag(j))<=7;!卸点能力约束;@for(xie(i):xnum(i)<=8*20);!铲位产量约束;@for(cai(i):number(1,i)+number(2,i)+number(5,i)<=ck(i)*10000/154);@for(cai(i):number(3,i)+number(4,i)<=cy(i)*10000/154);!产量任务约束;@for(xie(i):xnum(i)>=xsubject(i)*10000/154);!铁含量约束;@sum(cai(j):number(1,j)*(crate(j)-30.5))<=0;@sum(cai(j):number(2,j)*(crate(j)-30.5))<=0;@sum@sum@sum@sum!@for!hehe=!@for@for!ccnum=end例7.6这对的生成树。