lingo学习例题详细解读

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

说明本文档一共包含两个个非线性的lingo例题的程序学习其中包含一些数学建模的思想同时对两个例题采取了多种编程方式希望在这种仿真式多角度的编程思想能够给你启发与帮助
例题一
某公司现有数额为20亿的一笔资金可作为未来5年内的投资资金,市场上有8个投资项目(如股票、债券、房地产、…)可供公司作投资选择。

其中项目1、项目2每年初投资,当年年末回收本利(本金和利润);项目3、项目4每年初投资,要到第二年末才可回收本利;项目5、项目6每年初投资,要到第三年末才可回收本利;项目7只能在第二年年初投资,到第五年末回收本利;项目8只能在第三年年初投资,到第五年末回收本利。

公司财务分析人员给出一组实验数据,见表1(见附录1)。

试根据实验数据确定5年内如何安排投资?使得第五年末所得利润最大?
例题一分析
针对问题一,这是典型的单目标优化问题,可以利用线性规划模型进行解决。

其目标是在不考虑投资风险的情况下,对20亿投资金进行合理的分配,使得在第五年末的利润达到最大。

将五年中8个项目的投资利润累加起来,得到的就是要求的目标函数,要做的是如何安排五年的投资计划,每年投资哪几个项目,每个项目投资多少,该决策要受到两个方面的约束:
(1)各个投资项目的投资上限。

在对任何一个项目的投资周期内,都不能超过该项目
的投资上限。

所谓一个投资周期是指从开始投资到第一次获得利润,例如对于项目4,第一年投资30000万元,由于它的运行周期是两年,投资上限是40000万元,所以第二年投资项目4的上限是10000万元。

(2)每年年初用于投资的资金。

由于不同的项目有不同的运行周期,所以在五年内每
年都会有利润的产生。

每年年初用于投资的资金都要小于或等于上年末所拥有的资金。

数据
5.问题一的解答
针对问题一,我们确定模型一
5.1 模型一的建立
5.1.1 确定目标函数
在无风险的情况下对20亿投资资金进行8个项目的投资选择,使得在第五年末
的投资利润达到最大,预投资方案如下表五所示:
根据上表我们确定出目标函数为:
58
11
max ij j i i W x p ===∑∑
5.1.2 确定约束条件 约束一:投资金额的上限
⑴ 项目1和项目2每年投资金额的上限
ij j x U ≤,其中i =1,2,3,4,5 j =1,2
⑵ 项目3和项目4在两年的投资周期内投资金额的上限
1,ij i j j x x U -+≤, 其中i =2,3,4 j =3,4
⑶ 项目5和项目6在三年的投资周期内投资金额的上限
1,2,ij i j i j j x x x U --++≤,其中i =3,4 j =5,6
⑷ 项目7只能在第二年年初投资,且投资周期为四年,它的投资上限
277x U ≤
⑸ 项目8只能在第三年年初投资,且投资周期为三年,它的投资上限
388x U ≤
约束二:每年年初用于投资的资金 ⑴ 第一年年初用于投资的资金 120R ≤
⑵ 第二年年初用于投资的资金
21112121314151620R p x p x x x x x ≤++----
⑶ 第三年年初用于投资的资金
22
3112213314415162324252627
1
1
20x x i i i i R x p x p x p x p x x x x x ==≤++++-------∑∑⑷ 第四年年初用于投资的资金
3
3
2
2
4112233441551662526273334353638
1
1
1
1
20i i i i i i i i R x p x p x p x p x p x p x x x x x x x x ====≤++++++--------∑∑∑∑⑸ 第五年年初用于投资的资金
4
4
3
3
2
2
5112233445566273536384344
1
1
1
1
1
1
20i i i i i i i i i i i i R x p x p x p x p x p x p x x x x x x ======≤++++++------∑∑∑∑∑∑5.1.3 综上所述我们得到问题一的线性规划模型
58
11
max ij j i i W x p ===∑∑
这是一个线性规划模型,因此我们利用lingo 软件进行编程求解(求解程序见附录2),解得第五年末的最大利润为23.26亿元,五年内的投资方案如下表五所示:
在第一年年初,投资项目1到项目8分别为6亿元、3亿元、4亿元、1.803亿元、0、0.267亿元、0、0;
在第二年年初,投资项目1到项目8分别为6亿元、3亿元、0、1.197亿元、0.663亿元、0、4亿元、0;
在第三年年初,投资项目1到项目8分别为6亿元、3亿元、1.151亿元、0、2.337亿元、1.733亿元、0、3亿元;
在第四年年初,投资项目1到项目8分别为6亿元、0、2.849亿元、3亿元、0、0、0、0;
在第五年年初,投资项目1到项目8分别为6亿元、3亿元、0、0、0、0、0、0;
5.3 模型一结果分析
在模型一中,影响最终利润大小的共有三个因素:预计到期利润率,投资金额的上限,投资资金。

通过控制变量法对其中的因素进行灵敏性分析,判断它们对最终利润的影响。

⑴预期到期利润率的灵敏性分析
预计到期利润率的改变会直接导致模型一中目标函数的改变,当其他两个因素不变,对预计到期利润率进行改变发现,利润率越大,最后得到的利润也越大,也就是说,在没有风险的情况下,利润率与利润呈现正比关系。

⑵投资资金的灵敏性分析
利润=投资金额*利润率,所以利润的大小与投资金额也是密切相关的,在其他两个因素不变时,对投资金额进行改变,来观测最终利润的变化,具体数据下表七所示:
我们作出上表所对应的曲线图,如下所示:
其中横轴表示投资资金(亿元),纵轴表示所得利润(亿元)
由上表中的数据和对应的图形可以看出:
当投资资金小于或等于19.473时,投资资金越多,所获得利润越多;当投资资金大于19.473时,利润的多少与投资资金的增多没有关系。

通过以上分析发现,这两个因素的改变对最终利润的变化均与现实生活吻合,所以模型一具有一定的现实合理性。

Lingo程序如下:
max =
0.1*(x11+x21+x31+41+x51)+0.11*(x12+x22+x32+42+x52)+0.25*(x13+x23+x33+x4 3)
+0.27*(x14+x24+x34+x44)+0.45*(x15+x25+x35)+0.5*(x16+x26+x36)+0.8*x27+0. 55*x38;
x11+x12+x13+x14+x15+x16<=20;
x21+x22+x23+x24+x25+X26+x27<=20+0.1*x11+0.11*x12-x13-x14-x15-x16;
x31+x32+x33+x34+x35+x36+x38<=20+0.1*(x11+x21)+0.11*(x12+x22)+0.25*x13+0 .27*x14-x15-x16-x23-x24-x25-x26-x27;
x41+x42+x43+x44<=20+0.1*(x11+x21+x31)+0.11*(x12+x22+x32)+0.25*(x13+x23) +0.27*(x14+x24)+0.45*x15+0.5*x16-x33-x34-x25-x26-x27-x35-x36-x38;
x51+x52<=20+0.1*(x11+x21+x31+x41)+0.11*(x12+x22+x32+x42)+0.25*(x13+x23+ x33)+0.27*(x14+x24+x34)+0.45*(x15+x25)+0.5*(x16+x26)-x27-x35-x36-x38-x4 3-x44;
x11<=6;
x12<=3;
x21<=6;
x22<=3;
x23+x13<=4;
x24+x14<=3;
x27<=4;
x31<=6;
x32<=3;
x33+x23<=4;
x34+x24<=3;
x25+x15+x35<=3;
x36+x16+x26<=2;
x38<=3;
x41<=6;
x42<=3;
x43+x33<=4;
x44+x34<=3;
x51<=6;
x52<=3;
角度二
sets:
shangxian/1..8/:l;
xiangmu/1..8/:a;
nianshu/1..5/:b,w,p1,p2,p3,p4,p5,p6,p7,p8,q3,q4,q5,q6,o5,o6,o8;
niantouzishangxian/1..5/:m;
niantouzizhongshu/1..5/:n;
link(nianshu,xiangmu):x,c;
endsets
data:
p1=0.143,0.142,0.141,0.14,0.141;
p2=0.201,0.207,0.214,0.221,0.228;
p3=0.319,0.315,0.311,0.306,0.302;
p4=0.33,0.342,0.355,0.368,0.382;
p5=0.914,0.892,0.872,0.851,0.831;
p6=1.276,1.3,1.325,1.351,1.376;
p7=5.919,6.756,7.711,8.801,10.046;
p8=2.971,3.042,3.115,3.19,3.266;
q3=0.533,0.542,0.551,0.561,0.57;
q4=0.417,0.415,0.413,0.412,0.411;
q5=0.975,1.041,1.111,1.187,1.267;
q6=1.713,1.182,1.195,2.025,2.141;
o5=1.403,1.466,1.532,1.601,1.674;
o6=0.904,0.889,0.875,0.861,0.847;
o8=1.258,1.188,1.121,1.058,1.124;
l=60000,60000,35000,30000,30000,40000,30000,30000;
b=1,2,3,4,5;
a=1,2,3,4,5,6,7,8;
enddata
max=@sum(link(i,j):x(i,j)*c(i,j));
@for(link(i,j):x(i,1)<=l(1));
@for(link(i,j):x(i,2)<=l(2));
@for(link(i,j)|i#gt#1:x(i,3)+x(i-1,3)<=l(3));
@for(link(i,j)|i#gt#1:x(i,4)+x(i-1,4)<=l(4));
@for(link(i,j)|i#gt#2:x(i,5)+x(i-1,5)+x(i-2,5)<=l(5));
@for(link(i,j)|i#gt#2:x(i,6)+x(i-1,6)+x(i-2,6)<=l(6));
@for(nianshu(i):c(i,1)=p1(i);c(i,2)=p2(i);c(i,7)=p7(i););
@for(nianshu(i):c(i,3)=@if(x(i,3)*x(i,4)#eq#0,p3(i),q3(i)));
@for(nianshu(i):c(i,4)=@if(x(i,3)*x(i,4)#eq#0,p4(i),q4(i)));
@for(nianshu(i):c(i,5)=@if(x(i,5)*x(i,6)#eq#0 ,p5(i),@if(x(i,8)#ne#0,o5 (i),q5(i))));
@for(nianshu(i):c(i,6)=@if(x(i,5)*x(i,6)#eq#0 ,p6(i),@if(x(i,8)#ne#0,o6
(i),q6(i))));
@for(nianshu(i):c(i,8)=@if(x(i,5)*x(i,6)*x(i,8)#eq#0,p8(i),o8));
x(2,7)<=l(7);
x(3,8)<=l(8);
x(5,3)=0;x(5,4)=0;x(4,5)=0;x(5,5)=0;x(4,6)=0;x(5,6)=0;
x(1,7)=0;x(3,7)=0;x(4,7)=0;x(5,7)=0;x(1,8)=0;x(2,8)=0;x(4,8)=0;x(5,8)=0 ;
x(1,5)=500*k1;
x(2,5)=500*k2;
x(3,5)=500*k3;
@for(nianshu(i):@sum(xiangmu(j):x(i,j))=n(i););
@for(niantouzizhongshu(i):n(i)<=m(i));
@for(nianshu(i):w(i)=@if(x(i,1)#gt#20000,0.01*x(i,1),0););
m(1)=200000+w(1);
m(2)=m(1)-n(1)+x(1,1)*(1+c(1,1))+x(1,2)*(1+c(1,2))+w(2);
m(3)=m(2)-n(2)+x(2,1)*(1+c(2,1))+x(2,2)*(1+c(2,2))+x(1,3)*(1+c(1,3))+x( 1,4)*(1+c(1,4))+w(3);
m(4)=m(3)-n(3)+x(3,1)*(1+c(3,1))+x(3,2)*(1+c(3,2))+x(2,3)*(1+c(2,3))+x( 2,4)*(1+c(2,4))+x(1,5)*(1+c(1,5))+x(1,6)*(1+c(1,6))+w(4);
m(5)=m(4)-n(4)+x(4,1)*(1+c(4,1))+x(4,2)*(1+c(4,2))+x(3,3)*(1+c(3,3))+x( 3,4)*(1+c(3,4))+x(2,5)*(1+c(2,5))+x(2,6)*(1+c(2,6))+w(5);
@gin(k1);
@gin(k2);
@gin(k3);
end
角度三
sets:
shangxian/1..8/:l;
xiangmu/1..8/:a;
nianshu/1..5/:b,w,p1,p2,p3,p4,p5,p6,p7,p8,q3,q4,q5,q6,o5,o6,o8;
niantouzishangxian/1..5/:m;
niantouzizhongshu/1..5/:n;
niansunshilv/1..5/:t;
link(nianshu,xiangmu):x,c;
endsets
data:
p1=0.143,0.142,0.141,0.14,0.141;
p2=0.201,0.207,0.214,0.221,0.228;
p3=0.319,0.315,0.311,0.306,0.302;
p4=0.33,0.342,0.355,0.368,0.382;
p5=0.914,0.892,0.872,0.851,0.831;
p6=1.276,1.3,1.325,1.351,1.376;
p7=5.919,6.756,7.711,8.801,10.046;
p8=2.971,3.042,3.115,3.19,3.266;
q3=0.533,0.542,0.551,0.561,0.57;
q4=0.417,0.415,0.413,0.412,0.411;
q5=0.975,1.041,1.111,1.187,1.267;
q6=1.713,1.182,1.195,2.025,2.141;
o5=1.403,1.466,1.532,1.601,1.674;
o6=0.904,0.889,0.875,0.861,0.847;
o8=1.258,1.188,1.121,1.058,1.124;
t=0.147, 7.432156,1.9,0.0187,0.0034;
l=60000,60000,35000,30000,30000,40000,30000,30000;
b=1,2,3,4,5;
a=1,2,3,4,5,6,7,8;
enddata
max=@sum(link(i,j):x(i,j)*c(i,j)-x(i,j)*t(i));
@for(link(i,j):x(i,1)<=l(1));
@for(link(i,j):x(i,2)<=l(2));
@for(link(i,j)|i#gt#1:x(i,3)+x(i-1,3)<=l(3));
@for(link(i,j)|i#gt#1:x(i,4)+x(i-1,4)<=l(4));
@for(link(i,j)|i#gt#2:x(i,5)+x(i-1,5)+x(i-2,5)<=l(5));
@for(link(i,j)|i#gt#2:x(i,6)+x(i-1,6)+x(i-2,6)<=l(6));
@for(nianshu(i):c(i,1)=p1(i);c(i,2)=p2(i);c(i,7)=p7(i););
@for(nianshu(i):c(i,3)=@if(x(i,3)*x(i,4)#eq#0,p3(i),q3(i)));
@for(nianshu(i):c(i,4)=@if(x(i,3)*x(i,4)#eq#0,p4(i),q4(i)));
@for(nianshu(i):c(i,5)=@if(x(i,5)*x(i,6)#eq#0 ,p5(i),@if(x(i,8)#ne#0,o5 (i),q5(i))));
@for(nianshu(i):c(i,6)=@if(x(i,5)*x(i,6)#eq#0 ,p6(i),@if(x(i,8)#ne#0,o6 (i),q6(i))));
@for(nianshu(i):c(i,8)=@if(x(i,5)*x(i,6)*x(i,8)#eq#0,p8(i),o8));
x(2,7)<=l(7);
x(3,8)<=l(8);
x(5,3)=0;x(5,4)=0;x(4,5)=0;x(5,5)=0;x(4,6)=0;x(5,6)=0;
x(1,7)=0;x(3,7)=0;x(4,7)=0;x(5,7)=0;x(1,8)=0;x(2,8)=0;x(4,8)=0;x(5,8)=0 ;
x(1,5)=500*k1;
x(2,5)=500*k2;
x(3,5)=500*k3;
@for(nianshu(i):@sum(xiangmu(j):x(i,j))=n(i););
@for(niantouzizhongshu(i):n(i)<=m(i));
@for(nianshu(i):w(i)=@if(x(i,1)#gt#20000,0.01*x(i,1),0););
m(1)=200000+w(1);
m(2)=m(1)-n(1)+x(1,1)*(1+c(1,1))+x(1,2)*(1+c(1,2))+w(2);
m(3)=m(2)-n(2)+x(2,1)*(1+c(2,1))+x(2,2)*(1+c(2,2))+x(1,3)*(1+c(1,3))+x( 1,4)*(1+c(1,4))+w(3);
m(4)=m(3)-n(3)+x(3,1)*(1+c(3,1))+x(3,2)*(1+c(3,2))+x(2,3)*(1+c(2,3))+x( 2,4)*(1+c(2,4))+x(1,5)*(1+c(1,5))+x(1,6)*(1+c(1,6))+w(4);
m(5)=m(4)-n(4)+x(4,1)*(1+c(4,1))+x(4,2)*(1+c(4,2))+x(3,3)*(1+c(3,3))+x( 3,4)*(1+c(3,4))+x(2,5)*(1+c(2,5))+x(2,6)*(1+c(2,6))+w(5);
@gin(k1);
@gin(k2);
@gin(k3);
end
角度四
sets:
shangxian/1..8/:l;
xiangmu/1..8/:a;
nianshu/1..5/:b,w,p1,p2,p3,p4,p5,p6,p7,p8,q3,q4,q5,q6,o5,o6,o8;
niantouzishangxian/1..5/:m;
niantouzizhongshu/1..5/:n;
niansunshilv/1..5/:t;
cunkuanshu/1..5/:c1;
daikuanshu/1..5/:d;
link(nianshu,xiangmu):x,c;
endsets
data:
p1=0.143,0.142,0.141,0.14,0.141;
p2=0.201,0.207,0.214,0.221,0.228;
p3=0.319,0.315,0.311,0.306,0.302;
p4=0.33,0.342,0.355,0.368,0.382;
p5=0.914,0.892,0.872,0.851,0.831;
p6=1.276,1.3,1.325,1.351,1.376;
p7=5.919,6.756,7.711,8.801,10.046;
p8=2.971,3.042,3.115,3.19,3.266;
q3=0.533,0.542,0.551,0.561,0.57;
q4=0.417,0.415,0.413,0.412,0.411;
q5=0.975,1.041,1.111,1.187,1.267;
q6=1.713,1.182,1.195,2.025,2.141;
o5=1.403,1.466,1.532,1.601,1.674;
o6=0.904,0.889,0.875,0.861,0.847;
o8=1.258,1.188,1.121,1.058,1.124;
t=0.147,1.9,1.9,0.0187,0.0034;
l=60000,60000,35000,30000,30000,40000,30000,30000;
b=1,2,3,4,5;
a=1,2,3,4,5,6,7,8;
enddata
max=@sum(link(i,j):x(i,j)*c(i,j)-x(i,j)*t(i)+c1(i)*0.023-0.0531*d(i)); @for(link(i,j):x(i,1)<=l(1));
@for(link(i,j):x(i,2)<=l(2));
@for(link(i,j)|i#gt#1:x(i,3)+x(i-1,3)<=l(3));
@for(link(i,j)|i#gt#1:x(i,4)+x(i-1,4)<=l(4));
@for(link(i,j)|i#gt#2:x(i,5)+x(i-1,5)+x(i-2,5)<=l(5));
@for(link(i,j)|i#gt#2:x(i,6)+x(i-1,6)+x(i-2,6)<=l(6));
@for(nianshu(i):c(i,1)=p1(i);c(i,2)=p2(i);c(i,7)=p7(i););
@for(nianshu(i):c(i,3)=@if(x(i,3)*x(i,4)#eq#0,p3(i),q3(i)));
@for(nianshu(i):c(i,4)=@if(x(i,3)*x(i,4)#eq#0,p4(i),q4(i)));
@for(nianshu(i):c(i,5)=@if(x(i,5)*x(i,6)#eq#0 ,p5(i),@if(x(i,8)#ne#0,o5 (i),q5(i))));
@for(nianshu(i):c(i,6)=@if(x(i,5)*x(i,6)#eq#0 ,p6(i),@if(x(i,8)#ne#0,o6 (i),q6(i))));
@for(nianshu(i):c(i,8)=@if(x(i,5)*x(i,6)*x(i,8)#eq#0,p8(i),o8));
@for(cunkuanshu(i):c1(i)<=200000);
@for(daikuanshu(i):d(i)<=200000);
x(2,7)<=l(7);
x(3,8)<=l(8);
x(5,3)=0;x(5,4)=0;x(4,5)=0;x(5,5)=0;x(4,6)=0;x(5,6)=0;
x(1,7)=0;x(3,7)=0;x(4,7)=0;x(5,7)=0;x(1,8)=0;x(2,8)=0;x(4,8)=0;x(5,8)=0 ;
x(1,5)=500*k1;
x(2,5)=500*k2;
x(3,5)=500*k3;
@for(nianshu(i):@sum(xiangmu(j):x(i,j))=n(i););
@for(niantouzizhongshu(i):n(i)<=m(i));
@for(nianshu(i):w(i)=@if(x(i,1)#gt#20000,0.01*x(i,1),0););
m(1)=200000+w(1)-c1(1)+d(1);
m(2)=m(1)-n(1)+x(1,1)*(1+c(1,1))+x(1,2)*(1+c(1,2))+w(2)-c1(2)-d(1)+d(2) ;
m(3)=m(2)-n(2)+x(2,1)*(1+c(2,1))+x(2,2)*(1+c(2,2))+x(1,3)*(1+c(1,3))+x( 1,4)*(1+c(1,4))+w(3)-c1(3)-d(2)+d(3);
m(4)=m(3)-n(3)+x(3,1)*(1+c(3,1))+x(3,2)*(1+c(3,2))+x(2,3)*(1+c(2,3))+x( 2,4)*(1+c(2,4))+x(1,5)*(1+c(1,5))+x(1,6)*(1+c(1,6))+w(4)-c1(4)-d(3)+d(4 );
m(5)=m(4)-n(4)+x(4,1)*(1+c(4,1))+x(4,2)*(1+c(4,2))+x(3,3)*(1+c(3,3))+x( 3,4)*(1+c(3,4))+x(2,5)*(1+c(2,5))+x(2,6)*(1+c(2,6))+w(5)-c1(5)-d(4)+d(5 );
@gin(k1);
@gin(k2);
@gin(k3);
end
例题二
电力生产问题
为满足每日电力需求(单位为兆瓦(MW)),可以选用四种不同类型的发电机。

每日电力需求如下表1。

最小输出功率。

所有发电机都存在一个启动成本,以及工作于最小功率状态时的固定的每小时成本,并且如果功率高于最小功率,则超出部分的功率每兆瓦每小时还存在一个成本,即边际成本。

这些数据均列于表2中。

只有在每个时段开始时才允许启动或关闭发电机。

与启动发电机不同,关闭发电机不需要付出任何代价。

问题(1)在每个时段应分别使用哪些发电机才能使每天的总成本最小,最小
总成本为多少?
问题(2) 如果在任何时刻,正在工作的发电机组必须留出20%的发电能力余量,以防用电量突然上升。

那么每个时段又应分别使用哪些发电机才能使每天的总成本最小,此时最小总成本又为多少?
问题二分析
问题要求确定不同时段应该如何选择发电机在能满足每日各时段电力需求的前提条件下,总成本最小。

由问题分析知,可以对电机各时段的运行状态和输出电量我们建立整数规划模型,通过整数规划对该问题进行求解。

设整数规划变量ij x (12341,2...67i j ==,,,;,,,)分别代表在某天中第j 个时段第i 种机型正在运行的台数,y ij 代表在某天中第j 个时段第i 种机型的每台发电机平均发电量,i a ,i b ,i c ,i d
(1,2,3,4)i = 表示第i 种机型的启动成本,固定成本,最小输出功率,边际成本。

j e 表示第j 阶段电机的工作时长。

根据发电机总成本的组成,我们确定所求的目标函数:
min W A B C =++
其中:A 代表启动成本;B 代表固定成本;C 代表边际成本
而且:
447111
12()1**2
ij ij i i i i i j sign x x A x a a -===-+=+∑∑∑ 4711**ij i j
i j B x b e ===
∑∑ 47
11*()**ij ij i i j i j C x y c d e ===-∑∑ 约束条件:
.S t
74
11
min max max max [**]0
*(4,7)*(4,7)*(4,7)[ones(4,7)]***ij ij j j j i ij
i i
ij i ij i ij ij ij i
x y e f x g eye h eye y h eye x h x y x h ==⎧-=⎪⎪⎪<=⎨⎪<=<=⎪⎪-<<⎩∑∑
程序一:
model :
daima/1..3/:h
sduan/1..7/:e,f; !e时段f总兆瓦;
numberxh/1..4/:a,b,c,d,g,hi,hm;!a启动成本b固定成本元/小时c最小输处功率(MW)d每兆瓦边际成本g每种型号的总数量;
link(numberxh,sduan):x,y;!x(i,j);
endsets
data:
a=5000 , 1600, 2400, 1200;
b=2250 , 1800 , 3750 ,4800;
c=750 ,1000 ,1200 , 1800;
d=2.7, 2.2, 1.8, 3.8;
e=6 ,3 ,3 ,2 ,4 ,4, 2;
f=12000 , 32000 , 25000 , 36000, 25000 , 30000 , 18000;
g=10,4,8,3;
hi=750,1000,1200,1800;
hm=1750,1500,2000,3500;
enddata
h(1)=@sum(numberxh(i):x(i,1)*a(i));
h(2)=@sum(link(i,j)|j#ge#2:1/2*(@abs(x(i,j)-x(i,j-1))+x(i,j)-x(i,j-1))* a(i));
h(3)=@sum(link(i,j):x(i,j)*b(i)*e(j)+x(i,j)*(y(i,j)-c(i))*d(i)*e(j)); min=h(1)+h(2)+h(3)
@sum(link(i,j):x(i,1)*y(i,1)*e(1))>=f(1);
@sum(link(i,j):x(i,2)*y(i,2)*e(2))>=f(2);
@sum(link(i,j):x(i,3)*y(i,3)*e(3))>=f(3);
@sum(link(i,j):x(i,4)*y(i,4)*e(4))>=f(4);
@sum(link(i,j):x(i,5)*y(i,5)*e(5))>=f(5);
@sum(link(i,j):x(i,6)*y(i,6)*e(6))>=f(6);
@sum(link(i,j):x(i,7)*y(i,7)*e(7))>=f(7);
@for(link(i,j):x(i,j)<=g(i));
@for(link(i,j):hi(i)<=y(i,j)#and#y(i,j)<=hm(i));
end
程序二:
model:
sets:
daima/1..15/:h;
sduan/1..7/:e,f; !e时段f总兆瓦;
numberxh/1..4/:a,b,c,d,g,hi,hm;!a启动成本b固定成本元/小时c最小输处功率(MW)d每兆瓦边际成本g每种型号的总数量;
link(numberxh,sduan):x,y,xy;!x(i,j);
endsets
data:
a=5000 , 1600, 2400, 1200;
b=2250 , 1800 , 3750 ,4800;
c=750 ,1000 ,1200 , 1800;
d=2.7, 2.2, 1.8, 3.8;
e=6 ,3 ,3 ,2 ,4 ,4, 2;
f=12000,32000,25000,36000,25000,30000,18000;
g=10,4,8,3;
hi=750,1000,1200,1800;
hm=1750,1500,2000,3500;
!启动成本;
h(1)=@sum(numberxh(i):x(i,1)*a(i));
h(2)=@sum(numberxh(i):(@abs(x(i,2)-x(i,1))+x(i,2)-x(i,1))*a(i)/2); h(3)=@sum(numberxh(i):(@abs(x(i,3)-x(i,2))+x(i,3)-x(i,2))*a(i)/2); h(4)=@sum(numberxh(i):(@abs(x(i,4)-x(i,3))+x(i,4)-x(i,3))*a(i)/2); h(5)=@sum(numberxh(i):(@abs(x(i,5)-x(i,4))+x(i,5)-x(i,4))*a(i)/2); h(6)=@sum(numberxh(i):(@abs(x(i,6)-x(i,5))+x(i,6)-x(i,5))*a(i)/2); h(7)=@sum(numberxh(i):(@abs(x(i,7)-x(i,6))+x(i,7)-x(i,6))*a(i)/2); !固定成本;
h(8)=@sum(sduan(j):x(1,j)*b(1)*e(j));
h(9)=@sum(sduan(j):x(2,j)*b(2)*e(j));
h(10)=@sum(sduan(j):x(3,j)*b(3)*e(j));
h(11)=@sum(sduan(j):x(4,j)*b(4)*e(j));
!边际成本;
h(12)=@sum(sduan(j):x(1,j)*(y(1,j)-c(1))*d(1)*e(j));
h(13)=@sum(sduan(j):x(2,j)*(y(2,j)-c(2))*d(2)*e(j));
h(14)=@sum(sduan(j):x(3,j)*(y(3,j)-c(3))*d(3)*e(j));
h(15)=@sum(sduan(j):x(4,j)*(y(4,j)-c(4))*d(4)*e(j));
!总成本;
min=@sum(daima(t):h(t));
!电量的边界条件;
x(1,1)*y(1,1)+x(2,1)*y(2,1)+x(3,1)*y(3,1)+x(4,1)*y(4,1)>=f(1);
x(1,2)*y(1,2)+x(2,2)*y(2,2)+x(3,2)*y(3,2)+x(4,2)*y(4,2)>=f(2);
x(1,3)*y(1,3)+x(2,3)*y(2,3)+x(3,3)*y(3,3)+x(4,3)*y(4,3)>=f(3);
x(1,4)*y(1,4)+x(2,4)*y(2,4)+x(3,4)*y(3,4)+x(4,4)*y(4,4)>=f(4);
x(1,5)*y(1,5)+x(2,5)*y(2,5)+x(3,5)*y(3,5)+x(4,5)*y(4,5)>=f(5);
x(1,6)*y(1,6)+x(2,6)*y(2,6)+x(3,6)*y(3,6)+x(4,6)*y(4,6)>=f(6);
x(1,7)*y(1,7)+x(2,7)*y(2,7)+x(3,7)*y(3,7)+x(4,7)*y(4,7)>=f(7);
!数量的边界条件;
x(1,1)<=g(1);
x(2,1)<=g(2);
x(3,1)<=g(3);
x(4,1)<=g(4);
x(1,2)<=g(1);
x(2,2)<=g(2);
x(3,2)<=g(3);
x(4,2)<=g(4);
x(1,3)<=g(1);
x(2,3)<=g(2);
x(3,3)<=g(3);
x(4,3)<=g(4);
x(1,4)<=g(1);
x(2,4)<=g(2);
x(3,4)<=g(3);
x(4,4)<=g(4);
x(1,5)<=g(1);
x(2,5)<=g(2);
x(3,5)<=g(3);
x(4,5)<=g(4);
x(1,6)<=g(1);
x(2,6)<=g(2);
x(3,6)<=g(3);
x(4,6)<=g(4);
x(1,7)<=g(1);
x(2,7)<=g(2);
x(3,7)<=g(3);
x(4,7)<=g(4);
@for(sduan(j): @for(numberxh(i):hi(i)<=y(i,j)));
@for(sduan(j): @for(numberxh(i):hm(i)>=y(i,j)));
@gin(x(1,1));@gin(x(2,1));@gin(x(3,1));@gin(x(4,1));
@gin(x(1,2));@gin(x(2,2));@gin(x(3,2));@gin(x(4,2));
@gin(x(1,3));@gin(x(2,3));@gin(x(3,3));@gin(x(4,3));
@gin(x(1,4));@gin(x(2,4));@gin(x(3,4));@gin(x(4,4));
@gin(x(1,5));@gin(x(2,5));@gin(x(3,5));@gin(x(4,5));
@gin(x(1,6));@gin(x(2,6));@gin(x(3,6));@gin(x(4,6));
@gin(x(1,7));@gin(x(2,7));@gin(x(3,7));@gin(x(4,7));
end
程序三
model:
sets:
daima/1..3/:h;
sduan/1..7/:e,f; !e时段f总兆瓦;
numberxh/1..4/:a,b,c,d,g,hi,hm;!a启动成本b固定成本元/小时c最小输处功率(MW)d每兆瓦边际成本g每种型号的总数量;
link(numberxh,sduan):x,y,xy;!x(i,j);
endsets
data:
a=5000 , 1600, 2400, 1200;
b=2250 , 1800 , 3750 ,4800;
c=750 ,1000 ,1200 , 1800;
d=2.7, 2.2, 1.8, 3.8;
e=6 ,3 ,3 ,2 ,4 ,4, 2;
f=12000,32000,25000,36000,25000,30000,18000;
g=10,4,8,3;
hi=750,1000,1200,1800;
hm=1750,1500,2000,3500;
enddata
h(1)=@sum(numberxh(i):x(i,1)*a(i));!每种型号在第一阶段的启动成本;
@for(sduan(j)|j#ge#2:h(2)=(h(2)+@sum(numberxh(i):(@abs(x(i,j)-x(i,j-1)) +x(i,j)-x(i,j-1))*a(i)/2)));
!h(2)=@sum(link(i,j)|j#ge#2:1/2*(@abs(x(i,j)-x(i,j-1))+x(i,j)-x(i,j-1)) *a(i));
h(3)=@sum(link(i,j):x(i,j)*b(i)*e(j)+x(i,j)*(y(i,j)-c(i))*d(i)*e(j)); min=h(1)+h(2)+h(3);
@for(link(i,j):xy=x(i,j)*y(i,j));
@sum(numberxh(i):xy(i,1)*e(1))>=f(1);
@sum(numberxh(i):xy(i,2)*e(2))>=f(2);
@sum(numberxh(i):xy(i,3)*e(3))>=f(3);
@sum(numberxh(i):xy(i,4)*e(4))>=f(4);
@sum(numberxh(i):xy(i,5)*e(5))>=f(5);
@sum(numberxh(i):xy(i,6)*e(6))>=f(6);
@sum(numberxh(i):xy(i,7)*e(7))>=f(7);
@for(sduan(j):
@for(numberxh(i): x(i,j)<=g(i)) );
@for(sduan(j): @for(numberxh(i):hi(i)<=y(i,j))); @for(sduan(j): @for(numberxh(i):hm(i)>=y(i,j))); end。

相关文档
最新文档