优化调度基于matlab遗传算法求解孤岛型微电网(成本最低)调度优化问题含matlab源码1163期(代码片段)

紫极神光 紫极神光     2022-12-15     502

关键词:

一、简介

1 遗传算法概述
遗传算法(Genetic Algorithm,GA)是进化计算的一部分,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法简单、通用,鲁棒性强,适于并行处理。

2 遗传算法的特点和应用
遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,具有以下特点:
(1)以决策变量的编码作为运算对象。传统的优化算法往往直接利用决策变量的实际值本身来进行优化计算,但遗传算法是使用决策变量的某种形式的编码作为运算对象。这种对决策变量的编码处理方式,使得我们在优化计算中可借鉴生物学中染色体和基因等概念,可以模仿自然界中生物的遗传和进化激励,也可以很方便地应用遗传操作算子。
(2)直接以适应度作为搜索信息。传统的优化算法不仅需要利用目标函数值,而且搜索过程往往受目标函数的连续性约束,有可能还需要满足“目标函数的导数必须存在”的要求以确定搜索方向。遗传算法仅使用由目标函数值变换来的适应度函数值就可确定进一步的搜索范围,无需目标函数的导数值等其他辅助信息。直接利用目标函数值或个体适应度值也可以将搜索范围集中到适应度较高部分的搜索空间中,从而提高搜索效率。
(3)使用多个点的搜索信息,具有隐含并行性。传统的优化算法往往是从解空间的一个初始点开始最优解的迭代搜索过程。单个点所提供的搜索信息不多,所以搜索效率不高,还有可能陷入局部最优解而停滞;遗传算法从由很多个体组成的初始种群开始最优解的搜索过程,而不是从单个个体开始搜索。对初始群体进行的、选择、交叉、变异等运算,产生出新一代群体,其中包括了许多群体信息。这些信息可以避免搜索一些不必要的点,从而避免陷入局部最优,逐步逼近全局最优解。
(4) 使用概率搜索而非确定性规则。传统的优化算法往往使用确定性的搜索方法,一个搜索点到另一个搜索点的转移有确定的转移方向和转移关系,这种确定性可能使得搜索达不到最优店,限制了算法的应用范围。遗传算法是一种自适应搜索技术,其选择、交叉、变异等运算都是以一种概率方式进行的,增加了搜索过程的灵活性,而且能以较大概率收敛于最优解,具有较好的全局优化求解能力。但,交叉概率、变异概率等参数也会影响算法的搜索结果和搜索效率,所以如何选择遗传算法的参数在其应用中是一个比较重要的问题。
综上,由于遗传算法的整体搜索策略和优化搜索方式在计算时不依赖于梯度信息或其他辅助知识,只需要求解影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架。它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于各种领域,包括:函数优化、组合优化生产调度问题、自动控制
、机器人学、图像处理(图像恢复、图像边缘特征提取…)、人工生命、遗传编程、机器学习。

3 遗传算法的基本流程及实现技术
基本遗传算法(Simple Genetic Algorithms,SGA)只使用选择算子、交叉算子和变异算子这三种遗传算子,进化过程简单,是其他遗传算法的基础。

3.1 遗传算法的基本流程
通过随机方式产生若干由确定长度(长度与待求解问题的精度有关)编码的初始群体;
通过适应度函数对每个个体进行评价,选择适应度值高的个体参与遗传操作,适应度低的个体被淘汰;
经遗传操作(复制、交叉、变异)的个体集合形成新一代种群,直到满足停止准则(进化代数GEN>=?);
将后代中变现最好的个体作为遗传算法的执行结果。

其中,GEN是当前代数;M是种群规模,i代表种群数量。

3.2 遗传算法的实现技术
基本遗传算法(SGA)由编码、适应度函数、遗传算子(选择、交叉、变异)及运行参数组成。
3.2.1 编码
(1)二进制编码
二进制编码的字符串长度与问题所求解的精度有关。需要保证所求解空间内的每一个个体都可以被编码。
优点:编、解码操作简单,遗传、交叉便于实现
缺点:长度大
(2)其他编码方法
格雷码、浮点数编码、符号编码、多参数编码等
3.2.2 适应度函数
适应度函数要有效反映每一个染色体与问题的最优解染色体之间的差距。
3.2.3选择算子

3.2.4 交叉算子
交叉运算是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体;交叉运算是遗传算法区别于其他进化算法的重要特征,是产生新个体的主要方法。在交叉之前需要将群体中的个体进行配对,一般采取随机配对原则。
常用的交叉方式:
单点交叉
双点交叉(多点交叉,交叉点数越多,个体的结构被破坏的可能性越大,一般不采用多点交叉的方式)
均匀交叉
算术交叉
3.2.5 变异算子
遗传算法中的变异运算是指将个体染色体编码串中的某些基因座上的基因值用该基因座的其他等位基因来替换,从而形成一个新的个体。

就遗传算法运算过程中产生新个体的能力方面来说,交叉运算是产生新个体的主要方法,它决定了遗传算法的全局搜索能力;而变异运算只是产生新个体的辅助方法,但也是必不可少的一个运算步骤,它决定了遗传算法的局部搜索能力。交叉算子与变异算子的共同配合完成了其对搜索空间的全局搜索和局部搜索,从而使遗传算法能以良好的搜索性能完成最优化问题的寻优过程。

3.2.6 运行参数

4 遗传算法的基本原理
4.1 模式定理

4.2 积木块假设
具有低阶、定义长度短,且适应度值高于群体平均适应度值的模式称为基因块或积木块。
积木块假设:个体的基因块通过选择、交叉、变异等遗传算子的作用,能够相互拼接在一起,形成适应度更高的个体编码串。
积木块假设说明了用遗传算法求解各类问题的基本思想,即通过积木块直接相互拼接在一起能够产生更好的解。

二、源代码

%% 清空环境
clc
clear
tic;
%% 遗传算法参数
MAXGEN=200;                         %进化代数
sizepop=40;                       %种群规模
pcross=0.6;                      %交叉概率
pmutation=0.01;                  %变异概率
lenchrom=ones(1,48);                    %变量字串长度
bound=[-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
-20	20
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
30	120
];                 %BS、DE变量范围
trace=zeros(1,MAXGEN);
%% 个体初始化
gen=1;
fprintf('%d\\n',gen);
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[],'pgrid',[],'Ebat',[]);  %种群结构体
bestfitness=[];                                              %种群最佳适应度
bestchrom=[];                                                %适应度最好染色体
% 初始化种群
for i=1:sizepop
    individuals.chrom(i,:)=Code(lenchrom,bound);       %随机产生个体
    X=individuals.chrom(i,:);
    [money pgrid Ebat]=fun(X);
    individuals.fitness(i)=money;                     %个体适应度
    individuals.pgrid(i,:)=pgrid;
    individuals.Ebat(i,:)=Ebat;
end
%找最好的染色体
[bestfitness bestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:);  %最好的染色体
bestpgrid=individuals.pgrid(bestindex,:);
bestEbat=individuals.Ebat(bestindex,:)

% 记录每一代进化中最好的适应度和平均适应度
trace(1)=bestfitness; 

function ret=Cross(pcross,lenchrom,chrom,sizepop,bound)
%本函数完成交叉操作
% pcorss                input  : 交叉概率
% lenchrom              input  : 染色体的长度
% chrom                 input  : 染色体群
% sizepop               input  : 种群规模
% ret                   output : 交叉后的染色体

for i=1:sizepop 
    
    % 随机选择两个染色体进行交叉
    pick=rand(1,2);
    while prod(pick)==0
        pick=rand(1,2);
    end
    index=ceil(pick.*sizepop);
    % 交叉概率决定是否进行交叉
    pick=rand;
    while pick==0
        pick=rand;
    end
    if pick>pcross
        continue;
    end
    flag=0;
    while flag==0
        % 随机选择交叉位置
        pick=rand;
        while pick==0
            pick=rand;
        end
        pos=ceil(pick.*sum(lenchrom)); %随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同
        pick=rand; %交叉开始
        v1=chrom(index(1),pos);
        v2=chrom(index(2),pos);
        for i=1:sizepop  
    % 随机选择一个染色体进行变异
    pick=rand;
    while pick==0
        pick=rand;
    end
    index=ceil(pick*sizepop);
    % 变异概率决定该轮循环是否进行变异
    pick=rand;
    if pick>pmutation
        continue;
    end
    flag=0;
    while flag==0
        % 变异位置
        pick=rand;
        while pick==0
            pick=rand;
        end
        pos=ceil(pick*sum(lenchrom));  %随机选择了染色体变异的位置,即选择了第pos个变量进行变异
        v=chrom(i,pos);
        v1=v-bound(pos,1);
        v2=bound(pos,2)-v;
        pick=rand; %变异开始
        if pick>0.5
            delta=v2*(1-pick^((1-pop(1)/pop(2))^2));
            chrom(i,pos)=v+delta;
        else
            delta=v1*(1-pick^((1-pop(1)/pop(2))^2));
            chrom(i,pos)=v-delta;
        end   %变异结束
        flag=test(lenchrom,bound,chrom(i,:));     %检验染色体的可行性
    end
end
ret=chrom;
        if   flag1*flag2==0
            flag=0;
        else flag=1;
        end    %如果两个染色体不是都可行,则重新交叉
    end
    function ret=Select(individuals,sizepop)
% 本函数对每一代种群中的染色体进行选择,以进行后面的交叉和变异
% individuals input  : 种群信息
% sizepop     input  : 种群规模
% opts        input  : 选择方法的选择
% ret         output : 经过选择后的种群

individuals.fitness= 1./(individuals.fitness);
sumfitness=sum(individuals.fitness);
sumf=individuals.fitness./sumfitness;
index=[];
for i=1:sizepop   %转sizepop次轮盘
    pick=rand;
    while pick==0
        pick=rand;
    end
    for j=1:sizepop
        pick=pick-sumf(j);
        if pick<0
            index=[index j];
            break;  %寻找落入的区间,此次转轮盘选中了染色体i,注意:在转sizepop次轮盘的过程中,有可能会重复选择某些染色体
        end
    end
end
individuals.chrom=individuals.chrom(index,:);
individuals.fitness=individuals.fitness(index);
end
ret=chrom;

三、运行结果

四、备注

版本:2014a

微电网优化基于matlab遗传算法求解微电网经济优化问题含matlab源码2062期

一、遗传算法求解微电网经济优化问题简介1引言微电网为分布式电源(尤其是可再生能源)接入大电网提供了一个有效的接入途径。同时,微电网在提高能源利用率方面有显著效果。在其内部,储能电池一方面可... 查看详情

微电网优化基于matlab遗传算法求解微电网经济优化问题含matlab源码2062期

一、遗传算法求解微电网经济优化问题简介1引言微电网为分布式电源(尤其是可再生能源)接入大电网提供了一个有效的接入途径。同时,微电网在提高能源利用率方面有显著效果。在其内部,储能电池一方面可... 查看详情

优化调度基于matlab改进的遗传算法求解风电场优化调度问题含matlab源码1245期

一、遗传算法简介1引言2遗传算法理论2.1遗传算法的生物学基础2.2遗传算法的理论基础 查看详情

微电网优化基于matlab粒子群优化算法的微电网调度(光伏储能电动车电网交互)含matlab源码2190期

一、粒子群算法求解电联供型微电网经济运行优化简介0引言热电联供(combinedheatandpower,CHP)系统建立在能源梯级利用的概念基础上,统一解决了电能和热能的供应问题,是一种经济节能、环境友好的用能方式,具有良好的社会和经济效... 查看详情

优化调度基于matlab遗传和模拟退火算法求解码头泊位分配调度优化问题含matlab源码247期

一、遗传算法简介1引言2遗传算法理论2.1遗传算法的生物学基础2.2遗传算法的理论基础 查看详情

优化调度基于matlab非支配排序遗传算法求解车辆充电调度优化问题含matlab源码2000期(代码片段)

一、遗传算法简介由于国内外人民的生活方式和电动汽车主要购买人群的不同,国内外关于车辆充电调度问题研究的侧重点也不尽相同。我国地大物博,人口众多,交通复杂。主要从以下方面研究:1、通过经济手... 查看详情

优化调度基于matlab遗传算法求解公交车调度排班优化问题含matlab源码2212期

...客流需求的前提下,尽量减少不必要的投入,这是个多目标优化问题。 查看详情

优化调度基于matlab遗传算法求解工件的并行调度组合优化问题含matlab源码2234期

⛄一、遗传算法简介1问题描述假定一个加工系统有m台机器和n件工件,每个工件包含一道或多道工序,工件的加工顺序是确定的,但每个工件可能有几条可行的加工路线,即每道工序可在多台不同的机床上加工,工序的加工时间和... 查看详情

微电网优化基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题含matlab源码2283期

...式获取代码方式1:完整代码已上传我的资源:【微电网优化】基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题【含Matlab源码2283期】点击上面蓝色字体,直接付费下载,即可。获取代码方式2:付费专栏Matlab电力系... 查看详情

优化调度基于matlab改进的遗传算法求解风电场优化调度问题含matlab源码1245期(代码片段)

...规模MaxGen=1000;%遗传代数ChromLen=10;%编码长度N=16;%优化变量个数LLimits=0;%优化变量的下限HLimits=0.33;%优化变量的上限Chrom=round(rand(PopSize,N*ChromLen));%随机产生初始种群的染色体fork=1:MaxGenfors=1:PopSize%种群产生m=... 查看详情

微电网优化基于matlab萤火虫算法求解微电网优化问题含matlab源码2146期

一、萤火虫算法求解微电网经济优化问题简介利用迭代搜索法、剔除劣势策略法、逆推归纳法和最大最小优化方法[7,8,9]等均可实现博弈均衡点的求解。但当维数较大时,这些方法可能存在搜索速度、路径和精度上的问题。萤火虫... 查看详情

指派问题基于matlab遗传算法求解指派优化问题含matlab源码2292期

⛄一、遗传算法求解指派优化问题简介1遗传算法1.1遗传算法简介遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法,它是一种多学科融合交叉的产物。遗传算法通过合理的编码机制和... 查看详情

指派问题基于matlab遗传算法求解指派优化问题含matlab源码2292期

⛄一、遗传算法求解指派优化问题简介1遗传算法1.1遗传算法简介遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法,它是一种多学科融合交叉的产物。遗传算法通过合理的编码机制和... 查看详情

微电网优化基于matlab粒子群求解chp机组气网电网储热罐和电锅炉微电网优化问题含matlab源码2109期

一、粒子群算法求解电联供型微电网经济运行优化简介0引言热电联供(combinedheatandpower,CHP)系统建立在能源梯级利用的概念基础上,统一解决了电能和热能的供应问题,是一种经济节能、环境友好的用能方式,具有良好的社会和经济效... 查看详情

微电网优化基于matlab粒子群求解chp机组气网电网储热罐和电锅炉微电网优化问题含matlab源码2109期

一、粒子群算法求解电联供型微电网经济运行优化简介0引言热电联供(combinedheatandpower,CHP)系统建立在能源梯级利用的概念基础上,统一解决了电能和热能的供应问题,是一种经济节能、环境友好的用能方式,具有良好的社会和经济效... 查看详情

优化调度基于matlab改进粒子群算法求解微电网优化调度问题含matlab源码052期(代码片段)

一、微电网优化调度的模型简介微电网优化调度的模型是以风、光、储能装置、微型燃气轮机、燃料电池等组成的系统的优化调度模型。在计算系统的运行费用是应考虑各分布式发电单元的运行维护成本和折旧费用等。同时࿰... 查看详情

微电网优化基于matlabyalmip求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题含matlab源码2266期

...式获取代码方式1:完整代码已上传我的资源:【微电网优化】基于matlabYALMIP求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题【含Matlab源码2266期】点击上面蓝色字体,直接付费下载,即可。获取代码方式2:付费专栏... 查看详情

优化充电基于matlab遗传算法求解电动汽车充电统一管理优化问题(含负荷功率曲线对比图及充电计划)含matlab源码2300期

⛄一、遗传算法求解电动汽车充电统一管理简介0引言电动汽车是一个发展迅速的新兴产业,它的优势在于性能良好、节能、环保,近几年受到了科学研究人员和各国政府的广泛关注。但是,伴随着电动汽车产生的相关问题是充电问... 查看详情