%
% Copyright (c) 2015, Yarpiz (www.yarpiz.com)
% All rights reserved. Please read the "license.txt" for license terms.
%
% Project Code: YPFZ104
% Project Title: Evolutionary ANFIS Traing in MATLAB
% Publisher: Yarpiz (www.yarpiz.com)
%
% Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team)
%
% Contact Info: sm.kalami@gmail.com, info@yarpiz.com
%
function bestfis=TrainAnfisUsingGA(fis,data)
%% Problem Definition
p0=GetFISParams(fis);
Problem.CostFunction=@(x) TrainFISCost(x,fis,data);
Problem.nVar=numel(p0);
Problem.VarMin=-25;
Problem.VarMax=25;
%% GA Params
Params.MaxIt=1000;
Params.nPop=25;
%% Run GA
results=RunGA(Problem,Params);
%% Get Results
p=results.BestSol.Position.*p0;
bestfis=SetFISParams(fis,p);
end
function results=RunGA(Problem,Params)
disp('Starting GA ...');
%% Problem Definition
CostFunction=Problem.CostFunction; % Cost Function
nVar=Problem.nVar; % Number of Decision Variables
VarSize=[1 nVar]; % Size of Decision Variables Matrix
VarMin=Problem.VarMin; % Lower Bound of Variables
VarMax=Problem.VarMax; % Upper Bound of Variables
%% GA Parameters
MaxIt=Params.MaxIt; % Maximum Number of Iterations
nPop=Params.nPop; % Population Size
pc=0.4; % Crossover Percentage
nc=2*round(pc*nPop/2); % Number of Offsprings (Parnets)
pm=0.7; % Mutation Percentage
nm=round(pm*nPop); % Number of Mutants
gamma=0.7;
mu=0.15; % Mutation Rate
beta=8; % Selection Pressure
%% Initialization
empty_individual.Position=[];
empty_individual.Cost=[];
pop=repmat(empty_individual,nPop,1);
for i=1:nPop
% Initialize Position
if i>1
pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
else
pop(i).Position=ones(VarSize);
end
% Evaluation
pop(i).Cost=CostFunction(pop(i).Position);
end
% Sort Population
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder);
% Store Best Solution
BestSol=pop(1);
% Array to Hold Best Cost Values
BestCost=zeros(MaxIt,1);
% Store Cost
WorstCost=pop(end).Cost;
%% Main Loop
for it=1:MaxIt
P=exp(-beta*Costs/WorstCost);
P=P/sum(P);
% Crossover
popc=repmat(empty_individual,nc/2,2);
for k=1:nc/2
% Select Parents Indices
i1=RouletteWheelSelection(P);
i2=RouletteWheelSelection(P);
% Select Parents
p1=pop(i1);
p2=pop(i2);
% Apply Crossover
[popc(k,1).Position, popc(k,2).Position]=...
Crossover(p1.Position,p2.Position,gamma,VarMin,VarMax);
% Evaluate Offsprings
popc(k,1).Cost=CostFunction(popc(k,1).Position);
popc(k,2).Cost=CostFunction(popc(k,2).Position);
end
popc=popc(:);
% Mutation
popm=repmat(empty_individual,nm,1);
for k=1:nm
% Select Parent
i=randi([1 nPop]);
p=pop(i);
% Apply Mutation
popm(k).Position=Mutate(p.Position,mu,VarMin,VarMax);
% Evaluate Mutant
popm(k).Cost=CostFunction(popm(k).Position);
end
% Create Merged Population
pop=[pop
popc
popm]; %#ok
% Sort Population
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder);
% Update Worst Cost
WorstCost=max(WorstCost,pop(end).Cost);
% Truncation
pop=pop(1:nPop);
Costs=Costs(1:nPop);
% Store Best Solution Ever Found
BestSol=pop(1);
% Store Best Cost Ever Found
BestCost(it)=BestSol.Cost;
% Show Iteration Information
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
end
disp('End of GA.');
disp(' ');
%% Results
results.BestSol=BestSol;
results.BestCost=BestCost;
end
function [y1, y2]=Crossover(x1,x2,gamma,VarMin,VarMax)
alpha=unifrnd(-gamma,1+gamma,size(x1));
y1=alpha.*x1+(1-alpha).*x2;
y2=alpha.*x2+(1-alpha).*x1;
y1=max(y1,VarMin);
y1=min(y1,VarMax);
y2=max(y2,VarMin);
y2=min(y2,VarMax);
end
function y=Mutate(x,mu,VarMin,VarMax)
nVar=numel(x);
nmu=ceil(mu*nVar);
j=randsample(nVar,nmu)';
sigma=0.1*(VarMax-VarMin);
y=x;
y(j)=x(j)+sigma*randn(size(j));
y=max(y,VarMin);
y=min(y,VarMax);
end
没有合适的资源?快使用搜索试试~ 我知道了~
使用遗传算法和粒子群算法实现训练ANFIS
共11个文件
m:10个
mat:1个
1 下载量 27 浏览量
2023-12-27
09:54:29
上传
评论
收藏 20KB RAR 举报
温馨提示
ANFIS(Adaptive Neuro-Fuzzy Inference System)是一种结合了模糊逻辑和神经网络技术的自适应系统,可以应用于各种复杂的非线性问题。使用遗传算法和粒子群算法来训练ANFIS模型,可以提高模型的性能和准确性。以下是使用遗传算法和粒子群算法训练ANFIS模型的基本描述: 建立ANFIS模型:根据具体的问题和数据集,建立一个ANFIS模型。ANFIS模型由输入层、隐含层和输出层组成,其中隐含层通常采用高斯或者三角波形函数。 定义目标函数:根据具体的问题和目标,定义一个目标函数来评估ANFIS模型的性能。例如,可以使用均方根误差(RMSE)或者平均绝对误差(MAE)等指标来衡量模型的预测能力。 选择遗传算法或粒子群算法:选择适当的优化算法来训练ANFIS模型。遗传算法和粒子群算法是两种常用的优化算法,它们都可以用于训练ANFIS模型。 初始化种群:对于遗传算法,初始时随机生成一定数量的个体,每个个体表示一个可能的解;对于粒子群算法,初始时随机生成一定数量的粒子,每个粒子表示一个可能的解。 评估适应度:对于每个个体或粒子,计算其目标函数值作为适应度值
资源推荐
资源详情
资源评论
收起资源包目录
Evolutionary ANFIS Training.rar (11个子文件)
Evolutionary ANFIS Training
CreateInitialFIS.m 749B
SetFISParams.m 922B
RouletteWheelSelection.m 490B
TrainAnfisUsingGA.m 5KB
PlotResults.m 1KB
engine_data.mat 12KB
main.m 1KB
GetFISParams.m 786B
LoadData.m 1KB
TrainFISCost.m 885B
TrainAnfisUsingPSO.m 5KB
共 11 条
- 1
资源评论
嵌入式职场
- 粉丝: 4w+
- 资源: 44
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab开发的全面详解LTE:MATLAB建模、仿真与实现-simulink.rar
- 自动驾驶定位系列教程二:系统架构.pdf
- 整站程序8优技巧网-8ujq.rar
- 世界各个国家或地区国际域名缩写
- 基于matlab开发的根据rvm回归模型自己编的matlab程序.rar
- 基于matlab开发的该程序为国内一所大学编写的LTE链路层仿真程序,根据LTE标准协议编写的,很容易看懂.rar
- 高效C++学生成绩管理系统:教育技术+C++17编程+数据管理+教务自动化
- 搜索链接要广告分类系统 v2.0-yad20.rar
- 基于matlab开发的Tipping的相关向量机RVM的回归MATLAB程序,有英文注释,可以运行.rar
- 一个点击正反转程序实例,可实现案件电机正反转
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功