NMinimize

NMinimize[f,x]

用数值法搜索关于 xf 的全局最小值.

NMinimize[f,{x,y,}]

用数值法搜索关于 xyf 的全局最小值.

NMinimize[{f,cons},{x,y,}]

用数值法搜索约束条件 cons 限制下 f 的全局最小值.

NMinimize[,xrdom]

x 限制在区域或域 rdom 内.

更多信息和选项

  • NMinimize 亦称为全局优化 (GO).
  • NMinimize 总是尝试求给定约束条件限制下 f 的全局最小值.
  • NMinimize 通常用于求给定约束条件下可能的最小值. 在不同的领域,这可能被称为最佳策略、最佳方案、最佳配置等.
  • NMinimize 返回形如 {fmin,{x->xmin,y->ymin,}} 的列表.
  • 如果 fcons 是线性的或凸的,NMinimize 给出的结果将是实数和整数值上的全局最小值;否则,有时结果可能只是局部最小值.
  • 如果 NMinimize 发现无法满足约束条件,则会返回 {Infinity,{x->Indeterminate,}}.
  • NMinimize 支持一种建模语言,其中目标函数 f 和约束条件 cons 是用依赖于标量或向量变量的表达式给出的. fcons 通常被解析为非常有效的形式,但只要 fcons 中的项给出变量的数值结果,NMinimize 通常可以找到解.
  • 约束条件 cons 可以是以下表达式的任意逻辑组合:
  • lhs==rhs等式
    lhs>rhs, lhsrhs, lhs<rhs, lhsrhs不等式 (LessEqual)
    lhsrhs, lhsrhs, lhsrhs, lhsrhs向量不等式 (VectorLessEqual)
    {x,y,}rdom区域或域的指定
  • NMinimize[{f,cons},xrdom] 实际上等价于 NMinimize[{f,cons&&xrdom},x].
  • 对于 xrdom,可用 Indexed[x,i] 来指代不同的坐标.
  • 可能的域 rdom 包括:
  • Reals实标量变量
    Integers整数标量变量
    Vectors[n,dom] 中的向量变量
    Matrices[{m,n},dom] 中的矩阵变量
    限制在几何区域 中的向量变量
  • 默认情况下,假定所有变量为实数.
  • 可给出下列选项:
  • AccuracyGoalAutomatic追求多少位的准确度
    EvaluationMonitor None计算 f 时要计算的表达式
    MaxIterationsAutomatic使用的最大迭代次数
    Method Automatic使用的方法
    PrecisionGoalAutomatic追求多少位的精度
    StepMonitor None每次迭代时要计算的表达式
    WorkingPrecision MachinePrecision内部计算使用的精度
  • AccuracyGoalPrecisionGoal 的设置指定了搜索最小值所在位置(最小化点)和函数的最小值时应使用的位数.
  • NMinimize 会持续运行,直到 AccuracyGoalPrecisionGoal 指定的目标实现为止.
  • NMinimize 的方法分为两类. 第一类方法利用问题的属性,因此当方法收敛时,找到的最小值保证是全局的. 第二类启发式方法使用的方法可能包括多个局部搜索,通常通过一些随机性进行调整以锁定全局最小值. 这些方法通常能找到全局最小值,但无法保证.
  • 在收敛到解时确保可以给出全局最小值的方法包括:
  • "Convex"只使用凸方法
    "MOSEK"对于凸问题,使用商用 MOSEK 库
    "Gurobi"对于凸问题,使用商用 Gurobi 库
    "Xpress"对于凸问题,使用商用 Xpress 库
  • 启发式方法包括:
  • "NelderMead"Nelder 和 Mead 的单纯形法
    "DifferentialEvolution"使用差分进化
    "SimulatedAnnealing"使用模拟退火
    "RandomSearch"使用从多个随机起始点中找到的最佳局部最小值
    "Couenne"对非凸混合整数非线性问题使用 Couenne 库

范例

打开所有单元关闭所有单元

基本范例  (3)

求不受限问题的全局最小值:

提取最小化参数:

求含有约束条件的问题中的全局最小值:

在几何区域上求函数的最小值:

图示:

范围  (40)

基本用法  (12)

最小化受约束条件 限制的

可用 VectorGreaterEqual 表示几个线性不等式约束条件:

v>=\[VectorGreaterEqual] 输入向量不等式符号

用几个标量不等式表示的等价形式:

使用向量变量

由于 中可能存在的逐项运算,不等式 不一定和 一样:

如果想要避免 中不想要的逐项运算,可使用 Inactive[Plus]

用常参数方程来避免 中不想要的逐项运算:

VectorGreaterEqual 表示关于 "NonNegativeCone" 的锥不等式:

如果想明确指定锥体的尺寸,可使用 {"NonNegativeCone",n}

求解:

最小化受约束条件 限制的

用含有 "NormCone" 的锥不等式指定约束条件

求解:

最小化受约束条件 限制的函数

Indexed 访问向量变量的分量,如 TemplateBox[{x, 1}, IndexedDefault]

当向量变量不明确时,用 Vectors[n,dom] 指定维度和域:

NonNegativeReals (TemplateBox[{}, NonNegativeReals]) 指定非负约束条件:

用向量不等式 表示的等价格式:

NonPositiveReals (TemplateBox[{}, NonPositiveReals]) 指定非正约束条件:

用向量不等式表示的等价格式:

也可以指定 Or 约束条件:

域约束条件  (4)

Integers 指定整数域约束条件:

Vectors[n,Integers] 指定向量变量的整数域约束条件:

NonNegativeIntegers (TemplateBox[{}, NonNegativeIntegers]) 指定非负整数域约束条件:

NonPositiveIntegers (TemplateBox[{}, NonPositiveIntegers]) 指定非正整数域约束条件:

区域约束条件  (5)

在区域上最小化:

绘制这些值:

求两个区域间的最小距离:

绘制这些值:

求使得三角形和椭圆仍然相交的最小的

绘制这些值:

求包含给定的三个点的半径最小的圆盘:

绘制这些值:

Circumsphere 直接给出同样的结果:

指定 中的一个向量,且 TemplateBox[{x}, Norm]=1

线性问题  (5)

如果目标函数和约束条件是线性的,最小值即是全局最小值:

约束条件可以是等式和不等式约束条件:

Equal 一次表示几个等式约束条件:

用几个标量等式表示的等价形式:

VectorLessEqual 一次表示几个 LessEqual 不等式约束条件:

v<= 以紧凑格式输入向量不等式:

用标量不等式给出的等价形式:

Interval 指定变量的范围:

凸问题  (7)

"NonNegativeCone" 指定形如 的线性函数:

v>= 以紧凑格式输入向量不等式:

最小化受线性约束条件限制的凸二次函数:

绘制区域和最小化点:

最小化受一组凸二次约束条件限制的凸二次函数:

绘制区域和最小化点:

求两个凸区域之间的最小距离:

绘制这些值:

最小化 ,使得 为半正定:

在目标函数图上显示最小化点:

最小化凸目标函数 ,使得 为半正定且

绘制区域和最小化点:

最小化 4-norm 单位圆盘上的凸目标函数:

绘制区域和最小化点:

可转化为凸问题的问题  (4)

最小化矩形的周长,使得面积为 1,高度最多为宽度的一半:

这个问题是对数-凸 (log-convex) 的,可以通过做一个变换 {hExp[],wExp[ ]} 并取对数得到凸问题来解决:

最小化受不等式和范数约束条件限制的拟凸函数 . 目标函数是拟凸的,因为它是域上一个非负函数和一个非正函数的乘积:

可将拟凸问题作为参数 的参数凸优化问题求解:

绘制作为水平子集 的函数的目标函数:

对于水平子集在区间 内的值,找到最小的值:

当水平集值增加时,问题变得不可行:

根据约束条件 最小化 . 目标是非凸但可通过凸差函数 表示,其中 为凸函数:

绘制该区域和最小化点:

根据约束条件 最小化 . 约束条件 为非凸但可通过凸差约束条件 表示,其中 为凸函数:

绘制该区域和最小化点:

普通问题  (3)

最小化受非线性约束条件限制的线性目标函数:

绘制这些值:

最小化受线性约束条件限制的非线性目标函数:

绘制目标函数和最小化点:

最小化受非线性约束条件限制的非线性目标函数:

绘制这些值:

选项  (10)

AccuracyGoal 和 PrecisionGoal  (2)

强调收敛标准

强调收敛标准 ,这在默认的机器精度计算中是无法实现的:

设置一个较高的 WorkingPrecision ,使过程收敛:

EvaluationMonitor  (1)

记录所有在求解有极小值环的函数过程中计算过的点:

绘制目标函数值接近最终答案的所有访问过的点:

Method  (5)

对于某些问题,某些方法可能会给出次优结果:

自动选择的方法给出了该问题的最优解:

为下面的非凸问题自动选择的方法为 "Couenne"

绘制解以及全局最小值点:

"Couenne" 法求包含多个局部最小值的函数的全局最小值

绘制最小化函数和全局最小解:

当速度至关重要时,请使用方法 "NelderMead" 来求解有多个变量的问题:

"Convex" 方法或 Except["Convex"] 指定是否应使用凸方法:

"Couenne" 方法或 Except["Couenne"] 选择或排除 Couenne 求解器:

StepMonitor  (1)

在求经典的 Rosenbrock 函数最小值的过程中 NMinimize 采取的步骤:

WorkingPrecision  (1)

工作精度设为 时,AccuracyGoalPrecisionGoal 默认值为

应用  (19)

几何问题  (4)

求半径为 1、圆心为 的两个圆盘之间的最小距离. 令 为圆盘 1 上的一个点. 令 为圆盘 2 上的一个点. 目标是最小化受约束条件 限制的

可视化两个点的位置:

求包围给定区域的最小包含球的半径 和中心

最小化受约束条件 限制的半径

可视化最小包含球:

可通过 BoundingRegion 高效地找到最小包含球:

通过最小化体积,找到参数化为 {x:TemplateBox[{{{a, ., x}, +, b}}, Norm]<=1}、包围三维中的一组点的最小椭球体:

对于每个点 ,必须满足约束条件 TemplateBox[{{{a, ., {p, _, i}}, +, b,  }}, Norm]<=1, i=1,2,...,n

最小化体积等价于最小化

将参数化的椭圆转换为显式形式

也可以使用 BoundingRegion 得到包围椭圆体(体积不一定是最小的):

求可包含 个给定半径为 的不重叠圆的最小正方形,其中 . 指定圆的数量和每个圆的半径:

如果 是圆 的圆心,则目标是最小化 . 可将目标转换为最小化

圆不可重叠:

整合这些变量:

最小化目标

这些圆被包含在正方形 中:

计算正方形被这些圆覆盖的比例:

数据拟合问题  (3)

对于给定矩阵 a 和向量 b,最小化受约束条件 限制的

将三次曲线拟合到离散数据,使数据的第一个和最后一个点位于曲线上:

DesignMatrix 构建矩阵:

定义约束条件,使第一个和最后一个点必须位于曲线上:

通过最小化 求系数

将拟合结果与数据相比较:

通过最小化 求对非线性离散数据的异常值不太敏感的拟合:

使用基 拟合数据. 插值函数为

求解:

可视化拟合:

将插值函数和参考函数相比较:

分类问题  (5)

求分隔两组点 的直线

对于此分隔问题,第 1 组点必须满足 ,第 2 组点必须满足

目标是最小化 ,它给出的是 之间距离的两倍:

分隔线为:

求分隔两组 3D 点 的二次多项式:

DesignMatrix 构建两组点的二次多项式数据矩阵:

对于此分隔问题,第 1 组必须满足 ,第 2 组必须满足

通过最小化 找出分隔多项式:

分隔两组点的多项式为:

绘制分隔两个数据集的多项式:

将给定的点集 分成不同的组. 可通过最小化 找出每组的中心 来完成,其中 是给定的局部核, 是给定的惩罚参数:

为使得 ,否则 成立的 k-近邻 () 函数. 对于此问题,选择

目标函数 为:

求各个组的中心点:

对于每个数据点,都有一个对应的中心. 属于同一个组的数据将有相同的中心值:

提取并绘制各个组:

给定一组正整数,将这些整数划分为两个不重叠的子集,使得两个子集的和之间的差最小. 定义列表:

定义一个接受值 1 或 1 的二进制变量. 如果列表中的某个元素属于子集 1,则与其关联的二进制变量的值为 1. 对于子集 2,关联的二进制变量为 1:

目标是最小化两个子集的和之差:

求子集:

给定一组不同重量的物体和两个袋子,找到可以放入两个袋子且不超过袋子的承重能力的总重量最大的物体. 定义物体的数量和重量:

用二进制变量来决定一个物体应被放入第一个袋子还是第二个袋子,或者不放入:

每个袋子的承重能力为 5000:

目标是最大化两个袋子中物体的重量:

求解问题:

二进制变量 与放入第一个袋子的物体相关联. 变量 的补集. 袋子的重量是:

图像处理  (1)

通过求以全变差范数计算最接近的图像来恢复损坏的图像:

通过随机删除 40% 的数据点来创建损坏的图像.

目标是最小化 sum_(i=1)^(n-1)sum_(j=1)^(m-1)sqrt(TemplateBox[{{TemplateBox[{u, {i, +, 1}, j}, IndexedDefault], -, TemplateBox[{u, i, j}, IndexedDefault]}}, Abs]^2+TemplateBox[{{TemplateBox[{u, i, {j, +, 1}}, IndexedDefault], -, TemplateBox[{u, i, j}, IndexedDefault]}}, Abs]^2),其中 是图像数据:

假设任何非零数据点 TemplateBox[{u, i, j}, IndexedDefault] 均未损坏. 对于这些位置,令 TemplateBox[{u, i, j}, IndexedDefault]=u_(i j)^(orig)

求出解并显示恢复的图像:

设施选址问题  (1)

求服务位于 的客户所需的各种基站 的位置和范围

每个基站消耗的功率与其范围成正比,由 给出. 目的是最大程度地降低功耗:

为决策变量,如果客户 被基站 覆盖,则用 表示:

每个基站必须位于能覆盖一些客户的位置:

每个基站可覆盖多个客户:

每个基站都有最小和最大覆盖范围:

收集所有变量:

给出基站的位置及覆盖范围:

提取基站的位置和范围:

可视化基站相对于客户所处地点的位置和范围:

投资组合优化  (1)

求如何在六只股票之间分配资本 ,在最大程度地降低风险的同时最大化回报:

回报为 ,其中 是由每只股票的预期回报值组成的向量:

风险由 给出; 为规避风险的参数,且

目标是最大化收益,同时在指定的风险规避参数的情况下最大程度地降低风险:

可用 模拟买卖股票对股票市场价格的影响:

权重 必须大于 0,权重加上市场影响成本必须加起来为 1:

计算一系列风险规避参数的回报和相应的风险:

范围内的最优 给出了收益和风险之间的权衡上限:

计算指定数量的风险规避参数的权重:

通过考虑市场成本,可以获得低风险规避参数的多样化投资组合,但是当风险规避参数较高时,由于购买的是分散程度较低的股票,市场影响成本占主导地位:

轨迹优化  (1)

找到一条可以绕过圆形障碍物并使得从起点到终点距离最小化的路径:

路径可分解为 个不同的点. 这些点之间的距离必须小于 ,其中 是要最小化的长度:

这些点不能在圆形物体的内部:

起点和终点的位置已知:

整合这些变量:

最小化受约束条件限制的长度

可视化结果:

制造业问题  (3)

求为达到指定的传动比,齿轮 需要的齿数

每个齿轮的齿数在 之间:

对于给定的齿轮组配置,传动比为 by

求为达到传动比 所需的齿数:

最大限度地降低压力容器的制造成本. 该容器是一个长度为 、半径为 的圆柱壳,管的两端各有一个半球盖:

容器的体积约束条件为:

壳的厚度为 ,半球盖的厚度为 . 壳和半球盖的厚度有指定的上限和下限,且必须大于半径的一定比例:

壳和半球盖的厚度还有额外的约束条件:

容器尺寸的约束条件为:

壳和半球盖的材料的密度为 . 材料的成本为:

焊接壳和半球盖的成本为:

总制造成本是焊接和材料成本的总和:

指定常数:

求使制造成本最小化的容器的尺寸:

设计一个最小体积螺旋压缩弹簧,卷绕直径为 ,弹簧线的直径为 ,受轴向载荷限制的弹簧圈数为

弹簧的体积为:

弹簧上的剪切应力取决于允许的最大轴向载荷 ,并且必须低于最大允许应力

弹簧的挠度被定义为:

弹簧的自由长度必须小于最大允许长度

线径不得超过指定的最小直径:

弹簧的外径必须小于最大指定直径

卷绕直径 必须至少为线径 的三倍以避免过于紧密缠绕的弹簧:

预载下的挠度必须位于 之间:

由挠度引起的载荷和预载 不能超过最大载荷

螺旋弹簧由音乐钢丝弹簧钢 ASTM A228 制成,钢丝直径必须从一组预定直径中选择:

使用二进制变量从预定集合中选择线径

指定常数:

整合约束条件:

求解问题:

属性和关系  (9)

NMinimize 给出最小值,并以规则形式给出使结果最小化的变量值:

NArgMin 给出使结果最小化的值的列表:

NMinValue 只给出最小值:

最大化函数 f 相当于最小化 -f

对于凸问题,可用 ConvexOptimization 获取解的其他属性:

获取对偶问题的解:

对于含有参数的凸问题,用 ParametricConvexOptimization 给出 ParametricFunction

可通过计算 ParametricFunction 求得参数的值:

NMinimize 定义参数化问题的函数:

比较两种方法的速度:

也可以计算 ParametricFunction 的导数:

对于含有参数化约束条件的凸问题,RobustConvexOptimization 将找到适用于所有可能参数值的最优值:

对于特定参数值,NMinimize 可能会找到更小的值:

对于 αβ 允许的所有值,该最小化点不满足约束条件:

为特定参数值找到的最小值小于或等于稳健最小值:

FindMinimum 试图找到一个局部最小值,NMinimize 的目的在于找到全局最小值:

FindFit 可以用 NMinimize 来求全局最佳拟合,下面先设立一个模型:

根据模型和参数创建一个函数,并且生成样本点:

默认情况下,FindFit 只求出局部最佳拟合:

NMinimize 方法求全局最佳拟合:

RegionDistanceRegionNearest 计算距离和最近的点:

这两者都可以使用 NMinimize 计算:

RegionBounds 计算边界框:

NMaximizeNMinimize 做同样的计算:

可能存在的问题  (3)

对于非线性函数,NMinimize 的某些方法有时可能只能找到局部最小值:

绘制解和局部最小值点:

指定开始区间,可能会有助于求得更好的局部最小值:

自动选定的方法给出了更好的解:

对于某些方法,NMinimize 找到的是圆盘上二维函数的局部最小值:

指定开始区间有助于求得全局最小值:

定义一个对给定参数进行数值积分的函数:

参数值取 2,计算积分:

对符号参数应用函数,NIntegrate 发出一条消息:

当该函数与其他数值函数(如 NMinimize)一起使用时,也会导致警告消息:

定义一个仅在其参数为数值时才进行计算的函数,以避免出现这些消息:

给定数值,执行计算:

参数不是数值时,函数不会进行计算:

现在,该函数可与其他数值函数(如 NMinimize)一起使用:

Wolfram Research (2003),NMinimize,Wolfram 语言函数,https://reference.wolfram.com/language/ref/NMinimize.html (更新于 2024 年).

文本

Wolfram Research (2003),NMinimize,Wolfram 语言函数,https://reference.wolfram.com/language/ref/NMinimize.html (更新于 2024 年).

CMS

Wolfram 语言. 2003. "NMinimize." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2024. https://reference.wolfram.com/language/ref/NMinimize.html.

APA

Wolfram 语言. (2003). NMinimize. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/NMinimize.html 年

BibTeX

@misc{reference.wolfram_2024_nminimize, author="Wolfram Research", title="{NMinimize}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/NMinimize.html}", note=[Accessed: 21-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_nminimize, organization={Wolfram Research}, title={NMinimize}, year={2024}, url={https://reference.wolfram.com/language/ref/NMinimize.html}, note=[Accessed: 21-November-2024 ]}