动态规划进行单库优化调度计算C++程序代码.docx_第1页
动态规划进行单库优化调度计算C++程序代码.docx_第2页
动态规划进行单库优化调度计算C++程序代码.docx_第3页
动态规划进行单库优化调度计算C++程序代码.docx_第4页
动态规划进行单库优化调度计算C++程序代码.docx_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/类的定义#ifndef SRDP_H#define SRDP_Hclass SRDPprivate:/1.阶段变量stage variablelong m_StageNum; /阶段数存储量double m_Delta_t; /时间间隔T=2626560sdouble m_DeltaHour; /一个月的小时数:h/2.决策变量decision variable/double *m_OptDeciVar_q;/3.状态变量state variable long *m_StateNum; /库容离散点数/double *m_StateV; /库容离散/4.指标函数target functiondouble *m_TarFun; /阶段指标函数/5.目标函数object functiondouble m_ObjFun; /目标函数/最优轨迹记录数组long *m_OptArray;/原始资料记录数组double *m_RunoffArray; /长系列径流double *m_EvapArray; /蒸发量/时间(年月)记录数组long *m_YearArray; long *m_MonthArray;/计算结果double *m_OptVolumnArray; /最优轨迹对应库容数据数组序列double *m_OptNArray; /最优轨迹对应出力数据数组序列double *m_OptAbandonQ; /最优轨迹对应的弃水量序列double *m_OptUpWaterLevelArray; /最优轨迹对应的水库上游水位序列double *m_OptDownWaterLevelArray;/最优轨迹对应的水库下游水位序列double *m_OptVarialbe_q; /最优轨迹对应的发电流量序列double *m_OptMeanWaterHeadArray; /最优轨迹对应的平均发电水头double *m_OptNmaxArray; /最优轨迹对应的预想出力double *m_OptDamageDepth; /最优轨迹中低于保证出力时的破坏深度double m_OptReliability; /最优轨迹对应的保证率double m_OptGenerationProduction; /发电量double m_OptAnnualMaxPower;/Parameters of Hydropower Station/ double m_DeadWaterLevel; /死水位mdouble m_DeadVolumn; /死库容.03亿m3double m_NormalWaterLevel; /正常蓄水位835mdouble m_FloodLimitLevel; /汛期防洪限制水位mdouble m_FloodVmax; /汛期最大库容.03亿m3double m_NFloodVmax; /非汛期最大库容.37亿m3int m_UnitsNum; /机组台数double m_InstallCapacity; /装机容量*2MWdouble m_FirmCapacity_N; /保证出力.2MW /预想出力double m_PotentialWaterLevel1;double m_PotentialCapacity_N1; double m_PotentialWaterLevel2;double m_PotentialCapacity_N2; double m_DesignAnnualGeneration; /设计年发电量.99kWe V); /上游水位计算double DownWaterLevelCalculation(double q); /下游水位计算void ReverseSearchCalculation(); /反向寻优计算void TerminalOptionalResultCalculation(); /最终结果计算;#endif/类的实现/ SRDP.cpp: implementation of the SRDP class./#include stdafx.h#include SRDP.h#include #include assert.h#include fstream#include iomanip#include iostream#include using namespace std;/ Construction/Destruction/SRDP:SRDP()/原始资料this-m_RunoffArray = NULL; /长系列径流数据this-m_EvapArray = NULL; /蒸发数据/动态规划模型数据/this-m_StageNum=100; /阶段数/this-m_Delta_t=2626560; /时间间隔/this-m_DeltaHour=730; /一个月的小时数this-m_StateNum = NULL; /状态数this-m_TarFun = NULL; /阶段指标/this-m_ObjFun=0.00; /目标函数this-m_YearArray = NULL; /时间(年)数组 this-m_MonthArray = NULL; /时间(月)数组this-m_OptArray = NULL; /最优轨迹记录this-m_OptNmaxArray = NULL; /最优轨迹对应的预想出力this-m_OptDamageDepth = NULL; /最优轨迹中低于保证出力时的破坏深度SRDP:SRDP()/原始初始资料数据析构delete this-m_RunoffArray;delete this-m_EvapArray;/中间变量析构delete this-m_StateNum;delete this-m_YearArray;delete this-m_MonthArray;/计算结果数组析构delete this-m_OptVolumnArray;delete this-m_OptNArray;delete this-m_OptAbandonQ;delete this-m_OptUpWaterLevelArray; /最优轨迹对应的水库上游水位序列delete this-m_OptDownWaterLevelArray; /最优轨迹对应的水库上游水位序列delete this-m_OptVarialbe_q; /最优轨迹对应的发电流量序列delete this-m_OptMeanWaterHeadArray;delete this-m_OptNmaxArray; /最优轨迹对应的预想出力delete this-m_OptDamageDepth; /最优轨迹中低于保证出力时的破坏深度for(int i=0;im_StageNum;i+)/delete this-m_OptDeciVar_qi;/delete this-m_StateVi;delete this-m_OptArrayi;delete this-m_TarFuni;/delete this-m_OptDeciVar_q;/delete this-m_StateV;delete this-m_OptArray;delete this-m_TarFun;/ 数据初始化内存分配/void SRDP:InitionalizingSRDP(char *DataFile1, char *DataFile2,char *DataFile3)this-m_StageNum = 516;this-m_BeginMonth=6;this-m_BeginYear=1957;this-m_OptGenerationProduction=0.00;this-m_OptAnnualMaxPower = 0.00;this-m_DeltaHour=730;/-获取时间序列-/this-m_YearArray = new longthis-m_StageNum+1;this-m_MonthArray = new longthis-m_StageNum+1;this-m_StateNum = new longthis-m_StageNum+1;for(int i=0;im_StageNum;i+)this-m_YearArrayi = 0;this-m_MonthArrayi = 0;this-m_StateNumi = 10;this-m_YearArray0=this-m_BeginYear; /水文年起始年份this-m_MonthArray0=this-m_BeginMonth; /水文年起始月份for(int i = 1;im_StageNum;i+ )if(this-m_MonthArrayi-1+1)m_MonthArrayi = this-m_MonthArrayi-1+1;this-m_YearArrayi = this-m_YearArrayi-1;else if(this-m_MonthArrayi-1+1)12)this-m_MonthArrayi = this-m_MonthArrayi-1-11;this-m_YearArrayi = this-m_YearArrayi-1+1;/couti m_YearArrayi-m_MonthArrayiendl;/-获取状态离散点数-/for(int i=0;im_StageNum;i+)if(this-m_MonthArrayi=6&this-m_MonthArrayim_StateNumi=1;elsethis-m_StateNumi=51;/couti+1tm_YearArrayi/m_MonthArrayitm_StateNumim_RunoffArray = new doublethis-m_StageNum+1;this-m_EvapArray = new doublethis-m_StageNum+1;/this-m_OptVolumnArray = new doublethis-m_StageNum+1;this-m_OptNArray = new doublethis-m_StageNum+1;this-m_OptAbandonQ = new doublethis-m_StageNum+1;this-m_OptUpWaterLevelArray = new doublethis-m_StageNum+1; /最优轨迹对应的水库上游水位序列this-m_OptDownWaterLevelArray = new doublethis-m_StageNum+1; /最优轨迹对应的水库上游水位序列this-m_OptVarialbe_q = new doublethis-m_StageNum+1; /最优轨迹对应的发电流量序列this-m_OptMeanWaterHeadArray= new doublethis-m_StageNum+1;this-m_OptNmaxArray= new doublethis-m_StageNum+1; /最优轨迹对应的预想出力this-m_OptDamageDepth= new doublethis-m_StageNum+1; /最优轨迹中低于保证出力时的破坏深度/二维数组/this-m_OptDeciVar_q = new double*this-m_StageNum+1; /this-m_StateV = new double*this-m_StageNum+1;this-m_OptArray = new long*this-m_StageNum+1;this-m_TarFun = new double*this-m_StageNum+1;for(int i=0;im_StageNum;i+)/this-m_OptDeciVar_qi = new doublethis-m_StateNumi;/this-m_StateVi = new doublethis-m_StateNumi;this-m_OptArrayi = new longthis-m_StateNumi;this-m_TarFuni = new doublethis-m_StateNumi;for(int i=0;im_StageNum;i+)this-m_RunoffArrayi = 0.00;this-m_EvapArrayi = 0.00;this-m_OptVolumnArrayi = 0.00;this-m_OptNArray i = 0.00;this-m_OptAbandonQi=0.00;this-m_OptUpWaterLevelArrayi = 0.00;this-m_OptDownWaterLevelArrayi = 0.00; this-m_OptVarialbe_qi = 0.00;this-m_OptMeanWaterHeadArrayi = -1;this-m_OptNmaxArrayi= -1; /最优轨迹对应的预想出力this-m_OptDamageDepthi= 0; /最优轨迹中低于保证出力时的破坏深度for(long j=0;jm_StateNumi;j+)/this-m_OptDeciVar_qij = 0.00;/this-m_StateVij =0.00;this-m_OptArrayij = 0;this-m_TarFunij = -1e+6;/-/Input System Parameteters from file/-/ifstream myFileIn1,myFileIn2,myFileIn3;myFileIn1.open(DataFile1); /系统特性参数文件if(!myFileIn1)coutCannot Open System Parameters File this-m_DeadWaterLevelthis-m_DeadVolumnthis-m_NormalWaterLevelthis-m_FloodLimitLevelthis-m_FloodVmaxthis-m_NFloodVmaxthis-m_UnitsNumthis-m_InstallCapacitythis-m_FirmCapacity_Nthis-m_PotentialWaterLevel1this-m_PotentialCapacity_N1this-m_PotentialWaterLevel2this-m_PotentialCapacity_N2this-m_DesignAnnualGenerationthis-m_CCthis-m_LHCthis-m_LHmaxthis-m_Delta_t;myFileIn1.close();/*cout系统特性参数endl;cout|=|endl;cout|时段长度 | Delta_T = m_Delta_tsendl;cout|死水位 | DeadWaterLevel = m_DeadWaterLevelmendl;cout|死库容 | DeadVolumn=m_DeadVolumn亿立方米endl;cout|正常蓄水位 | NormalWaterLevel = m_NormalWaterLevelmendl;cout|汛期防洪限制水位 | FloodLimitLevel = m_FloodLimitLevelmendl;cout|汛期最大库容 | FloodPeriodVmax = m_FloodVmax亿立方米endl;cout|非汛期最大库容 | NonFloodPeriodVmax = m_NFloodVmax亿立方米endl;cout|系统装机容量 | InstallCapacity = m_UnitsNumxm_InstallCapacity/2MWendl;cout|系统保证出力 | FirmCapacity = m_FirmCapacity_NMWendl;cout|水电站预想出力 |;cout|水头|setw(6)m_PotentialWaterLevel1m|setw(4)m_PotentialWaterLevel2m|endl;cout| |出力|m_PotentialCapacity_N1MW|m_PotentialCapacity_N2MW|endl;cout|设计年发电量 | DesignAnnualGeneration = m_DesignAnnualGenerationkW.hendl;cout|水电站出力系数 | OutputCoefficient=m_CCendl;cout|水头损失系数 | HeadLossCoefficient=m_LHCendl;cout|最大水头损失 | HeadLossMax=m_LHmaxendl;cout|径流系列起始年月 | BeginTime=m_BeginYear-0m_BeginMonthendl;cout|=|endl;*/-/Input runoff data from file/-/从文件中读取长系列径流数据myFileIn2.open(DataFile2);/径流文件if(!myFileIn2)coutCannot Open Runoff_data File ;exit(0);elsewhile(myFileIn2.good()for(int i=0;im_StageNum;i+)myFileIn2m_RunoffArrayi;/*coutsetiosflags(ios:left)setw(6)m_RunoffArrayi;if(i+1)%12=0)coutendl;*/ break;myFileIn2.close();/-/Input evaporation data from file/-/从文件中读取蒸发数据myFileIn3.open(DataFile3);/蒸发数据文件if(!myFileIn3)coutCannot Open Evaporation_data File ;exit(0);elsewhile(myFileIn3.good()for(int i=0;im_StageNum;i+)myFileIn3this-m_EvapArrayi;if(0=(i+1)%12)myFileIn3.close();myFileIn3.open(DataFile3); break;myFileIn3.close();/ 运行计算/void SRDP:RunningSRDP()/反向逆推计算寻优this-ReverseSearchCalculation();/正向顺推计算this-TerminalOptionalResultCalculation();/ 保存计算结果/void SRDP:SaveCaluResults(char *FileName)ofstream myFileOut;myFileOut.open(FileName); /FileName是保存数据的文件名myFileOutsetiosflags(ios:fixed)setprecision(3);myFileOut=endl;myFileOutsetw(35)系统特性参数endl;myFileOut=endl;myFileOut 时段长度 m_Delta_tsendl;myFileOut 死水位 m_DeadWaterLevelmendl;myFileOut 死库容 m_DeadVolumn亿立方米endl;myFileOut 正常蓄水位 m_NormalWaterLevelmendl;myFileOut 汛期防洪限制水位 m_FloodLimitLevelmendl;myFileOut 汛期最大库容 m_FloodVmax亿立方米endl;myFileOut 非汛期最大库容 m_NFloodVmax亿立方米endl;myFileOut 系统装机容量 m_UnitsNumxm_InstallCapacity/2MWendl;myFileOut 系统保证出力 m_FirmCapacity_NMWendl;myFileOut 水电站预想出力 水头(m)setw(6)m_PotentialWaterLevel1setw(8)m_PotentialWaterLevel2endl;myFileOut 出力(MW)setw(7)m_PotentialCapacity_N1setw(6)m_PotentialCapacity_N2endl;myFileOut 设计年发电量 m_DesignAnnualGenerationkW.hendl;myFileOut 水电站出力系数 m_CCendl;myFileOut 水头损失系数 m_LHCendl;myFileOut 最大水头损失 m_LHmaxendl;myFileOut 径流系列起始年月 m_BeginYear/0m_BeginMonthendl;myFileOut=endl;myFileOutendl;myFileOut= =endl;myFileOutsetw(35)最优化计算结果endl;myFileOut=endl;myFileOutendl;myFileOutsetiosflags(ios:fixed)setprecision(2);myFileOut总发电量:m_OptGenerationProduction/100000000亿KW.hendl;myFileOut多年平均发电量:m_OptGenerationProduction/43.0/100000000亿KW.hendl;myFileOut可靠保证率:m_OptReliability*100%endl;myFileOut年最大发电量:m_OptAnnualMaxPower/100000000亿KW.hendl;myFileOutendl;myFileOutsetiosflags(ios:fixed)setiosflags(ios:right)setw(10)时间(年/月)setw(11)来流量setw(8)蒸发量setw(10)初库容setw(10)末库容setw(10)初水位setw(10)末水位setw(10)下游水位setw(10)发电水头setw(10)发电流量setw(10)弃水量setw(10)出力值setw(13)预想出力值setw(11)破坏深度endl;for(int i=0;im_StageNum-1;i+)/时间(年/月)输出myFileOutsetw(5)m_YearArrayim_MonthArrayi10)myFileOut0m_MonthArrayit;elsemyFileOutm_MonthArrayit;/数据输出myFileOutsetiosflags(ios:fixed)setprecision(2)setw(6)m_RunoffArrayisetw(7)m_EvapArrayi;myFileOutsetiosflags(ios:fixed)setprecision(3)setiosflags(ios:right)setw(11)m_OptVolumnArrayisetw(10)m_OptVolumnArrayi+1setw(10)m_OptUpWaterLevelArrayisetw(10)m_OptUpWaterLevelArrayi+1setw(10)m_OptDownWaterLevelArrayi setw(10)m_OptMeanWaterHeadArrayisetw(10)m_OptVarialbe_qisetw(10)m_OptAbandonQisetw(10)m_OptNArrayisetw(12)m_OptNmaxArrayisetw(10)m_OptDamageDepthi;myFileOutsetw(5)m_YearArrayim_MonthArrayi10)myFileOut0m_MonthArrayi;elsemyFileOutm_MonthArrayi;myFileOutendl;myFileOut.close();ofstream myfileout;myfileout.open(WaterLevel.txt);for(int i=0;im_StageNum-1;i+)myfileoutsetw(5)m_YearArrayim_MonthArrayi10)myfileout0m_MonthArrayit;elsemyfileoutm_MonthArrayit;myfileoutm_OptUpWaterLevelArrayim_TarFunthis-m_StageNum0=0.00;for(int i=this-m_StageNum-1;i=0;i-)/对库容进行离散if(1=this-m_StateNumi)Delta_V1 = this-m_FloodVmax - this-m_DeadVolumn;elseDelta_V1 = (this-m_NFloodVmax - this-m_DeadVolumn)/(this-m_StateNumi-1);if(1=this-m_StateNum

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论