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​−x1​2)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):=x1​2+x2​2−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法(模式搜索法)相关推荐

  1. 约束优化方法之拉格朗日乘子法与KKT条件

    来源:https://www.cnblogs.com/ooon/p/5721119.html 引言 本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可 ...

  2. matlab解决无约束优化问题

    无约束优化问题 要用到的数学知识: 1.向量范数与矩阵范数 2.多元函数梯度与Hessian阵 3.凸集与凸函数 特别要提示的是:如果该函数为凸函数,那么它有且仅有一个最优点,如果它的值不在无穷处,我 ...

  3. 高立数值最优化方法_最优化理论之无约束优化基本结构及其python应用

    自古以来,凡是追求尽善尽美是人类的天性,因而产生了科学,工程,数学,经济和商业等领域的实际问题时,人们欲从众多可行的方案中选择最优或近似最优的解决方案,那么最优化方法就是专门解决这类问题的一个强有力工 ...

  4. 无约束优化问题(一)

    一名数学专业的人工智能爱好者 导语 随着人工智能.深度学习的火爆,越来越多的人加入到这个行业中来,相信你们也一定听说过,不懂数学的AI工作者找工作时经常碰壁,博主作为一名数学专业学生开这一系列博客希望 ...

  5. 约束优化:约束优化的三种序列无约束优化方法

    文章目录 约束优化:约束优化的三种序列无约束优化方法 外点罚函数法 L2-罚函数法:非精确算法 对于等式约束 对于不等式约束 L1-罚函数法:精确算法 内点罚函数法:障碍函数法 等式约束优化问题的拉格 ...

  6. Matlab建模—无约束优化与非线性规划相关算例

    数学建模期末复习,撰写博客做总结之用,主要侧重于算例的模型建立与部分代码的实现,其中不足之处望读者多多指正. 文章目录 前言 非线性规划问题 供应与选址 问题描述 模型建立 无约束最优化 梯子长度问题 ...

  7. 最优化 | 无约束优化方法 | C++实现

    文章目录 参考资料 1. 前言 2. 梯度下降法 2.1 原理 2.2 c++实现 2.3 共轭梯度法 3. 牛顿法 3.1 原理 3.2 c++实现 4. 模拟退火算法 4.1 原理 4.2 c++ ...

  8. 无约束优化方法之powell方法

    无约束优化方法是优化技术中心极为重要也是最基本的内容之一.无约束优化问题的数学模型为: min ⁡ x ∈ R n f ( x ) \min_{x \in R^n}f(x) x∈Rnmin​f(x) ...

  9. 02(c)多元无约束优化问题-牛顿法

    此部分内容接<02(a)多元无约束优化问题>! 第二类:牛顿法(Newton method) \[f({{\mathbf{x}}_{k}}+\mathbf{\delta })\text{ ...

最新文章

  1. NeHe教程Qt实现——lesson04
  2. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.1.Linux是什么)
  3. BAT架构师进阶:大型网站架构书籍推荐
  4. 堪称暴力美学的可视化大屏是怎么做的?附无代码硬核教程
  5. [25年后的统计系会是什么样?
  6. 【优化调度】基于matlab遗传算法求解公交车调度优化问题【含Matlab源码 040期】
  7. K3 Cloud 表体显示序号
  8. HTML中空格怎么打出来?
  9. 深入浅出的解释什么是IP地址、子网掩码、端口号、DNS、网关(初学者一定要看看)
  10. linux centOS 没有网,怎么办
  11. SQL语句优化(雷人代码)
  12. ubuntu9.04安装xmms
  13. miix5 u盘安装linux,联想Miix510U盘装系统win10教程
  14. Android 音乐播放器模块心得卡顿优化
  15. 根据域名获取ip地址、端口、服务器类型和标题
  16. 英伟达发布最强汽车芯!算力2000TOPS,车内计算全包了
  17. DirectX 3D开发记录
  18. 《C程序设计(第五版)》谭浩强编著—习题—第六章
  19. thinkphp5+layui+GatewayWorker开源多客服聊天系统,支持多客服权限管理
  20. java jlabel 大小_java-如何调整JLabel ImageIcon的大小?

热门文章

  1. Go并发异步请求秀动抢票
  2. 评论:个人信息泄露,期待法律有效堵漏
  3. Baumer工业相机堡盟工业相机如何使用BGAPISDK联合Halcon将图像中的六一快乐字体提取出来(C#)
  4. 【Vegas原创】win7下打开telnet服务
  5. Telnet在Windows7下的安装
  6. Yearning介绍及三种方式安装
  7. 如何用计算机放出音乐,怎么让手机上正在播放的音乐在电脑上播放(直接推送方法)?...
  8. git的冲突解决–git rebase之abort、continue、skip
  9. TIM——Temmie!
  10. 【Revit二次开发】应用程序和文档