无约束优化问题之Hooke-Jeeves法(模式搜索法)
Hooke-Jeeves法
- 算法目的
- 算法特点
- 算法步骤
- 例题1
- 例题2
算法目的
求解无约束优化问题的极小值(最小值)。
算法特点
算法步骤中不需要计算目标函数的导数。
算法步骤
例题1
求解 min f ( x ) : = ( 1 − x 1 ) 2 + 5 ( x 2 − x 1 2 ) 2 . \min\ f(x):=(1-x_1)^2+5{(x_2-{x_1}^2)}^2. min f(x):=(1−x1)2+5(x2−x12)2.
解:置初始点为 ( 2 , 0 ) T (2,0)^T (2,0)T, 初始探测步长 δ = 1 2 \delta = \frac{1}{2} δ=21,加速因子 α = 1 \alpha=1 α=1,衰减因子 β = 1 2 \beta=\frac{1}{2} β=21,允许误差 ϵ = 0.2 \epsilon = 0.2 ϵ=0.2。
Python代码求解如下:
import numpy as npdef function1(x):return (1 - x[0]) ** 2 + 5 * (x[1] - x[0] ** 2) ** 2# 输入初始探测搜索步长delta, 加速因子alpha(alpha>=1), 缩减率beta(0<beta<1), 允许误差epsilon(epsilon>0), 初始点xk
delta, alpha, beta, epsilon, xk = 0.5, 1, 0.5, 0.2, np.array([2, 0])
yk = xk.copy()# 求问题维数
dim = len(xk)# 初始化迭代次数
k = 1while delta > epsilon:# 输出本次搜索的基本信息print('进入第', k, '轮迭代')print('基点:', xk)print('基点处函数值:', function1(xk))print('探测出发点为:', yk)print('探测出发点处的函数值', function1(yk))print('探测搜索步长delta:', delta)# 进入探测移动for i in range(dim):# 生成本次探测的坐标方向e = np.zeros([1, dim])[0]e[i] = 1# 计算探测得到的点t1, t2 = function1(yk + delta * e), function1(yk)if t1 < t2:yk = yk + delta * eelse:t1, t2 = function1(yk - delta * e), function1(yk)if t1 < t2:yk = yk - delta * eprint('第', i + 1, '次探测得到的点为', yk)print('该点对应的函数值', function1(yk))# 确定新的基点和计算新的探测初始点t1, t2 = function1(yk), function1(xk)if t1 < t2:xk, yk = yk, yk + alpha * (yk - xk)else:delta, yk = delta * beta, xkk += 1print("\n")
结果
进入第 1 轮迭代
基点: [2 0]
基点处函数值: 81
探测出发点为: [2 0]
探测出发点处的函数值 81
探测搜索步长delta: 0.5
第 1 次探测得到的点为 [1.5 0. ]
该点对应的函数值 25.5625
第 2 次探测得到的点为 [1.5 0.5]
该点对应的函数值 15.5625进入第 2 轮迭代
基点: [1.5 0.5]
基点处函数值: 15.5625
探测出发点为: [1. 1.]
探测出发点处的函数值 0.0
探测搜索步长delta: 0.5
第 1 次探测得到的点为 [1. 1.]
该点对应的函数值 0.0
第 2 次探测得到的点为 [1. 1.]
该点对应的函数值 0.0进入第 3 轮迭代
基点: [1. 1.]
基点处函数值: 0.0
探测出发点为: [0.5 1.5]
探测出发点处的函数值 8.0625
探测搜索步长delta: 0.5
第 1 次探测得到的点为 [1. 1.5]
该点对应的函数值 1.25
第 2 次探测得到的点为 [1. 1.]
该点对应的函数值 0.0进入第 4 轮迭代
基点: [1. 1.]
基点处函数值: 0.0
探测出发点为: [1. 1.]
探测出发点处的函数值 0.0
探测搜索步长delta: 0.25
第 1 次探测得到的点为 [1. 1.]
该点对应的函数值 0.0
第 2 次探测得到的点为 [1. 1.]
该点对应的函数值 0.0
所以求得近似最小值点为 ( 1 , 1 ) T (1,1)^T (1,1)T,对应的最小值为 0 0 0。
例题2
求解 min f ( x ) : = x 1 2 + x 2 2 − 4 x 1 + 2 x 2 + 7. \min f(x):={x_1}^2+{x_2}^2-4x_1+2x_2+7. minf(x):=x12+x22−4x1+2x2+7.
解:置初始点为 ( 0 , 0 ) T (0,0)^T (0,0)T,初始探测步长 δ = 1 \delta = 1 δ=1,加速因子 α = 1 \alpha = 1 α=1,衰减因子 β = 0.25 \beta = 0.25 β=0.25,允许误差 ϵ = 0.05 \epsilon = 0.05 ϵ=0.05。
Python代码如下:
import numpy as npdef function1(x):return x[0] ** 2 + x[1] ** 2 - 4 * x[0] + 2 * x[1] + 7# 输入初始探测搜索步长delta, 加速因子alpha(alpha>=1), 缩减率beta(0<beta<1), 允许误差epsilon(epsilon>0), 初始点xk
delta, alpha, beta, epsilon, xk = 1, 1, 0.25, 0.05, np.array([0, 0])
yk = xk.copy()# 求问题维数
dim = len(xk)# 初始化迭代次数
k = 1while delta > epsilon:# 输出本次搜索的基本信息print('进入第', k, '轮迭代')print('基点:', xk)print('基点处函数值:', function1(xk))print('探测出发点为:', yk)print('探测出发点处的函数值', function1(yk))print('探测搜索步长delta:', delta)# 进入探测移动for i in range(dim):# 生成本次探测的坐标方向e = np.zeros([1, dim])[0]e[i] = 1# 计算探测得到的点t1, t2 = function1(yk + delta * e), function1(yk)if t1 < t2:yk = yk + delta * eelse:t1, t2 = function1(yk - delta * e), function1(yk)if t1 < t2:yk = yk - delta * eprint('第', i + 1, '次探测得到的点为', yk)print('该点对应的函数值', function1(yk))# 确定新的基点和计算新的探测初始点t1, t2 = function1(yk), function1(xk)if t1 < t2:xk, yk = yk, yk + alpha * (yk - xk)else:delta, yk = delta * beta, xkk += 1print("\n")
结果:
进入第 1 轮迭代
基点: [0 0]
基点处函数值: 7
探测出发点为: [0 0]
探测出发点处的函数值 7
探测搜索步长delta: 1
第 1 次探测得到的点为 [1. 0.]
该点对应的函数值 4.0
第 2 次探测得到的点为 [ 1. -1.]
该点对应的函数值 3.0进入第 2 轮迭代
基点: [ 1. -1.]
基点处函数值: 3.0
探测出发点为: [ 2. -2.]
探测出发点处的函数值 3.0
探测搜索步长delta: 1
第 1 次探测得到的点为 [ 2. -2.]
该点对应的函数值 3.0
第 2 次探测得到的点为 [ 2. -1.]
该点对应的函数值 2.0进入第 3 轮迭代
基点: [ 2. -1.]
基点处函数值: 2.0
探测出发点为: [ 3. -1.]
探测出发点处的函数值 3.0
探测搜索步长delta: 1
第 1 次探测得到的点为 [ 2. -1.]
该点对应的函数值 2.0
第 2 次探测得到的点为 [ 2. -1.]
该点对应的函数值 2.0进入第 4 轮迭代
基点: [ 2. -1.]
基点处函数值: 2.0
探测出发点为: [ 2. -1.]
探测出发点处的函数值 2.0
探测搜索步长delta: 0.25
第 1 次探测得到的点为 [ 2. -1.]
该点对应的函数值 2.0
第 2 次探测得到的点为 [ 2. -1.]
该点对应的函数值 2.0进入第 5 轮迭代
基点: [ 2. -1.]
基点处函数值: 2.0
探测出发点为: [ 2. -1.]
探测出发点处的函数值 2.0
探测搜索步长delta: 0.0625
第 1 次探测得到的点为 [ 2. -1.]
该点对应的函数值 2.0
第 2 次探测得到的点为 [ 2. -1.]
该点对应的函数值 2.0
所以求得的近似最小值点为 ( 2 , − 1 ) T (2,-1)^T (2,−1)T,对应的最小值为 2 2 2。
无约束优化问题之Hooke-Jeeves法(模式搜索法)相关推荐
- 约束优化方法之拉格朗日乘子法与KKT条件
来源:https://www.cnblogs.com/ooon/p/5721119.html 引言 本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可 ...
- matlab解决无约束优化问题
无约束优化问题 要用到的数学知识: 1.向量范数与矩阵范数 2.多元函数梯度与Hessian阵 3.凸集与凸函数 特别要提示的是:如果该函数为凸函数,那么它有且仅有一个最优点,如果它的值不在无穷处,我 ...
- 高立数值最优化方法_最优化理论之无约束优化基本结构及其python应用
自古以来,凡是追求尽善尽美是人类的天性,因而产生了科学,工程,数学,经济和商业等领域的实际问题时,人们欲从众多可行的方案中选择最优或近似最优的解决方案,那么最优化方法就是专门解决这类问题的一个强有力工 ...
- 无约束优化问题(一)
一名数学专业的人工智能爱好者 导语 随着人工智能.深度学习的火爆,越来越多的人加入到这个行业中来,相信你们也一定听说过,不懂数学的AI工作者找工作时经常碰壁,博主作为一名数学专业学生开这一系列博客希望 ...
- 约束优化:约束优化的三种序列无约束优化方法
文章目录 约束优化:约束优化的三种序列无约束优化方法 外点罚函数法 L2-罚函数法:非精确算法 对于等式约束 对于不等式约束 L1-罚函数法:精确算法 内点罚函数法:障碍函数法 等式约束优化问题的拉格 ...
- Matlab建模—无约束优化与非线性规划相关算例
数学建模期末复习,撰写博客做总结之用,主要侧重于算例的模型建立与部分代码的实现,其中不足之处望读者多多指正. 文章目录 前言 非线性规划问题 供应与选址 问题描述 模型建立 无约束最优化 梯子长度问题 ...
- 最优化 | 无约束优化方法 | C++实现
文章目录 参考资料 1. 前言 2. 梯度下降法 2.1 原理 2.2 c++实现 2.3 共轭梯度法 3. 牛顿法 3.1 原理 3.2 c++实现 4. 模拟退火算法 4.1 原理 4.2 c++ ...
- 无约束优化方法之powell方法
无约束优化方法是优化技术中心极为重要也是最基本的内容之一.无约束优化问题的数学模型为: min x ∈ R n f ( x ) \min_{x \in R^n}f(x) x∈Rnminf(x) ...
- 02(c)多元无约束优化问题-牛顿法
此部分内容接<02(a)多元无约束优化问题>! 第二类:牛顿法(Newton method) \[f({{\mathbf{x}}_{k}}+\mathbf{\delta })\text{ ...
最新文章
- NeHe教程Qt实现——lesson04
- 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.1.Linux是什么)
- BAT架构师进阶:大型网站架构书籍推荐
- 堪称暴力美学的可视化大屏是怎么做的?附无代码硬核教程
- [25年后的统计系会是什么样?
- 【优化调度】基于matlab遗传算法求解公交车调度优化问题【含Matlab源码 040期】
- K3 Cloud 表体显示序号
- HTML中空格怎么打出来?
- 深入浅出的解释什么是IP地址、子网掩码、端口号、DNS、网关(初学者一定要看看)
- linux centOS 没有网,怎么办
- SQL语句优化(雷人代码)
- ubuntu9.04安装xmms
- miix5 u盘安装linux,联想Miix510U盘装系统win10教程
- Android 音乐播放器模块心得卡顿优化
- 根据域名获取ip地址、端口、服务器类型和标题
- 英伟达发布最强汽车芯!算力2000TOPS,车内计算全包了
- DirectX 3D开发记录
- 《C程序设计(第五版)》谭浩强编著—习题—第六章
- thinkphp5+layui+GatewayWorker开源多客服聊天系统,支持多客服权限管理
- java jlabel 大小_java-如何调整JLabel ImageIcon的大小?
热门文章
- Go并发异步请求秀动抢票
- 评论:个人信息泄露,期待法律有效堵漏
- Baumer工业相机堡盟工业相机如何使用BGAPISDK联合Halcon将图像中的六一快乐字体提取出来(C#)
- 【Vegas原创】win7下打开telnet服务
- Telnet在Windows7下的安装
- Yearning介绍及三种方式安装
- 如何用计算机放出音乐,怎么让手机上正在播放的音乐在电脑上播放(直接推送方法)?...
- git的冲突解决–git rebase之abort、continue、skip
- TIM——Temmie!
- 【Revit二次开发】应用程序和文档