首页 > 编程语言 >考虑源荷随机特征的热电联供微网优化(含matlab程序)

考虑源荷随机特征的热电联供微网优化(含matlab程序)

时间:2024-03-16 20:32:00浏览次数:21  
标签:源荷 particle 供微网 Cost matlab Velocity Position 随机变量 Best

目录

一、前言

二、含可再生能源的CHP型微网系统

三、CCP理论

四、具体模型

五、不含随机变量分析的matlab程序设计

1.粒子群寻优功能代码段

2.目标函数子程序

3.其他代码段

六、基于CCP的粒子群优化程序

1.含随机变量的约束条件处理

2.随机变量生成

 3.置信水平检验部分

七、程序结果

1.不含随机变量的程序结果

2.含随机变量处理的程序结果

八、程序下载链接 


一、前言

在常规的电热微网优化中,可以得到蓄电池、外网交互、燃料电池、余热锅炉等设备的功率,但是常规模型已经比较基础了,在发文章或者做毕业论文的时候用太初级,工作量和深度难以满足要求,因此可以考虑不确定变量的鲁棒性、考虑机会约束等,本文用王锐的《含可再生能源的热电联供型微网经济运行优化》为例,分析机会约束规划理论建立模型和编程方法,同时给出常规粒子群PSO和基于CCP理论的粒子群算法上面的区别。

二、含可再生能源的CHP型微网系统

三、CCP理论

四、具体模型

具体模型不在此赘述了,可以详见文献资料。

五、不含随机变量分析的matlab程序设计

1.粒子群寻优功能代码段

function [ bestPosition, fitValue ] = ...
PSOFUN( CostFun,nVar,VarMin,VarMax,MaxIt,nPop )
%% PSO Parameters 
CostFunction=@(x) CostFun(x);        % Cost Function
w=1;            % Inertia Weight
wdamp=0.99;     % Inertia Weight Damping Ratio
c1=1.5;         % Personal Learning Coefficient
c2=2.0;         % Global Learning Coefficient
VarSize=[1 nVar];   % Size of Decision Variables Matrix
% Velocity Limits
VelMax=0.1*(VarMax-VarMin);
VelMin=-VelMax;
 
%% Initialization
 
empty_particle.Position=[];
empty_particle.Cost=[];
empty_particle.Velocity=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];
 
particle=repmat(empty_particle,nPop,1);
 
GlobalBest.Cost=inf;
 
for i=1:nPop
    
    % Initialize Position
    particle(i).Position=unifrnd(VarMin,VarMax,VarSize);%随机初始化变量
    
    % Initialize Velocity
    particle(i).Velocity=zeros(VarSize);%速度
    
    % Evaluation
    particle(i).Cost=CostFunction(particle(i).Position);%目标
    
    % Update Personal Best
    particle(i).Best.Position=particle(i).Position;%更新个体最优
    particle(i).Best.Cost=particle(i).Cost;
    
    % Update Global Best%更新全局最优
    if particle(i).Best.Costend
    
end
 
BestCost=zeros(MaxIt,1);
 
%% PSO Main Loop
 
for it=1:MaxIt
    
    for i=1:nPop
        
        % Update Velocity更新速度
        particle(i).Velocity = w*particle(i).Velocity ...
            +c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
            +c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position);
        
        % Apply Velocity Limits速度约束
        particle(i).Velocity = max(particle(i).Velocity,VelMin);
        particle(i).Velocity = min(particle(i).Velocity,VelMax);
        
        % Update Position更新位置
        particle(i).Position = particle(i).Position + particle(i).Velocity;
        
        % Velocity Mirror Effect变量越限镜像处理
        IsOutside=(particle(i).Position| particle(i).Position>VarMax);
        particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);
        
        % Apply Position Limits%变量越限处理
        particle(i).Position = max(particle(i).Position,VarMin);
        particle(i).Position = min(particle(i).Position,VarMax);
        
        % Evaluation新目标
        particle(i).Cost = CostFunction(particle(i).Position);
        
        % Update Personal Best
        if particle(i).Costif particle(i).Best.Costend
            
        end
        
    end
    
    BestCost(it)=GlobalBest.Cost;
    
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
    w=w*wdamp;
    
end
 
bestPosition = GlobalBest.Position;%记录最优位置
fitValue = GlobalBest.Cost;%记录最优目标结果
 
 
 
end

 粒子群代码部分主要是实现初始粒子设置和迭代寻优功能,采用结构型变量实现简约、利于理解的代码功能,且注释比较清晰,方便学习!

2.目标函数子程序

function fun = fun_objective(x)
%% 准备工作 
parameter; %输入所有的数据 
% 各个决策变量的含义 
Pfl = x(1:24);      % 燃料电池出力 
Pbt = x(25:48);  % 蓄电池出力 
Pex = x(49:72); % 交互功率
Pgb = x(73:96); % 锅炉出力
fun =0; 
%% 书写目标函数
for t=1:24
    fun = fun + 1/2*(Cph+Cse)*Pex(t) + 1/2*(Cph-Cse)*abs( Pex(t) ) ...
    + Cgas*(Pfl(t)/eta_fl+ Pgb(t)/eta_gb ) + Pfl(t)*Cfl_om + ...
    Pfl(t)*r_fl*eta_hrbl*Cbl_om + abs(Pbt(t))*Cbt_om+ ...
    Pgb(t)*Cgb_om + Pwt(t)*Cwt_om + Ppv(t)*Cpv_om;
end
%% 书写约束
% ******************* 等式约束****************************
h=[];
for t=1:24 % (1) 电能平衡约束
    if Pbt(t)<=0
        h = [h, Pex(t)+Pfl(t)+Pwt(t)+Ppv(t)+Pbt(t)/eta_ch-Pel(t) ]; %=0
    else
        h = [h, Pex(t)+Pfl(t)+Pwt(t)+Ppv(t)+Pbt(t)*eta_dis-Pel(t) ]; %=0
    end
end
for t=1:24 % (2) 热能平衡约束
    h = [h, Pgb(t)+Pfl(t)*r_fl*eta_hrbl-Pth(t) ]; %=0
end
       % (3) 电池储能初始和最终状态相等约束
 h = [h, sum(Pbt) ]; %=0
% ******************* 不等式约束 ***************************
g=[];
for t=2:24 % (1) 燃料电池爬坡约束
    g=[g, Pfl(t)-Pfl(t-1)-deltaP_up] ; % <=0    
    g=[g, -( Pfl(t)-Pfl(t-1)-deltaP_down ) ] ; % <=0    
end
for t=1:24 % (2) 余热锅炉约束
    g=[g, Pfl(t)*r_fl*eta_hrbl-Pbl_max ] ; % <=0    
    g=[g, - ( Pfl(t)*r_fl*eta_hrbl-Pbl_min ) ] ; % <=0    
end
for t=1:24 % (3) 蓄电池约束
    g=[g, Wbt_init-sum(Pbt(1:t))-Wbt_max  ] ; % <=0    
    g=[g, -( Wbt_init-sum(Pbt(1:t))-Wbt_min )  ] ; % <=0    
end
%**********************罚函数处理*************************
Big=100000;
small=0.01;
N=length(g);
M=length(h);
G=0;
for n=1:N
    G=G+max(0, g(n))^2;
end
H=0;
for m=1:M
    H=H+max(  0, abs(h(m))-small  )^2;
end
%*******************加入罚函数后的目标函数******************
fun=fun+Big*(H+G);
end

目标函数代码完美复刻了文献中的目标函数和约束条件,约束部分采用清晰简明的等式和不等式部分,方便理解,采用罚函数的形式形成最终目标函数值。

3.其他代码段

其他主要就是主函数调用和参数定义代码段,由于功能性单一,在此不再列出,可以通过评论区链接进行购买下载。

六、基于CCP的粒子群优化程序

1.含随机变量的约束条件处理

%等式约束随机变量处理
Pex = Pel - Pfl - max(Pbt,0)*eta_dis - min(Pbt,0)/eta_ch - Pwt - Ppv;
Pgb = Pth - Pfl*r_fl*eta_hrbl

2.随机变量生成

考虑源荷的随机特征,具体参数如下:

for i=1:24
    %风电、光伏服从预测值为均值,0.1为方差的均匀分布
    Pwtmax(i)=Pwt(i)+1.2^0.5/2;
    Pwtmin(i)=Pwt(i)-1.2^0.5/2;
    Ppvmax(i)=Ppv(i)+1.2^0.5/2;
    Ppvmin(i)=Ppv(i)-1.2^0.5/2;
    %热电负荷服从预测值偏差+-10%的均匀分布
    Pelmax(i)=1.1*Pel(i);
    Pelmin(i)=0.9*Pel(i);
    Pthmax(i)=1.1*Pth(i);
    Pthmin(i)=0.9*Pth(i);
    %形成新的随机变量
    Pwt1(i)=Pwtmin(i)+(Pwtmax(i)-Pwtmin(i))*rand;
    Ppv1(i)=Ppvmin(i)+(Ppvmax(i)-Ppvmin(i))*rand;
    Pel1(i)=Pelmin(i)+(Pelmax(i)-Pelmin(i))*rand;
    Pth1(i)=Pthmin(i)+(Pthmax(i)-Pthmin(i))*rand;
end

 3.置信水平检验部分

该部分程序可详见评论区程序链接。

七、程序结果

1.不含随机变量的程序结果

2.含随机变量处理的程序结果

通过结果能够看出,该方法实现了所有约束,优化效果均较好。 

八、程序下载链接 

标签:源荷,particle,供微网,Cost,matlab,Velocity,Position,随机变量,Best
From: https://blog.csdn.net/superone89/article/details/136749242

相关文章

  • Matlab|【分布鲁棒】数据驱动的多离散场景电热综合能源系统分布鲁棒优化算法
    目录 主要内容   1.1 主要难点-分布鲁棒优化1.2 程序求解步骤-主子问题迭代   部分结果   下载链接 主要内容   本程序主要对《基于场景聚类的主动配电网分布鲁棒综合优化》-高海淑的方法复现,应用到综合能源电热微网方向,采用拉丁超立方抽样对不同场......
  • 【疾病分类】基于matlab GUI SVM大脑疾病(脑瘤)和神经疾病(动脉瘤)分类【含Matlab源码 409
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。......
  • 【火灾检测】基于matlab GUI视频图像多特征火灾检测报警系统【含Matlab源码 4092期】
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。......
  • Matlab制作shp文件
    fcloseallclearallclctree_num={'tree1','tree2','tree3','tree4'};tree_lat=[22.683822,22.683831,22.683843,22.683928];tree_lon=[108.856422,108.856401,108.856416,108.856362];species=['桉树','松树',�......
  • matlab调用python
    一、matlab命令行窗口检查python状态 我这里显示没有配置,然后添加python路径 由于我的python是最近安装的,出现了版本兼容问题,可以参考:VersionsofPythonCompatiblewithMATLABProductsbyRelease-MATLAB&Simulink(mathworks.cn) 具体的配置方法参考官方提供......
  • MATLAB学习笔记1.数组运算
    先来介绍两个常用的,在命令行里边输入“clc”,就会清空以上的命令行(也就是这个直接与你对话的地方)的所有内容;但是并不会把已经设置的变量清空,要想清空变量,则需要在命令行中输入“clear”,这样就可以把右侧已经设置的变量都清空掉了。下面是示例输入回车再输入“clear”并输入......
  • WOA-GRU多输入回归预测 | 鲸鱼优化算法-门控循环单元神经网络 | Matlab
    目录一、程序及算法内容介绍:基本内容:亮点与优势: 二、实际运行效果: 三、部分程序:四、完整程序下载:一、程序及算法内容介绍:基本内容:本代码基于Matlab平台编译,将WOA(鲸鱼群算法)与GRU(门控循环单元神经网络)结合,进行多输入数据回归预测输入训练的数据包含7个特征,1个......
  • MATLAB用GARCH-EVT-Copula模型VaR预测分析股票投资组合
    全文链接:http://tecdat.cn/?p=30426原文出处:拓端数据部落公众号对VaR计算方法的改进,以更好的度量开放式基金的风险。本文把基金所持股票看成是一个投资组合,引入Copula来描述多只股票间的非线性相关性,构建多元GARCH-EVT-Copula模型来度量开放式基金的风险,并与其他VaR估计方法的预......
  • 回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据
    回归预测|Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测目录回归预测|Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测效果一览基本介绍程序设计参考资料效果一览基本介绍GSWOA-KELM多变......
  • MATLAB神经网络——如何自定义属于自己的训练流程
    网络上大部分matlab神经网络训练流程都应用matlab内置的相关训练函数进行训练,如何让matlab神经网络训练过程拥有像pytorch一样的训练过程呢?本文将通过一个案例介绍如何利用matlab自定义自己的训练流程,希望对你有所启迪,让我们开始吧!clear,clc加载并处理原始数据  我们使用......