|
- %水库调度homework.m
- clc,clear;
- %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 参数设置 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %-------------------------------------------------------
- %--------------- 径流参数输入 -----------------
- u=[15,6]; %径流均值
- p=[0.7,0.5]; %径流相关系数
- bb=[5,2]; %径流标准差
- %-------------------------------------------------------
- %---------------- 水库参数 ---------------------
- D=[5,2,3]; %最小库容
- C=[30,25,20]; %最大库容
- Si=[20,10,10]; %初始库容
- Se=[5,2,3]; %结束库容
- UPline=10; %最大饮水能力上限
- %-------------------------------------------------------
- %--------------- 用户效用参数 -----------------
- a=[0.01,0.01,0.01,0.01];
- b=[-0.4,-0.5,-0.45,-0.35];
- c=[4,5,5.5,3];
- %-------------------------------------------------------
- %----------------- 定义变量 -------------------
- S(1:101,1:3)=0; %库容变量
- S(1,:)=Si; %库容初值
- X(1:100,1:4)=0; %用户取水量
- R(1:100,1:3)=0; %水库下泄水量
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%% 径流数据读入 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- [xx,name2]=xlsread('inflow_2012.xlsx','inflow');
- %%
- %-------------------------------------------------------
- %------------------- 定义初始参数 ---------------------
- tof(1:102)=0;
- Q(1:101,1:2)=0;
- Q(1,1:2)=[20,8]; %初始径流
- f(1:101,1:4)=0;
- for t=2:101 %t=2表示第1时段
- Q(t,1)=xx(5+t,4);
- Q(t,2)=xx(5+t,10);
- %-------------------------------------------------------
- %------------------ 写入径流数据 ----------------------
- %disp('input Q1'); %提示输入径流1
- %Q(t,1)=input(''); %输入径流数据1
- %disp('input Q2'); %提示输入径流2
- %Q(t,2)=input(''); %输入径流数据2
- %-------------------------------------------------------
- %-------------------- 径流预测 ------------------------
- for i=1:2
- % Q(t+1,i)=u(i)+p(i)*(Q(t,i)-u(i));
- end
- Q(t+1,1)=15;
- Q(t+1,2)=6;
- %%%%%%%%%%%%%%%%%%%%%%%%%%%% 约束条件 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %-------------------------------------------------------
- %---------------- 不等式约束条件 --------------------
- %----------------- 取水量约束 -----------------------
- %各个约束方程系数,变量顺序:t(x1-x4,r1-r3);t+1(x1-x4,r1-r3).
- %------------------ t时段和t+1时段同
- uequ0=[0,0,0,0,0,0,0]; %补零矩阵
- uequ1=[1,0,0,0,-1,0,0];
- b1=0;
- uequ2=[0,1,0,0,0,-1,0];
- b2=0;
- uequ3=[0,0,1,1,0,0,-1];
- b3=0;
- %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- if t<101
- %-------------------------------------------------------
- %------------------- 库容约束 ------------------------
- uequ4=[0,0,0,0,1,0,0,0,0,0,0,0,0,0];
- b4=S(t-1,1)+Q(t,1)-D(1);
- uequ5=[0,0,0,0,-1,0,0,0,0,0,0,0,0,0];
- b5=C(1)-S(t-1,1)-Q(t,1);
- uequ6=[0,0,0,0,0,1,0,0,0,0,0,0,0,0];
- b6=S(t-1,2)+Q(t,2)-D(2);
- uequ7=[0,0,0,0,0,-1,0,0,0,0,0,0,0,0];
- b7=C(2)-S(t-1,2)-Q(t,2);
- uequ8=[-1,-1,0,0,1,1,-1,0,0,0,0,0,0,0];
- b8=C(3)-S(t-1,3);
- uequ9=[1,1,0,0,-1,-1,1,0,0,0,0,0,0,0];
- b9=S(t-1,3)-D(3);
- %------------------- t+1时段
- uequ10=[0,0,0,0,1,0,0,0,0,0,0,1,0,0];
- b10=S(t-1,1)+Q(t,1)+Q(t+1,1)-D(1);
- uequ11=[0,0,0,0,-1,0,0,0,0,0,0,-1,0,0];
- b11=C(1)-S(t-1,1)-Q(t,1)-Q(t+1,1);
- uequ12=[0,0,0,0,0,1,0,0,0,0,0,0,1,0];
- b12=S(t-1,2)+Q(t,2)+Q(t+1,2)-D(2);
- uequ13=[0,0,0,0,0,-1,0,0,0,0,0,0,-1,0];
- b13=C(2)-S(t-1,2)-Q(t,2)-Q(t+1,2);
- uequ14=[1,1,0,0,-1,-1,1,1,1,0,0,-1,-1,1];
- b14=S(t-1,3)-D(3);
- uequ15=[-1,-1,0,0,1,1,-1,-1,-1,0,0,1,1,-1];
- b15=C(3)-S(t-1,3);
- %-------------------------------------------------------
- %------------------ 合成矩阵约束 ----------------------
- Aue1=[uequ1,uequ0;uequ2,uequ0;uequ3,uequ0;uequ0,uequ1;uequ0,uequ2;uequ0,uequ3;uequ4;uequ5;uequ6;uequ7;uequ8;uequ9];
- Aue2=[uequ10;uequ11;uequ12;uequ13;uequ14;uequ15];
- A=[Aue1;Aue2];
- Bue1=[b1;b2;b3;b1;b2;b3;b4;b5;b6;b7;b8;b9];
- Bue2=[b10;b11;b12;b13;b14;b15];
- B=[Bue1;Bue2];
- %-------------------------------------------------------
- %------------------ 取值边界 --------------------------
- lb=zeros(14,1); %取值下限
- ub=[10;10;10;5.7;inf;inf;inf;10;10;10;5.7;inf;inf;inf]; %取值上限
- %-------------------------------------------------------
- %------------------ 两阶段求最优解 --------------------
- %------------------ x0 初始可行解
- x01=[Q(t,1)/2;Q(t,2)/2;Q(t,1)/2;Q(t,2)/2;Q(t,1);Q(t,2);(Q(t,1)+Q(t,2))/2];
- x02=[Q(t+1,1)/2;Q(t+1,2)/2;Q(t+1,1)/2;Q(t+1,2)/2;Q(t+1,1);Q(t+1,2);(Q(t+1,1)+Q(t+1,2))/2];
- x0=[x01;x02];
- %-------------------------------------------------------
- %--------------------- 求最优解 -----------------------
- options=optimset('LargeScale','on','display','off','Algorithm','active-set');
- [x,fval] = fmincon(@benefit2,x0,A,B,[],[],lb,ub,[],options);
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- elseif t==101
- %---------------- 不等式约束条件 --------------------
- %----------------- 取水量约束 -----------------------
- A=[uequ1;uequ2;uequ3];
- B=[b1;b2;b3];
- %-------------------------------------------------------
- %----------------- 等式约束条件 ----------------------
- uequ4=[0,0,0,0,1,0,0];
- b4=S(t-1,1)+Q(t,1)-D(1);
- uequ6=[0,0,0,0,0,1,0];
- b6=S(t-1,2)+Q(t,2)-D(2);
- uequ9=[1,1,0,0,-1,-1,1];
- b9=S(t-1,3)-D(3);
- AU=[uequ4;uequ6;uequ9];
- BU=[b4;b6;b9];
- %-------------------------------------------------------
- %------------------ 取值边界 --------------------------
- lb=[0,0,0,0,0,0,0]; %取值下限
- ub=[10,10,10,5.7,inf,inf,inf]; %取值上限
- %-------------------------------------------------------
- %--------------------- 求最优解 ----------------------
- options=optimset('LargeScale','off','display','off','Algorithm','active-set');
- x0=[Q(t,1)/2;Q(t,2)/2;Q(t,1)/2;Q(t,2)/2;Q(t,1);Q(t,2);(Q(t,1)+Q(t,2))/2];
- [x,fval] = fmincon(@benefit,x0,A,B,AU,BU,lb,ub,[],options);
- end
- %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %-------------------------------------------------------
- %------------------- 结果处理 ------------------------
- X(t,:)=x(1:4);
- R(t,:)=x(5:7);
- %-------------------------------------------------------
- %------------------- 求解效益 ------------------------
- for i=1:4
- f(t,i)=a(i)*X(t,i)^3+b(i)*X(t,i)^2+c(i)*X(t,i);
- end
- tof(t)=sum(f(t,:));
- final=sum(tof);
- %-------------------------------------------------------
- %----------------- 下时段水库初值 ---------------------
- S(t,1)=Q(t,1)+S(t-1,1)-R(t,1);
- S(t,2)=Q(t,2)+S(t-1,2)-R(t,2);
- S(t,3)=S(t-1,3)+R(t,1)+R(t,2)-R(t,3)-X(t,1)-X(t,2);
- %-------------------------------------------------------
- %------------------ 计算结果输出 ----------------------
- disp('calculation result:');
- disp('x1,x2,x3,x4,r1,r2,r3');
- disp(x(1:7)');
- end
- %%
- %%%%%%%%%%%%%%%%%%%%%%%% 结果输出 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %xlswrite('final exam_test sheet_2012.xlsx',e,'results','E3');
复制代码 期末试题 求解答 非常感谢坛友 急 急
数据在以下链接中 以上是matlab程序 可是运行不出来 哪位大神也可以帮忙改改 不胜感激!
本人刚入论坛比较穷 只有5个币 辛苦了
final exam V2012_R.docx
(47.89 KB)
inflow_2012.xlsx
(62.04 KB)
|