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代码的更多相关文章

  1. 人工水母搜索算法--JS

    1. 人工水母算法原理背景 水母生活在世界上不同深度和温度的水中.它们酷似钟状,一些水母的直径小于1cm,然有些水母直径则非常大.它们有各种各样的颜色.大小和形状.大多数水母偏好海洋环境.它们进食的方 ...

  2. 如何加速MATLAB代码运行

    学习笔记 V1.0 2015/4/17 如何加速MATLAB代码运行 概述 本文源于LDPCC的MATLAB代码,即<CCSDS标准的LDPC编译码仿真>.由于代码的问题,在信息位长度很长 ...

  3. 多分类问题中,实现不同分类区域颜色填充的MATLAB代码(demo:Random Forest)

    之前建立了一个SVM-based Ordinal regression模型,一种特殊的多分类模型,就想通过可视化的方式展示模型分类的效果,对各个分类区域用不同颜色表示.可是,也看了很多代码,但基本都是 ...

  4. 卷积相关公式的matlab代码

    取半径=3 用matlab代码实现上式公式: length=3;for Ki = 1:length for Kj = 1:length for Kk = 1:length Ksigma(Ki,Kj,K ...

  5. JAVA调用matlab代码

    做实验一直用的matlab代码,需要嵌入到java项目中,matlab代码拼拼凑凑不是很了解,投机取巧采用java调用matlab的方式解决. 1.    matlab版本:matlabR2014a ...

  6. 调试和运行matlab代码(源程序)的技巧和教程

    转载请标明出处:专注matlab代码下载的网站http://www.downma.com/ 本文主要给大家分享使用matlab编写代码,完成课程设计.毕业设计或者研究项目时,matlab调试程序的技巧 ...

  7. 直方图均衡化与Matlab代码实现

    昨天说了,今天要好好的来解释说明一下直方图均衡化.并且通过不调用histeq函数来实现直方图的均衡化. 一.直方图均衡化概述 直方图均衡化(Histogram Equalization) 又称直方图平 ...

  8. 将labelme 生成的.json文件进行可视化的代码+label.png 对比度处理的matlab代码

    labelme_to_dataset 指令的代码实现: show.py文件 #!E:\Anaconda3\python.exe import argparse import json import o ...

  9. SVM实例及Matlab代码

    ******************************************************** ***数据集下载地址 :http://pan.baidu.com/s/1geb8CQf ...

随机推荐

  1. [atAGC052D]Equal LIS

    令$f_{i}$表示以$i$为结尾的最长上升子序列,显然可以快速预处理 令$L=\max_{i=1}^{n}f_{i}$,当$L$为偶数,考虑如下构造-- 将所有$f_{i}\le \frac{L}{ ...

  2. [noi707]LP

    (以下用$Sa=\sum_{j=1}^{i}xi\cdot ai$,Sb和Sc同理)令f[i][x]表示前i个数,$Sa\le x\le Sb$时最小的Sc考虑第i个数是否选择,可以得到递推式$f[i ...

  3. Java设计模式之(六)——桥接模式

    1.什么是桥接模式? Decouple an abstraction from its implementation so that the two can vary independently. 桥 ...

  4. Vulnhub-Empire: Breakout题解

    Vulnhub-Empire: Breakout题解 这是Empire系列的靶机Breakout,地址:Vulnhub-EMPIRE: BREAKOUT 目标扫描 使用arp-scan 命令识别靶机I ...

  5. Oracle-distinct()用法、count(distinct( 字段A || 字段B))是什么意思?distinct多个字段

    0.distinct用法 在oracle中distinct的使用主要是在查询中去除重复出现的数据 直接在字段前加distinct关键字即可,如:select distinct 名字 from tabl ...

  6. EXCEL excel中运用ctrl+D、ctrl+enter、ctrl+E批量填充数据

    在excel中,利用鼠标拖动可以快速向下或者向右填充序列或者复制单元格.但是利用快捷键也可以实现多种填充方式,本文就为大家介绍一些ctrl系列快捷键的填充,一起来看看吧. 封面tu 一,ctrl+D/ ...

  7. gcc 的编译流程 和gdb的调试方法

    GCC的编译流程分为四个步骤: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 可以看的出来文件大小 gdb 调试 gdb - ...

  8. 脱离Editor、VS等IDE如何编译UE4工程

    在Windows平台下,我们从.uproject文件生成VS解决方案.sln文件 .uproject文件用于打开Editor .sln文件用于打开VS工程 对于有增加C++代码的工程,Editor中和 ...

  9. Go 性能提升tips--边界检查

    1. 什么是边界检查? 边界检查,英文名 Bounds Check Elimination,简称为 BCE.它是 Go 语言中防止数组.切片越界而导致内存不安全的检查手段.如果检查下标已经越界了,就会 ...

  10. jsp的动态包含和静态包含

    jsp的动态包含和静态包含 例如:提取一个公共的页面(top.jsp)到/WEB-INF/jsp/common/目录下 动态包含: 被包含的页面也会独立编译,生成字节码文件,一般包含页面信息频繁变化的 ...