经济调度中使用功率约束的对偶求节点电价时 存在NAN.。
程序中成本,使用固定成本时可以运行,但当使用成本范围时存在NAN。
另一方面,目标函数去掉第一部分也可以求解 ,请问是什么原因?
clc;
clear;
rG=15;%规划年数
rp=0.08;%年利率
pm_max=500;%联络线功率上限 mw
%各种电源类型的单位投资成本(单位:美元/MW)
cost_coal=73571; % 火电
cost_wind=117714 ; % 风电
cost_solar=88285; % 太阳能
% 各种电源类型的运行维护成本(单位:美元/MW*h)
% om_cost_coal =42; % 煤电
% om_cost_coal2 =100; % 煤电
% om_cost_wind =6.2; % 风电
% om_cost_solar = 5.7; % 太阳能
wwmin=5.4;wwmax=6.2;
vvmin=4.7;vvmax=5.7;
oomin=287/7;oomax=350/7;
%燃料成本
cost=43;%mwh
tuiyi=4600;%danwei
load=xlsread("负荷功率最大负荷300mw.xlsx");
load_max=3000;%单位mw
l_load1=load(:,4);P_pw1=load(:,2);P_pv1=load(:,3);
l_load=l_load1*load_max;
huo=3405;
pw=600;
pv=600;
Gen=xlsread("发电机数据.xlsx");
PGlocation=Gen(:,2);
PGpower=Gen(:,3);
PGmin=Gen(:,4);
PGmax=Gen(:,5);
costmin=Gen(:,7)/7;%运行成本下限
costmax=Gen(:,8)/7;%运行成本上限
PG=sdpvar(32,24,'full');
PW=sdpvar(1,24);%
PV=sdpvar(1,24);%
om_cost_coal=sdpvar(32,24);
om_cost_coal2=sdpvar(1,24);
om_cost_wind=sdpvar(1,24);
om_cost_solar=sdpvar(1,24);
% coal_plan=intvar(n_periods, 1);%火电
% wind_plan=intvar(n_periods, 1);%风电
% solar_plan=intvar(n_periods, 1);%光伏
coal_plan=830;%火电
wind_plan=300;%风电
solar_plan=300;%光伏
PG2=sdpvar(1,24);
PW2=sdpvar(1,24);%
PV2=sdpvar(1,24);%
cost3=zeros(32,24);
constraints = [];
for i=1:32
for t=1:24
constraints = [constraints,PGmin(i)<= PG(i,:)<=PGmax(i)];
constraints = [constraints,costmin(i)<=om_cost_coal(i,t)<=costmax(i)];
end
end
for t=1:24
constraints = [constraints,0<= PW(1,t)<=P_pw1(t)*pw];
constraints = [constraints,oomin<=om_cost_coal2(1,t)<=oomax];
constraints = [constraints,wwmin<=om_cost_wind(1,t)<=wwmax];
constraints = [constraints,vvmin<=om_cost_solar(1,t)<=vvmax];
end
for t=1:24
constraints = [constraints,0<= PV(1,t)<=P_pv1(t)*pv];
end
for t=1:24
constraints = [constraints,0<= PG2(1,t)<=coal_plan];
end
for t=1:24
constraints = [constraints,0<= PW2(1,t)<=wind_plan*P_pw1(t)];
end
for t=1:24
constraints = [constraints,0<= PV2(1,t)<=solar_plan*P_pv1(t)];
end
for t=1:24
constraints = [constraints, PV2(1,t)<=solar_plan*P_pv1(t)];
end
for t=1:24
constraints = [constraints, PV2(1,t)+PW2(1,t)+PG2(1,t)+ PV(1,t)+PW(1,t)+sum(PG(:,t))==l_load(t)];
end
total_cost=0;
for i=1:32
for t=1:24
total_cost=total_cost+(PG(i,t)*om_cost_coal(i,t) );
end
end
for t=1:24
total_cost=total_cost+(PG2(1,t)*om_cost_coal2(1,t) );
total_cost=total_cost+(PW(1,t)*om_cost_wind (1,t) );
total_cost=total_cost+(PW2(1,t)*om_cost_wind(1,t) );
total_cost=total_cost+(PV(1,t)*om_cost_solar(1,t) );
total_cost=total_cost+(PV2(1,t)*om_cost_solar(1,t));
end
ops=sdpsettings('verbose',0,'solver','gurobi','gurobi.TimeLimit',300,'gurobi.MIPgap',1e-6);
optimize(constraints, total_cost, ops);
dual_variables = zeros(1, 24);
for t=1:24
dual_variables(t)=-dual(constraints(t+length(constraints)-24));%节点边际电价
Pg(t)=sum(PG(:,t));
end