人工水母搜索算法—matlab代码
clc
clear
foj = @ Sphere;
Lb = -100; % 搜索空间下界
Ub = 100; % 搜索空间上界 N_iter = 1000; % 最大迭代次数
n_pop = 50; % 种群个数
d = 10; % 种群维度
beta = 3;
gamma = 0.1;
Z = zeros(n_pop, d); % 随机生成一个d维向量
Z(1, :) = rand(1, d); % 利用logistic生成n_pop个向量
for i=2:n_pop
Z(i,:) = 4.0*Z(i-1,:).*(1-Z(i-1,:));
end % 将z的各个分量载波到对应变量的取值区间
pop = zeros(n_pop, d);
fitness = zeros(n_pop, 1);
for i=1:n_pop
pop(i,:) = Lb + (Ub - Lb)*Z(i,:);
fitness(i) = foj(pop(i,:));
end
mu = mean(pop, 1);
figure
scatter(pop(:,1), pop(:,2), 'r*');
hold on
scatter(mu(:,1), mu(:,2),'ko');
box on
[bestScore, loc] = min(fitness);
bestPop = pop(loc, :); % 当前种群中食物数目最多的位置
S = pop; % S是更新后的种群
fmin = zeros(N_iter,1);
for t=1:N_iter
for i=1:n_pop
c = abs((1-t/N_iter)*(2*rand-1));
if c>=0.5
% 洋流位置更新公式
trend = bestPop - beta*rand*mu; % 洋流的方向,即论文中的公式.9
S(i,:) = pop(i,:) + rand(1,d).*trend; % 水母位置更新,即论文中的公式.11
else
% 种群内部运动
if rand>(1-c)
S(i,:) = pop(i,:) + gamma*rand(1,d).*(Ub - Lb); % 被动运动,即论文公式.12
else
JK = randperm(n_pop);
if foj(pop(JK(1)))>=foj(pop(JK(2)))
Direction = pop(JK(2),:) - pop(JK(1),:);
else
Direction = pop(JK(1),:) - pop(JK(2),:);
end
Step = rand(1, d).*Direction;
S(i,:) = pop(i,:) + Step; % 主动运动,论文公式.16
end
end
% 检查边界
S(i,:) = simpleBound(S(i,:), Lb, Ub);
Fnew = foj(S(i,:));
% 判断是否更新相应位置和适应度值
if Fnew<fitness(i)
fitness(i) = Fnew;
pop(i,:) = S(i,:);
end % 判断是否更新最优值
if Fnew<bestScore
bestScore = Fnew;
bestPop = S(i,:);
end
end
fmin(t) = bestScore;
% 命令窗口输出
disp(['Iteration ' num2str(t) ': Best Cost = ' num2str(bestScore)]);
% disp(['Bestpop ' num2str(bestPop)]);
end
figure
semilogy(fmin, 'r-.')
function x=simpleBound(x,Lb,Ub)
% 函数名称:越界处理函数
% param x:水母
% param Lb:变量下界
% param Ub:变量上界
d = length(x);
for i=1:d
if x(i) > Ub
x(i) = (x(d) - Ub) + Lb;
elseif x(i) < Lb
x(i) = (x(d) - Lb) + Ub;
end
end
end
function [y] = Sphere(xx)
d = length(xx);
sum = 0;
for ii = 1:d
xi = xx(ii);
sum = sum + xi^2;
end
y = sum;
end
人工水母搜索算法—matlab代码的更多相关文章
- 人工水母搜索算法--JS
1. 人工水母算法原理背景 水母生活在世界上不同深度和温度的水中.它们酷似钟状,一些水母的直径小于1cm,然有些水母直径则非常大.它们有各种各样的颜色.大小和形状.大多数水母偏好海洋环境.它们进食的方 ...
- 如何加速MATLAB代码运行
学习笔记 V1.0 2015/4/17 如何加速MATLAB代码运行 概述 本文源于LDPCC的MATLAB代码,即<CCSDS标准的LDPC编译码仿真>.由于代码的问题,在信息位长度很长 ...
- 多分类问题中,实现不同分类区域颜色填充的MATLAB代码(demo:Random Forest)
之前建立了一个SVM-based Ordinal regression模型,一种特殊的多分类模型,就想通过可视化的方式展示模型分类的效果,对各个分类区域用不同颜色表示.可是,也看了很多代码,但基本都是 ...
- 卷积相关公式的matlab代码
取半径=3 用matlab代码实现上式公式: length=3;for Ki = 1:length for Kj = 1:length for Kk = 1:length Ksigma(Ki,Kj,K ...
- JAVA调用matlab代码
做实验一直用的matlab代码,需要嵌入到java项目中,matlab代码拼拼凑凑不是很了解,投机取巧采用java调用matlab的方式解决. 1. matlab版本:matlabR2014a ...
- 调试和运行matlab代码(源程序)的技巧和教程
转载请标明出处:专注matlab代码下载的网站http://www.downma.com/ 本文主要给大家分享使用matlab编写代码,完成课程设计.毕业设计或者研究项目时,matlab调试程序的技巧 ...
- 直方图均衡化与Matlab代码实现
昨天说了,今天要好好的来解释说明一下直方图均衡化.并且通过不调用histeq函数来实现直方图的均衡化. 一.直方图均衡化概述 直方图均衡化(Histogram Equalization) 又称直方图平 ...
- 将labelme 生成的.json文件进行可视化的代码+label.png 对比度处理的matlab代码
labelme_to_dataset 指令的代码实现: show.py文件 #!E:\Anaconda3\python.exe import argparse import json import o ...
- SVM实例及Matlab代码
******************************************************** ***数据集下载地址 :http://pan.baidu.com/s/1geb8CQf ...
随机推荐
- Maven 依赖调解源码解析(一):开篇
本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第一篇,主要做个开头介绍.并为后续的实验做一些准备.系列文章总目录参见:https://www.cnblogs.com/xia ...
- [loj2470]有向图
参考ExtremeSpanningTrees,考虑优化整体二分时求$g_{i}\in \{w_{mid},w_{mid+1}\}$的最优解 对于$m=n-1$的问题,不需要去网络流,可以直接树形dp ...
- [atARC098F]Donation
贪心,一定在最后一次经过某节点时付出$b_{u}$,条件是付出后$W\ge \max(a_{i}-b_{i},0)$(同时也可以仅考虑这个限制,因为$W$在过程中不会增大) 假设"最后一次经 ...
- gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
前言 Excel功能强大,应用广泛.随着web应用的兴起和完善,用户的要求也越来越高.很多Excel的功能都搬到了sass里面.恨不得给他们做个Excel出来...程序员太难了... 去年我遇到了 ...
- C# Pechkin初始化一次后被锁住的问题
Pechkin.dll可用于pdf的生成,常规用法网上都有介绍:https://www.cnblogs.com/felixnet/p/5143934.html 但是当在一个页面上执行过一次之后,再次就 ...
- VS调用别人的COM组件的问题
调用第三方的COM组件,记得要先在管理员cmd执行:regsvr32 xxxx.dll 没执行之前运行 HRESULT hr = pComm.CreateInstance("xxxx.Com ...
- RSA,DSA,ECDSA,EdDSA和Ed25519的区别
RSA,DSA,ECDSA,EdDSA和Ed25519的区别 用过ssh的朋友都知道,ssh key的类型有很多种,比如dsa.rsa. ecdsa.ed25519等,那这么多种类型,我们要如何选择呢 ...
- Thinkphp5.1自动加载机制
Thinkphp5.1自动加载机制 自动加载机制 注册自动加载 引入静态自动加载映射文件,autoload_static.php 根据首字母前缀将不同的加载类归类-$prefixLengthsPsr4 ...
- getdelim函数
利用getdelim函数分割读取字段,将文件制表符替换为空格符 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main( ...
- 巩固javaweb的第二十七天
巩固内容 正则表达式: 5. 指定字符串的开始和结尾 正则表达式中字符串的开始和结束符如表 2.6 所示. 表 2.6 开 始 和 结 尾 字符 作 用 ^ 指定以某个字符串开始 $ 指定以某个字符串 ...