免费获取!遗传算法+多目标规划算法+自适应神经模糊系统程序代码!

前言

遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,通过数学的方式,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。在求解较为复杂的组合优化问题时,相对一些常规的优化算法,通常能够较快地获得较好的优化结果。多目标规划的概念是1961年由美国数学家查尔斯和库柏首先提出的。多目标最优化思想,最早是在1896年由法国经济学家V.帕雷托提出来的。他从政治经济学的角度考虑把本质上是不可比较的许多目标化成单个目标的最优化问题,从而涉及了多目标规划问题和多目标的概念。J-S.R.Jang提出的自适应神经模糊推理系统是一种将模糊逻辑和神经元网络有机结合的新型的模糊推理系统结构,采用反向传播算法和最小二乘法的混合算法调整前提参数和结论参数,并能自动产生If-Then规则。基于自适应神经网络的模糊推理系统ANFIS(Adaptive Network-based Fuzzy Inference System)将神经网络与模糊推理有机的结合起来,既发挥了二者的优点,又弥补了各自的不足。

上述算法已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工智能等领域。现在介绍并推广给大家。

遗传算法

算法原理

初始化种群:随机生成初始的个体群体,这些个体通常是问题的可能解决方案。

适应度评估:对每个个体进行适应度评估,确定其在解空间中的优劣程度。适应度函数通常用于衡量个体的性能,以指导后续的选择过程。

选择:通过一定的策略从种群中选择个体,选择的概率通常与个体的适应度相关。优秀的个体有更高的概率被选择,从而促进种群的进化。

交叉:选定的个体进行交叉操作,生成新的个体。交叉操作模拟了生物界的杂交过程,从而将不同个体的优良特性结合在一起。

变异:对新生成的个体进行变异操作,以引入新的基因组合。变异操作有助于维持种群的多样性,并有可能引入新的解决方案。

重复迭代:通过以上步骤,生成新的种群,并重复进行选择、交叉和变异,直到满足停止条件。

实现步骤

确定问题:首先要明确需要解决的问题,并将问题抽象成遗传算法可处理的形式,包括定义适应度函数和个体的编码方式。

初始化种群:随机生成初始的个体群体,通常可以采用随机生成或者启发式方法。

评估适应度:对每个个体计算适应度,评估其解决方案的优劣程度。

选择操作:根据适应度选择个体,通常采用轮盘赌选择、锦标赛选择等方法。

交叉操作:选定一定数量的个体进行交叉操作,生成新的个体。

变异操作:对新生成的个体进行变异操作,以增加种群的多样性。

重复迭代:重复进行选择、交叉和变异操作,直到满足停止条件,如达到最大迭代次数或者找到满意的解决方案。

结果解码:解码最优个体,得到问题的解决方案。

部分程序

%% 参数初始化
popsize=100; %种群规模 lenchrom=7; %变量字串长度
pc=0.7;  %设置交叉概率,本例中交叉概率是定值,若想设置变化的交叉概率可用表达式表示,或从写一个交叉概率函数,例如用神经网络训练得到的值作为交叉概率
pm=0.3;  %设置变异概率,同理也可设置为变化的
maxgen=100;   % 进化次数  
%种群bound=[popmin popmax;popmin popmax;popmin popmax;popmin popmax;popmin popmax;popmin popmax;popmin popmax];  %变量范围
%% 产生初始粒子和速度
for i=1:popsize%随机产生一个种群
GApop(i,:)=Code(lenchrom,bound);  %随机产生个体
%计算适应度   fitness(i)=fun(GApop(i,:));  %染色体的适应度
%找最好的染色体[bestfitness bestindex]=min(fitness);
zbest=GApop(bestindex,:);  %全局最佳 gbest=GApop; %个体最佳
fitnessgbest=fitness;       %个体最佳适应度值
fitnesszbest=bestfitness;   %全局最佳适应度值
%% 迭代寻优%种群更新 GA选择更新GApop=Select2(GApop,fitness,popsize);
% 交叉操作 GAGApop=Cross(pc,lenchrom,GApop,popsize,bound);
 % 变异操作 GA变异GApop=Mutation(pm,lenchrom,GApop,popsize,[i maxgen],bound);
%适应度值if 0.072*pop(j,1)+0.063*pop(j,2)+0.057*pop(j,3)+0.05*pop(j,4)+0.032*pop(j,5)+0.0442*pop(j,6)+0.0675*pop(j,7)<=264.4

程序结果

多目标规划算法

当涉及到多目标规划问题时,传统的单目标优化方法可能不再适用,因为这些问题通常涉及到多个冲突的目标。多目标规划算法旨在找到一组解决方案,这些解决方案构成了一个被称为“帕累托前沿”的集合,其中没有一个解决方案能够同时优于其他解决方案。以下是多目标规划算法的原理和实现步骤:

算法原理

帕累托前沿:在多目标优化中,帕累托前沿是一组解决方案,其中没有一个解决方案在所有目标上都优于其他解决方案。这意味着在帕累托前沿上的任何解决方案都无法改进一项目标而不损害其他目标。

支配关系:在多目标优化中,一个解决方案可以被另一个解决方案支配,如果后者在所有目标上至少与前者一样好,并在至少一个目标上更好。基于支配关系,可以将解决方案划分为不同的帕累托前沿。

多目标优化算法:多目标优化算法旨在找到帕累托前沿上的解决方案。这些算法可以通过各种方法来搜索解决方案空间,并采取措施来维护帕累托前沿的多样性和覆盖性。

实现步骤

初始化种群:随机生成初始解决方案的种群。

评估适应度:对每个解决方案计算其在每个目标上的适应度值。

支配关系检查:对种群中的每个解决方案进行支配关系检查,确定每个解决方案被多少个其他解决方案支配,并标识出不被任何其他解决方案支配的解决方案,这些解决方案构成了帕累托前沿的一部分。

选择操作:采用一定的策略选择解决方案,通常是基于支配关系和适应度值。

交叉和变异操作:对选定的解决方案进行交叉和变异操作,生成新的解决方案。

种群更新:根据选定的策略更新种群,保持种群的多样性和覆盖性。

重复迭代:重复进行选择、交叉和变异操作,直到满足停止条件,如达到最大迭代次数或者找到满意的帕累托前沿。

结果解码:解码帕累托前沿上的解决方案,得到问题的一组可能解决方案。

自适应神经模糊系统

自适应神经模糊系统(ANFIS)是一种结合了模糊逻辑和神经网络的方法,用于建模和控制非线性系统。它结合了模糊推理的模糊逻辑表达能力和神经网络的非线性逼近能力,通过训练数据自适应地调整其参数,从而实现对复杂系统的建模和控制。以下是ANFIS算法的原理和实现步骤:

算法原理

模糊推理系统: ANFIS利用模糊推理系统来表示问题的模糊规则。模糊规则通常以if-then形式表示,并使用模糊语言变量和模糊集合描述系统的行为。

神经网络: ANFIS使用了一个特殊结构的前向神经网络,称为Takagi-Sugeno型神经网络。这种网络结构具有一组输入节点、一组隐含节点、一组输出节点和一组参数,参数是通过训练数据学习得到的。

混合权重: ANFIS的隐含节点和输出节点之间的连接有一组混合权重,用于控制每个节点的输出对模糊规则的贡献程度。

参数学习: ANFIS通过训练数据自适应地调整其参数,包括模糊规则的隶属函数参数和神经网络的权重参数。这通常使用梯度下降等优化算法来实现。

实现步骤

确定模糊规则: 根据问题的特性确定模糊规则,包括模糊语言变量、模糊集合和if-then规则的形式。

初始化参数: 随机初始化模糊规则的隶属函数参数和神经网络的权重参数。

前向传播: 对训练数据进行前向传播,计算每个隐含节点和输出节点的输出。

计算损失函数: 使用预测结果和真实标签计算损失函数,用于衡量模型的预测性能。

反向传播: 根据损失函数使用反向传播算法更新模糊规则的参数和神经网络的权重参数。

重复迭代: 重复进行前向传播和反向传播,直到损失函数收敛或达到预设的停止条件。

模型评估: 使用验证数据评估训练得到的模型的性能,调整模型参数以优化性能。

模型应用: 使用训练得到的ANFIS模型进行预测、控制或其他应用。

部分程序

gamma=0.75;%设定惯性因子
eps1=0.005;%设定停止训练的条件参数
m1=8;%设定隶属函数个数m2=8;
c=[2/7*(0:m1-1)-1;2/7*(0:m2-1)-1];%初始化Cij
sigma=0.1213*ones(2,m1);%初始化σij 
mu=zeros(2,m1);%初始化隶属度层
alpha=zeros(1,m1*m2);%初始化规则层
alpha_=zeros(1,m1*m2);%初始化归一化层
delta2=zeros(2,m1);%初始化δ2
dw=zeros(1,m1*m2);%初始化权值变化量
dc=zeros(2,m1);%初始化c变化量
dsigma=zeros(2,m1);%初始化σij变化量
Par_E_w=zeros(1,m1*m2);%误差对权值阵的偏导数
Par_E_c=zeros(2,m1);%误差对c的偏导数
Par_E_sigma=zeros(2,m1);%误差对σ的偏导数
yd=sin(pi*x1)*cos(pi*x2);%期望输出,导师信号
%正向传播
mu(1,:)=exp(-(x1-c(1,:)).^2./sigma(1,:).^2);%计算隶属度层
s=zeros(2,m1,m1*m2);%初始化Sij
alpha((m-1)*m2+n)=min(mu(1,m),mu(2,n));%计算规则层(取小运算)
alpha_=alpha/sum(alpha);%计算归一化层
y=alpha_*w.';%计算网络输出E=E+1/2*(yd-y)^2;%计算误差
%反向传播 delta5=yd-y; delta4=delta5*w;

程序结果

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

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

最近更新

  1. TCP协议是安全的吗?

    2024-05-01 16:40:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-01 16:40:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-01 16:40:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-01 16:40:02       20 阅读

热门阅读

  1. 贪心-区间问题

    2024-05-01 16:40:02       10 阅读
  2. FreeRTOS

    FreeRTOS

    2024-05-01 16:40:02      9 阅读
  3. CSS 06

    CSS 06

    2024-05-01 16:40:02      12 阅读
  4. Docker依旧没有过时

    2024-05-01 16:40:02       11 阅读
  5. Python绝对路径及命令行执行路径的写法收录

    2024-05-01 16:40:02       14 阅读
  6. 三种滤波(EKF、UKF、CKF)的对比,含MATLAB源代码

    2024-05-01 16:40:02       13 阅读
  7. 商城数据库88张表结构

    2024-05-01 16:40:02       10 阅读
  8. 算法~本质

    2024-05-01 16:40:02       10 阅读
  9. Jenkins持续化集成

    2024-05-01 16:40:02       11 阅读