1一、问题的提出当前的科学技术还不能有效地存储电力,所以电力生产和消费在任何时刻都要相等,否则就会威胁电力系统安全运行。为了能够实时平衡变化剧烈的电力负荷,电力部门往往需要根据预测的未来电力负荷安排发电机组起停计划,在满足电力系统安全运行条件下,追求发电成本最小。在没有电力负荷损耗以及一个小时之内的电力负荷和发电机出力均不变的前提下,假定所有发电机组的发电成本都是由3部分组成:1.启动成本(StartupCost),2.空载成本(Noloadcost),3.增量成本(IncrementalCost)。需要考虑的约束有:1.负荷平衡约束2.系统备用约束3.输电线路传输容量约束4.发电机组出力范围约束5.机组增出力约束6.机组降出力约束。问题:3母线系统有一个3母线系统,其中有2台机组、1个负荷和3条输电线路,已知4个小时的负荷和系统备用要求。请求出这4个小时的最优机组组合计划。最终结果应该包括总成本、各小时各机组的状态、各小时各机组的发电出力和各小时各机组提供的备用。G1LBus2Bus1Bus0G2Line0-1Line0-2Line1-2二、问题的分析机组优化组合和优化启停就是要在满足约束条件的情况下,优化地选定各时段参加运行的机组,求出机组的最佳运行方案,实现发电成本最小。可以将问题分为以下两个任务来完成:一、建立机组组合问题的数学模型二、采用穷举搜索法,利用C++编程,求解模型,得到最优机组组合计划问题根据负荷平衡、系统备用、输电线路传输容量、发电机组出力范围、机组增出力、机组降出力等约束建立优化模型,采用穷举搜索算法,利用C++编程进行求解。三、模型假设和符号系统3.1模型假设1.假设系统不存在电力负荷损耗2.假设一个小时之内的电力负荷和发电机出力均不变3.2符号系统itu为机组i在t时段的运行状态,10itu,表示运行,表示停机2iS为机组i的启动成本itf为机组i在t时段的发电成本itp为机组i在t时段的出力;jtL为负荷j在t时段的负荷量;maxip为发电机组i的最大出力;tR为t时段系统备用要求;linekp为线路linek上流过的电能;klx为第k根输电线路第l条母线的线性传输因子;,injbuslp为母线l上的注入功率;maxkp为第根输电线路的最大传输容量;minip发电机组最小稳定运行出力;dir为机组i最大减出力;rir为机组i最大增出力;1iT为机组i最小运行时间;2iT为机组i最小停运时间;四、模型的建立与求解4.1模型建立分析4.1.1先考虑目标函数1)空载成本和增量成本观察空载成本和增量成本构成的部分成本随该机组发电出力变化特性图,如图一中折线所示。3图一空载成本和增量成本之和随该机组发电出力增长走势图在分析计算时为了简便,通常用一条平滑曲线来近似代替有起伏的部分成本特性,如图一中平画曲线所示。当n段直线近似表示时,部分成本特性可表示为2ititiitiitifpapbpc(1)2)启动成本11itiituuS(2)其中:itu为机组i在t时段的运行状态,10itu,表示运行,表示停机iS为机组i的启动成本3)目标函数机组组合的目的是针对在指定的周期内,满足系统负荷、备用容量、机组最小时间和最小停机时间等限制,优化确定各机组的启停机计划和优化分配其发电负荷,使发电总费用最小。因此,要以机组的费用最小为依据建立相应的目标函数。设所研究的计划周期为T,机组台数为n,则该问题的目标函数可以表示为:111min1TnititititiittiFufpuuS(3)其中:itf为机组i在t时段的发电成本4.1.2再考虑约束条件1)负荷平衡约束任何时段,电力负荷之和必须等于发电机发电出力之和。11nmititjtijupL(4)其中:itu为机组i在t时段的运行状态,10itu,表示运行,表示停机;4itp为机组i在t时段的出力;jtL为负荷j在t时段的负荷量;2)系统备用约束任何时段,发电机的备用容量之和必须大于系统备用要求。max1nitiittiuppR(5)其中:maxip为发电机组i的最大出力;tR为t时段系统备用要求;3)输电线路传输容量约束线路传输的电能必须在它的传输容量范围内。,max0Nlinekklinjbuslklpxpp(6)其中:linekp为线路linek上流过的电能;klx为第k根输电线路第l条母线的线性传输因子;,injbuslp为母线l上的注入功率;maxkp为第根输电线路的最大传输容量;4)发电机组出力范围约束与稳定出力范围约束处于运行状态的发电机组的发电出力必须小于其最大发电出力,同时必须大于其最小稳定运行出力。minmaxiitippp(7)其中:minip发电机组最小稳定运行出力;5)机组增降出力约束发电机组在增加发电出力时,增加出力的速度要小于其最大增出力;发电机组在减少发电出力时,减少出力的速度要小于其最大减出力。111diitriitrppr(8)其中:dir为机组i最大减出力;rir为机组i最大增出力;6)机组启动和停运时的出力约束当机组从停运状态变为运行状态时,机组在该小时的发电出力必须为其最小稳定运行出力,且当机组从运行状态变为停运状态时,机组在该小时的发电出力必须为其最小稳定运行出力。min11itiititititppuuuu如果=0且=1;或=1且=0(9)7)机组最小运行时间和最小停运时间约束5机组每次启动后,连续运行时间至少为该台机组的最小运行时间。机组每次停运后,连续停运时间至少为该台机组的最小停运时间。11111ititijiititjtTuuuuT(10)21211itititijiitjtTuuuuT(11)其中:1iT为机组i最小运行时间;2iT为机组i最小停运时间;4.2模型及其求解1)优化模型问题中的3母线系统仅考虑负荷平衡约束系统备用约束、输电线路传输容量约束、发电机组出力范围约束与稳定出力范围约束和机组增降出力约束,所建优化方程模型如下。111min1TnititititiittiFufpuuS(12).st11max1,max0max1..1101nmititjtijnitiitiNlinekklinjbuslklitidiitriititupLuppRstpxpppprppru为或者(13)其中:itf为机组i在t时段的发电成本;2ititiitiitifpapbpciS为机组i的启动成本;2)优化模型的求解算法机组组合问题在数学规划上属于NP完全问题,任何NP完全问题只有通过列举所有可能的组合,才能得到最优解,即采用穷举搜索法。由于问题的求解规模不大,所以该问题将采用穷举搜索法对模型进行求解。我们设置一计数器T(1234T、、、)用以记录机组已运行的时间。1.读取各机组和负荷的原始数据。另1T。2.设置机组1的第T小时的出力大小(从小到大依次搜索,跨度为1),使其出力大小的变化满足增出力约束和降出力约束。3.判断机组1是否满足其出力范围约束。若满足则继续下一步,否则,重复步骤2。4.根据系统负荷平衡约束,求出机组2的出力大小。5.判断机组2出力大小的变化和出力范围是否满足增出力约束、降出力约束和出力范围约束。若满足则继续下一步,否则重复步骤2、3、4。66.判断机组1和机组2是否满足系统备用约束,若满足则继续下一步,否则重复步骤2、3、4、5。7.判断机组1和机组2是否满足输电线路传输容量约束,若满足继续下一步,否则重复步骤2、3、4、5、6。8.判断计数器T是否为4,若是则输出该种情况下两台机组各时段出力大小,否则重复步骤2、3、4、5、6、7,另1TT。直到所有的情况搜索完毕为止。执行完该算法,可以得到一最优机组组合计划。3)模型求解与分析我们根据上面的算法步骤,我们编C++程序(附录1),并代入各机组和负荷的初始数据。可以得到一总成本为6580¥的最优机组组合计划,如表一所示:表一3母线系统的最优机组组合计划机组G1机组G2小时1状态运行关机出力(MW)1000备用(MW)10002状态运行关机出力(MW)1300备用(MW)7003状态运行运行出力(MW)13040备用(MW)70604状态运行关机出力(MW)1400备用(MW)600总成本(¥)6580使用穷举搜索法对该问题虽然能得出结果,但其运行效率太低,不能用于求解大规模问题,且编程实现较复杂,不是一种优良的算法。五、模型的评价优点:提供了一种求解多变量、多约束的混合整数非线性规划的机组组合优化问题的思路,此方法新颖可靠易行,极具参考价值。缺点:采用二次函数对空载成本和增量成本曲线参数进行拟合过程中,拟合误差比较大。特别是机组规模比较小时更是如此。附录:问题的C++求解程序#includeiostream#includefstreamusingnamespacestd;doublecost1(doublex);doublecost2(doublex);intget_total_price();2voidfun(inti);ofstreamfout(11.doc);constinthour=5;//最大出力intpmax[2]={200,100};//最大增出力intpcmax[2]={30,40};//最大减出力intpdmax[2]={50,60};//状态intstate[2][hour]={{1},{0}};//负荷intdemand[5]={0,100,130,170,140};//启动费用intstart[2]={350,100};//机组各时段状态intpower[2][5]={{100},{0}};//系统备用要求intb_power[hour]={0,20,30,50,40};//最小费用intminprice=9999999;intmain(){fun(1);return0;}//机组1成本doublecost1(doublex){if(x=100){return100+10*x;}else{return14*x-300;}}//机组2成本doublecost2(doublex){if(x=60)3{return12*x+200;}else{return15*x+20;}}//总成本intget_total_price(){inti=0,j;doubleprice=0;for(j=1;jhour;j++){price+=state[i][j]*cost1(power[i][j])+state[i][j]*(1-state[i][j-1])*start[i];}i=1;for(j=1;jhour;j++){price+=state[i][j]*cost2(power[i][j])+state[i][j]*(1-state[i][j-1])*start[i];}minprice=(minpriceprice?price:minprice);//coutminprice;foutminprice;returnprice;}voidfun(inti){for(intj=-50;j=30;j+=1){//机组1power[0][i]=power[0][i-1]+j;//机组1出力范围约束if(power[0][i]0||power[0][i]200){continue;}//机组1增出力和减出力约束if(((power[0][i]-power[0][i-1])pcmax[0])&&(power[0][i]power[0][i-1])||((power[0][i-1]-power[0][i])pdmax[0])&&(power[0][i