MATLAB全局最优搜索函数:GlobalSearch函数

摘要:本文介绍了 GlobalSearch 函数的使用句式(一)、三个运行案例(二)、 GlobalSearch 函数的参数设置(三)、GlobalSearch 注意事项及必要说明(五)等内容。详细介绍如下:

一、函数句法

Syntax
gs = GlobalSearch
gs = GlobalSearch(Name,Value)
gs = GlobalSearch(oldGS,Name,Value)
gs = GlobalSearch(ms)

二、实战案例

(1)Example1:Run GlobalSearch on Multidimensional Problem

  • gs = GlobalSearch creates gs, a GlobalSearch solver with its properties set to the defaults.

代码:

rng default % For reproducibility
gs = GlobalSearch;
sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ...+ x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);
problem = createOptimProblem('fmincon','x0',[-1,2],...'objective',sixmin,'lb',[-3,-3],'ub',[3,3]);
[x,fval] = run(gs,problem)

运行结果:

注意: 在MATLAB中,rng default 的作用是将随机数生成器的种子(seed)设置为默认值。种子是一个起始值,用于生成伪随机数序列。通过将种子设置为默认值,你可以确保在每次运行程序时,生成的伪随机数序列都是相同的,从而实现结果的可复现性。具体而言,rng default将随机数生成器的种子设置为 MATLAB 的默认值,这样每次运行代码时,生成的随机数序列都将相同。这对于需要随机性的算法,但又需要可重复的结果的情况非常有用,例如在进行随机实验或优化算法中。


(2)Example2:Run GlobalSearch on 1-D Problem

  • Consider a function with several local minima.
fun = @(x) x.^2 + 4*sin(5*x);
fplot(fun,[-5,5])

图示如下:

  • To search for the global minimum, run GlobalSearch using the fmincon ‘sqp’ algorithm.

代码:

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...fun,'x0',3,'lb',-5,'ub',5,'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem)

运行结果:


(3)Example3:调用fmincon时,含非线性约束的 GlobalSearch 函数用法

主函数代码如下:

clear all
clc% 目标函数
fun = @(x) sin(x(1)) + 0.1 * x(2)^2;% 非线性约束
nonlcon = @(x) constraintFunction(x);% 定义优化问题
problem = createOptimProblem('fmincon', 'objective', fun, 'nonlcon', nonlcon, 'x0', [0, 0], 'lb', [-5, -5], 'ub', [5, 5]);% 创建 GlobalSearch 对象
gs = GlobalSearch;% 运行全局搜索
[x, fval, exitflag, output] = run(gs, problem);% 显示结果,包括函数计算次数
disp('全局最优解:');
disp(['x = ' num2str(x)]);
disp(['目标函数值 = ' num2str(fval)]);
disp(['退出标志 = ' num2str(exitflag)]);
disp(['函数计算次数:' num2str(output.funcCount)]);

子函数代码如下:

% 定义约束函数
function [c, ceq] = constraintFunction(x)c = x(1)^2 + x(2)^2 - 1;  % 非线性不等式约束ceq = [];  % 非线性等式约束为空
end

运行结果:

  • 需要注意,nonlcon 的非线性约束的写法!

  • 另外,如果需要向非线性约束中传递参数,直接加参数即可,主函数中改为:

% 非线性约束
a=1;
nonlcon = @(x) constraintFunction(x,a);
  • 子函数中改为下式即可:
% 定义约束函数
function [c, ceq] = constraintFunction(x,a)c = a*x(1)^2 + x(2)^2 - 1;  % 非线性不等式约束ceq = [];  % 非线性等式约束为空
end

三、GlobalSearch 函数的参数设置

(1)基于 MultiStart 设置 GlobalSearch 参数

  • Create a nondefault MultiStart object.
ms = MultiStart('FunctionTolerance',2e-4,'UseParallel',true)
  • Create a GlobalSearch object that uses the available properties from ms.
gs = GlobalSearch(ms)
  • gs has the same nondefault value of FunctionTolerance as ms. But gs does not use the UseParallel property.

(2)直接设置 GlobalSearch 参数

  • Create a GlobalSearch object with a FunctionTolerance of 1e-4.
gs = GlobalSearch('FunctionTolerance',1e-4)
  • Update the XTolerance property to 1e-3 and the StartPointsToRun property to ‘bounds’.
gs = GlobalSearch(gs,'XTolerance',1e-3,'StartPointsToRun','bounds')
  • You can also update properties one at a time by using dot notation.
gs.MaxTime = 1800

(3)设置 GlobalSearch 参数的必要性(实战案例)

  • 当你觉得求解的性能不太好时,一定要增加初始点的数量!我记录一下自己运行的案例,同样的代码,GlobalSearch 默认是1000个初始点,运行结果如下:
  • 有的基站的覆盖半径依旧很大,且没必要那么大,由此可知解显然非最优。因此,我提高了初始点的数量为 10000 个!扩大了10倍:
gs = GlobalSearch('NumTrialPoints', 10000);
  • 覆盖性能明显好转:
  • 因此,在使用 GlobalSearch 函数求解非凸优化问题最优解时,别忘了要设置足够大的初始点!这样才可以提高找到最优解的概率。

四、Algorithms 原理

For a detailed description of the algorithm, see GlobalSearch Algorithm. Ugray et al. [1] describe both the algorithm and the scatter-search method of generating trial points.


参考文献:[1] Ugray, Zsolt, Leon Lasdon, John Plummer, Fred Glover, James Kelly, and Rafael Martí. Scatter Search and Local NLP Solvers: A Multistart Framework for Global Optimization. INFORMS Journal on Computing, Vol. 19, No. 3, 2007, pp. 328–340.


五、GlobalSearch 注意事项及必要说明

(1)GlobalSearch 与 fmincon 的区别

  • 问:GlobalSearch函数中可以调用fmincon函数。因此,一个很自然的问题是:在GlobalSearch函数中调用fmincon 与 直接用fmincon函数求解,两者的运行结果会有什么区别?
  • 答:(1)全局搜索 vs 局部搜索:fmincon 是一个局部优化算法,它试图找到一个局部最小值,而不保证找到全局最小值。
    GlobalSearch 利用多个局部优化起点和策略,通过在搜索空间中的多个位置进行局部搜索,尝试找到全局最小值;(2)多起点搜索:fmincon 需要提供一个初始点,并在该点周围进行局部搜索。GlobalSearch 则在搜索空间中的多个随机或预定义的起始点上运行局部搜索,以覆盖可能的全局最小值;(3)计算资源:由于 GlobalSearch 在多个点上并行运行局部搜索,可能需要更多的计算资源。fmincon 在单个起始点上运行,因此计算资源需求可能较低。

(2)GlobalSearch 运行结果含义及说明

  • 使用 GlobalSearch 得到如下运行结果,表示什么含义?
  • “GlobalSearch stopped because it analyzed all the trial points.”解读: 意思是 GlobalSearch 停止了,因为它已经分析了所有试点(trial points)。在全局优化问题中,GlobalSearch 通常会在不同的初始点附近运行局部优化器,试图找到全局最优解。这个消息表明它已经尝试过所有计划的试点,无法再继续分析其他试点,因此停止;
  • “42 out of 49 local solver runs converged with a positive local solver exit flag.”解读: 意思是在总共的 49 次局部优化器(local solver)运行中,有 42 次成功地收敛到一个局部最优解,并且这些局部优化器的退出标志(exit flag)是正的。在 GlobalSearch 的执行过程中,针对不同的初始点,会运行局部优化器来寻找局部最优解。这个消息表明其中大多数的局部优化运行都是成功的,并且它们在找到局部最优解后成功地退出了。
  • 总之,该结果表示所得的最优解相对可信、可靠。

(3)GlobalSearch 函数调用 fmincon 时,如何设置 fmincon 的options?

  • 代码实际设置案例:
% 目标函数
fun     = @( Upper_Decision ) GS_myfit  ( Upper_Decision, parameter, User );% 非线性约束
nonlcon = @( Upper_Decision ) GS_nonlcon( Upper_Decision, parameter, User ) ;% 定义优化问题
problem = createOptimProblem('fmincon', 'objective', fun, 'nonlcon', nonlcon, 'x0', x0 , 'lb', LB, 'ub', UB,  'options', optimoptions('fmincon', 'ScaleProblem', 'obj-and-constr'));% 创建 GlobalSearch 对象
gs = GlobalSearch;% 运行全局搜索
[x, fval, exitflag, output] = run( gs, problem );

即:加入 “ 'options', optimoptions('fmincon', 'ScaleProblem', 'obj-and-constr') ” 即可,optimoptions内可按需设置。


六、网址链接:

[1] GlobalSearch
[2] How GlobalSearch and MultiStart Work

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

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

相关文章

FineBI实战项目一(18):每小时上架商品个数分析开发

点击新建组件,创建每小时上架商品个数组件。 选择线图,拖拽cnt(总数)到纵轴,拖拽hourStr到横轴。 修改横轴和纵轴的文字。 调节连线样式。 添加组件到仪表板。

攒机到底能省多少钱?

昨天弄好了攒机配置,今天要求配置一些更为实用的配置,只是作为一般办公,单位买进来的计算机都是联想,价格普遍在7000元以上,出于省钱和实用目的,今天搭配了一个组机方案。 上面的配置对付一般办公足够&…

基于JAVA的婚恋交友网站 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

2 快速前端开发

CSS快速入门 1.CSS案例1.1 内容回顾1.2 案例:二级菜单1.2.1 划分区域1.2.2 搭建骨架1.2.3 Logo区域1.2.4 菜单部分 1.3 案例:顶部菜单 二级菜单小结 1.4 案例:推荐区域1.4.1 划分区域1.4.2 搭建骨架1.4.3 案例的实现小结 2. CSS知识点2.1 ho…

登录模块的实现

一.前期的准备工作 1.页面的布局 (1)表单的校验: 利用element-ui提供的文档绑定rules规则后实现校验 (2)跨域的配置 : 利用proxy代理来解决跨域的问题 (3)axios拦截器的配置 两个点:1. 在请求拦截的成功回调中,如果token,因为调用其它的接口需要token才能调取。 在请…

2024.1.11 Kafka 消息队列,shell命令,核心原理

目录 一 . 消息队列 二. Kafka 三 . 启动命令 四 . Kafka的Shell 命令 五 . Kafka的核心原理 1. Topic的分区和副本机制 2 . 消息存储机制 和 查询机制 3. Kafka中生产者数据分发策略 六 . Kafka 之所以具有高速的读写性能,主要有以下几个原因 七. 笔记…

212. 单词搜索 II(字典树的另一种类型)

大致思路是: 根据words列表建立字典树,其中注意在单词末尾,将原来的isEnd变量换成存储这个单词的变量,方便存储到ans中,另外,字典树的字节点由原来的Trie数组变为hashmap,方便检索字母。 建立…

【AIGC】一组精美动物AI智能画法秘诀

如何使用AI绘画,从以下角度,依据表格内容梳理,表格如下: 外貌特征物种姿势特征描述场景风格技术描述小巧可爱幼小浣熊倚在桌子上具有人形特征中世纪酒馆电影风格照明8k分辨率细节精致毛茸茸手持咖啡杯Jean-Baptiste Monge的风格蓝…

一日难再晨及时当勉励 date

文章目录 Linux shell 获取更改系统时间默认输入显示时区世界协调时格式化日期更多信息 Linux shell 获取更改系统时间 … note:: 时光只解催人老,不信多情,长恨离亭,泪滴春衫酒易醒。 - 晏殊《采桑子时光只解催人老》date命令可以用来打印…

RT-Thread入门笔记4-跑马灯线程实例

RT-Thread操作系统是基于线程调度的多任务系统。 线程状态切换 调度过程是一种完全抢占式的基于优先级的调度算法。 支持8/32/256优先级,其中0表示最高,7/31/255表示最低。最低优先级7/31/255优先级用于空闲线程。 支持以相同优先级运行的线程。 共享时…

铭文 LaunchPad 平台 Solmash 推出早鸟激励计划

为感谢用户对Solmash的支持,Solmash 特别推出“Solmash早鸟激励计划”,以回馈社区的早期参与者,这是专为已经参与Staking Pool或Honest Pool的用户推出的激励。 Solmash NFT激励 被列入早鸟计划的用户,可通过点击:sol…

文件重命名:一键操作,轻松把扩展字母改成大写,提升文件管理效率

在文件管理的过程中,经常要对文件进行重命名,以更好地组织和管理文件。例如要把文件扩展名从小写改为大写,手动把每个文件的扩展名改为大写即耗时,还容易出错。下面来看云炫文件管理器怎么批量把文件扩展名字母改成大写。 文件扩展…

Flutter Scrollbar滑动条与SingleChildScrollView的结合使用的小细节

我在业务开发中,ListView是竖向滑动的,然后 ListView中的每一个小条目比较长,我需要横向滑动,所以 就有了 ListView中多个SingleChildScrollView(横向滑动),但是在视觉上,我期望告知用户可以横向滑动&#…

算法第十四天-删除有序数组中的重复项

删除有序数组中的重复项 题目要求 解题思路 双指针 左指针确定不重复值,右指针遍历数组 代码 class Solution:def removeDuplicates(self, nums: List[int]) -> int:left0for right in range(1,len(nums)):if nums[left] ! nums[right]:left 1nums[left] nu…

上市路上,如何打好合规与增长的双赢之战? |CFO x CIO 专刊

经济发展的新旧动能转化之下,企业需要找到可持续的高质量发展之路。以数字化智能化为推动力,做好内控与合规,不仅能保证企业的发展不偏离航道,还能有效激发数字资产价值,帮企业获得新发展动能。不管是拟上市企业还是已…

【AI视野·今日NLP 自然语言处理论文速览 第七十三期】Tue, 9 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 9 Jan 2024 Totally 80 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers FFSplit: Split Feed-Forward Network For Optimizing Accuracy-Efficiency Trade-off in Language Model Infe…

centos7上升级mysql8.0.21到mysql8.0.35版本

1、下载安装包 cd /home/soft/mysql8.0.35 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-1.el7.x86_64.rpm-bundle.tar 2、解压压缩包 3、停止掉mysqld服务 systemctl stop mysqld 4、强制安装新的版本包 rpm -ivh mysql-community-common-8.0.35-1.el…

Fluids —— Whitewater (SOP)

目录 Whitewater Lifecycle Workflow Whitewater source Deformation sources Visualizing whitewater Whitewater solver Wind Foam erosion Repellants Whitewater postprocess 基于SOP的白水是对SOP FLIP工作流的增强;该系统与规模无关,无需…

k8s--集群调度(kube-scheduler)

了解kube-scheduler 由之前博客可知kube-scheduler是k8s中master的核心组件之一 scheduler:负责调度资源。把pod调度到node节点。他有两种策略: 预算策略:人为部署,指定node节点去部署新建的pod 优先策略:通过算法选…

js逆向第16例:猿人学第12题入门级js

文章目录 一、前言二、定位关键参数三、代码实现一、前言 任务:抓取这5页的数字,计算加和并提交结果 既然是入门级,那肯定很简单了 二、定位关键参数 控制台查看请求数据,m值应该就是关键参数了 进入堆栈 马上定位到了m值"m": btoa(yuanrenxue + window.pag…