【智能算法学习】JAYA算法
JAYA算法
Jaya算法是RAO等提出的一种元启发式算法,其基于持续改进的原理,将个体向优秀个体靠拢的同时不断远离差的个体,从而提高解的质量。Jaya算法通过一个方程式迭代进化获取新解,不像其他进化算法需要许多参数,该算法只需针对特定问题调整迭代过程的参数(如随机数),避免了因调整参数过多而使测试不易实施的问题。与其他元启发式算法相比,Jaya算法更容易理解和实现。
Xbj和Xwj分别表示种群中最优和最差解中第j维变量的值,若Xij’对应的目标函数f(xij)更优,则接受Xij’并且替换原解,否则继续保持原解。r1(Xbj-|Xij|)表示解个体向最优解靠拢的趋势-r2(Xwj-|Xij|)表示表示解个体远离最差解的趋势。
Jaya算法的基本步骤如下:
- Step 1:初始化种群和算法参数;
- Step 2:每次迭代过程中确定种群中的最优解和最差解;
- Step 3:根据位置更新公式生成新的解个体。若新解更优,则替换原解,否则保留原解;
- Step 4:重复步骤2和3,直到满足终止条件,并输出到目前为止找到的最优解。
JAYA代码(Matlab)
代码分为四个部分分别为:
- 问题描述
- 初始化种群
- 循环部分,更新位置
- 结果展示
一、下面代码表示了问题描述
%% 问题描述
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算法相关推荐
- 算法学习--排序算法--插入排序
算法学习--排序算法--插入排序 插入排序算法 代码实现 插入排序算法 插入排序(Insertion sort)是一种简单直观且稳定的排序算法.如果有一个已经有序的数据序列,要求在这个已经排好的数据序 ...
- [算法学习]模拟退火算法(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 ...
- php算法学习,php算法学习之动态规划
动态规划程序设计是对解最优化问题的一种途径.一种方法,最终问题的最优解可以通过前面子问题的最优解推导出来. 对于动态规划这个算法,自己学习的还不是很透彻,简单的总结自己学习的感受是: 动态规划思想中融 ...
- 算法学习之算法的引入
一.算法的起始 1.第一次尝试 如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a.b.c可能的组合? (可以考虑到百钱白鸡) 枚举法 # 注意是三重循环 ...
- 【C语言】算法学习·KMP算法
KMP算法(全称Knuth-Morris-Pratt字符串查找算法,由三位发明者的姓氏命名)是可以在文本串s中快速查找模式串p的一种算法. 要想知道KMP算法是如何减少字符串查找的时间复杂度的,我们不 ...
- 【C语言】算法学习·回溯算法
目录 一.全排列问题 二.N 皇后问题 三.最后总结 回溯算法基本框架 解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题: 1.路径:也就是已经做出的选择. 2.选择列表:也 ...
- C++算法学习(贪心算法)
贪心算法 1.目标 2.方法 3.例题 [122. 买卖股票的最佳时机 II](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-s ...
- C++算法学习(动态规划算法)
动态规划算法 1.目标 2.方法 3.过程 4.例题 (1)[力扣:5. 最长回文子串](https://leetcode-cn.com/problems/longest-palindromic-su ...
- C++算法学习(回溯算法)
回溯算法 1.目标 2.方法 3.具体思路 4.例题 (1)[力扣:10. 正则表达式匹配](https://leetcode-cn.com/problems/regular-expression-m ...
- 机器学习算法学习——RBF算法原理图解
1.隐含层(径向基层)算法 输入为列向量 R(看作R维向量空间内一点的坐标) 隐含层与之对应的是一个矩阵 W1 (看作S个向量空间的中心点坐标组合成的矩阵) 分别计算欧式距离得到||dist|| 与连 ...
最新文章
- 当前不会命中断点.还没有为该文档加载任何符号解决
- Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
- 全屏的三栏div+css布局示例
- 分享10个适合初学者学习的C开源项目代码
- c语言 从文件读入数组,C++ 将一个文件读入数组再读出数组的方法
- 学校计算机房 作文,第一次去机房作文
- Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class
- Asp.Net MVC及Web API添加身份验证及错误处理的过滤器
- python classmethod static_python classmethod和 staticmethod的心得
- C#基础概念二十五问[转]
- aop实现原理_Spring学习之AOP
- 小白交易第一站—50EX云合约交易平台
- FPGA | Vivado 查看最大工作频率(Fmax)
- HTML两张图片翻转,canvas实现图片镜像翻转的2种方式
- Qt5对Excel表格简单、高效处理方法
- POJ 2248 算进 P110 Addition Chains
- 【软考中级】多媒体应用设计师复习笔记第十章
- LATCH的产生过程
- 【学习笔记】pytorch迁移学习-猫狗分类实战
- 笔记本外接显示器桌面显示不同壁纸