基于遗传算法的新安江模型参数优化率定(四)

本文介绍了使用C++实现的新安江三水源模型,并结合遗传算法进行参数优化。通过读取原始数据,计算确定性系数,然后运用遗传算法进行种群初始化、选择、交叉和变异操作,最终找到最优参数并输出模拟流量。
摘要由CSDN通过智能技术生成

4.3  C++程序代码

4.3.1  新安江三水源模型

//新安江三水源模型.h

#include <fstream>

#include <iostream>

#include <iomanip>

#include <cmath>

 

const intVariableNum = 11, //待率定参数个数

              M = 485,//其为降雨起止间时段数(应该为)

              Mq = 14;//单位线中q[i]的个数,此课设中为

const double  F = 686, dt = 6;//面积、系列数据的时间间隔

const double FE =0.8;

const int  Days[4] = {30, 31, 30, 31}; //四至七月份每月天数

const doubleAveE[2][4] = {1.57, 2.29, 2.65, 3.41,0.97, 1.49, 1.71,     2.34};//四至七月份每月的多年平均日蒸发量

double K, WUM, WLM, C, //蒸发(蒸散发能力折算系数、分层蓄水容量、深层蒸散发系数)

        WM, b,    //产流(蓄水容量、蓄水容量曲线指数)

       SM,  EX, KI,   //水源划分(自由水蓄水容量、自由水蓄水容量曲线指数、自由水蓄水库出流系数)

        KKI, KKG;             //汇流(壤中流、地下径流消退系数)

 doubleP[M], Ep[M], EU[M], EL[M], ED[M], E[M], PE[M], WU[M + 1], WL[M + 1], WD[M + 1],W[M], a[M], R[M];

 doubleaf[M];//af[i]指产流面积比率(%),三水源划分中需要的数据

 doubleP1[M], P2[M], P3[M], Qo[ M ];     //三个雨量站实测雨量,实测流域流量

 doubleS[M], AU[M], RS[M], RI[M], RG[M];

 doubleq[Mq], QS[Mq + M - 1],Qs[Mq + M - 1][M];

 doubleQ[Mq + M - 1], QI[Mq + M - 1], QG[Mq + M - 1];

 doubleSumQo, AveQo, S1, S2;

 doubleU = F/3.6/dt;//折算系数

 doubleDC;//确定性系数

 

void inputQ();//读入原始数据

double FuntionDC(doubleCanshu[]);//计算确定性系数

void outputQ(doubleCanshu[]);//输出模拟流量

 

//**********读入原始数据(函数)************   

void inputQ()

{

       usingnamespace std;

        ifstream infile;//读人三个雨量站实测流域流量

        infile.open("infile_3P_Qo.txt");

        for(int i = 0; i < M; i++)

               infile>>P1[i]>>P2[i]>>P3[i]>>Qo[i];

 

       SumQo = 0, AveQo;

        for (int i = 0; i < M; i++)  

              SumQo += Qo[i];

       AveQo = SumQo/M;

        S2 = 0;

        for (int i = 0; i < M; i++)  

              S2 += pow(Qo[i] -AveQo, 2);

       infile.close();

 

        infile.open("infile_q.txt");

        for (int i = 0; i < Mq; i++)  

        { //读人时段单位线数据

               infile>>q[i];

        }

        infile.close();

}

 

//**********计算确定性系数(函数)************      

 doubleFuntionDC(double Canshu[])

 {

       usingnamespace std;

       K = Canshu[10]; WM =Canshu[0]; WUM = Canshu[1]; WLM = Canshu[2]; C = Canshu[3];

       b = Canshu[4];

       SM = Canshu[5]; EX = Canshu[6];KI = Canshu[7];             

       KKI = Canshu[8]; KKG  = Canshu[9];     

 

 

   //******三层蒸发模式下的蓄满产流模型(开始)

        double WDM =WM - WUM - WLM, KG = 0.7 - KI;

        double WMM =WM*(1 + b);

        WU[0] = FE*WUM;

        WL[0] = FE*WLM;

        WD[0] = FE*WDM;

 

       //********计算蒸发能力

       intSumTime1 = 0, SumTime2 = 0;

       for(int j = 0; j < 4; j++)

       {

              SumTime1 =  SumTime2;

              SumTime2+=4*Days[j];

              if(SumTime2 > M) SumTime2 = M;

               for(int i = SumTime1; i < SumTime2; i++)

               {

                      P[i] = (P1[i]+P2[i]+P3[i])/3;

                     if(P[i] < 3)  Ep[i] = AveE[0][j] * K;

                     else   Ep[i] =AveE[1][j] * K;

               }

       }

        for (int i = 0; i < M; i++)

        {

               W[i] = WU[i] + WL[i]+ WD[

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值