风力发电系统的随机调度研究(matlab代码实现)
创始人
2025-05-31 15:04:49
0
👨‍🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥


🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。


⛳座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现

💥1 概述

文献来源:

时域调度模拟是预测风力发电系统运行成本最有效的工具,因为它可以表示限制热电厂、储能和需求侧措施平衡行动的跨时间约束。高风侵度要求及时调度决策能够反映风馈的不确定性,因此使用随机单元承诺(SUC)和滚动规划生成调度决策是可取的。然而,计算负担可能使这种方法在长时间的模拟中不切实际。我们提出了SUC问题的一个有效公式,设计用于单母线电力系统调度仿真。

与传统的SUC技术不同,该公式采用了基于分位数的情景树结构,避免了对外生运营储备的需求。在长达一年的大型系统模拟中,我们比较了各种树拓扑的性能。与固定分位数确定性方法相比,简单的基于分位数的树在统计上具有显著的成本改进,并且与基于蒙特卡罗生成场景的树相比更优。

任何国家的政府都致力于大幅降低其电力部门的碳强度。脱碳的电力系统可能具有以下特点:大的、相对不灵活的核基载;间歇性和部分不可预测的可再生能源的高渗透率,在许多国家将由风能主导;化石燃料车队的载客率比目前低得多。因此,大规模风力集成的一个核心挑战是利用灵活性降低的热机组吸收风力发电的能力。

衡量系统吸收风的能力的一个指标是风的不确定性成本,即由于短期风的不确定性而运行系统的额外成本。简单的统计分析无法告诉我们这一成本,因为平衡风力间歇性的可调度要素受制于限制其响应能力的跨时间约束。这些限制的例子是热发电机的启动时间,以及对可存储能量的限制。为了理解这些限制对系统吸收风的能力的影响,我们必须在时域内模拟整个系统的调度,在一定程度上考虑跨时间约束。如[1]所述,在许多研究中使用时域模拟来评估集成风的成本。

📚2 运行结果

部分代码:

%%

clearvars

clc

%% Inputs

load('Data\InputData.mat')

load('Data\SystemParameters.mat')

% The units are GW, k/GW and k to keep the range of variables closer

%% Define the optimisation model:

Load_balance = [];

Aux_constraints = [];

Constraints_Gen_limits = [];

Constraints_Ramp_limits = [];

Cost_node = [];

scenarios = size(Wind_scenarios,1);

% Create some matrices of DVs:

Wind_curtailed = sdpvar(scenarios,time_steps);

Load_curtailed = sdpvar(scenarios,time_steps);

% And some matrices of constraints:

Aux_constraints = [Aux_constraints,...

0 <= Wind_curtailed <= Wind_scenarios,...

0 <= Load_curtailed <= ones(scenarios,1)*Demand];

tic % Start time counter

for k=1:time_steps

%% Define DVs

x{k} = sdpvar(scenarios,num_Clusters);

% x{k} = [x1 x2 x3... (scenario 1)

% x1 x2 x3... (scenario 2)]; % Power generated by each Cluster in each scenario

y{k} = intvar(scenarios,num_Clusters);

% y{k} = [y1 y2 y3... (scenario 1)

% y1 y2 y3... (scenario 2)]; % Commitment decision for each Cluster in each scenario

% FORCE y{k} to be lower than number of CCGTs and number of OCGTs

Aux_constraints = [Aux_constraints,...

zeros(scenarios,1)*num_Gen <= y{k} <= ones(scenarios,1)*num_Gen];

% NO INITIAL COMMITMENT

% if k==1

% Aux_constraints = [Aux_constraints,...

% y{n,k}==Initial_commitment];

% end

% Fix commitment decision of inflexible_gen to be same as in the first

% scenario in this time-step "k"

Aux_constraints = [Aux_constraints,...

(ones(scenarios,1)*inflexible).*y{k} == ones(scenarios,1)*(inflexible.*y{k}(1,:))];

% Define DVs for generators started up

startup_DV{k} = sdpvar(scenarios,num_Clusters);

if k==1

Aux_constraints = [Aux_constraints,...

startup_DV{k} == y{k}];

else

% These 2 constraints model the startup, it's easy to verify

% that they indeed do:

Aux_constraints = [Aux_constraints,...

startup_DV{k} >= y{k} - y{k-1},...

startup_DV{k} >= zeros(scenarios,num_Clusters)];

end

%% Constraints:

Load_balance = [Load_balance,...

sum(x{k},2)+Wind_scenarios(:,k)-Wind_curtailed(:,k) == ones(scenarios,1)*Demand(k)-Load_curtailed(:,k)];

% Generation limits:

for i=1:num_Clusters

Constraints_Gen_limits = [Constraints_Gen_limits,...

y{k}.*(ones(scenarios,1)*Gen_limits(:,1)') <= x{k} <= y{k}.*(ones(scenarios,1)*Gen_limits(:,2)')];

end

% % Ramp limits:

% if k>1

%

% Constraints_Ramp_limits = [Constraints_Ramp_limits,...

% -tau*(ones(scenarios,1)*Ramp_limits(:,1)') <= x{k}-x{k-1} <= tau*(ones(scenarios,1)*Ramp_limits(:,2)')];

%

% end

%% Finally, define the nodal costs:

Cost_node = horzcat(Cost_node,...

sum((ones(scenarios,1)*stc').*startup_DV{k},2)... % Startup costs

+ tau*(sum((ones(scenarios,1)*NLHR').*y{k},2)... % fixed generation costs

+ sum((ones(scenarios,1)*HRS').*x{k},2)... % variable generation costs

+ VOLL*Load_curtailed(:,k))); % load shed cost

end

time.BuildingModel = toc;

tic

Objective = sum(sum(prob_nodes.*Cost_node));

Constraints = [Aux_constraints,...

Load_balance,...

Constraints_Gen_limits

Constraints_Ramp_limits];

options = sdpsettings('solver','gurobi','gurobi.MIPGap',0.1e-2);

solution = optimize(Constraints,Objective,options)

time.Optimisation = toc;

%% Analyse results

tic

sol.Wind_curtailed = value(Wind_curtailed);

sol.Load_curtailed = value(Load_curtailed);

sol.Cost = [];

sol.Cost_StartUp = [];

sol.Cost_NLHR = [];

sol.Cost_HRS = [];

sol.Cost_VOLL = [];

sol.Check_Load_balance(scenarios,time_steps) = 0;

for k=1:time_steps

sol.x{k} = value(x{k});

sol.y{k} = value(y{k});

sol.startup_DV{k} = value(startup_DV{k});

sol.Cost = horzcat(sol.Cost,...

sum((ones(scenarios,1)*stc').*sol.startup_DV{k},2)... % Startup costs

+ tau*(sum((ones(scenarios,1)*NLHR').*sol.y{k},2)... % fixed generation costs

+ sum((ones(scenarios,1)*HRS').*sol.x{k},2)... % variable generation costs

+ VOLL*sol.Load_curtailed(:,k)));

sol.Cost_StartUp = horzcat(sol.Cost_StartUp,...

sum((ones(scenarios,1)*stc').*sol.startup_DV{k},2));

sol.Cost_NLHR = horzcat(sol.Cost_NLHR,...

tau*(sum((ones(scenarios,1)*NLHR').*sol.y{k},2)));

sol.Cost_HRS = horzcat(sol.Cost_HRS,...

tau*(sum((ones(scenarios,1)*HRS').*sol.x{k},2)));

sol.Cost_VOLL = horzcat(sol.Cost_VOLL,...

tau*(VOLL*sol.Load_curtailed(:,k)));

sol.Check_Load_balance(:,k) = sum(sol.x{k},2)+Wind_scenarios(:,k)-sol.Wind_curtailed(:,k)-(ones(scenarios,1)*Demand(k)-sol.Load_curtailed(:,k));

end

time.GetSolution = toc;

clearvars -except Wind_scenarios Demand options sol solution time

save('Solution.mat')

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码实现

相关内容

热门资讯

“龙腾端午·梧现精彩”非遗好市... 6月1日,由梧州市文化广电体育和旅游局主办的“龙腾端午·梧现精彩”非遗好市在梧州市西堤公园持续开展。...
上海海派旗袍文化节开幕,推出3... 静态展览,动态走秀,互动体验……6月1日,“旗韵绽芳华”——6·6上海海派旗袍文化节在张园拉开帷幕。...
华程国旅推出“欧洲循环巴士游” 英国当地时间5月27日下午,华程国旅集团TRIP2EU“欧洲循环巴士游”发布会伦敦站在伦敦千禧酒店举...
原创 6... “来来来,尝尝我们厂的窑鸡,特意给你加的菜!”何家劲笑容满面,将一整盘热腾腾的窑鸡推到黄日华面前。 ...
原创 以... #优质好文激励计划# “以前人人爱吃的小龙虾,为啥现在不火了?内行:4个原因很难改变” 家人们,谁...
吉木萨尔县第三届厦吉文化美食汇... 5月31日,为期3天的“百味醉天山 闽疆共飨宴”昌吉州旅游文化美食节系列活动之吉木萨尔县第三届厦吉文...
去四川旅游攻略当地团五天四晚要... 标题:去四川旅游攻略当地团五天四晚要花多少钱,驴友亲测!跟着乐乐玩转四川 四川旅游推荐!当地导游-乐...
上海迪士尼游客打架,属地部门:... 上海市公安局浦东分局官方微博6月1日消息,5月31日18时许,浦东公安分局接报警称迪士尼乐园内有人打...
“去中国要带空箱子!”在国外传... 随着“中国游”的便利性和吸引力不断上升,游在中国、购在中国成为越来越多国际游客的新选择 。 最近,“...
重庆家常美食菜谱,地道风味,轻... 重庆家常美味菜谱是一本介绍重庆地道美食的烹饪书籍,本书通过简单易懂的方式,呈现地道的重庆风味菜肴,读...
原创 退... 那年重庆的夏天,热气把整座城市蒸得发软。我蹲在石桥铺数码城门口滚烫的水泥台阶上,后背的汗淌成小河,渗...
武汉卤味:鸭脖配酒越嚼越有,这... 在武汉的街头巷尾,飘着一种让人走不动道的香味,老卤炖出来的鸭脖味儿,混着点啤酒的麦芽香,光是闻着就忍...
清谈菜谱,简单美食的魅力深度探... 清谈菜谱带你探索简单美食的魅力,赏析烹饪的艺术,本书强调食材的天然之美,以简洁的烹饪方式展现食材的原...
原创 最... “人老珠黄”这话真扎心!眼瞅着镜子里的自己——头发一把把掉,发缝宽得能插秧;眼睛干得像撒哈拉沙漠,看...
节假日胖东来吸引大量外地游客,... 极目新闻记者 詹钘 端午假期,河南许昌胖东来持续火爆,吸引了大量外地游客。6月1日,有许昌当地出租车...
乡村舞台变身奇幻乐园,“童梦奇... 6月1日,“童梦奇缘 乐在桦墅”金陵艺术村落六一主题活动,在栖霞区桦墅村如约启幕。这座掩映在青山绿水...
刚刚!上海警方通报迪士尼打架事... 据@警民直通车-浦东 通报:5月31日18时许,浦东公安分局接报警称迪士尼乐园内有人打架。经初步调查...
3600亿打造最难修的铁路,川... 随着5月21日拉萨-林芝铁路扩能改造项目的招标公告发布,川藏铁路的建设步伐愈加加速。乍一看,这似乎是...
【MySQL】锁 锁 文章目录锁全局锁表级锁表锁元数据锁(MDL)意向锁AUTO-INC锁...