独家原创!基于遗传算法的综合能源系统优化调度程序代码!

适用平台:Matlab+Yalmip+Cplex

程序以风能、光伏、火电以及储能作为主要设备建立了综合能源优化调度模型,提出了多种群变异交叉概率自适应变化遗传算法对模型进行求解,该算法可以根据遗传算法的运行中的表现来调整交叉和变异概率,具有较好的全局搜索能力和较强的鲁棒性。程序算例丰富、注释清晰、干货满满,可扩展性和创新性很高!下面对文章和程序做简要介绍!

程序创新点:

叉概率自适应变化遗传算法可以同时处理多个目标函数的优化算法,避免陷入局部最优解,提高算法全局搜索能力,将该方法用于综合能源系统优化调度中,可有效求解系统最优成本,最大限度降低系统的碳排放量。

遗传算法简介

遗传算法(Genetic Algorithm,GA)是一种基于自然选择和遗传学原理的优化算法。其基本思想是通过模拟自然界中的进化过程,不断地进行群体的交叉、变异和选择,以期得到优化问题的全局最优解。遗传算法模型包括以下几个部分:

(1)编码方式:遗传算法处理的问题通常是复杂的实际问题,需要将问题转化为计算机可以处理的数据,这需要对问题进行编码。常用的编码方式有二进制编码、实数编码、排列编码等。

(2)初始群体:遗传算法需要一个初始的种群来进行进化。初始种群可以是随机生成的,也可以是通过问题的特性等方法生成的。

(3)适应度函数:适应度函数是用来衡量某个个体的优劣程度的函数。适应度函数通常由问题本身所决定,它可以是问题的目标函数,也可以是其他评价指标。适应度函数越好的个体在后面的进化中被选中的概率越大。

(4)选择算子:选择算子是用来选择适应度高的个体,并将它们作为下一代群体的父代进行遗传操作的算子。 常用的选择算子有轮盘赌选择、锦标赛选择等。

(5)交叉算子:交叉算子是用来将两个父代个体的染色体进行交叉操作,从而产生新的个体。常用的交叉算子有单点交叉、多点交叉、均匀交叉等。

(6)变异算子:变异算子是用来对个体的染色体进行变异操作,从而产生新的基因。变异操作有助于避免算法陷入局部最优解。常用的变异算子有位变异、随机重排、插入变异等。

(7)终止条件:终止条件是指遗传算法的运行过程中,满足某个条件时停止算法运行的条件。常用的终止条件有达到最大迭代次数、达到一定的适应度值、适应度值的变化率小于某个阈值等。遗传算法模型的具体实现需要根据问题的特点和要求进行调整和优化。

程序结果:

部分程序:

%% 目标函数
% 输入  x:二进制编码 ​lenchrom:各变量的二进制位数
% 输出  Y:目标值 ​X:十进制数
%X(1)为FC出力;X(2)为BS出力;X(3)为电网出力
%% 计算适应度-函数值
Load=load('典型日负荷.txt');%负荷​pv=load('PV.txt');%光伏发电
wt=load('WT.txt');%风力发电​prem=Load-(pv+wt);
price=load('电价.txt');%电价​pgrid=zeros(1,24);%24小时电网交互功率
cgrid=zeros(1,24);%电网交互费用​cde=zeros(1,24);%柴油机费用
Ebat=zeros(1,24);​y1=zeros(1,24);
Ebatmax=551.8;Ebatmin=0.4*Ebatmax;​
    cde(i)=7.36*(0.08*120+X(i+24)*0.25)+0.088*X(i+24)+0.7621*X(i+24);%柴油机燃料+运维+环境
    pgrid(i)=prem(i)-X(i)-X(i+24);
    cgrid(i)=price(i)*pgrid(i);%电网交互成本
    y1(i)=cde(i)+cgrid(i)+pv(i)*0.0096+wt(i)*0.0296+10000*abs(max(0,Ebat(i)-Ebatmax))+10000*abs(min(0,Ebat(i)-Ebatmin));​
%if prem(t)+X(2)>0%加上蓄电池充电功率后满足负荷需求​
    %X(3)=-(X(2)+prem(t));%向电网卖电
%else%加上蓄电池放电不满足
    %if avcfc(X(1))<=price(t)%fc发电成本小于电网电价,fc优先发电
     ​%if prep(t)+X(2)+X(1)>0%加上fc后能够满足负荷
      %if price(t)>0.85%峰时,优先考虑向电网卖电​
%y1(t)=(2.05/9.7*X(1)/(-0.0023*X(1)+0.6735)+7.39*(0.246*X(2)+0.08415*30))+%发电燃料成本
 ​% 0.0096*pv(t)+0.0296*wt(t)+0.0293+X(1)+0.088*X(2)

部分内容源自网络,侵权联系删除!

欢迎感兴趣的小伙伴关注并私信获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的多目标鲸鱼算法建筑综合能源优化调度Matlab代码示例: ```matlab % 建筑能源模型参数 Ts = 24; % 仿真时间步长 Pelec = zeros(Ts,1); % 电力负荷 Pheat = zeros(Ts,1); % 供热负荷 Pcool = zeros(Ts,1); % 供冷负荷 COPheat = 3.5; % 供热系统热效率 COPcool = 4.0; % 供冷系统冷效率 Eelec = 0.1; % 电价 Eheat = 0.2; % 供热价格 Ecool = 0.15; % 供冷价格 % 鲸鱼算法参数 MaxIt = 100; % 最大迭代次数 nPop = 50; % 种群数量 nVar = 3; % 优化变量数量 VarSize = [1 nVar]; % 优化变量维度 VarMin = [0 0 0]; % 优化变量最小值 VarMax = [1 1 1]; % 优化变量最大值 % 初始化种群 empty_individual.Position = []; empty_individual.Cost = []; pop = repmat(empty_individual, nPop, 1); for i = 1:nPop pop(i).Position = unifrnd(VarMin, VarMax, VarSize); pop(i).Cost = CostFunction(pop(i).Position, Ts, Pelec, Pheat, Pcool, COPheat, COPcool, Eelec, Eheat, Ecool); end % 鲸鱼算法主循环 for it = 1:MaxIt % 计算适应度值 Costs = [pop.Cost]; WorstCost = max(Costs); BestCost = min(Costs); AvgCost = mean(Costs); % 计算适应度值的标准差 StdCost = std(Costs); % 计算单个鲸鱼的迁徙距离 WhaleMoves = zeros(nPop, nVar); for i = 1:nPop WhaleMoves(i,:) = LevyFlight(std(VarMax-VarMin), nVar); end % 进行鲸鱼迁徙 for i = 1:nPop if rand() < 0.5 % 群体迁徙 % 随机选择另一个鲸鱼 j = randi([1 nPop], 1); % 计算当前鲸鱼与另一个鲸鱼的距离 Xdiff = abs(pop(i).Position - pop(j).Position); % 计算另一个鲸鱼的迁徙距离 D = rand()*WhaleMoves(i,:).*Xdiff; % 计算新的位置 NewPosition = pop(i).Position + randn(VarSize).*D; else % 个体迁徙 % 计算个体迁徙距离 D = WhaleMoves(i,:); % 计算新的位置 NewPosition = pop(i).Position + randn(VarSize).*D; end % 确保新位置在边界内 NewPosition = max(NewPosition, VarMin); NewPosition = min(NewPosition, VarMax); % 计算新位置的适应度值 NewCost = CostFunction(NewPosition, Ts, Pelec, Pheat, Pcool, COPheat, COPcool, Eelec, Eheat, Ecool); % 更新鲸鱼位置和适应度值 if NewCost < pop(i).Cost pop(i).Position = NewPosition; pop(i).Cost = NewCost; end end end % 适应度函数 function J = CostFunction(x, Ts, Pelec, Pheat, Pcool, COPheat, COPcool, Eelec, Eheat, Ecool) % 计算建筑能源模型的目标函数 ElecConsump = sum(Pelec.*x(:,1)); HeatConsump = sum(Pheat.*x(:,2))/COPheat; CoolConsump = sum(Pcool.*x(:,3))*COPcool; J(1) = ElecConsump + HeatConsump + CoolConsump; J(2) = ElecConsump*Eelec + HeatConsump*Eheat + CoolConsump*Ecool; end % Levy飞行函数 function s = LevyFlight(sigma, n) beta = 1.5; % 计算步长 s = (randn(1,n).*sigma)./abs(randn(1,n)).^(1/beta); end ``` 以上代码仅为示例,具体实现需要根据实际需求进行调整。在实际应用中,还需要进一步优化参数设置、适应度函数等方面,以获得更好的优化效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值