人工鱼群算法实现最佳路径选择源码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无约束连续函数优化的人工鱼群算法通用MATLAB源码(2008-11-15 09:49:29)标签:杂谈

题目:无约束连续函数优化的人工鱼群算法通用MATLAB源码

此源码是对人工鱼群算法的一种实现,用于无约束连续函数的优化求解,对于含有约束的情况,可以先使用罚函数等方法,把问题处理成无约束的模型,再使用本源码进行求解,本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页.cn/greensim)。

function [BESTX,BESTY,ALLX,ALLY]=FSOUCP(K,N,V,Delta,L,LB,UB)

%% Fish Swarm Optimization for Unconstrained Continuous Problem

%% FSOUCP.m

%% 无约束连续函数的人工鱼群优化算法

% GreenSim团队原创作品,转载请注明

% Email:

% GreenSim团队主页:.cn/greensim

% [color=red]欢迎访问GreenSim——算法仿真团队→

[url=.cn/greensim].cn/greensim[/url][/color]

%% 此函数实现人工鱼群算法,用于求解无约束连续函数最小化问题

%% 对于最大化问题,请先将其加负号转化为最小化问题

%% 输入参数列表

% K 迭代次数

% N 鱼群规模

% V 人工鱼的感知范围

% Delta 拥挤程度的判决门限,取值0~1之间

% L 觅食行为的试探次数

% LB 决策变量的下界,M×1的向量

% UB 决策变量的上界,M×1的向量

%% 输出参数列表

% BESTX K×1细胞结构,每一个元素是M×1向量,记录每一代的最优人工鱼的状态% BESTY K×1矩阵,记录每一代的最优人工鱼的评价函数值

% ALLX K×1细胞结构,每一个元素是M×N矩阵,记录每一代人工鱼的位置

% ALLY K×N矩阵,记录每一代人工鱼的评价函数值

%% 测试函数设置

% 测试函数用单独的子函数编写好,在子函数FIT.m中修改要调用的测试函数名即可

% 注意:决策变量的下界LB和上界UB,要与测试函数保持一致

%% 参考设置

%[BESTX,BESTY,ALLX,ALLY]=FSOUCP(50,30,0.5,0.3,20,LB,UB)

%% 第一步:

M=length(LB);%决策变量的个数

%蚁群位置初始化

X=zeros(M,N);

for i=1:M

x=unifrnd(LB(i),UB(i),1,N);

X(i,:)=x;

end

%输出变量初始化

ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值

BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值

k=1;%迭代计数器初始化

%% 第二步:迭代过程

while k<=K

NewX=zeros(M,N);

NewY=zeros(1,N);

for n=1:N

x=X(:,n);

Xnb=AFneighbour(n,X,V);

NN=size(Xnb,2);

if NN==0

xx=AFprey(x,V,L,LB,UB);

elseif NN>=3

xx=AFswarm(x,Xnb,N,Delta,V,L,LB,UB);

else

xx=AFprey(x,V,L,LB,UB);

end

NewX(:,n)=xx;

end

for n=1:N

NewY(n)=FIT(NewX(:,n));

end

X=NewX;

Y=NewY;

ALLX{k}=X;

ALLY(k,:)=Y;

minY=min(Y);

pos=find(Y==minY);

BESTX{k}=X(:,pos(1));

BESTY(k)=minY;

disp(k);

k=k+1;

end

%% 绘图

BESTY2=BESTY;

BESTX2=BESTX;

for k=1:K

TempY=BESTY(1:k);

minTempY=min(TempY);

posY=find(TempY==minTempY);

BESTY2(k)=minTempY;

BESTX2{k}=BESTX{posY(1)};

end

BESTY=BESTY2;

BESTX=BESTX2;

plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2) ylabel('函数值')

xlabel('迭代次数')

grid on

function Xnb=AFneighbour(s,X,V)

%% 找出人工鱼感知范围内的邻居

%% 输入参数列表

% s 当前人工鱼的编号

% X M×N矩阵,人工鱼群

% V 人工鱼的感知范围

%% 输出参数列表

% Xnb 第s个人工鱼的邻居

%%

[M,N]=size(X);

xs=X(:,s);

Xnb=zeros(M,0);

for n=1:N

if n~=s

相关文档
最新文档