JCR1区局部强化优化器(PRO),原理详解,MATLAB代码免费获取

news2024/10/6 12:25:08

局部强化优化器(Partial Reinforcement Optimizer, PRO)代表了进化计算领域的一项创新突破,它是一种全新设计的进化优化算法。该算法的开发灵感来源于心理学中的进化学习和训练理念,特指为一个被称为局部强化效应(Partial Reinforcement Effect, PRE)的理论。该理论探讨了在面对不确定性条件下,如何通过间歇性的奖励机制来显著提升学习过程的效率与成果。PRO算法正是将这种心理学理论应用于算法设计之中,从而提高算法在多样化环境下的适应能力和寻优效率。该成果于2023年发表在计算机领域一区期刊Expert Systems with Applications上。

6f283835272f936eba31c513842fc2d9.png

PRE理论基于心理学中的学习/训练范式,其中学习者间歇地而不是连续地得到强化,以提高他们的知识。强化的时机和频率对反应的速度和强度有显著影响。下图说明了PRE理论中正强化和负强化的一个例子。当狗(学习者)受到铃铛的刺激而传递球(反应)时,狗将得到积极的加强并传递球。或者,狗会得到负强化。

5e88d143d28fcb8e76754ab2865322d3.png

1、算法原理

为了将PRE理论的规则和概念映射到PRO算法的组件,有必要将PRE理论建模为优化算法。考虑了以下假设:

学习者:学习者是一个人或动物,其行为需要使用PRE理论进行训练/改进,并且它被建模为解决方案。

行为:学习者的行为被认为是一个决策变量解决方案。换句话说,解决方案(学习器)是决策变量(行为)的向量,如下图所示。

925a4bbbf6569f2c7f8f0794b06b3411.png

总体:在PRO算法中,一组学习者形成一个总体。下图中的每一行代表一个解(学习者),每个元素Xdi代表一个决策变量(行为)。

cc5e61d73d977b66c8b080797827e3cd.png

适应度(目标函数)评估:使用用户定义的目标函数 对决策变量 计算每个学习者Xi的行为适应度。

时间(间隔):两个刺激、评估或强化阶段之间的迭代次数,它指定了学习者在搜索过程中的决策变量(行为),被认为是一个时间间隔。在提出的算法中,使用了评分机制,因此得分较高的行为在下一次迭代中得到加强的机会更高。

回应:主要目标是获得更多的回应。在本研究中,响应被定义为目标函数值的成功改进。因此,F(X′)< F(X),其中F(X′)和F(X)分别为刺激阶段结束后某一特定解的当前和先前目标函数值。

调度:调度的概念是指在不同的时间间隔内为数据结构建模时,需要如何以及何时加强行为。如下图所示,每个学习者都有一个特定的时间表。由于每个标量代表了特定学习者行为的分数/优先级,分数/优先级越高,下一次迭代中被选择的机会就越大。此外,将变间隔调度方案建模为动态机制,利用以下方程进行随机分析。

62ef0fa6e504b06027d3c6ef718d4e9a.png

式中,tau为时间因子,FEs为函数评价的次数,MaxFEs为函数评价的最大次数。其中,SR是选择率, 是基于调度选择的行为子集, λ是选择子集的大小,是行为(决策变量)的总数。Schedule *表示排序优先级的Schedule, Schedule *,是Schedule *中的 λth项。

刺激:任何试图刺激学习者的行为以引起反应的尝试都是通过应用操作来改变所提出的解决方案的决策变量来建模的。需要注意的是,任何操作都可以用来刺激(改变)学习者的行为(决策变量)。在PRO算法中,使用以下操作来生成新的解,如下式所示。

式中,SFi为激励因子, 为基于调度程序的第i个学习器所选择决策变量的归一化分数/优先级的平均值。

强化:为了概念化强化,我们使用以下机制来更新调度。然后应用正强化来增加特定行为的分数。学习者的目标函数作为刺激阶段改进后的响应,其数学表达式如下:

式中,RR为强化率, с表示第i个解(学习者)所选择的决策变量(行为)的优先级。

另一方面,当没有反应时,就会施加负强化。在这种情况下,学习者的目标函数在刺激阶段后减小,导致特定行为得分下降。在下一次迭代中选择得分较高的决策变量(行为)进行刺激和强化,如下式所示:

重新安排:这个概念指的是在训练期间为学习者应用新的计划的过程,当学习者的所有行为始终受到负强化时。在这种情况下,PRO利用计划的标准偏差(Std)作为度量来确定何时需要重新安排学习者的计划。这种机制是通过使用下式来实现。

式中,Std(Schedule)为第i个学习者的学习进度的标准差,LB和UB分别为下界和上界。U(0,1)和U(LB,UB)是指均匀分布在(0,1)和(LB,UB)之间的随机值。

PRO算法的伪代码如下图所示。

c516db7d1d895d17ebb1f4c5a8486139.png

PRO算法的流程框图如下图所示

9266ba3361c03410d0854abe67805404.png

2、结果展示

e6d55de7142565db2acb4240335ced35.png

8c4378fcdbddcc617deaaf9bbcac9093.png

72b6579557f1a16c7f8d050e94640672.png

1598f49b1ae1f23a33e34fd109a2de6c.png

ba317c7ffb17bbc2c5d16470684eaee9.png

3、MATLAB核心代码

% 局部强化优化器(PRO)
Initialization 
rand('state',sum(100*clock));
% --- Problem Definition ---
%Obj_Func = @ YourObjFunc;         %  Objective Function
fhd = str2func('cec17_func');
nVar = N;                          %  Number of Decision Variables
%LB =  LB .* ones(1,nVar);          %  Variables Lower Bound
%UB =  UB .* ones(1,nVar);          %  Variables Upper Bound
% --- PRO Parameters ---
RR = 0.7;                          %  Reinforcement Rate (RR)
%MaxFEs = MaxFEs;                  %  Maximum Number of Function Evaluations
nPop = pop_size;                   %  Population Size
FEs = 0;                           %  Function Evaluations counter
% --- Empty Structure for Individuals ---
empty_individual.Behaviors=[];
empty_individual.response=[];
empty_individual.Schedule=[];
%empty_individual.Fy=[];
%empty_individual.Gx=[];
% --- Initialize Population Array ---
pop = repmat(empty_individual, nPop, 1);
% --- Initialize Best Solution ---
BestSol.response = inf;
% --- Initialize Population --- 
for i=1:nPop
    pop(i).Behaviors = population(i).Position;
    pop(i).Schedule = unifrnd(0.9,1,1,N);
    pop(i).response =  population(i).Cost; %feval('cec14_func',pop(i).Behaviors',CostFunction)  - (CostFunction*100);
end
% --- Sort pop ---
[~,SorteIndx] = sort([pop.response]);
pop = pop(SorteIndx);
% --- Set the Best Solution ---
BestSol = pop(1);
% --- Initialize Best Cost Record ---
BestCosts = zeros(MaxFEs,1);
BestCosts(1) = BestSol.response;
[~, sortedIndx] = sort([pop.response]);
ResetZero = zeros(1,N);
%% --- PRO Main Loop ---
 while FEs < MaxFEs 
    for i=1:nPop  % For all Learners      
       tempBehav = pop(i);% empty_individual;      
       k = nPop;
       if i < nPop
         k = sortedIndx(randi([i+1 nPop]));
       end    
       %% --- Determine Behaviors of the ith learner based on Scheduler. -----------  
       % According to Eq.(1) & Eq.(2)
       Tau = (FEs/MaxFEs);                          %  Time parameter
       %Selection_rate = Tau^0.5; 
       Selection_rate = exp(-(1-Tau)); %******** 
       %Selection_rate = exp(-(Tau))^2;
       [~,Candid_Behavs] = sort(pop(i).Schedule(1:N),'descend');
       % --Select Landa number of Behaviors with highest priority in Schedule i.-- 
       Landa = ceil(N*rand*Selection_rate);
       Selected_behaviors = Candid_Behavs(1:Landa);%
       %% --- Stimulate the selected Behaviors of the ith learner to get response.---  
       % According to Eq.(3), Eq.(4), and Eq.(5)
       if rand <  0.5 %(0.1 + 0.9 * (1-Tau))
          Stimulation = ResetZero;
          Stimulation(Selected_behaviors) = ( BestSol.Behaviors(Selected_behaviors) - pop(i).Behaviors(Selected_behaviors));    
       else
          Stimulation = ResetZero;
          Stimulation(Selected_behaviors) = ( pop(i).Behaviors(Selected_behaviors) - pop(k).Behaviors(Selected_behaviors));            
       end
       % ---- Calculate Stimulation Factor (SF) ------
       %SF = rand * ( exp(-1 * mean( abs(BestSol.Behaviors - pop(i).Behaviors)/max(abs(pop(1).Behaviors - pop(nPop).Behaviors)))));
       %SF = rand * ( exp(-1 * mean( abs(BestSol.Behaviors(Selected_behaviors) - pop(i).Schedule(Selected_behaviors))/max(abs(pop(i).Schedule(Selected_behaviors) - pop(nPop).Schedule(Selected_behaviors))))));
       SF = Tau + rand * (mean((pop(i).Schedule(Selected_behaviors) )/max(abs(pop(i).Schedule)))); %(exp(-(1-FEs/MaxFEs))^2 ) ;
       tempBehav.Behaviors(Selected_behaviors) = pop(i).Behaviors(Selected_behaviors) + SF .* Stimulation(Selected_behaviors);    
       % ------------  Bound constraints control ------------------- 
       % 
       [~,underLB] = find(tempBehav.Behaviors < LB);
       [~,uperUB] = find(tempBehav.Behaviors > UB);
       if ~isempty(underLB)
         tempBehav.Behaviors(underLB) =  LB(underLB) + rand(1,size(underLB,2)).*((UB(underLB) -  LB(underLB))./1); 
       end
       if ~isempty(uperUB)
         tempBehav.Behaviors(uperUB) =  LB(uperUB) + rand(1,size(uperUB,2)).*((UB(uperUB) -  LB(uperUB))./1); 
       end
       % ------ Evaluate the ith learner Response -------------------
       %tempBehav.response = feval('cec14_func',tempBehav.Behaviors',ObjFunc_ID)  - (ObjFunc_ID*100);
       %tempBehav.response = feval(fhd,tempBehav.Behaviors',ObjFunc_ID); %CEC2017
       tempBehav.response = Sphere(tempBehav.Behaviors'); % Test Func
       FEs = FEs + 1;
       % ----- Apply Positive or Negative Reinforcement according to the response.
       % According to  Eq.(6)& Eq.(7)
       if tempBehav.response<pop(i).response
            % Positive Reinforcement 
            tempBehav.Schedule(Selected_behaviors) = pop(i).Schedule(Selected_behaviors) + pop(i).Schedule(Selected_behaviors) * (RR/2);           
            % accept new Solution
            pop(i) = tempBehav;
            % Update the best Solution
            if pop(i).response < BestSol.response
                BestSol = pop(i);  
            end
       else
               % Negative Reinforcement
               pop(i).Schedule(Selected_behaviors) = pop(i).Schedule(Selected_behaviors) - pop(i).Schedule(Selected_behaviors) * (RR);
       end
       % Store Record for Current Iteration
       BestCosts(FEs) = BestSol.response; 
       %% ------- Rescheduling --------------------------------------------------    
       if std(pop(i).Schedule(1:N))== 0
           pop(i).Schedule = unifrnd(0.9,1,1,N);
           pop(i).Behaviors = LB+rand(1,N).*(UB-LB);
           %pop(i).response = feval('cec14_func',pop(i).Behaviors',ObjFunc_ID)  - (ObjFunc_ID*100);
           %pop(i).response = feval(fhd,pop(i).Behaviors',ObjFunc_ID); %CEC2017
           pop(i).response = Sphere(pop(i).Behaviors'); % Test Func
           disp(['-------------------------------- The  Learner ' num2str(i) ' is Rescheduled ']);
       end
   end % End for nPop
   %% Sort pop
   [~,SorteIndx] = sort([pop.response]);
   pop = pop(SorteIndx);
   % --- Show Iteration Information ---
   disp(['Iteration ' num2str(FEs) ': Best Cost = ' num2str(BestCosts(FEs))  ]);
 end % End While
BestSolCost=BestSol.response
end % Function PRO_v1()

参考文献

[1]Taheri A, RahimiZadeh K, Beheshti A, et al. Partial reinforcement optimizer: An evolutionary optimization algorithm[J]. Expert Systems with Applications, 2024, 238: 122070.

完整代码获取

后台回复关键词:

TGDM899

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1595446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

特征匹配方法总结梳理

特征匹配在视觉定位、同时定位和映射(SLAM)、图像拼接等方面都有应用 Proj:202404 CMC-R(R.W.--Reference) 南京 河海大学 资助丰富Fundamental Research Funds of China for the Central Universities, Grant/Award Number: B230205048; Jiangsu Higher Education Reform …

day10 | 栈与队列 part-2 (Go) | 20 有效的括号、1047 删除字符串中的所有相邻重复项、150 逆波兰表达式求值

今日任务 20 有效的括号 (题目: . - 力扣&#xff08;LeetCode&#xff09;)1047 删除字符串中的所有相邻重复项 (题目: . - 力扣&#xff08;LeetCode&#xff09;)150 逆波兰表达式求值 (题目: . - 力扣&#xff08;LeetCode&#xff09;) 20 有效的括号 题目: . - 力扣&…

【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控件位置

往期回顾 【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客 【QT入门】Qt自定义控件与样式设计之qss的加载方式-CSDN博客 【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件-CSDN博客 【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控…

YOLOV5 + 双目相机实现三维测距(新版本)

文章目录 YOLOV5 双目相机实现三维测距&#xff08;新版本&#xff09;1. 项目流程2. 测距原理3. 操作步骤和代码解析4. 实时检测5. 训练6. 源码下载 YOLOV5 双目相机实现三维测距&#xff08;新版本&#xff09; 本文主要是对此篇文章做一些改进&#xff0c;以及解释读者在…

MySQL 实例employee表综合查询

目录 表关系图&#xff1a; 例题&#xff1a; 1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。 2.列出所有员工的姓名及其直接上级的姓名。 3.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。 4.列出部门名称和这些部门的员工信…

【进阶六】Python实现SDVRPTW常见求解算法——离散粒子群算法(DPSO)

基于python语言&#xff0c;采用经典离散粒子群算法&#xff08;DPSO&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. …

AI大模型探索之路-提升篇2:一文掌握AI大模型的核心-注意力机制

目录 前言 一、注意力机制简介 二、注意力机制的工作原理 三、注意力机制的变体 1、自注意力&#xff08;Self-Attention&#xff09; 2、双向注意力&#xff08;Bidirectional Attention&#xff09; 3、多头注意力&#xff08;Multi-Head Attention&#xff09; ​4、…

缺失msvcr110.dll要怎么处理?快捷的修复msvcr110.dll方法

当你在使用电脑进行工作或娱乐时&#xff0c;可能会突然遇到一个错误提示&#xff1a;“程序无法启动&#xff0c;因为电脑中缺失msvcr110.dll”。这样的情况不仅会打断你的活动&#xff0c;还可能带来一定程度的不便。面对这个在Windows操作系统中相对常见的问题&#xff0c;其…

执行npm命令一直出现sill idealTree buildDeps怎么办?

一、问题 今天在运行npm时候一直出项sill idealTree buildDeps问题 二、 解决 1、网上查了一下&#xff0c;有网友说先删除用户界面下的npmrc文件&#xff08;注意一定是用户C:\Users\{账户}\下的.npmrc文件下不是nodejs里面&#xff09;&#xff0c;进入到对应目录下&#x…

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念&#xff1a; 位&#xff08;Bit&#xff09; 计算机中最小的数据单位&#xff0c;一位有0、1两状态。Bit是计算机中最小…

【opencv】示例-stiching.cpp 图像拼接

#include "opencv2/imgcodecs.hpp" // 导入opencv图像编码功能库 #include "opencv2/highgui.hpp" // 导入opencv高层用户界面功能库 #include "opencv2/stitching.hpp" // 导入opencv图像拼接功能库#include <iostream> // 导入输入输出…

聚观早报 | 哪吒L上市定档;iPhone 16最新高清渲染图

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月10日消息 哪吒L上市定档 iPhone 16最新渲染图 华为太空表与问界M9联动 蔚来万里长城加电风景线正式贯通 Red…

传统图机器学习的特征工程-节点

传统图机器学习&#xff08;人工特征工程机器学习&#xff09; 结点&#xff0c;连接&#xff0c;子图都可以有特征 特征分类&#xff1a; 属性特征&#xff1a;本身存在的特征 连接特征&#xff1a;在图中和其他结点连接的特征 传统的机器学习模型&#xff1a; 特征工程&a…

车联网大数据与人工智能一体化:开启智慧出行新时代

随着物联网技术的快速发展&#xff0c;车联网已经成为了汽车行业的重要趋势之一。而在车联网的发展过程中&#xff0c;大数据和人工智能的应用也日益成为关键因素。本文将探讨如何将大数据与人工智能一体化应用于车联网&#xff0c;以实现智慧出行的目标。 尤其是近来国内的华为…

二叉树层序遍历(返回一个不定长二维数组)

力扣_二叉树的层序遍历 题目中要求我们返回一个二维数组 List是一个接口&#xff0c;List<List<Integer>>就代表&#xff1a; 在List这个类型的数组中&#xff0c;存储着类型为List<Integer>类型的元素&#xff0c;而List<Integer>又是一个存储着Int…

【Unity】Feature has expired(H0041)

【背景】 在一台很久不用的电脑上更新了个人License&#xff0c;并导入了云项目&#xff0c;打开时却报错&#xff1a; 【分析】 网上查说要删缓存等等&#xff0c;试过都不行。重装Hub也不行。 这种环境类型的原因很难从信息入手定位错误。 所以我自己检查项目上有什么问题…

【c 语言】函数前面的返回类型

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

电商技术揭秘二十四:无人仓储与自动化技术

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

【Web】WUSTCTF 2020 部分题解

目录 [WUSTCTF 2020]朴实无华 [WUSTCTF 2020]CV Maker [WUSTCTF 2020]颜值成绩查询 [WUSTCTF 2020]朴实无华 访问/robots.txt 访问/fAke_f1agggg.php 抓包看响应头看到/f14g.php 访问/f14g.php 简单的bypass&#xff0c;不解释了 payload: ?num2019e1&md50e2159620…

223 基于matlab的结构有限元分析

基于matlab的结构有限元分析。包括基于4节点四面体单元的空间块体分析、基于4节点四边形单元的矩形薄板分析、基于3节点三角形单元的矩形薄板分析、三梁平面框架结构的有限元分析、四杆桁架结构的有限元分析、基于8节点六面体单元的空间块体分析。每个程序都要相应的文档说明。…