저작자표시 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 이저작물을영리목적으로이용할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 변경금지. 귀하는이저작물을개작, 변형또는가공할수없습니다. 귀하는, 이저작물의재이용이나배포의경우, 이저작물에적용된이용허락조건을명확하게나타내어야합니다. 저작권자로부터별도의허가를받으면이러한조건들은적용되지않습니다. 저작권법에따른이용자의권리는위의내용에의하여영향을받지않습니다. 이것은이용허락규약 (Legal Code) 을이해하기쉽게요약한것입니다. Disclaimer
l l
min
clear smp=load('smp.txt'); % SMP data load eta=0.8; % 양수동력량에대한발전량의비율 a=0.002436; % 양수입찰에따른가격변동기울기 (43600~66000) b=0.011620; % 양수입찰에따른가격변동기울기 (66000~72600) r=0.5; % 양수동력반영비율 other_gen=4000; % 타발전설비총용량 %% State 생성 %% for N=1:24 if N<=8 for M=1:2*N-1 S(M,N)=6400-400*(M-1); % 초기용량 6400MWh end elseif N<=16 for M=1:17 S(M,N)=6400-400*(M-1); end else for M=1:17-2*(N-17) S(M,N)=6400-400*(M-1); end end end %% 수익계산 %% for N=1:24
if smp(2,n)>=66000 f(n,1)=-(smp(1,n)+b*800*r)*800/eta+(smp(1,n)+b*800*r)*other_g en; f(n,2)=-(smp(1,n)+b*400*r)*400/eta+(smp(1,n)+b*400*r)*other_g en; f(n,3)=smp(1,n)*other_gen; f(n,4)=(smp(1,n)-b*400)*400+(smp(1,n)-b*400)*other_gen; f(n,5)=(smp(1,n)-b*800)*800+(smp(1,n)-b*800)*other_gen; else f(n,1)=-(smp(1,n)+a*800*r)*800/eta+(smp(1,n)+a*800*r)*other_g en; f(n,2)=-(smp(1,n)+a*400*r)*400/eta+(smp(1,n)+a*400*r)*other_g en; f(n,3)=smp(1,n)*other_gen; f(n,4)=(smp(1,n)-a*400)*400+(smp(1,n)-a*400)*other_gen; f(n,5)=(smp(1,n)-a*800)*800+(smp(1,n)-a*800)*other_gen; end end %% Dynamic Programming %% S(1,25)=6400; op=zeros(17,25); for N=25:-1:2
if N<=9 for i=1:1:17-2*(10-n) k=1; for j=1:17-2*(9-n) if (S(i,N-1)-S(j,N))==-800 temp(k,1)=f(n-1,1)+op(j,n); temp(k,2)=-1; k=k+1; elseif (S(i,N-1)-S(j,N))==-400 temp(k,1)=f(n-1,2)+op(j,n); temp(k,2)=-0.5; k=k+1; elseif (S(i,N-1)-S(j,N))==0 temp(k,1)=f(n-1,3)+op(j,n); temp(k,2)=0; k=k+1; elseif (S(i,N-1)-S(j,N))==400 temp(k,1)=f(n-1,4)+op(j,n); temp(k,2)=0.5; k=k+1; elseif (S(i,N-1)-S(j,N))==800 temp(k,1)=f(n-1,5)+op(j,n); temp(k,2)=1; k=k+1; else temp=temp; end end temp=sortrows(temp(1:k-1,1:2),-1); op(i,n-1)=temp(1,1);
end sel(i,n-1)=temp(1,2); temp=zeros(5,2); elseif N<=17 for i=1:17 k=1; for j=1:17 if (S(i,N-1)-S(j,N))==-800 temp(k,1)=f(n-1,1)+op(j,n); temp(k,2)=-1; k=k+1; elseif (S(i,N-1)-S(j,N))==-400 temp(k,1)=f(n-1,2)+op(j,n); temp(k,2)=-0.5; k=k+1; elseif (S(i,N-1)-S(j,N))==0 temp(k,1)=f(n-1,3)+op(j,n); temp(k,2)=0; k=k+1; elseif (S(i,N-1)-S(j,N))==400 temp(k,1)=f(n-1,4)+op(j,n); temp(k,2)=0.5; k=k+1; elseif (S(i,N-1)-S(j,N))==800 temp(k,1)=f(n-1,5)+op(j,n); temp(k,2)=1; k=k+1; else temp=temp;
end end temp=sortrows(temp(1:k-1,1:2),-1); op(i,n-1)=temp(1,1); sel(i,n-1)=temp(1,2); temp=zeros(5,2); end else for i=1:17-2*(n-18) k=1; for j=1:17-2*(n-17) if (S(i,N-1)-S(j,N))==-800 temp(k,1)=f(n-1,1)+op(j,n); temp(k,2)=-1; k=k+1; elseif (S(i,N-1)-S(j,N))==-400 temp(k,1)=f(n-1,2)+op(j,n); temp(k,2)=-0.5; k=k+1; elseif (S(i,N-1)-S(j,N))==0 temp(k,1)=f(n-1,3)+op(j,n); temp(k,2)=0; k=k+1; elseif (S(i,N-1)-S(j,N))==400 temp(k,1)=f(n-1,4)+op(j,n); temp(k,2)=0.5; k=k+1; elseif (S(i,N-1)-S(j,N))==800 temp(k,1)=f(n-1,5)+op(j,n); temp(k,2)=1;
k=k+1; else temp=temp; end end temp=sortrows(temp(1:k-1,1:2),-1); op(i,n-1)=temp(1,1); sel(i,n-1)=temp(1,2); temp=zeros(5,2); end end end op(1,1) % 총수익 %% 양수동력반영비율에따른 smp 변화분석 %% for N=1:3 m=1; for i=1:24 % 양수발전최적입찰 op_sel을구함 if sel(m,i)==1 op_sel(i)=sel(m,i); m=m+2; elseif sel(m,i)==0.5 op_sel(i)=sel(m,i); m=m+1; elseif sel(m,i)==0 op_sel(i)=sel(m,i); elseif sel(m,i)==-0.5 op_sel(i)=sel(m,i); m=m-1; else op_sel(i)=sel(m,i);
end end m=m-2; for i=1:24 % 양수발전입찰에따른시장가격변화계산 if smp(2,i)>=66000 if op_sel(i)==1 v_smp(n,i)=smp(1,i)-b*800; elseif op_sel(i)==0.5 v_smp(n,i)=smp(1,i)-b*400; elseif op_sel(i)==0 v_smp(n,i)=smp(1,i); elseif op_sel(i)==-0.5 v_smp(n,i)=smp(1,i)+b*400*r; else v_smp(n,i)=smp(1,i)+b*800*r; end else if op_sel(i)==1 v_smp(n,i)=smp(1,i)-a*800; elseif op_sel(i)==0.5 v_smp(n,i)=smp(1,i)-a*400; elseif op_sel(i)==0 v_smp(n,i)=smp(1,i); elseif op_sel(i)==-0.5 v_smp(n,i)=smp(1,i)+a*400*r; else v_smp(n,i)=smp(1,i)+a*800*r; end end end % r=r+0.25; end