基于简化运行策略的水电站中长期常规调度
来源:互联网 发布:生产制造业erp软件 编辑:程序博客网 时间:2024/05/17 05:56
//毕设之常规调度程序---简化运行
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define z_ss 328.5 //死水位
#define z_qfh 346.30 //防洪限制水位-前汛期
#define z_hfh 346.80 //防洪限制水位-后汛期
#define z_zc 347 //正常蓄水位
#define Y 48 //流量资料年数
#define M 12 //一年月数
#define T 576 //入流流量数据个数
#define NUM1 24 //水位库容关系点数
#define NUM2 12 //下泄流量与水位关系点数
#define NUM3 3 //水头限制出力关系点数
//插值函数部分
float chazhi(float x,float y1[],float y2[],int n) //插值函数
{
int i;
for(i=0;i<n-1;i++)
{
if(x>=y1[i]&&x<=y1[i+1])
return (y2[i]+(y2[i+1]-y2[i])/(y1[i+1]-y1[i])*(x-y1[i]));
}
if(x<y1[0])
return y1[0];
if(x>y1[n-1])
return (y2[n-2]+(y2[n-1]-y2[n-2])/(y1[n-1]-y1[n-2])*(x-y1[n-2]));
}
int main(void)
{
float Q[T+1],vcz[NUM1],zsy_cz[NUM1],qcz[NUM2],zxy_cz[NUM2],z_mao[NUM3],n_yx[NUM3];
int i,j;
int n=1,m=1;
Q[0]=0;
//数据输入部分
FILE *fQ1i; //流量数据输入
if((fQ1i=fopen("流量.txt","r"))==NULL)
{
printf("can't open 流量.txt file\n");
exit(0);
}
for(i=0;i<Y;i++)
{
for(j=0;j<M;j++)
{
fscanf(fQ1i,"%f",&Q[n++]);
}
}
FILE *fQsw;
fQsw=fopen("水文年排列的流量.txt","w");//将原始流量数据按照水文年排列
for(i=5;i<T+1;i++)
{
fprintf(fQsw,"%6.2f\t",Q[i]);
if((i-4)%12==0)
fprintf(fQsw,"\n");
}
for(i=1;i<5;i++)
{
fprintf(fQsw,"%6.2f\t",Q[i]);
}
FILE *fQi; //水文年排列的流量数据输入
if((fQi=fopen("水文年排列的流量.txt","r"))==NULL)
{
printf("can't open 水文年排列的流量.txt file\n");
exit(0);
}
for(i=0;i<Y;i++)
{
for(j=0;j<M;j++)
{
fscanf(fQi,"%f",&Q[m++]);
}
}
FILE *fv_z; //水位-库容数据输入
if((fv_z=fopen("水位库容.txt","r"))==NULL)
{
printf("can't open 水位库容.txt file\n");
exit(0);
}
for(i=0;i<NUM1;i++)
{
fscanf(fv_z,"%f%f",&zsy_cz[i],&vcz[i]);
//printf("zsy_cz[%d]=%f\tvcz[%d]=%f\n",i,zsy_cz[i],i,vcz[i]);
}
FILE *fq_z; //水位-尾流量数据输入
if((fq_z=fopen("水位流量.txt","r"))==NULL)
{
printf("can't open 水位流量.txt file\n");
exit(0);
}
for(i=0;i<NUM2;i++)
{
fscanf(fq_z,"%f%f",&zxy_cz[i],&qcz[i]);
//printf("zxy_cz[%d]=%f\tqcz[%d]=%f\n",i,zxy_cz[i],i,qcz[i]);
}
FILE *fn_z;//水头出力数据导入
if((fn_z=fopen("水头出力.txt","r"))==NULL)
{
printf("can't open 水头出力.txt file\n");
exit(0);
}
for(i=0;i<NUM3;i++)
{
fscanf(fn_z,"%f""%f",&z_mao[i],&n_yx[i]);
//printf("z_mao[%d]=%f\tn_yx[%d]=%f\n",i,z_mao[i],i,n_yx[i]);
}
/*//库容系数计算
float v_zc,v_sk; //正常蓄水位对应的库容
float v_xl; //兴利库容
float Q_ave; //多年平均流量
float w_yong; //多年平均水量
float Q_total=0;//多年平均流量之和
float b; //库容系数
for(i=1;i<T+1;i++)
{
Q_total+=Q[i];
}
Q_ave=Q_total/T*12;
w_yong=Q_ave*2.63*pow(10,-2);
v_sk=chazhi(z_ss,zsy_cz,vcz,NUM1);
v_zc=chazhi(z_zc,zsy_cz,vcz,NUM1);
v_xl=v_zc-v_sk;
b=v_xl/w_yong;
printf("多年平均流量Q_ave=%f\n",Q_ave);
printf("多年平均年径流量Q_ave=%f\n",w_yong);
printf("多兴利库容v_xl=%f\n",v_xl);
printf("库容系数b=%f\n",b);
if(b>0.3)
printf("此水库属于多年调节水库\n");
else if(b<=0.3&&b>=0.08)
printf("此水库属于年调节水库\n");
else if(b<0.08&&b>=0.03)
printf("此水库属于不完全年调节水库\n");
else
printf("此水库属于日调节水库\n");*/
//常规调度部分
float Qfd[T+1],Qfd2[T+1],Qfd3;
float Qfd1[T+1]={0};//试算发电流量部分
float zsy[T+1],zxy[T+1];//上游水位
float dzs[T+1],dz[T+1],dzs1[T+1];//水头损失
float q_qs[T+1]={0};//弃水
float v[T+2];//库容
float r=0.00001;//检验值
float s=0.3;//加权数
float k=7.74;//出力系数
float NP=1.51;//保证出力
float N[T+1];//出力序列
float Vmax,Vmin;//库容上下限
float Nyu;//预想出力
int n_yt[T+1];//每月天数
float yn=0;//破坏的年份数
float b_y;//保证率
float E[T+1];//发电量
v[1]=chazhi(328.5,zsy_cz,vcz,NUM1);//定义库容起始值
Vmin=chazhi(z_ss,zsy_cz,vcz,NUM1);//计算库容下限
for(i=1;i<T+1;i++)
{
if(i%12<=3&&i%12>=1)//汛期非汛期库容的限制值
Vmax=chazhi(z_qfh,zsy_cz,vcz,NUM1);
else if(i%12<=6&&i%12>=4)
Vmax=chazhi(z_hfh,zsy_cz,vcz,NUM1);
else
Vmax=chazhi(z_zc,zsy_cz,vcz,NUM1);
//确定每月小时数
if(i%12==1||i%12==3||i%12==4||i%12==6||i%12==8||i%12==9||i%12==11)//每月31天的月份
n_yt[i]=744;
else if(i%12==10)//2月
n_yt[i]=696;
else//平月
n_yt[i]=720;
for(;;)
{
zsy[i]=chazhi(v[i],vcz,zsy_cz,NUM1);//插值计算上游水位
zxy[i]=chazhi(Qfd1[i],qcz,zxy_cz,NUM2);//插值计算下游水位
dzs1[i]=8.057*pow(10,-4)*Qfd1[i]*Qfd1[i]*4;//水头损失值
if(dzs1[i]<7) //水头损失确认
dzs[i]=dzs1[i];
else
dzs[i]=7;
dz[i]=zsy[i]-zxy[i]-dzs[i];//实际水头
Qfd[i]=NP*pow(10,4)/(k*dz[i]);//由保证出力及水头计算发电流量
if(fabs(Qfd[i]-Qfd1[i])>=r)//判断假设的发电流量是否合理
Qfd1[i]=s*Qfd[i]+(1-s)*Qfd1[i];//重新定义发电流量的试算值
else
break;
}
Qfd2[i]=(Qfd[i]+Qfd1[i])/2;
v[i+1]=v[i]+(Q[i]-Qfd2[i])*2.63/100;//由水量平衡计算末时段库容
Nyu=chazhi(dz[i],z_mao,n_yx,NUM3);//预想出力限制部分
if(v[i+1]>=Vmin&&v[i+1]<=Vmax)//库容为限制条件,计算不同情况下的实际发电流量
{
N[i]=NP;
Qfd[i]=Qfd2[i];
}
else if (v[i+1]<Vmin) //降低出力
{
Qfd[i]=Q[i]+(v[i]-Vmin)*100/2.63;
N[i]=Qfd[i]*k*dz[i]*pow(10,-4);
v[i+1]=v[i]+(Q[i]-Qfd[i])*2.63/100;
}
else
{
Qfd3=Q[i]+(v[i]-Vmax)*100/2.63; //加大出力
N[i]=Qfd3*k*dz[i]*pow(10,-4);
if(N[i]>Nyu)
{
N[i]=Nyu;
Qfd[i]=Nyu*pow(10,4)/(k*dz[i]);
q_qs[i]=Qfd3-Qfd[i];
}
else
Qfd[i]=Qfd3;
v[i+1]=v[i]+(Q[i]-Qfd3)*2.63/100;
}
E[i]=N[i]*n_yt[i];
}
for(i=0;i<Y;i++)
{
for(j=1;j<M+1;j++)
{
if(N[i*12+j]<NP)
{
yn++;
break;
}
}
}
b_y=(Y-yn)/Y;
printf("%3.0f\n",yn);
printf("%f",b_y);
FILE *fZSY,*fVY,*fNS,*fQS,*fQQ,*fdz,*fFD;
fZSY=fopen("常规调度下的上游水位.txt","w"); //上游水位
fVY=fopen("常规调度下的库容.txt","w"); //库容
fQS=fopen("常规调度下的发电流量.txt","w"); //发电流量
fNS=fopen("常规调度下的出力.txt","w"); //出力
fQQ=fopen("常规调度下的弃水.txt","w"); //弃水
fdz=fopen("常规调度下的水头.txt","w"); //水头
fFD=fopen("常规调度下的发电量.txt","w"); //发电量
for(i=1;i<T+1;i++)
{
fprintf(fZSY,"%6.2f\t",zsy[i]);
fprintf(fVY,"%6.2f\t",v[i]);
fprintf(fQS,"%6.2f\t",Qfd[i]);
fprintf(fNS,"%6.2f\t",N[i]);
fprintf(fQQ,"%6.2f\t",q_qs[i]);
fprintf(fdz,"%6.2f\t",dz[i]);
fprintf(fFD,"%6.2f\t",E[i]);
if(i%12==0)
{
fprintf(fZSY,"\n");
fprintf(fVY,"\n");
fprintf(fQS,"\n");
fprintf(fNS,"\n");
fprintf(fQQ,"\n");
fprintf(fdz,"\n");
fprintf(fFD,"\n");
}
}
for(i=1;i<T+1;i++)
{
fprintf(fZSY,"%6.2f\n",zsy[i]);
fprintf(fVY,"%6.2f\n",v[i]);
fprintf(fQS,"%6.2f\n",Qfd[i]);
fprintf(fNS,"%6.2f\n",N[i]);
fprintf(fQQ,"%6.2f\n",q_qs[i]);
fprintf(fdz,"%6.2f\n",dz[i]);
fprintf(fFD,"%6.2f\n",E[i]);
}
return 0;
}
- 基于简化运行策略的水电站中长期常规调度
- 基于DP法的水电站中长期优化调度
- 操作系统中长期调度、中期调度和短期调度之间的区别
- 操作系统中长期调度、中期调度和短期调度之间的区别
- 操作系统中长期调度、中期调度和短期调度之间的区别
- 操作系统中长期调度、中期调度和短期调度之间的区别
- 用PriorityBlockingQueue简化线程优先级调度策略
- 问题简化的策略
- MongoDB的常规备份策略
- 基于DSP的图像旋转算法数据调度策略
- Spark 的调度策略
- 操作系统的调度策略
- 针对百度的常规网页优化策略
- 一种线程调度策略【线程需要的时候运行,不需要的时候暂停】
- 线程的调度策略1
- 线程的调度策略2
- linux内核的调度策略
- Java多线程的调度策略
- Android Camera 使用小结
- Boost Thread学习笔记
- 【转载】2010 BlackHat - 即时恶意软件分析和控制方案
- PCI 中的base address register(转)
- 使用REGEXP_COUNT函数统计字符串出现的次数
- 基于简化运行策略的水电站中长期常规调度
- JavaScript 操作JSON
- Android 锁屏(开机/超时/Power键)解锁
- stonecutter 老石匠
- WEB测试经验谈
- mac OS X10.8.3安装eclipse后,svn插件各种失败
- Android系统的四大组件详解
-
- IELTS vacabulary - C