JAYA算法

Jaya算法是RAO等提出的一种元启发式算法,其基于持续改进的原理,将个体向优秀个体靠拢的同时不断远离差的个体,从而提高解的质量。Jaya算法通过一个方程式迭代进化获取新解,不像其他进化算法需要许多参数,该算法只需针对特定问题调整迭代过程的参数(如随机数),避免了因调整参数过多而使测试不易实施的问题。与其他元启发式算法相比,Jaya算法更容易理解和实现。


Xbj和Xwj分别表示种群中最优和最差解中第j维变量的值,若Xij’对应的目标函数f(xij)更优,则接受Xij’并且替换原解,否则继续保持原解。r1(Xbj-|Xij|)表示解个体向最优解靠拢的趋势-r2(Xwj-|Xij|)表示表示解个体远离最差解的趋势。

Jaya算法的基本步骤如下:

  1. Step 1:初始化种群和算法参数;
  2. Step 2:每次迭代过程中确定种群中的最优解和最差解;
  3. Step 3:根据位置更新公式生成新的解个体。若新解更优,则替换原解,否则保留原解;
  4. Step 4:重复步骤2和3,直到满足终止条件,并输出到目前为止找到的最优解。

JAYA代码(Matlab)

代码分为四个部分分别为:

  1. 问题描述
  2. 初始化种群
  3. 循环部分,更新位置
  4. 结果展示

一、下面代码表示了问题描述

%% 问题描述
CostFunction = @(x)Sphere(x);     %目标函数,这里使用的函数是Sphere,可以自己更改
Varn = 10;                    %变量个数
VarMax = 100;                 %变量的上限
VarMin = -100;                %变量的上限
VarSize = [1,Varn];           %变量矩阵的大小

二、下面代码表示了初始化种群

%% 初始化种群
pop = 50;                  %初始化种群大小
IterMax = 100;              %最大迭代次数
x = zeros(pop,Varn);        %初始化种群的位置,刚开始都是0
xnew = zeros(pop,Varn);
xopt = zeros(1,Varn);       %初始化种群最优个体的位置,刚开始都是0
f = zeros(pop,1);           %初始化每个对应的x函数值,刚开始都是0
fnew = zeros(pop,1);        %初始化迭代后的粒子对应的x函数值,刚开始都是0
fopt = zeros(pop,1);        %初始化每个粒子历史最优的x的函数值,刚开始都是0% 产生和初始化粒子
for i=1:pop%按行更新,确定每个粒子的初始变量是在规定范围内x(i,:) =unifrnd(VarMin, VarMax, VarSize);
endfor i=1:popf(i) = CostFunction(x(i,:));%计算初始化变量对应的目标函数
end

三、下面代码表示了循环部分,更新位置

%% 更新粒子位置,循环部分
% iter = 1;
for iter=1: IterMax[row col] = size(x);[b,bindex] = min(f);             %在本次迭代中寻找最佳的函数值,并且找到其值和位置索引Best.position = x(bindex,:);     %利用索引可以找到每个维度对应的Best粒子[w,windex] = max(f);             %与上面同理,找到最差的函数值,找到每个维度对应的Worst粒子Worst.position = x(windex,:);%找到Best粒子和Worst粒子,在此基础上更新粒子的位置for i=1:rowfor j = 1:colxnew(i,j) = x(i,j)+rand*(Best.position(j)-abs(x(i,j)))-rand*(Worst.position(j)-abs(x(i,j)));endendfor i=1:row%新生成的粒子要在边界范围内,在最小范围内取最大了值,最大范围内取最小的值xnew(i,:) = max(xnew(i,:), VarMin);xnew(i,:) = min(xnew(i,:), VarMax);        fnew(i) = CostFunction(xnew(i,:));               %计算新的粒子的目标函数   end%对比新粒子目标函数与原来目标函数值的大小,优胜劣汰for i = 1:popif fnew(i,:) < f(i,:)x(i,:) = xnew(i,:);f(i) = fnew(i);             endend%迭代后的每个粒子情况更新[fopt(iter),ind] = min(f);xopt(iter,:)= x(ind,:);disp(['Iteration No. = ',num2str(iter), ',   Best Cost = ',num2str(min(f))]);%去掉冒号可以选择是否显示每次迭代信息end

四、下面代码表示了**结果展示 **

%% 结果表示
disp(['Optimum value = ',num2str(min(fopt),10)]) %输出最优结果

%绘制-迭代次数-目标值-图表
figure(1)
plot(fopt,‘linewid’,2)
xlabel(‘Itteration’)
ylabel(‘Best Cost’);
legend(‘JAYA’)
disp('运行结束 ’ )

五、**运行结果 **
我这里设置了100个种群个数,变量为10,迭代100次,使用基础的Shere函数作为测试函数。运行结果如下所示:

测试函数Sphere中的代码:

function z = Sphere(x)z = sum(x.^2);end

后面我会将上面用到的代码文件上传到平台,可以免费下载学习。

1.Jaya: A simple and new optimization algorithm for solving constrained and unconstrained optimization problems
下载地址http://growingscience.com/beta/ijiec/2072-jaya-a-simple-and-new-optimization-algorithm-for-solving-constrained-and-unconstrained-optimization-problems.html
2.基于离散Jaya算法的线缆生产调度方法-【林剑,李扬远,陈蒙蒙,干梦清,王凌武】

【智能算法学习】JAYA算法相关推荐

  1. 算法学习--排序算法--插入排序

    算法学习--排序算法--插入排序 插入排序算法 代码实现 插入排序算法 插入排序(Insertion sort)是一种简单直观且稳定的排序算法.如果有一个已经有序的数据序列,要求在这个已经排好的数据序 ...

  2. [算法学习]模拟退火算法(SA)、遗传算法(GA)、布谷鸟算法(CS)、人工蜂群算法(ABC)学习笔记---附MATLAB注释代码

    目录 1.模拟退火算法(Simulated Annealing,SA) 1.1 本质: 1.2 算法思想 1.3 SA流程图 1.4 模拟退火过程 1.5 SA解决TSP问题 1.6 SA改进方向 1 ...

  3. php算法学习,php算法学习之动态规划

    动态规划程序设计是对解最优化问题的一种途径.一种方法,最终问题的最优解可以通过前面子问题的最优解推导出来. 对于动态规划这个算法,自己学习的还不是很透彻,简单的总结自己学习的感受是: 动态规划思想中融 ...

  4. 算法学习之算法的引入

    一.算法的起始 1.第一次尝试 如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a.b.c可能的组合? (可以考虑到百钱白鸡)  枚举法 # 注意是三重循环 ...

  5. 【C语言】算法学习·KMP算法

    KMP算法(全称Knuth-Morris-Pratt字符串查找算法,由三位发明者的姓氏命名)是可以在文本串s中快速查找模式串p的一种算法. 要想知道KMP算法是如何减少字符串查找的时间复杂度的,我们不 ...

  6. 【C语言】算法学习·回溯算法

    目录 一.全排列问题 二.N 皇后问题 三.最后总结 回溯算法基本框架 解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题: 1.路径:也就是已经做出的选择. 2.选择列表:也 ...

  7. C++算法学习(贪心算法)

    贪心算法 1.目标 2.方法 3.例题 [122. 买卖股票的最佳时机 II](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-s ...

  8. C++算法学习(动态规划算法)

    动态规划算法 1.目标 2.方法 3.过程 4.例题 (1)[力扣:5. 最长回文子串](https://leetcode-cn.com/problems/longest-palindromic-su ...

  9. C++算法学习(回溯算法)

    回溯算法 1.目标 2.方法 3.具体思路 4.例题 (1)[力扣:10. 正则表达式匹配](https://leetcode-cn.com/problems/regular-expression-m ...

  10. 机器学习算法学习——RBF算法原理图解

    1.隐含层(径向基层)算法 输入为列向量 R(看作R维向量空间内一点的坐标) 隐含层与之对应的是一个矩阵 W1 (看作S个向量空间的中心点坐标组合成的矩阵) 分别计算欧式距离得到||dist|| 与连 ...

最新文章

  1. 当前不会命中断点.还没有为该文档加载任何符号解决
  2. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
  3. 全屏的三栏div+css布局示例
  4. 分享10个适合初学者学习的C开源项目代码
  5. c语言 从文件读入数组,C++ 将一个文件读入数组再读出数组的方法
  6. 学校计算机房 作文,第一次去机房作文
  7. Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class
  8. Asp.Net MVC及Web API添加身份验证及错误处理的过滤器
  9. python classmethod static_python classmethod和 staticmethod的心得
  10. C#基础概念二十五问[转]
  11. aop实现原理_Spring学习之AOP
  12. 小白交易第一站—50EX云合约交易平台
  13. FPGA | Vivado 查看最大工作频率(Fmax)
  14. HTML两张图片翻转,canvas实现图片镜像翻转的2种方式
  15. Qt5对Excel表格简单、高效处理方法
  16. POJ 2248 算进 P110 Addition Chains
  17. 【软考中级】多媒体应用设计师复习笔记第十章
  18. LATCH的产生过程
  19. 【学习笔记】pytorch迁移学习-猫狗分类实战
  20. 笔记本外接显示器桌面显示不同壁纸

热门文章

  1. 一些关于coffeescript
  2. JavaEE | 基本类型包装类
  3. 【安信可首款4G模组CA-01直连阿里物联网平台①】产品创建
  4. 科学研究设计六:有效性威胁
  5. QGIS中WKT转为可视化涂层
  6. pycharm中python的默认安装路径_PyCharm下载和安装详细步骤
  7. PyCharm下载及安装教程(Windows)
  8. python中的modify是什么意思_理解Python中的装饰器
  9. 系统临时文件的写和读:createTempFile和tempFileContent
  10. 学习并掌握结构化写作方法,提高写作能力 ——结构化写作学习笔记(1)