优化求解基于matlab遗传算法求解电动汽车充电管理优化问题含matlab源码1178期(代码片段)

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

关键词:

一、简介

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

%--------------------获取数据-----------------------
PBase=fopen('PBase.txt');                      
Pbase(1,:)=fscanf(PBase,'%g',[1,inf]);       %Pbase    电网基础负荷功率 96个时段
fclose(PBase);  
carnum=100;                                %carnumal 给定接入汽车数量
% carnum0=0.25*carnumal;                        %carnum0  紧急充电汽车数量
% carnum=carnumal-carnum0;                     %carnum   常规充电汽车数量
ET=36;                                       %ET       给定汽车电池容量
ptSOC0=normrnd(0.2,0.05,1,carnum);           %ptSOC0   服从正态分布的电池状态
pch=[7,1.5];                                 %pch      恒功率充电
Pmax=2400;                                   %Pmax     给定电网允许最大功率
tin=normrnd(19,1,1,carnum);                  %tin      各电动汽车接入时间
Te=normrnd(7,0.5,1,carnum);                  %Te       用户设置充电完成时间
timeT=zeros(1,carnum);                       %timeT    各电动汽车充电所需时间

ptSOC=ptSOC0;
for i=1:carnum
    while ptSOC(1,i)<0.9                     %充电功率 SOC<90%
      ptSOC(1,i)=ptSOC(1,i)+0.25*pch(1)/ET;
      timeT(1,i)=timeT(1,i)+0.25;
    end                                      %充电功率 SOC>=90%
    timeT(1,i)=timeT(1,i)+(1-ptSOC(1,i))*ET/pch(2);
end
%--------------------无序充电-----------------------
cartime=carT(carnum,tin,timeT);              %以汽车接入时间作为充电开始时间
a=sum(cartime,2);
Ptotal=zeros(1,96);
for i=1:96
    Ptotal(1,i)=Pbase(i)+pch(1)*a(i);
end
PTotal=fopen('d:\\PTotal.txt','wt');
fprintf(PTotal,'%g \\n',Ptotal);
fclose(PTotal);
%--------------------紧急充电-----------------------
% 
% tsSOC0=normrnd(0.3,0.05,1,carnum0);          %tsSOC0   服从正态分布的电池状态
% tin0=24.*rand(1,carnum0);                    %tin0     特殊电动汽车接入时间随机分布
% tsSOCe=normrnd(0.8,0.05,1,carnum0);          %tsSOCe   用户设置期望电池状态
% timeT0=zeros(1,carnum0);                     %timeT0   恒功率充电时长
% for i=1:carnum0                      
%       timeT0(1,i)=ET*(tsSOCe(i)-tsSOC0(i))/pch(1);                               
% end
% cartime=carT(carnum0,tin0,timeT0);           %以汽车接入时间作为充电开始时间
% a=sum(cartime,2);
% for i=1:96
%     Pbase(i)=Pbase(i)+pch(1)*a(i);
% end

%------------------遗传算法优化---------------------
maxgen=8000;                                 %maxgen   终止进化代数
sizepop=20;                                  %sizepop  种群规模                                             
pcross=0.8;                                  %pcross   杂交概率
pmutation=0.05;                              %pmutation变异概率
bound=[tin;Te-timeT+24];                     %bound    约束范围
%种群初始化
ton=zeros(1,carnum);                         %ton      各电动汽车充电开始时间
carpop=struct('fitness',zeros(1,sizepop),'chrom',[]);      
for i=1:sizepop                              %carpop   初始种群随机赋值
    a=rand(1,carnum);
    for j=1:carnum
        ton(1,j)=bound(1,j)+a(j)*(bound(2,j)-bound(1,j));
    end
    carpop.chrom(i,:)=ton;                   %chrom    染色体群,即ton集合
    %carpop.fitness(i)=fit1(carnum,ton,timeT,Pbase,pch);
    carpop.fitness(i)=fit2(carnum,ton,timeT,Pbase,pch);
end

%找出当前最优解(适应度最小的染色体)                                                          
[bestfit,bestindex]=min(carpop.fitness);    
bestton=carpop.chrom(bestindex,:);           %bestton  最优充电开始时间   
avgfit=sum(carpop.fitness)/sizepop;          %avgfit   适应度平均值

%进化开始
for i=1:maxgen                              
    carpopC=struct('fitness',[],'chrom',[]);
    carpopC.chrom=Cross(pcross,carnum,carpop.chrom,sizepop,bound);
   
    carpopM.chrom=Mutation(pmutation,carnum,carpop.chrom,sizepop,[i,maxgen],bound);
    for j=1:sizepop
        ton=carpopC.chrom(j,:);
        %carpopC.fitness(1,j)=fit1(carnum,ton,timeT,Pbase,pch);
        carpopC.fitness(1,j)=fit2(carnum,ton,timeT,Pbase,pch);
    end
    for j=1:sizepop
        ton=carpopM.chrom(j,:);
        %carpopM.fitness(1,j)=fit1(carnum,ton,timeT,Pbase,pch);
        carpopM.fitness(1,j)=fit2(carnum,ton,timeT,Pbase,pch);
    end
    carpop=Select0(carpop,carpopC,carpopM,sizepop);
    [newbestfit,newbestindex]=min(carpop.fitness);
    if  bestfit>newbestfit
        bestfit=newbestfit;
      
    end
    avgfit=sum(carpop.fitness)/sizepop;
end

% bestfit=Pmax;
% maxgen=5000;
% for i=1:maxgen                              
%     carpopC=struct('fitness',[],'chrom',[]);
%     carpopC.chrom=Cross(pcross,carnum,carpop.chrom,sizepop,bound);
%     carpopM=struct('fitness',[],'chrom',[]);
%     carpopM.chrom=Mutation(pmutation,carnum,carpop.chrom,sizepop,[i,maxgen],bound);
%     for j=1:sizepop
%         ton=carpopC.chrom(j,:);
%         carpopC.fitness(1,j)=fit1(carnum,ton,timeT,Pbase,pch);
%         %carpopC.fitness(1,j)=fit2(carnum,ton,timeT,Pbase,pch);
%     end
%     for j=1:sizepop
%         ton=carpopM.chrom(j,:);
%         carpopM.fitness(1,j)=fit1(carnum,ton,timeT,Pbase,pch);
%         %carpopM.fitness(1,j)=fit2(carnum,ton,timeT,Pbase,pch);
%     end
%     carpop=Select0(carpop,carpopC,carpopM,sizepop);
%     [newbestfit,newbestindex]=min(carpop.fitness);
%     if  bestfit>newbestfit
%         bestfit=newbestfit;
%         bestton=carpop.chrom(newbestindex,:);
%     end
%     avgfit=sum(carpop.fitness)/sizepop;
% end
function ret=Cross(pcross,carnum,chrom,sizepop,bound)  %交叉后代
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*carnum);
       
        pick=rand;                     %开始交叉
        x1=chrom(index(1),pos);
        x2=chrom(index(2),pos);
        x1=pick*x2+(1-pick)*x1;
        x2=pick*x1+(1-pick)*x2;
        flag1=test(x1,bound(:,pos));          %检查可行性
        flag2=test(x2,bound(:,pos));
        if flag1*flag2==0
             flag=0;
        else flag=1; 
             chrom(index(1),pos)=x1;
             chrom(index(2),pos)=x2;
        end 
    end
end
ret=chrom;
        
        

三、运行结果

四、备注

版本:2014a

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

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

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

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

优化求解基于matlab遗传算法求解峰谷分时电价电动汽车充电负荷优化问题含matlab源码210期(代码片段)

一、电动汽车充电简介近年来,在国内外石油资源紧缺,环境问题日益严重的情况下,电动汽车因具有显著的经济性与环境性,其发展迅速,在中国,至2030年,电动汽车数量将达... 查看详情

优化求解基于matlab遗传算法求解共享汽车电价优化问题含matlab源码1162期(代码片段)

...2遗传算法的特点和应用遗传算法是一类可用于复杂系统优化的具有鲁棒性 查看详情

优化求解基于matlab遗传算法求解道路流量优化问题含matlab源码1480期

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

优化求解基于matlab遗传算法求解道路流量优化问题含matlab源码1480期

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

优化求解基于matlab遗传算法求解列车交路方案优化问题含matlab源码1361期

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

优化求解基于matlab遗传算法求解列车交路方案优化问题含matlab源码1361期

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

优化求解基于matlab遗传算法求解函数极值问题含matlab源码1198期

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

多目标优化求解基于matlab遗传优化萤火虫算法求解多目标优化问题含matlab源码1484期

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

多目标优化求解基于matlab遗传优化萤火虫算法求解多目标优化问题含matlab源码1484期

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

优化求解基于matlab改进的遗传算法求解考虑环境效益dg优化问题含matlab源码1483期

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

优化求解基于matlab改进的遗传算法求解考虑环境效益dg优化问题含matlab源码1483期

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

优化选址基于matlab蚁群算法求解电动汽车充电站与换电站选址优化问题含matlab源码1182期(代码片段)

一、简介1概要模拟蚂蚁觅食行为(最短路径原理)设计的算法。讲蚂蚁群觅食的特点抽象出来转化成数学描述。•蚁群算法(AntColonyAlgorithm,ACA)由MarcoDorigo于1992年在他的博士论文中首次提出。•蚂蚁在寻找食物源时,... 查看详情

etwvrp基于matlab遗传算法求解带时间窗多电动车充电路径规划问题含matlab源码1966期(代码片段)

...内外许多学者对CDS系统进行了深入研究。其中,车辆路径优化问题是城市配送系统中的重要环节,通过对车辆行驶路径的优化管理可以有效地降低城市配送成本,同时可以提高城市交通效率,节省公共资源,无论对企业还是对社会,都具... 查看详情

优化分配基于matlab遗传算法求解医疗资源分配优化问题含matlab源码1419期

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

优化求解基于matlab遗传算法结合粒子群算法求解单目标优化问题含matlab源码1659期(代码片段)

一、GA-PSO混合优化算法的基本思想对于遗传算法来讲,传统的遗传算法中变异算子是对群体中的部分个体实施随机变异,与历史状态和当前状态无关。而粒子群算法中粒子则能保持历史状态和当前状态。遗传算法的进化初期,变异有... 查看详情

优化布局基于matlab遗传算法求解配电变电站布局优化问题含matlab源码1317期

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