For your reference, I attached my complete code here. Thanks!
clc;
clear all;
close all;
%% System Parameters
nt=24; % time horizon
% define cost
cg1=[2 1.75 1 3.25 3 3]'; % 1st order generator cost
cg2=[0.02 0.0175 0.0625 0.00834 0.025 0.025]'; % 2nd order generator cost
crgs=[6 6.75 7 5.25 5 5]';
Conoff=ones(1,6); % generator on cost
mpc=case30;
loads=repmat(mpc.bus(:,3),1,nt);
mg=20*ones(1,nt);
mbus=10;
wbus=22;
wl=0;
%% Create B Matrix
% make Y/B bus matrix and A matrix in Pline=A*Pinj
[Ybus, Yf, Yt] = makeYbus(mpc);
B=full(real(i.*Ybus));
NB=-B;
Bred=B(1:29,1:29); % Reduced B Matrix
from = mpc.branch(:,1);
to = mpc.branch(:,2);
M = zeros(41,30); % from/to matrix
lineC = zeros(41,1);
for i=1:41
M(i,from(i))=1;
M(i,to(i))=-1;
lineC(i)=1*mpc.branch(i,7);
end
m = M(:,1:29);
x=mpc.branch(:,4); % resistance
r=mpc.branch(:,3); % reactance
b=x./(x.^2+r.^2); % susceptance
D=diag(b); % diagnol matrix of the susceptance
%% Wind Forecast and Scenarios
%wind forecast
load('ObsDays.mat');
k=54;
wf1=wl*ObsDays(k,:,11);
wf1=wf1(1:nt);
wf=wf1;
corr1=corrcoef(ObsDays(:,:,11));
std_dev = [0.12,0.15,0.18,0.5,0.6,0.67,0.72,0.76,0.79,0.82,0.83,0.8315,0.833,0.835,0.836,0.838,0.839,0.841,0.842,0.844,0.845,0.847,0.848,0.85];
for j=1:nt
for k=1:nt
covarr1(j,k)=corr1(j,k)*std_dev(k)*std_dev(j);
end
end
beta=0.01;
eulernum=exp(1);
epsilon=0.05;
Ndelta=1*nt;%num of uncertainties,one wind each period
Nneed=ceil((1/epsilon)*(eulernum/(eulernum-1))*(log(1/beta)+4*(Ndelta+1)-1));
N=Nneed;%Number of scenarios
%create wind error set
avg=zeros(nt,1)';
for i=1:N
err1(i,:)=mvnrnd(avg,covarr1);
end
for j=1:N
wn1(j,:)=wf1+wf1.*err1(j,:);
pos=wn1(j,:)>=0;
winderror1(j,:)=wf1.*err1(j,:).*pos;
ws1(j,:)=wn1(j,:).*pos;
end
%total wind forecast
wst=ws1;
%create wind error set
pr1=90;%upper percentile(throughout)
pr2=10;%lower percentile(throughout)
windup1=prctile(winderror1,pr1);
windup=1*windup1;
winddown1=prctile(winderror1,pr2);
for i=1:nt
if wf1(i)+winddown1(i)<0
winddown1(i)=-wf1(i);
end
end
winddown=1*winddown1;
phi=wst(1,:)-wf;% forecast error
%% Define Optimization Variables and Their Bounds
% 3. Generators
ng=6;
Gmax=[80*ones(1,nt);80*ones(1,nt);40*ones(1,nt);50*ones(1,nt);30*ones(1,nt);55*ones(1,nt)];
Gmin=[zeros(6,nt)];
pg=sdpvar(ng,nt,'full');
onoff=binvar(ng,nt,'full');
Rgsmin=-0.5*Gmax;
Rgsmax=0.5*Gmax;
rgs=sdpvar(ng,nt,'full');
% LB & UB
constraints = [Gmin<=pg<=Gmax,Rgsmin<=rgs<=Rgsmax];
%% Power Flow Constraints
% power flow with forecast wind
Pinj=sdpvar(30,nt,'full'); % bus nodal matrix with forecast wind
for i=1:30
if i==1
constraints=[constraints,Pinj(i,:)==-loads(i,:)+pg(1,:)];
elseif i==2
constraints=[constraints,Pinj(i,:)==-loads(i,:)+pg(2,:)];
elseif i==13
constraints=[constraints,Pinj(i,:)==-loads(i,:)+pg(3,:)];
elseif i==22
constraints=[constraints,Pinj(i,:)==-loads(i,:)+pg(4,:)];
elseif i==23
constraints=[constraints,Pinj(i,:)==-loads(i,:)+pg(5,:)];
elseif i==27
constraints=[constraints,Pinj(i,:)==-loads(i,:)+pg(6,:)];
elseif i==wbus
constraints=[constraints,Pinj(i,:)==-loads(i,:)+wf];
elseif i==mbus
constraints=[constraints,Pinj(i,:)==-loads(i,:)+mg];
else
constraints=[constraints,Pinj(i,:)==-loads(i,:)];
end
end
theta=sdpvar(29,nt,'full'); % bus angle
constraints = [constraints,theta==inv(Bred)*Pinj(1:29,:)];
pflow=sdpvar(41,nt,'full'); % line flow
constraints = [constraints,pflow==D*m*theta];
constraints = [constraints,-repmat(lineC,1,nt)<=pflow<=repmat(lineC,1,nt)];% line constraints
% power flow with wind scenario
Pinjs=sdpvar(30,nt,'full'); % bus nodal matrix with real wind
for i=1:30
if i==1
constraints=[constraints,Pinjs(i,:)==-loads(i,:)+pg(1,:)+rgs(1,:)];
elseif i==2
constraints=[constraints,Pinjs(i,:)==-loads(i,:)+pg(2,:)+rgs(2,:)];
elseif i==13
constraints=[constraints,Pinjs(i,:)==-loads(i,:)+pg(3,:)+rgs(3,:)];
elseif i==22
constraints=[constraints,Pinjs(i,:)==-loads(i,:)+pg(4,:)+rgs(4,:)];
elseif i==23
constraints=[constraints,Pinjs(i,:)==-loads(i,:)+pg(5,:)+rgs(5,:)];
elseif i==27
constraints=[constraints,Pinjs(i,:)==-loads(i,:)+pg(6,:)+rgs(6,:)];
elseif i==wbus
constraints=[constraints,Pinjs(i,:)==-loads(i,:)+wst(1,:)];
elseif i==mbus
constraints=[constraints,Pinjs(i,:)==-loads(i,:)+mg];
else
constraints=[constraints,Pinjs(i,:)==-loads(i,:)];
end
end
thetas=sdpvar(29,nt,'full'); % bus angle
constraints = [constraints,thetas==inv(Bred)*Pinjs(1:29,:)];
pflows=sdpvar(41,nt,'full'); % line flow
constraints = [constraints,pflows==D*m*thetas];
constraints = [constraints,-repmat(lineC,1,nt)<=pflows<=repmat(lineC,1,nt)]; % line constraints
%% Constraints
%constraints=[constraints,sum(rlsup)+sum(rgsdn)==pvup,sum(rlsdn)+sum(rgsup)==pvdn];
constraints=[constraints,-sum(rgs)==max(0,phi)-max(0,-phi)]; % secondary reserve constraint
% Generator Constraints
Rdn=0.3*Gmax;
Rup=0.3*Gmax;
constraints=[constraints,-Rdn(:,2:nt)<=pg(:,2:nt)-pg(:,1:nt-1)<=Rup(:,2:nt)]; % ramping constraints
constraints=[constraints,Gmin.*onoff<=pg+rgs<=Gmax.*onoff]; % Generator Bounds with Rgs
constraints=[constraints,-Rdn(:,2:nt)<=(pg(:,2:nt)+rgs(:,2:nt))-(pg(:,1:nt-1)+rgs(:,1:nt-1))<=Rup(:,2:nt)]; % Ramping Constraints with Rgs
constraints=[constraints,sum(pg)+wf-sum(loads)+mg==0]; % Power balance equation forecast
%% Objective
Objective=sum(pg')*cg1+sum(pg')*diag(cg2)*sum(pg')'+sum(abs(rgs'))*crgs+sum(onoff')*Conoff';