【机会约束、鲁棒优化】具有排放感知型经济调度中机会约束和鲁棒优化研究【IEEE6节点、IEEE118节点算例】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

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

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

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

2.1 风能

2.2 IEEE6和IEEE118

 2.3 IEEE6

2.4 IEEE118 

🎉3 参考文献

🌈4 Matlab代码及数据实现


💥1 概述

机会约束规划(chance constrained programming简称CCP)也称为概率约束规划,最初由Charnes和 Cooper[1在1958年提出,是针对约束条件中含有随机参数并在一定概率条件满足下的最优化问题.近几十年,机会约束广泛应用于参数不确定的优化和决策问题中.比如,网络优化2]、供应链管理3、生产计划[4和水流箱管理5等.关于CCP的发展情形,感兴趣的读者可参见综述文献[6].机会约束规划的一般形式为:

常规机会约束假设已知随机变量概率分布Р的准确信息.然而,在许多实际应用中随机变量∈ 难以精确预测,仅能够获得其部分信息(如矩和样本信息等).满足这些概率信息的分布构从伏)方法结合.建立在分布不确定集合最环情优L好分布鲁棒优化问题优化思想和随机优化方法结合,建立在分布不确定
鲁棒优化(distributionally robust optimization,简称结合机会约束即为分布鲁棒机会约束优化问题(distributionally robust chance constrainedoptimization program,简称DRCC).
分布鲁棒机会约束优化的一般形式为:
 

调度者存在多元化的风险偏好,导致对“最恶劣场景”的评估产生差异。如图 3 所示,日前预测

总偏差由偏离时长和对应时刻的偏离度决定。也就是说,控制调度周期内不确定变量的总体偏离度,就能够度量调度者风险偏好。但是,在给定的总偏离度条件下,学界普遍认为“最恶劣场景”发生在不确定域边界,这在线性系统中必然成立,但是在非线性系统中,“最恶劣场景”可能发生在不确定域内。

为此,本文通过有限离散化不确定域,生成梯次偏离的不确定域边界,扩充“恶劣场景集”。在此基础上,控制不确定变量的总体偏离值,表征调度者的保守程度。

 考虑风电不确定性的电力系统调度模型中的部分输入量(Pw和Pg)具有不确定性,通过传统数学规划方法得到的优化调度方案可能无法实现系统的经济性最优,甚至可能违反系统的安全运行约束。针对传统的数学规划方法难以消除不确定参量对优化模型的负面影响,Soyster提出了鲁棒优化方法。RO在优化模型建立之初就对其中的不确定参量进行分析,明确不确定参量的波动区间。RO旨在得到这样一个优化方案:在不确定参量可能的取值范围内,优化模型的所有约束条件都能被满足,且使得优化模型目标函数能取得最恶劣情况下的最优值。因此,RO所得的优化结果对不确定参量的波动具有免疫能力,并且不失良好性能。

对包含不确定参量的优化问题而言,RO提出了一种“劣甲选优的处理刀八,关注点在于最恶劣情况下模型的最优解,仅需知道不确定参量波动的边界信息即可进行决策,计算效率高,需要了解的不确定参量信息少,优化方案的抗干扰能力强,因此具有很高的实用价值。RO的提出和发展弥补了传统优化方法的不足,己成为处理含有不确定参量优化问题的重要工具。

传统的数学优化模型一般形式如下:

📚2 运行结果

2.1 风能

 

 

 

部分代码:

figure
yyaxis left
bar(x,y,'FaceColor','[0.3010 0.7450 0.9330]','EdgeColor','[0 0.4470 0.7410]');box off 
xlim([mu-3*sigma,mu+3*sigma])
xlabel('Error','FontSize',13.2,'FontName','Times New Roman','FontWeight','Bold')
ylabel('Number of samples','FontSize',13.2,'FontName','Times New Roman','FontWeight','Bold')
% a2=axes;  
yyaxis right
fp=fplot(@(x)normpdf(x,mu,sigma),[mu-3*sigma,mu+3*sigma]);
xlim([mu-3*sigma,mu+3*sigma])
fp.LineStyle = '-.';
fp.LineWidth =2;
fp.Color =[0.9290 0.6940 0.1250];
%set(a2,'box','off','yaxislocation','right','color','none')  
% set(gca,'xticklabel',[]);
ylabel('Probability density','FontSize',13.2,'FontName','Times New Roman','FontWeight','Bold')
set(gcf,'Position',[100 100 400 500]);
set(gca,'FontSize',12,'FontName','Times New Roman')
ax = gca;
ax.YAxis(1).Exponent = 4; 

2.2 IEEE6和IEEE118

x=[1,2,3,4];
b=BarPlotBreak(x,y_time_record',15,20,'Line',0.99);
 x_label={'CC (Gaussian)','DRO (Binomial)','Clairvoyant','SO (Scenario)'};
 set(gca,'XTickLabel', x_label)
 legend('6 bus','118 bus')
 ylabel('time (s)','FontSize',13.2,'FontName','Times New Roman','FontWeight','Bold')
 set(gca,'FontSize',12,'FontName','Times New Roman')
 b(1).FaceColor=[0.9290, 0.6940, 0.1250];
 b(2).FaceColor=[0.4660, 0.6740, 0.1880];

 2.3 IEEE6

 

 

 

 

 

 

2.4 IEEE118 

 

 

部分代码:

function[fval_avg,x_avg]=gen_SSO_average_performance(c_level,epsilon,T,N,M,bb,d_f,p,q,H,fmax,gmin,gmax,w_loc,w_num,error_data,ramp_rate,DR,UR)  
    % scenarios to be generated to meet the probability guarantee
    n_dv=4*N*T;
    Num=ceil(n_dv/(epsilon*c_level))-1;
    % generating wind scenario
    index=ceil(T*Num*(1-epsilon));
    d_real=d_f;
    virtual_bb=bb;

    [gm] = gen_samples(error_data);
    
    for k=1:w_num
        loc=w_loc(k);
%         random_num=zeros(T*Num,1);
%         for i=1:Num
%             rng('default');
%             [random_T,~]=random(gm,T);
%             random_num((i-1)*T+1:i*T)=random_T;
%         end
        rng('default');
        random_num=random(gm,T*Num);
        random_num=sort(random_num);
        virtual_bb(loc)=max([bb(loc)-random_num(index),0]);
    end
            
    [standard_delta,real_bb]= gen_standard_delta(bb,virtual_bb,w_loc);

    umin=-real_bb*ramp_rate;
    umax=real_bb*ramp_rate;  
    [x_avg,fval_avg]=MinC(T,N,M,real_bb,d_real,p,q,H,fmax,gmin,gmax,umin,umax,DR,UR);
end

function[wind_error]= gen_wind_data(real_capacity_scale,filename)
    %filename='.\data\WindGenTotalLoadYTD_2020.xls';
    input_data= xlsread(filename, 1, 'B25:C52428');
    input_scale=mean(input_data(:,1));
    wind_data=input_data./input_scale*real_capacity_scale;
    wind_error=wind_data(:,2)-wind_data(:,1);
%     error_norm=normalize(error_data,'scale');
%     wind_error=error_norm*ratio;
end

function[wind_error]= gen_wind_data(real_capacity_scale,filename)
    %filename='.\data\WindGenTotalLoadYTD_2020.xls';
    input_data= xlsread(filename, 1, 'B25:C52428');
    input_scale=mean(input_data(:,1));
    wind_data=input_data./input_scale*real_capacity_scale;
    wind_error=wind_data(:,2)-wind_data(:,1);
%     error_norm=normalize(error_data,'scale');
%     wind_error=error_norm*ratio;
end

🎉3 参考文献

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

[1]耿晓路,童小娇.分布鲁棒机会约束优化问题的研究[J].运筹学学报,2020,24(01):115-130.DOI:10.15960/j.cnki.issn.1007-6093.2020.01.009. 

[2]随权,林湘宁,童宁,李雪松,汪致洵,胡志豪,李正天,孙士茼.基于改进两阶段鲁棒优化的主动配电网经济调度[J].中国电机工程学报,2020,40(07):2166-2179+2396.DOI:10.13334/j.0258-8013.pcsee.182259.

[3]程凤璐. 在线经济调度的鲁棒优化方法研究[D].山东大学,2015.

[4]王晨曦. 含大规模风电的电力系统鲁棒优化调度研究[D].华南理工大学,2019.DOI:10.27151/d.cnki.ghnlu.2019.002201.

[5]许书伟,吴文传,朱涛,王珍意.机会约束随机动态经济调度的凸松弛迭代求解法[J].电力系统自动化,2020,44(17):43-51.

🌈4 Matlab代码及数据实现

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于分布鲁棒联合机会约束的能源和储备调度是指在能源供应和储备调度过程考虑到不确定性和风险,并使用基于分布鲁棒联合机会约束的方法进行优化。该方法的目标是最小化不确定性和风险,并满足能源需求和储备要求。 该方法的实现可以利用MATLAB语言来完成。以下是一个简单的MATLAB代码示例: ```matlab % 导入数据 data = importdata('data.txt'); % 定义变量 n = size(data, 1); % 数据的行数 m = size(data, 2); % 数据的列数 x = zeros(n, m); % 能源供应量决策变量 r = zeros(n, 1); % 储备决策变量 % 定义目标函数 obj = sum(x(:)) + sum(r); % 定义约束条件 constraints = []; % 添加能源供应约束 for i = 1:n constraint = sum(x(i, :)) - data(i, 1); constraints = [constraints, constraint <= 0]; end % 添加储备约束 for i = 1:n constraint = r(i) - data(i, 2); constraints = [constraints, constraint <= 0]; end % 添加分布鲁棒联合机会约束 for i = 1:n constraint = x(i, :) * data(i, 3:m) - r(i); constraints = [constraints, constraint >= 0]; end % 设置优化参数 options = optimoptions('fmincon', 'Display', 'iter'); % 调用优化函数进行能源和储备调度 [x_opt, fval] = fmincon(obj, [x(:); r], [], [], [], [], [], [], constraints, options); % 将结果重新整形 x_opt = reshape(x_opt(1:(n*m)), n, m); r_opt = x_opt(:, end); % 输出最优解 disp('最优能源供应量:'); disp(x_opt); disp('最优储备量:'); disp(r_opt); disp('目标函数值:'); disp(fval); ``` 请注意,上述代码仅供参考,具体的实现可能需要根据实际情况进行调整和修改。另外,为了使代码正常运行,需要提前准备好相关的数据文件(如`data.txt`)并进行正确的导入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值