matlab球落点的数学建模,MATLAB数学建模:智能优化算法-人工鱼群算法
MATLAB 数学建模: 人工鱼群算法
1. 基本原理
人工鱼群算法是一种受鱼群聚集规律而启发的优化算法. 在人工鱼群算法中, 我们假定鱼群的活动行为分为: 觅食行为, 群聚行为, 追随行为和随机行为.
觅食行为, 基于 “鱼倾向于游向食物最多的水域” 这一假设, 等价于在寻找最优解的过程中, 向相对较优的方向行进的迭代原则.
群聚行为, 借鉴了真实鱼群中, 落单的个体总倾向于回到群体的特性. 这一行为受三条子规则所限定:
分隔规则: 避免和临近伙伴之间过于拥挤
对准规则: 确保和临近伙伴的方向一致.
内聚规则: 尽量向临近伙伴的中心移动.
追尾行为, 确保了每一个人工鱼个体均会追逐临近的最活跃个体. 它等价于在优化过程中, 向位于当前点附近的, 极优化点前进的过程.
随机行为, 保证了人工鱼在 “目力所及范围内” 随机移动. 这样有助于在寻找最优解过程中跳出局部最优.
2. 程序设计
我们规定以下变量和符号:
n 目标空间维度
N 人工鱼数量
X 每条人工鱼状态 X = ( x 1 , x 2 , ⋯ , x n ) X = (x_1, x_2, \cdots, x_n)X=(x1,x2,⋯,xn), 各分量为需要寻找最优的变量
Y Y = f ( X ) Y = f(X)Y=f(X), 人工鱼所在位置的食物浓度, 即寻优过程中的适应度.
d 人工鱼个体间距离, d = ∣ ∣ x i − x j ∣ ∣ d = ||x_i - x_j||d=∣∣xi−xj∣∣
v 人工鱼感知范围
s 人工鱼移动步长
δ 拥挤度因子, 反映拥挤程度
t 人工鱼每次觅食最大尝试次数
2.1 觅食行为
觅食行为, 指人工鱼总是倾向于沿食物较多的方向游动的行为. 逻辑如下:
对于每一条人工鱼 X i X_iXi, 它按照规则
X j = X i + r a n d ( ) ⋅ v X_j = X_i + rand()\cdot vXj=Xi+rand()⋅v
随机选定一个新状态 X j X_jXj, 并比照新旧两个状态的适应度.
若 X j X_jXj 适应度高于 X i X_iXi, 则该鱼按照规则
X i ′ = X i + r a n d ( ) ⋅ s ⋅ X j − X i ∣ ∣ X j − X i ∣ ∣ X_i' = X_i + rand()\cdot s\cdot \frac{X_j - X_i}{||X_j - X_i||}Xi′=Xi+rand()⋅s⋅∣∣Xj−Xi∣∣Xj−Xi
向 X j X_jXj 方向前进一个步长.
若反复判断 t tt 次后仍然无法在附近找到优于现有状态 X i X_iXi 的新状态, 人工鱼将依据规则
X i ′ = X i + r a n d ( ) ⋅ s X_i' = X_i + rand()\cdot sXi′=Xi+rand()⋅s
随机移动一个步长.
2.2 群聚行为
真实世界中的鱼群在游弋过程中为了躲避敌害会自然地群聚. 逻辑如下:
对于每一条人工鱼 X i X_iXi, 搜索其视野内
d i j ⩽ v d_{ij}\leqslant vdij⩽v
的伙伴并统计其数量, 记为 n f n_fnf, 并且确定其周边伙伴的中间位置 X c X_cXc.
判断伙伴所处的中心位置状态 Y c n f \frac{Y_c}{n_f}nfYc. 若状态较优且不太拥挤,即
Y c n f < δ Y i \frac{Y_c}{n_f}nfYc
则向该中心位置移动一个步长, 否则将执行觅食行为.
function [x_swarm, x_swarm_fitness] = swarm(x,i,N,v,f,delta,t,d,ub,lb,s)
%% Compute fitness rate under the circunstance of SWARMING
nf_swarm = 0;
Xc = 0;
label_swarm = 0; % The sign of swarming happened or not
% Fix the Position of the center, compute the number of companions
for j = 1:N
if norm(x(j,:) - x(i,:)) < v
nf_swarm = nf_swarm + 1; % COunt the number of companions
Xc = Xc + x(j,:); % Add up the number of Sakanas
end
end
Xc = Xc - x(i,:); % Delete myself
nf_swarm = nf_swarm - 1;
Xc = Xc / nf_swarm;
% Judge the center is narrow or not
if (f(Xc)/nf_swarm < delta*f(x(i,:))) && (f(Xc) < f(x(i,:)))
x_swarm = x(i,:) + rand*s.*(Xc - x(i,:)) ./ norm(Xc - x(i,:));
%Bound processing
ub_flag = x_swarm > ub;
lb_flag = x_swarm < lb;
x_swarm = (x_swarm .* (~(ub_flag + lb_flag))) + ub .* ub_flag + lb .* lb_flag;
x_swarm_fitness = f(x_swarm);
else
% PREYING
label_prey = 0; % A sign of whether preying will find a better state than current state
for j = 1:t
%Find a state randomly
x_prey_rand = x(i,:) + v .* (-1 + 2 .* rand(1,d));
ub_flag2 = x_prey_rand > ub;
lb_flag2 = x_prey_rand < lb;
x_prey_rand = (x_prey_rand .* (~(ub_flag2 + lb_flag2))) + ub .* ub_flag2 + lb .* lb_flag2;
%judgement: better, or not?
if f(x(i,:)) > f(x_prey_rand)
x_swarm = x(i,:) + rand*s .* (x_prey_rand - x(i,:)) ./ norm(x_prey_rand - x(i,:));
ub_flag2 = x_swarm > ub;
lb_flag2 = x_swarm < lb;
x_swarm = (x_swarm .* (~(ub_flag2 + lb_flag2))) + ub .* ub_flag2 + lb .* lb_flag2;
x_swarm_fitness = f(x_swarm);
label_prey = 1;
break;
end
end
% Acting randomly
if label_prey == 0
x_swarm = x(i,:) + s * (-1 + 2*rand(1,d));
ub_flag2 = x_swarm > ub;
lb_flag2 = x_swarm < lb;
x_swarm = (x_swarm .* (~(ub_flag2 + lb_flag2))) + ub .* ub_flag2 + lb .* lb_flag2;
x_swarm_fitness = f(x_swarm);
end
end
end
2.3 追尾行为
执行追尾过程时, 人工鱼将向其视野内适应度最高的个体移动. 逻辑如下:
X i X_iXi 搜索其视野内适应度最高的个体, 记为 X j X_jXj, 同时对目标个体 X j X_jXj 视野内所有个体的数量计数 n f n_fnf.
判断目标个体位置状态 Y j n f \frac{Y_j}{n_f}nfYj. 若该位置状态较优且不太拥挤, 则 X i X_iXi 向目标 X j X_jXj 移动一个步长, 否则执行觅食行为.
function [x_follow, x_follow_fitness] = follow(x,i,N,v,f,delta,t,d,ub,lb,s)
fitness_follow = inf;
label_follow = 0; % A Sign marking following has happened or not
% Search the *best* individual in sight
for j = 1:N
if (norm(x(j,:) - x(i,:)) < v) && (f(x(j,:)) < fitness_follow)
best_pos = x(j,:);
fitness_follow = f(x(j,:));
end
end
%Search The Number Of Companions In Sight
nf_follow = 0;
for j = 1:N
if norm(x(j,:) - best_pos) < v
nf_follow = nf_follow + 1;
end
end
nf_follow = nf_follow - 1; % Delete myself
% Judge: The Center Is Narrow or not?
if (fitness_follow/nf_follow)ub;
lb_flag2 = x_follow < lb;
x_follow = (x_follow .* (~(ub_flag2 + lb_flag2))) + ub .* ub_flag2 + lb .* lb_flag2;
label_follow = 1;
x_follow_fitness = f(x_follow);
else
% PREYING
label_prey = 0; % A sign of whether preying will find a better state than current state
for j = 1:t
%Find a state randomly
x_prey_rand = x(i,:) + v .* (-1 + 2 .* rand(1,d));
ub_flag2 = x_prey_rand > ub;
lb_flag2 = x_prey_rand < lb;
x_prey_rand = (x_prey_rand .* (~(ub_flag2 + lb_flag2))) + ub .* ub_flag2 + lb .* lb_flag2;
%judgement: better, or not?
if f(x(i,:)) > f(x_prey_rand)
x_follow = x(i,:) + rand*s .* (x_prey_rand - x(i,:)) ./ norm(x_prey_rand - x(i,:));
ub_flag2 = x_follow > ub;
lb_flag2 = x_follow < lb;
x_follow = (x_follow .* (~(ub_flag2 + lb_flag2))) + ub .* ub_flag2 + lb .* lb_flag2;
x_follow_fitness = f(x_follow);
label_prey = 1;
break;
end
end
%random behaviour
if label_prey == 0
x_follow = x(i,:) + s .* (-1 + 2*rand(1,d));
ub_flag2 = x_follow > ub;
lb_flag2 = x_follow < lb;
x_follow = (x_follow .* (~(ub_flag2 + lb_flag2))) + ub .* ub_flag2 + lb .* lb_flag2;
x_follow_fitness = f(x_follow);
end
end
2.4 随机行为
在上文所提到的 “觅食行为” 的最后一种判断情况中, 人工鱼将会执行的行为就是随机行为.
3. 代码实现
附主函数代码如下:
clc; clear all;
%% Define variables
v = 25; %Perception Distance
s = 3; %Maximum Step Size
N = 30; %The Number Of Artificial Sakana
d = 10; %Current Dimension
t = 50; %Maximum Iteration Time
delta = 27; %Factor of Congestion
%% Construct a function for testing
f = @(x) sum(3*x.^4);
ub = 100; %Upper Limit Of Boundrary
lb = -100; %Lower Limit Of Boundrary
df = []; %Store Target Function value of 50 states
Iteration = 1; %Initialize Iteration Rate
Max_iteration = 500; %Maximum Iteration Rate
%% Initialize Artificial Sakana Group
x = lb + rand(N,d).*(ub - lb);
%% Compute fitness rate of 10 initial state
for i = 1:N
fitness_sakana(i) = f(x(i,:));
end
%% Define Best Fitness of Initial State
[best_fitness,I] = min(fitness_sakana);
best_x = x(I); %Best Artificial Sakana At Initial State
while Iteration <= Max_iteration
for i = 1:N
%%Swarm
[x_swarm, x_swarm_fitness] = swarm(x,i,N,v,f,delta,t,d,ub,lb,s);
%%Follow
[x_follow, x_follow_fitness] = follow(x,i,N,v,f,delta,t,d,ub,lb,s);
%%Judgement
if x_follow_fitness < x_swarm_fitness
x(i,:) = x_follow;
else
x(i,:) = x_swarm;
end
end
%% Update Information In Time
for i = 1:N
if (f(x(i,:)) < best_fitness)
best_fitness = f(x(i,:));
best_x = x(i,:);
end
end
Convergence_curve(Iteration) = best_fitness;
Iteration = Iteration + 1;
%% Display Iteration Time And Current Best Fit Rate
if mod(Iteration, 25) == 0
display(['Iteration times: ',num2str(Iteration),'BestFitRate: ',num2str(best_fitness)]);
display(['BestArtificialSakana: ', num2str(best_x)]);
end
end
figure('Position', [284 214 660 290])
subplot(1,2,1);
x = -100:1:100;
y = x;
L = length(x);
for i = 1:L
for j = 1:L
F(i,j) = (3*x(i) .^4) + (3*y(j) .^4);
end
end
surfc(x,y,F,'LineStyle', 'none');
title('Test Function')
xlabel('x_1');
ylabel('y_1');
zlabel(['sum','(x_1,x_2)'])
grid on
subplot(1,2,2);
semilogy(Convergence_curve, 'Color','r')
title('Convergence Curve')
xlabel('Iteration');
ylabel('Best Fitness');
axis tight
grid on
box on
matlab球落点的数学建模,MATLAB数学建模:智能优化算法-人工鱼群算法相关推荐
- matlab书籍(数学建模,信号处理,智能优化,统计分析)
matlab相关的书籍资料,包括基础入门的学习,数学建模,信号处理,智能优化,统计分析等等,部分书籍有matlab源码,需要的朋友可以看看. matlab入门资料分享及学习网站推荐 - 知乎最近由于做 ...
- 【AFSA TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】
⛄一. TSP简介 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须 ...
- 【AFSA TSP】基于matlab人工鱼群算法求解旅行商问题【含Matlab源码 422期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab人工鱼群算法求解旅行商问题[含Matlab源码 422期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...
- MATLAB实战系列(十二)-如何用人工鱼群算法解决带时间窗车辆路径(CVRP)问题(附MATLAB代码)
前言: 本文大体的思路是先对人工鱼进行编码,然后采用人工鱼群算法求解TSP问题中的觅食.聚群.追尾和随机行为对人工鱼群进行更新. 但是亟需需要解决的问题是:对于CVRP问题,如何对人工鱼进行编码.如果 ...
- matlab实战系列之人工鱼群算法求解TSP问题原理解析(下篇源码解析)
从算法的名字中可以看出该算法是群体智能优化算法中的一种,人工鱼群算法通过模拟鱼群的觅食.聚群.追尾.随机等行为在搜索域中进行寻优. 人工鱼群算法有三个比较重要的概念:视野范围.k-距离邻域.多条鱼的中 ...
- pm模型matlab算法,18基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码...
基于遗传算法(粒子群算法.人工鱼群算法等)的投影寻踪模型 MATLAB源代码 投影寻踪是一种处理多因素复杂问题的统计方法,其基本思路是将高维数据向低维空间进行投影,通过低维投影数据的散布结构来研究高维 ...
- 【BP数据预测】基于matlab人工鱼群算法优化BP神经网络数据预测【含Matlab源码 523期】
一.人工鱼群算法简介 1 觅食行为 指鱼循着食物多的方向游动的一种行为,人工鱼X i X_iXi在其视野内随机选择一个状态X j X_jXj,分别计算它们的目标函数值进行比较,如果发现Y j ...
- 【预测模型】基于人工鱼群算法优化BP神经网络实现数据预测matlab源码
1 算法介绍 1.1 BP神经网络 1. 反向传播算法应用领域 反向传播算法应用较为广泛,从字面意思理解,与前向传播相互对应.在简单的神经网络中,反向传播算法,可以理解为最优化损失函数过程,求解每个参 ...
- 数学建模——多目标规划模型(智能优化算法NSGA-II)
摘要 本篇笔记对数学建模中常见的多目标规划问题提供了解法:在建立传统的多目标规划的常用模型的基础上,使用智能优化算法对多目标规划问题进行求解,通过Pareto Front直观展现非劣解的分布情况,以解 ...
最新文章
- LVM逻辑卷轴管理和磁盘配额实验
- 8086的两种工作模式_Lora自组网网关的两种工作模式
- 趣味编程:C#中Specification模式的实现
- go程序的跨平台编译
- Codeforces Round #653 (Div. 3)(A, B, C, D, E1详解)
- RBAC(基于角色的权限访问控制)
- 华为荣耀20和x10比较_荣耀X10和华为畅享20plus,到底哪个更值得入手?
- ARP欺骗报文是这个样子的
- Page4:线性系统的运动求解以及脉冲响应矩阵与传递函数的关系[Linear System Theory]...
- 2021 年电工杯 B 题
- latex安装教程以及入门
- 背景建模之codebook算法
- js调用一次函数,中间增加一个内容
- 四级词汇4000快速记忆
- 教你免费将手机里的PDF转Word还能同步到电脑
- CTFshow击剑杯osint——人家想玩嘛,人有点多超详细解法
- 不良资产证券化中信用评级国外发展史
- catboost 的实例应用附带特征重要度打印
- 年度大戏《“跨界”的诱惑》主演:头部车企、手机巨头
- 网络编程基础 - m