电力生产问题数学建模.docx
- 文档编号:17614518
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:21
- 大小:49.64KB
电力生产问题数学建模.docx
《电力生产问题数学建模.docx》由会员分享,可在线阅读,更多相关《电力生产问题数学建模.docx(21页珍藏版)》请在冰点文库上搜索。
电力生产问题数学建模
LastupdatedontheafternoonofJanuary3,2021
电力生产问题数学建模
电力生产问题的数学模型
摘要
本文解决的是电力生产问题,在发电机的发电量能满足每日的电力需求的条件下,为了使每日的总成本达到最低,我们建立了一个最优化模型。
对于问题一:
由已知条件可知有固定成本、边际成本、启用成本,据此,我们确定了三个指标:
即固定总成本、边际总成本、启动总成本。
总成本即为这三项总成本之和。
每天分为七个时段,发电机共有四种型号,方案结果应该包括每个时段每种型号平均功率及该时段该型号发电机的数量,一共有56个未知数,为减少未知数,并将非线性约束条件转化为线性约束条件,将整数规划转化为非整数规划,我们以每个时段每种型号的几个发电机发出的总功率为变量,并列出相应的约束条件,然后通过LINGO求出个时段各种型号发电机的总功率,再采用分支定界法求出最小总成本为万元。
再根据总功率利用Matlab软件计算出总功率所对应的该型号发电机的数量(见表一)。
对于问题二:
题目要求在任何时刻,正在工作的发电机组必须留出20%的发电能力余量,以防用电量突然上升。
其他条件与问题一相同,因此,只需增加一个约束条件,即发电机机组所能发出的最大总功率乘以80%后大于用电需求。
为锻炼编程技术,故在第二问改用Matlab软件编程来求解,将所要求的7个时段4种型号的发电机的平均功率一共28个未知数用X1,X2,,,,X28表示,将其对应的发电机数量用X29,X30,,,X56表示,并利用矩阵列出约束条件和目标函数,然后编程并运行求解,得到的发电机数量有的不为整数,然后采用分支定界法,得到调整后的结果,最小总成本为万元。
关键词:
线性规划、总功率、使用数量、总成本
1.问题重述
问题背景
为满足每日电力需求(单位为兆瓦(MW)),可以选用四种不同类型的发电机。
每日电力需求如下表1。
表1:
每日用电需求(兆瓦)
时段(0-24)
0-6
6-9
9-12
12-14
14-18
18-22
22-24
需求
12000
32000
25000
36000
25000
30000
18000
每种发电机都有一个最大发电能力,当接入电网时,其输出功率不应低于某一最小输出功率。
所有发电机都存在一个启动成本,以及工作于最小功率状态时的固定的每小时成本,并且如果功率高于最小功率,则超出部分的功率每兆瓦每小时还存在一个成本,即边际成本。
这些数据均列于表2中。
表2:
发电机情况
可用数量
最小输出功率(MW)
最大输出功率(MW)
固定成本(元/小时)
每兆瓦边际成本(元/小时)
启动成本
型号1
10
750
1750
2250
5000
型号2
4
1000
1500
1800
1600
型号3
8
1200
2000
3750
2400
型号4
3
1800
3500
4800
1200
只有在每个时段开始时才允许启动或关闭发电机。
与启动发电机不同,关闭发电机不需要付出任何代价。
需要解决的问题
问题
(1)在每个时段应分别使用哪些发电机才能使每天的总成本最小,最小总成本为多少?
问题
(2)如果在任何时刻,正在工作的发电机组必须留出20%的发电能力余量,以防用电量突然上升。
那么每个时段又应分别使用哪些发电机才能使每天的总成本最小,此时最小总成本又为多少?
2.模型假设
假设1:
调整发电机功率没有成本
假设2:
发电机生产的电量在传输过程中没有损耗
假设3:
忽略发电机启动的时间
假设4:
发电机的功率在时段初调整好后在那个时段内保持不变
3.符号说明
符号
符号说明
型号j发电机在第i个时间段的总功率
型号j发电机的总数量
单个型号j发电机的最小功率
单个型号j发电机的最大功率
第i个时间段的时间
型号j发电机每小时的固定成本
型号j发电机每兆瓦边际成本
型号j发电机的启用成本
第i个时间段的用电需求量
型号j发电机在第i个时间段的使用数量,式中[]代表向下取整
型号j发电机在第(i-1)个时间段的使用数量,式中[]代表向下取整
第i时段型号为j的发电机的平均输出功率
第i时段型号为j的发电机的数量
4.问题分析
此题研究的是电力生产中在满足每日电力需求的条件下,使每日的总成本达到最小的数学建模问题。
针对问题一:
从以下三方面来分析
(1)对已知条件的分析:
从已知的条件来看,本题将一天分为了七个时间段,在每一个时间段都有对应的电力需求量。
为了满足每日的电力需求,有四种型号的发电机可供使用,每种型号的发电机都已知其可用数量、最小输出功率、最大输出功率、固定成本、每兆瓦边际成本、启用成本。
要使总成本达到最小,则问题的目标函数就是总成本函数。
(2)对目标函数的分析:
总成本由三个指标组成,即固定总成本、边际总成本、启动总成本。
分别对每个指标进行分析。
固定总成本为第i个时间段的时间、型号j发电机在第i个时间段的数量、型号j发电机每小时的固定成本这三者之积的累积和。
边际总成本为第i个时间段的时间、型号j发电机在第i个时间段超出此时间段最小总功率的功率、型号j发电机每兆瓦边际成本这三者之积的累积和。
启动总成本为型号j发电机启动数量和型号j发电机的启动成本之积的累积和。
(3)对约束条件的分析:
对机型j发电机在第i个时间段总功率的约束有两个。
一是若机型j发电机在第i个时间段不使用,则机型j发电机在第i个时间段的总功率为零;若机型j发电机在第i个时间段使用,则机型j发电机在第i个时间段的总功率要满足大于等于单个机型j发电机的最小输出功率且小于等于全部机型j发电机最大输出功率之和;二是四种机型的发电机在第i个时间段生产的总功率要满足大于等于第i个时间段的用电量需求。
针对问题二:
题目要求在任何时刻,正在工作的发电机组必须留出20%的发电能力余量,以防用电量突然上升,即发电机组在第i个时间段所能发出的最大总功率的80%要大于等于该时段的用电需求。
5.问题一的解答
针对问题一我们建立了模型一
模型一的建立
该模型是为了解决电力生产中,在满足每日电力需求的条件下,用四类不同型号的发电机在一天的七个时段进行电力生产,使总成本达到最小的问题。
总成本由以下三项指标组成:
指标一:
固定总成本
指标二:
边际总成本
指标三:
启用总成本
为了使总成本达到最小,我们建立了如下的目标函数:
(1)若机型j发电机在第i个时间段不使用,则机型j发电机在第i个时间
段的总功率为零;若机型j发电机在第i个时间段使用,则机型j发电
机在第i个时间段的总功率要满足大于等于单个机型j发电机的最小输
出功率且小于等于全部机型j发电机最大输出功率之和。
据此,我们建
立了如下约束条件:
其中
=1,2,···,7
=1,2,3,4
(2)四种机型的发电机在第i个时间段生产的总功率要满足大于等于第i
个时间段的用电量需求。
据此,我们建立如下约束条件:
其中
=1,2,···,7
=1,2,3,4
模型一的求解
我们用Lingo软件求解这个模型,对于
这个约束条件,Lingo软件不能直接处理,因此,我们先用分支定界法将此条件改为
,然后用Lingo软件求解,分析计算结果发现有的时段的某型号发电机输出功率小于该型号发电机的最小功率,故对
进行调整,调整后得到满足约束条件的最低总成本为万元。
根据Lingo软件计算得到的第i时段型号为j的几个发电机发出的总功率,然后用Matlab软件以总功率除以该型号单个发电机的最大输出功率,然后向正无穷方向取整,得到第i时段型号为j的发电机的数量。
各个时段各种型号几个发电机发出的总功率及对应的发电机数量如下表一所示:
表一
时段
型号
型号1
型号2
型号3
型号4
总功率
数量
总功率
数量
总功率
数量
总功率
数量
0-6
0
0
6000
4
6000
3
0
0
6-9
2
6000
4
16000
8
3
9-12
2
6000
4
8
0
0
12-14
3
6000
4
16000
8
10500
3
14-18
3000
2
6000
4
16000
8
0
0
18-22
1
6000
4
16000
8
3
22-24
0
0
4
7
0
0
6.问题二的解答
根据问题一的模型,我们已经求出了在满足每日电力需求的条件下,用四类不同型号的发电机在一天的七个时段进行电力生产,使总成本达到最小,而问题二要求在任何时刻,正在工作的发电机组必须留出20%的发电能力余量,以防用电量突然上升。
故在第一问的目标函数和约束条件保持不变的情况下,应再增加一个约束条件,即第i个时段发电机组所能输出地最大功率的80%应大于第i个时段的用电需求。
列出目标函数和约束条件如下:
将目标函数和约束条件用矩阵的形式表示出来,然后用Matlab软件求解,求解结果中有的
不为整数,故用分支定界法进行调整,调整后得到满足约束条件的最小总成本为每天万元。
各个时段各种型号的发电机发出的平均功率和对应的数量见下表:
表二
时段
型号
型号1
型号2
型号3
型号4
平均功率
数量
平均功率
数量
平均功率
数量
平均功率
数量
0-6
750
3
4
2000
2
0
0
6-9
920
5
1500
4
2000
8
1800
3
9-12
750
6
1125
4
2000
8
0
0
12-14
1075
8
1500
4
2000
8
1800
3
14-18
750
6
1125
4
2000
8
0
0
18-22
750
4
1400
4
2000
8
1800
3
22-24
750
3
1000
4
6
0
0
7.模型的评价、改进及推广
模型评价
优点:
(1)根据题目的要求我们确立了三个指标,即固定总成本、边际总
成本、启用总成本,以上三项总成本之和即为总成本,通过对
三项总成本的逐项分析,建立了最优的目标函数。
(2)对于约束条件的建立,我们综合考虑了各种情况,使约束条件
达到了具体化全面化。
(3)以每个时段每种型号的几个发电机发出的总功率为变量,将56
个未知数缩减为28个,将约束条件中的非线性约束转化为线性
约束,将整数规划转化为非整数规划,并提高了运行速度,
缺点:
我们用总功率来表示数量,通过总功率来求数量,而此数量的结果不能在LINGO中直接表示出来,需要另外通过其他软件来得出结果,使建模工作复杂化
模型改进
(1)所建模型是在发电机无故障的条件下建立的,如果考虑发电机随使用
时间的增加,在不同的时间段(譬如以月为时间段单位)需要不同的
检修费用,再把检修费用平分到每一天,将此检修费用也算作总成本
的一部分。
增加约束条件,使模型更精准优化。
(3)所建模型假设了发电机的功率在时段初调整好后在那个时段内保持不
变,如果在每个时段,发电机的功率在满足约束条的情况下为可变的,
则可以根据实际情况做不同调整,使模型更实际化。
模型推广
我们建的模型不仅适用于电力生产,也适用于其它方面的生产,也可用于产销平衡问题,选址问题,值班问题等等。
8.参考文献
[1]赵静,但琦,数学建模与数学实验,高等教育出版社,2008.
[2]楼顺天,姚若玉,沈俊霞,程序设计语言,西安电子科技大学出
版社,2008.
9.附录
附录一:
问题一中发电机组各时段的功率和开启的数量
时段
型号
型号1
型号2
型号3
型号4
总功率
数量
总功率
数量
总功率
数量
总功率
数量
0-6
0
0
6000
4
6000
3
0
0
6-9
2
6000
4
16000
8
3
9-12
2
6000
4
8
0
0
12-14
3
6000
4
16000
8
10500
3
14-18
3000
2
6000
4
16000
8
0
0
18-22
1
6000
4
16000
8
3
22-24
0
0
4
7
0
0
附录二:
问题二中发电机组各时段的功率和开启的数量
表二
时段
型号
型号1
型号2
型号3
型号4
平均功率
数量
总功率
数量
总功率
数量
总功率
数量
0-6
750
3
4
2000
2
0
0
6-9
920
5
1500
4
2000
8
1800
3
9-12
750
6
1125
4
2000
8
0
0
12-14
1075
8
1500
4
2000
8
1800
3
14-18
750
6
1125
4
2000
8
0
0
18-22
750
4
1400
4
2000
8
1800
3
22-24
750
3
1000
4
6
0
0
附录三:
模型一调整前所用程序
sets:
!
电力生产问题;
shiduan/1..7/:
s,x;
xinghao/1..4/:
n,p,q,g,b,v;
link(shiduan,xinghao):
c;
endsets
data:
!
各个时段的小时数;
s=6,3,3,2,4,4,2;
!
各个时段的用电需求;
x=12000,32000,25000,36000,25000,30000,18000;
!
可用数量;
n=10,4,8,3;
!
最小输出功率;
p=750,1000,1200,1800;
!
最大输出功率;
q=1750,1500,2000,3500;
!
固定成本;
g=2500,1800,3750,4800;
!
边际成本;
b=,,,;
!
启动成本;
v=5000,1600,2400,1200;
enddata
!
目标函数
@floor(c(i,j)/q(j)+为第i时段型号为j的发电机的数量
@if函数用来判断:
当i=1时,i-1=7;
min=@sum(link(i,j):
s(i)*(@floor(c(i,j)/q(j)+*g(j)+(c(i,j)-(@floor(c(i,j)/q(j)+)*p(j))*b(j))
+(@sign((@floor(c(i,j)/q(j)+)-(@floor((@if(i#ge#2,c(i-1,j),0))/q(j)+)+1))/2*
(@if(i#ge#2,@floor(c(i,j)/q(j)+-(@floor(c(i-1,j)/q(j)+),@floor(c(1,j)/q(j)+))*v(j));
!
第i时段的总发电量大于该时段的用电需求;
@for(shiduan(i):
@sum(xinghao(j):
c(i,j))>=x(i));
!
型号为j的发电机发出的总功率小于或等于该型号几个发电机所能发出的最大功率;
@for(link(i,j):
c(i,j)<=n(j)*q(j));
!
型号为j的发电机发出的总功率大于或等于0;
@for(link(i,j):
c(i,j)>=0);
End
程序运行结果
Feasiblesolutionfound.
Objectivevalue:
1463554.
Infeasibilities:
Totalsolveriterations:
377
VariableValueReducedCost
S
(1)附录四:
模型一调整后所用程序
sets:
!
电力生产问题;
shiduan/1..7/:
s,x;
xinghao/1..4/:
n,p,q,g,b,v;
link(shiduan,xinghao):
c;
endsets
data:
!
各个时段的小时数;
s=6,3,3,2,4,4,2;
!
各个时段的用电需求;
x=12000,32000,25000,36000,25000,30000,18000;
!
可用数量;
n=10,4,8,3;
!
最小输出功率;
p=750,1000,1200,1800;
!
最大输出功率;
q=1750,1500,2000,3500;
!
固定成本;
g=2500,1800,3750,4800;
!
边际成本;
b=,,,;
!
启动成本;
v=5000,1600,2400,1200;
enddata
!
目标函数
@floor(c(i,j)/q(j)+为第i时段型号为j的发电机的数量
@if函数用来判断:
当i=1时,i-1=7;
min=@sum(link(i,j):
s(i)*(@floor(c(i,j)/q(j)+*g(j)+(c(i,j)-(@floor(c(i,j)/q(j)+)*p(j))*b(j))
+(@sign((@floor(c(i,j)/q(j)+)-(@floor((@if(i#ge#2,c(i-1,j),0))/q(j)+)+1))/2*
(@if(i#ge#2,@floor(c(i,j)/q(j)+-(@floor(c(i-1,j)/q(j)+),@floor(c(1,j)/q(j)+))*v(j));
!
第i时段的总发电量大于该时段的用电需求;
@for(shiduan(i):
@sum(xinghao(j):
c(i,j))>=x(i));
!
型号为j的发电机发出的总功率小于或等于该型号几个发电机所能发出的最大功率;
@for(link(i,j):
c(i,j)<=n(j)*q(j));
!
型号为j的发电机发出的总功率大于或等于0;
@for(link(i,j):
c(i,j)>=0);
c(3,4)=0;
c(5,4)=0;
c(7,1)=0;
c(6,1)>=750;
End
程序运行结果:
Feasiblesolutionfound.
Objectivevalue:
1469210.
Infeasibilities:
Totalsolveriterations:
144
VariableValueReducedCost
S
(1)附录五:
问题一中用Matlab软件求第i个时间段型号j发电机的数量的程序
c=[00
1816..050
为第i时段型号为j的几个发电机发出的总功率
q=[500];
qq=repmat(q,7,1);%qq(i,j)为型号为j的单个发电机所能发出的最大功率
n=[10483];
nn=repmat(n,7,1);%nn(i,j)为型号为j的发电机的可用数量
N=ceil(c./qq)%N(i,j)为第i时段型号为j的发电机的数量
N<=nn%N(i,j)应小于nn(i,j),故运算结果应该为所有元素均为1的7行4列的矩阵,此运算用于检验
程序运行结果
N=
0430
2483
2480
3483
2480
1483
0470
ans=
1111
1111
1111
1111
1111
1111
1111
附录六:
模型二调整前所用程序
M文件(总成本:
zchb)
functionf=zchb(x)
G=ones(1,28);
h=[2250]';
H=repmat(h,7,1);
i=[750]';
I=repmat(i,7,1);
j=[';
J=repmat(j,7,1);
K=[2222]';
l=[5000]';
L=repmat(l,7,1);
xxx=zeros(28,1);
xxx(:
)=x(1:
28);
nnn=zeros(28,1);
nnn(:
)=x(29:
56);
u=[1111]';
s=zeros(24,1);
s(:
)=x(33:
56);
t=zeros(24,1);
t(:
)=x(29:
52);
xsh=(sign(s-t)+1)/2;
XSh=cat(1,u,xsh);
v=[x(29)x(30)x(31)x(32)]';
shlch=cat(1,v,s-t);
f=det(G*(nnn.*(H+(xxx-I).*J).*K+L.*XSh.*shlch));
M文件(用电需求:
ydxq:
)
function[g,ceq]=ydxq(x)
%非线性约束条件
xxx=zeros(28,1);
xxx(:
)=x(1:
28);
xxxx=(reshape(xxx,4,7))';
nnn=zeros(28,1);
nnn(:
)=x(29:
56);
nnnn=reshape(nnn,4,7);
xq=[000000]';
a=eye(7);
b=ones(7,1);
c=[500]';
cc=(repmat(c,1,7))';
g=[xq-xxxx*nnnn.*a*b;*cc*nnnn.*a*b];
ceq=[];
主程序:
p=[750;1000;1200;1800];pp=repmat(p,7,1);
nnmin=[0;0;0;0;
0;0;0;0;
0;0;0;0;
0;0;0;0;
0;0;0;0;
0;0;0;0;
0;0;0;0];
VLB=cat(1,pp,nnmin);
q=[1750;1500;2000;3500];qq=repmat(q,7,1);
nnmax=[10;4;8;3;
10;4;8;3;
10;4;8;3;
10;4;8;3;
10;4;8;3;
10;4;8;3;
10;4;8;3];
VUB=cat(1,qq,nnmax);
nmax=[10;4;8;3];t=repmat(nmax,7,1);
x0=cat(1,qq,t);
[x,fval,exitflag,output]=fmincon('zchb',x0,[],[],[],[],VLB,VUB,'ydxq')
xx=zeros(4,7);
nn=zeros(4,7);
xx(:
)=x(1:
28)
nn(:
)=x(29:
56)
程序运行结果
fval=
+006
output=
iterations:
97
funcCount:
5646
lssteplength:
1
stepsize:
algorithm:
'medium-scale:
SQP,Quasi-Newton,line-search'
firstorderopt:
+003
constrviolation:
message:
[1x146char]
xx=
+003*
附录七:
模型二调整后所用程序
主程序:
p=[750;1000;1200;1800];pp=repmat(p,7,1);
nnmin=[3;4;2;0;
5;4;8;3;
6;4;8;0;
8;4;8;3;
6;4;8;0;
4;4;8;3;
3;4;6;0];
VLB=cat(1,pp,nnmin);
q=[1750;1500;2000;3500];qq=repmat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电力 生产 问题 数学 建模
![提示](https://static.bingdoc.com/images/bang_tan.gif)