动态规划进行单库优化调度计算C++程序代码.docx

上传人:b****2 文档编号:2420181 上传时间:2023-05-03 格式:DOCX 页数:30 大小:22.82KB
下载 相关 举报
动态规划进行单库优化调度计算C++程序代码.docx_第1页
第1页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第2页
第2页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第3页
第3页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第4页
第4页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第5页
第5页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第6页
第6页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第7页
第7页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第8页
第8页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第9页
第9页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第10页
第10页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第11页
第11页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第12页
第12页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第13页
第13页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第14页
第14页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第15页
第15页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第16页
第16页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第17页
第17页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第18页
第18页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第19页
第19页 / 共30页
动态规划进行单库优化调度计算C++程序代码.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

动态规划进行单库优化调度计算C++程序代码.docx

《动态规划进行单库优化调度计算C++程序代码.docx》由会员分享,可在线阅读,更多相关《动态规划进行单库优化调度计算C++程序代码.docx(30页珍藏版)》请在冰点文库上搜索。

动态规划进行单库优化调度计算C++程序代码.docx

动态规划进行单库优化调度计算C++程序代码

//类的定义

#ifndefSRDP_H

#defineSRDP_H

classSRDP

{

private:

//1.阶段变量stagevariable

longm_StageNum;//阶段数存储量

doublem_Delta_t;//时间间隔T=2626560s

doublem_DeltaHour;//一个月的小时数:

h

//2.决策变量decisionvariable

//double**m_OptDeciVar_q;

//3.状态变量statevariable

long*m_StateNum;//库容离散点数

//double**m_StateV;//库容离散

//4.指标函数targetfunction

double**m_TarFun;//阶段指标函数

//5.目标函数objectfunction

doublem_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;//最优轨迹中低于保证出力时的破坏深度

doublem_OptReliability;//最优轨迹对应的保证率

doublem_OptGenerationProduction;//发电量

doublem_OptAnnualMaxPower;

 

//ParametersofHydropowerStation

//

doublem_DeadWaterLevel;//死水位m

doublem_DeadVolumn;//死库容.03亿m3

doublem_NormalWaterLevel;//正常蓄水位835m

doublem_FloodLimitLevel;//汛期防洪限制水位m

doublem_FloodVmax;//汛期最大库容.03亿m3

doublem_NFloodVmax;//非汛期最大库容.37亿m3

intm_UnitsNum;//机组台数

doublem_InstallCapacity;//装机容量*2MW

doublem_FirmCapacity_N;//保证出力.2MW

//预想出力

doublem_PotentialWaterLevel1;

doublem_PotentialCapacity_N1;

doublem_PotentialWaterLevel2;

doublem_PotentialCapacity_N2;

doublem_DesignAnnualGeneration;//设计年发电量.99×kW•eV);//上游水位计算

doubleDownWaterLevelCalculation(doubleq);//下游水位计算

voidReverseSearchCalculation();//反向寻优计算

voidTerminalOptionalResultCalculation();//最终结果计算

};

#endif

 

//类的实现

//SRDP.cpp:

implementationoftheSRDPclass.

//

//////////////////////////////////////////////////////////////////////

#include"stdafx.h"

#include"SRDP.h"

#include

#include"assert.h"

#include"fstream"

#include"iomanip"

#include"iostream"

#include

usingnamespacestd;

//////////////////////////////////////////////////////////////////////

//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(inti=0;i<=this->m_StageNum;i++)

{

//delete[]this->m_OptDeciVar_q[i];

//delete[]this->m_StateV[i];

delete[]this->m_OptArray[i];

delete[]this->m_TarFun[i];

}

//delete[]this->m_OptDeciVar_q;

//delete[]this->m_StateV;

delete[]this->m_OptArray;

delete[]this->m_TarFun;

}

/////////////////////////////////////////////////////////////////////////////////////////////////

//数据初始化内存分配

/////////////////////////////////////////////////////////////////////////////////////////////////

voidSRDP:

:

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=newlong[this->m_StageNum+1];

this->m_MonthArray=newlong[this->m_StageNum+1];

this->m_StateNum=newlong[this->m_StageNum+1];

for(inti=0;i<=this->m_StageNum;i++)

{

this->m_YearArray[i]=0;

this->m_MonthArray[i]=0;

this->m_StateNum[i]=10;

}

this->m_YearArray[0]=this->m_BeginYear;//水文年起始年份

this->m_MonthArray[0]=this->m_BeginMonth;//水文年起始月份

for(inti=1;i<=this->m_StageNum;i++)

{

if((this->m_MonthArray[i-1]+1)<=12)

{

this->m_MonthArray[i]=this->m_MonthArray[i-1]+1;

this->m_YearArray[i]=this->m_YearArray[i-1];

}

elseif((this->m_MonthArray[i-1]+1)>12)

{

this->m_MonthArray[i]=this->m_MonthArray[i-1]-11;

this->m_YearArray[i]=this->m_YearArray[i-1]+1;

}

//cout<m_YearArray[i]<<"-"<m_MonthArray[i]<

}

//---------------------获取状态离散点数---------------------------------//

for(inti=0;i<=this->m_StageNum;i++)

{

if(this->m_MonthArray[i]>=6&&this->m_MonthArray[i]<=10)

this->m_StateNum[i]=1;

else

this->m_StateNum[i]=51;

//cout<m_YearArray[i]<<"\/"<m_MonthArray[i]<<"\t"<m_StateNum[i]<

}

//----------动态分配内存并初始化径流资料、蒸发数据、状态数据等----------//

//一维数组

this->m_RunoffArray=newdouble[this->m_StageNum+1];

this->m_EvapArray=newdouble[this->m_StageNum+1];

//

this->m_OptVolumnArray=newdouble[this->m_StageNum+1];

this->m_OptNArray=newdouble[this->m_StageNum+1];

this->m_OptAbandonQ=newdouble[this->m_StageNum+1];

this->m_OptUpWaterLevelArray=newdouble[this->m_StageNum+1];//最优轨迹对应的水库上游水位序列

this->m_OptDownWaterLevelArray=newdouble[this->m_StageNum+1];//最优轨迹对应的水库上游水位序列

this->m_OptVarialbe_q=newdouble[this->m_StageNum+1];//最优轨迹对应的发电流量序列

this->m_OptMeanWaterHeadArray=newdouble[this->m_StageNum+1];

this->m_OptNmaxArray=newdouble[this->m_StageNum+1];//最优轨迹对应的预想出力

this->m_OptDamageDepth=newdouble[this->m_StageNum+1];//最优轨迹中低于保证出力时的破坏深度

//二维数组

//this->m_OptDeciVar_q=newdouble*[this->m_StageNum+1];

//this->m_StateV=newdouble*[this->m_StageNum+1];

this->m_OptArray=newlong*[this->m_StageNum+1];

this->m_TarFun=newdouble*[this->m_StageNum+1];

for(inti=0;i<=this->m_StageNum;i++)

{

//this->m_OptDeciVar_q[i]=newdouble[this->m_StateNum[i]];

//this->m_StateV[i]=newdouble[this->m_StateNum[i]];

this->m_OptArray[i]=newlong[this->m_StateNum[i]];

this->m_TarFun[i]=newdouble[this->m_StateNum[i]];

}

for(inti=0;i<=this->m_StageNum;i++)

{

this->m_RunoffArray[i]=0.00;

this->m_EvapArray[i]=0.00;

this->m_OptVolumnArray[i]=0.00;

this->m_OptNArray[i]=0.00;

this->m_OptAbandonQ[i]=0.00;

this->m_OptUpWaterLevelArray[i]=0.00;

this->m_OptDownWaterLevelArray[i]=0.00;

this->m_OptVarialbe_q[i]=0.00;

this->m_OptMeanWaterHeadArray[i]=-1;

this->m_OptNmaxArray[i]=-1;//最优轨迹对应的预想出力

this->m_OptDamageDepth[i]=0;//最优轨迹中低于保证出力时的破坏深度

for(longj=0;jm_StateNum[i];j++)

{

//this->m_OptDeciVar_q[i][j]=0.00;

//this->m_StateV[i][j]=0.00;

this->m_OptArray[i][j]=0;

this->m_TarFun[i][j]=-1e+6;

}

}

//----------------//InputSystemParametetersfromfile//---------------//

//

ifstreammyFileIn1,myFileIn2,myFileIn3;

myFileIn1.open(DataFile1);//系统特性参数文件

if(!

myFileIn1)

{

cout<<"CannotOpenSystemParametersFile"<

exit(0);

}

else

{

while(myFileIn1.good())

{

myFileIn1>>this->m_DeadWaterLevel>>this->m_DeadVolumn>>this->m_NormalWaterLevel

>>this->m_FloodLimitLevel>>this->m_FloodVmax>>this->m_NFloodVmax

>>this->m_UnitsNum>>this->m_InstallCapacity>>this->m_FirmCapacity_N

>>this->m_PotentialWaterLevel1>>this->m_PotentialCapacity_N1

>>this->m_PotentialWaterLevel2>>this->m_PotentialCapacity_N2

>>this->m_DesignAnnualGeneration>>this->m_CC>>this->m_LHC

>>this->m_LHmax>>this->m_Delta_t;

}

myFileIn1.close();

}

/*cout<<"系统特性参数"<

cout<<"|=======================================================|"<

cout<<"|时段长度|Delta_T="<m_Delta_t<<"s"<

cout<<"|死水位|DeadWaterLevel="<m_DeadWaterLevel<<"m"<

cout<<"|死库容|DeadVolumn="<m_DeadVolumn<<"亿立方米"<

cout<<"|正常蓄水位|NormalWaterLevel="<m_NormalWaterLevel<<"m"<

cout<<"|汛期防洪限制水位|FloodLimitLevel="<m_FloodLimitLevel<<"m"<

cout<<"|汛期最大库容|FloodPeriodVmax="<m_FloodVmax<<"亿立方米"<

cout<<"|非汛期最大库容|NonFloodPeriodVmax="<m_NFloodVmax<<"亿立方米"<

cout<<"|系统装机容量|InstallCapacity="<m_UnitsNum<<"x"<m_InstallCapacity/2<<"MW"<

cout<<"|系统保证出力|FirmCapacity="<m_FirmCapacity_N<<"MW"<

cout<<"|水电站预想出力|";

cout<<"|水头|"<m_PotentialWaterLevel1<<"m|"<m_PotentialWaterLevel2<<"m|"<

cout<<"||"<<"|出力|"<m_PotentialCapacity_N1<<"MW|"<

cout<<"|设计年发电量|DesignAnnualGeneration="<m_DesignAnnualGeneration<<"kW.h"<

cout<<"|水电站出力系数|OutputCoefficient="<m_CC<

cout<<"|水头损失系数|HeadLossCoefficient="<m_LHC<

cout<<"|最大水头损失|HeadLossMax="<m_LHmax<

cout<<"|径流系列起始年月|BeginTime="<m_BeginYear<<"-0"<m_BeginMonth<

cout<<"|=========================================================|"<

//-------------------------------//Inputrunoffdatafromfile//---------------------------//

//

//从文件中读取长系列径流数据

myFileIn2.open(DataFile2);//径流文件

if(!

myFileIn2)

{

cou

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2