基于动态径向基函数(DRBF)代理模型的优化策略

在工程计算中,我们经常遇到需要求解优化问题,尤其在现在十分有前景的机器学习领域,如何快速、高效的求解优化问题,成为机器学习算法是否高效、准确的必要条件。

运用代理模型求解优化问题是优化领域的一个重要思想,该思想是将一个复杂的函数通过采集特征点构造一个相对简单的新的函数,我们称之为代理模型(通常分为插值型与拟合型),再对代理模型进行优化求得最优解。由于该代理的模型只能一定程度上代表真实模型,它到最优解并不能直接代表原目标函数的最优解,所以需要对代理模型进行更新,通常是以一定的判据来重新采点,重新构造代理模型,直到满足收敛条件,便停止对代理模型的更新,所得的最优解即视为原函数的最优解。

本文对采点、代理模型以及代理模型更新策略仅做了简要的介绍,详细内容参见基于计算试验设计与代理模型的飞行器近似优化策略探讨

在众多代理模型中,笔者首先尝试复现的是一种相对简单的代理模型——径向基函数,题中动态一词体现在更新代理模型时,新的采样区间是不断变化的,具体的做法是,以本次求解的最优点为中心,将上一次最优解区间的尺寸同比例缩小为原来的1/ns,在这样的新矩形内重新采集样本点,再以此样本点与原样本点一起构造新的代理模型。

具体的做法参见基于动态径向基函数代理模型的优化策略,在该篇论文中,更新采样区间时所选的中心点为上一次的最优解处,但这样的话存在第一次循环无法调用第零次(因为没有初始化)的问题,在此提供两种思路,一种是进行初始化,如采取初始寻优区间的中心为初始最优解位置;另一种是改为以当前循环的最优解为中心构造采样区间。笔者选择了第二种方法,因为初始最优解的选取在没有先验知识的情况下随意选取似乎有失严谨。同时,龙腾老师也建议笔者采用后一种方法。感谢龙腾老师与李学长、屁屁给予笔者复现时的帮助。

程序是以SC函数(Six-hump camelback function)为目标函数进行代理模型求解的。在运行时有时会遇到矩阵奇异不能计算、并未收敛到最优解便结束循环的情况。出现该情况,一是该算法本身具有缺陷,采样区间仅缩小不扩大会导致4-5次循环后区间缩至很小,这样在构造径向基函数代理模型时要进行矩阵求逆运算时便会遇到矩阵奇异,从而不能求得最优解。这种情况,在当前算法下若想优化,应该适当减小每次迭代中区间的压缩量(即减小论文中的ns值),而对于未寻找到最优解便跳出循环,则是因为收敛条件还不够严格,课修改代码中Is_convergence函数的epsilon值。

下面是matlab代码实现,该SC函数的最优解值应该为-1.0316。

main函数

%% clear data
clc;
clear;
%% initial settings
ga_opts = gaoptimset('Display','off','PopulationSize',30);
nv = 2;
ns = (nv + 1)*(nv + 2)/2;
ns = 5;
lb = [-2 -2];
ub = [2 2];
lbc = lb;
ubc = ub;
c = 4;
count = 0;
bound = ones(2,2);
%% run the first time
X = chooseX(lb,ub,ns,nv);
Y = SC_function(X);
%% forloop
for k = 1:9991newfunction = @(x)(invA(X,c)*Y)'*phy2(x,X,c);%construct newfunction[xval,fval,exitflag,output]=ga(newfunction,nv,[],[],[],[],lb,ub,[],ga_opts);count = count + output.funccount;Y_star(k) = SC_function(xval);X_star(k,:) = xval;if k == 1newbound = shrinkspace(X_star(k,:),lbc,ubc,ns);lbc = newbound(1,:);ubc = newbound(2,:);bound = newbound;newX = chooseX(newbound(1,:),newbound(2,:),ns,nv);X = [X;newX];Y = [Y;SC_function(newX)];continue;endif Is_convergence(Y_star(k),Y_star(k-1)) == 1;break;endnewbound = shrinkspace(X_star(k,:),lbc,ubc,ns);lbc = newbound(1,:);ubc = newbound(2,:);bound = [bound;newbound];newX = chooseX(newbound(1,:),newbound(2,:),ns,nv);X = [X;newX];Y = [Y;SC_function(newX)];
end 

chooseX

function [ S ] = chooseX( LB,UB,N,D )S = lhsdesign(N,D,'criterion','maximin');
S = S.*repmat(UB - LB,N,1) + repmat(LB,N,1);
end

invA

function [ output_args ] = invA(x,c)n = length(x);
A = ones(n,n);
for i = 1:nfor j = 1:nA(i,j) = phy(x(i,:)',x(j,:)',c);end
end
output_args = inv(A);
end

Is_convergence

function [ output_args ] = Is_convergence( rk,rk_1 )epsilon = 0.01;
if (abs((rk - rk_1)/rk_1)) <= epsilonoutput_args = 1;
elseoutput_args = 0;
end
end

phy

function [ output_args ] = phy( x1,x2,c )output_args = ((x1 - x2)'*(x1 - x2)+c^2)^(-0.5);
end

phy2

function [ output_args ] = phy2( x,X,c)n = length(X);
for i = 1:noutput_args(i) = phy(x',X(i,:)',c);
end
output_args = output_args';
end

SC_function

function [ output_args ] = SC_function( X )output_args = 4*X(:,1).^2 - 2.1 * X(:,1).^4 + 1/3*X(:,1).^6 + ...X(:,1).*X(:,2) - 4*X(:,2).^2 + 4*X(:,2).^4;end

shrinkspace

function [ output_args ] = shrinkspace(x_k,lb_k_1,ub_k_1,ns)l_k_1 = ub_k_1 - lb_k_1;
lbc = x_k - 1/ns*(l_k_1);
ubc = x_k + 1/ns*(l_k_1);
lbc = max(lbc,[-2 -2]);
ubc = min(ubc,[2 2]);
a = ubc - lbc;
temp = 0.09;
if a(1)<4*tempubc(1) = x_k(1) + 2*temp;lbc(1) = x_k(1) - 2*temp;
end
if a(2)<4*tempubc(2) = x_k(2) + 2*temp;lbc(2) = x_k(2) - 2*temp;
end
output_args = [lbc;ubc];
end

欢迎大家批评指正。

基于动态径向基函数(DRBF)代理模型的优化策略相关推荐

  1. 基于信赖域的动态径向基函数代理模型优化策略

    DRBF法回顾 TR-DRBF简介 拉丁超方设计 信頼域思想 算例 DRBF法回顾 在上一篇基于动态径向基函数(DRBF)代理模型的优化策略中我们简要介绍了DRBF算法,这种算法收敛次数少,但由于收敛 ...

  2. matlab十字路口车流量仿真,基于高斯径向基函数神经网络的十字路口车流量预测...

    2006年3月 摘要: 采用径向基函数预测功能的神经网络,对十字路口的车流量进行实时预测,仿真实验结果表明使用该神经网络对交叉口车流量进行预测可以得到令人满意的结果.关键词:神经网络:径向基函数:十字 ...

  3. NAS论文笔记:代理模型篇:NSGA Net V2: Evolutionary Multi-Objective Surrogate-Assisted Neural Architecture Sear

    写这个博客,主要是想做一下这方面的工作,想要使用代理模型来提高NAS效率. 运用代理模型求解优化问题是优化领域的一个重要思想,该思想是: (1)将一个复杂的函数通过采集特征点构造一个相对简单的新的函数 ...

  4. 径向基函数(RBF)神经网络

    Data Mining 径向基函数(RBF)神经网络 RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间 ...

  5. matlab径向基函数插值,径向基函数(Radial Basis Function)插值

    将RBF用于插值 标签(空格分隔):径向基函数插值 算法 RBF 曲面重构 当高维数据稀疏,需要预测一些数据,需要使用曲面重构的方法. 曲面重构一般可以分为: 插值 重构 曲面插值里我们一般使用径向基 ...

  6. python自带rbf函数吗_径向基函数(RBF)神经网络

    RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式识别.信息处理.图像处理.系统 ...

  7. 20200918:【广发金融工程】2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究

    参考链接:https://www.sohu.com/a/252454782_465470 [广发金融工程]2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究 2018-09-07 11:26 ...

  8. Kriging代理模型类毕业论文文献包含哪些?

    本文是为大家整理的Kriging代理模型主题相关的10篇毕业论文文献,包括5篇期刊论文和5篇学位论文,为Kriging代理模型选题相关人员撰写毕业论文提供参考. 1.[期刊论文]基于Kriging代理 ...

  9. 基于目标检测的番茄采摘模型

    转自AI Studio,原文链接:​​​​​​[AI Workshop]PaddleDetection番茄目标果检测 - 飞桨AI Studio 1.项目内容 随着日常饮食的逐渐丰富,以番茄为原料的食 ...

最新文章

  1. R语言ggplot2可视化:jupyter中设置全局图像大小、jupyter中自定义单个ggplot2图像结果的大小
  2. android设备不自带sqlite3问题(sqlite3 not found)
  3. linux 禁用 ctrl+alt+del 重启系统
  4. scanf调试_STM32调试利器之ITM
  5. java生成word 框勾_Java 使用模板生成 Word 文件---基于 Freemarker 模板框架
  6. MySQL分组查询—添加排序
  7. extern __shared__
  8. java并发测试 线程池,Java并发编程——线程池
  9. python中run函数作用_python3多线程中如何改写run()函数?
  10. Atitit rest框架选型总结 Resteasy 实现 但是麻烦 作为JAX-RS的标准实现,RestEasy还具有以下亮点特性:   1)不需要配置文件,只要把JARs文件放到类路径里面
  11. 三角矩阵的逆矩阵怎么求_「线性代数」求可逆矩阵P,使得相似矩阵对角化
  12. 记录一下自己用STM32完整开发一台双模机械键盘的过程(附代码和原理图)
  13. pmp采购管理--合同类型
  14. 1.1 第一课:操作示范 [Ps教程]
  15. python下划线怎么输入_Python中下划线的使用方法有哪些
  16. 折叠屏市场起风,华为、OPPO“你追我赶”
  17. wxpython制作excel表格_怎么做一个精美的excel表格
  18. Napster:生死难料,前途未卜
  19. ftp服务器维护,ftp服务器 - LNMP一键安装包
  20. 电磁组直立行车参考设计方案:原理篇

热门文章

  1. 【Kotlin】学习小记-基础篇
  2. 有用的win11小技巧
  3. 对世界观的一些常识性认识,总结看过的各种东西,三十而立,需要成熟思维了
  4. 解决radio被选中,但是重复点击后事件不触发的问题
  5. 自学鸿蒙应用开发(3)- 你好,鸿蒙!
  6. simulink命令集及常用模块说明
  7. C语言高级专题(4)-------指针和数组的高级应用
  8. @NotNull 的使用
  9. 人工智能中的分析学快速入门之著名教材
  10. 服务器响应超时是配置不足吗,服务器响应超时是什么情况