NMaximize

NMaximize[f,x]

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

NMaximize[f,{x,y,}]

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

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

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

NMaximize[,xrdom]

x 限制在区域或域 rdom 内.

更多信息和选项

  • NMaximize 亦称为全局优化 (GO).
  • NMaximize 总是尝试求给定约束条件限制下 f 的全局最大值.
  • NMaximize 通常用于求给定约束条件下可能的最大值. 在不同的领域,这可能被称为最佳策略、最佳方案、最佳配置等.
  • NMaximize 返回形如 {fmax,{x->xmax,y->ymax,}} 的列表.
  • 如果 f 是线性的或凹的,cons 是线性的或凸的,NMaximize 给出的结果将是实数和整数值上的全局最大值;否则,有时结果可能只是局部最大值.
  • 如果 NMaximize 发现无法满足约束条件,则会返回 {Infinity,{x->Indeterminate,}}.
  • NMaximize 支持一种建模语言,其中目标函数 f 和约束条件 cons 是用依赖于标量或向量变量的表达式给出的. fcons 通常被解析为非常有效的形式,但只要 fcons 中的项给出变量的数值结果,NMaximize 通常可以找到解.
  • 约束条件 cons 可以是以下表达式的任意逻辑组合:
  • lhs==rhs等式
    lhs>rhs, lhsrhs, lhs<rhs, lhsrhs不等式 (LessEqual)
    lhsrhs, lhsrhs, lhsrhs, lhsrhs向量不等式 (VectorLessEqual)
    {x,y,}rdom区域或域的指定
  • NMaximize[{f,cons},xrdom] 实际上等价于 NMaximize[{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 的设置指定了搜索最大值所在位置(最大化点)和函数的最大值时应使用的位数.
  • NMaximize 持续运行,直到 AccuracyGoalPrecisionGoal 指定的目标实现为止.
  • NMaximize 的方法分为两类. 第一类方法利用问题的属性,因此当方法收敛时,找到的最大值保证是全局的. 第二类启发式方法使用的方法可能包括多个局部搜索,通常通过一些随机性进行调整以锁定全局最大值. 这些方法通常能找到全局最大值,但无法保证.
  • 在收敛到解时确保可以给出全局最大值的方法包括:
  • "Convex"只使用凸方法
    "MOSEK"对于凸问题,使用商用 MOSEK 库
    "Gurobi"对于凸问题,使用商用 Gurobi 库
    "Xpress"对于凸问题,使用商用 Xpress 库
  • 启发式方法包括:
  • "NelderMead"Nelder 和 Mead 的单纯形法
    "DifferentialEvolution"使用差分进化
    "SimulatedAnnealing"使用模拟退火
    "RandomSearch"使用从多个随机起始点中找到的最佳局部最大值
    "Couenne"使用 Couenne 库处理非凸混合整数非线性问题

范例

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

基本范例  (3)

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

提取最大化参数:

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

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

图示:

范围  (35)

基本用法  (11)

在约束条件 的限制下最大化

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

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

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

使用向量变量

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

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

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

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

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

求解:

最大化受约束条件 限制的

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

求解:

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

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

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

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

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

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

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

域约束条件  (5)

Integers 指定整数域约束条件:

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

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

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

可以指定 Or 约束条件:

区域约束条件  (5)

在区域上求最大值:

图示:

求被限制在两个不同区域的两点之间可能的最大距离:

图示:

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

图示:

求含有给定的三个点的半径最大的圆:

图示:

Circumsphere 直接给出同样的结果:

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

线性问题  (5)

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

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

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

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

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

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

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

Interval 指定变量的范围:

凸问题  (3)

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

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

最大化 ,使得 为半正定:

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

最大化凹目标函数 ,使得 为半正定且

绘制区域和最大化点:

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

最大化受不等式和范数约束条件限制的拟凹函数 . 目标函数是拟凹的,因为它是两个非负仿射函数的乘积:

最大化是通过最小化目标函数的负值 (拟凸函数)来解决的. 可将拟凸问题作为参数 的参数凸优化问题求解:

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

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

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

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

绘制该区域和最小化点:

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

绘制该区域和最小化点:

普通问题  (3)

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

绘制这些值:

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

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

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

绘制这些值:

选项  (10)

AccuracyGoal 和 PrecisionGoal  (2)

强调收敛标准

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

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

EvaluationMonitor  (1)

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

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

Method  (5)

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

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

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

绘制解并显示全局最大值:

"Couenne" 法查找包含多个局部最大值的函数的全局最大值:

绘制目标函数和全局最大值点:

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

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

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

StepMonitor  (1)

NMaximize 在求函数最大值的过程中采取的步骤:

WorkingPrecision  (1)

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

应用  (8)

几何问题  (4)

求使表面积最大为 1 的椭圆体的体积最大化的主轴 的半长:

表面积可以近似为:

通过最小化其倒数来最大化体积:

结果是一个球. 如果对轴的长度附加约束条件将使结果发生改变:

绘制所得椭圆体:

求凸多边形的解析中心. 解析中心是使约束条件下距离的乘积最大化的点:

凸多边形的每个边可以表示为半平面 的交线. 提取线性不等式:

目标是最大化 . 由于对数函数是单调的,这相当于最大化

求解该不受限的问题:

可视化中心的位置:

求恰好可以放置到凸多边形中的、参数为 的、面积最大的椭圆:

凸多边形的每个边可以表示为半平面 的交线. 提取线性不等式:

将参数化应用于半平面,可以得出 . 项 . 因此,约束条件为

最大化面积相当于最大化

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

求圆的最大半径 ,使得 个非重叠圆和其中心都包含在一个 正方形内. 边界约束条件可表达为

圆不可重叠:

组合这些变量:

求最大半径 和圆心

绘制圆和边界:

计算被圆覆盖的方形面积比例:

投资组合优化  (1)

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

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

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

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

可用 模拟买卖股票对股票市场价格的影响,该模型通过上镜图变换用幂锥来模拟:

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

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

范围 内最佳的 给出在收益和风险之间折衷的上限:

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

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

投资问题  (2)

求如何在两只股票和债券之间分配最多可达 $250,000 的资金,使得投资回报最大化. 令 为投资在两只股票上的金额, 为投资在债券上的金额:

投资于公用事业股票的金额不得超过 $40,000:

投资于债券的金额不能少于 $70,000:

投资于两只股票的总金额必须至少是投资总额的一半:

股票每年分别支付 9% 和 4% 的股息. 债券的股息为 5%. 总投资回报为:

购买股票和债券以及执行交易的成本为

可以通过最大化利润的同时最小化成本来找到最佳的投资金额:

投资总额及从投资中获得的年度股息为:

求可产生最大利润的最佳投资组合. 与每项投资相关的净现值和成本为:

为决策变量,如果选择了投资 . 目标是在最大程度地降低成本的同时最大化利润:

最多可用 $14,000 来进行投资:

求解最大化问题,获取最佳投资组合:

旅行商问题  (1)

找到一条推销员应选的穿过 个城市的路径,只访问每个城市一次,最小化行走的距离,同时最大程度地节省差旅成本. 生成位置:

为城市 和城市 之间的距离. 令 为决策变量,如果 ,则路径从城市 到城市

从一个城市到另一个城市的旅行预算是 15 美元. 如果两个城市相距 50 英里以内,则推销员支付 5 美元,否则统一支付 10 美元. 总共能节省:

目标是最小化距离,同时最大程度地节省成本:

推销员只能从一个城市到达,只能去往一个城市:

推销员不能到达一个城市并去往同一个城市:

推销员必须一次访问所有城市:

决策变量是一个二元变量,虚拟变量为

求使距离最小化的路径:

提取路径:

走过的距离为:

总共节省了:

属性和关系  (6)

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

NArgMax 给出使结果最大化的值的列表:

NMaxValue 只给出最大值:

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

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

获取最小化问题的对偶解:

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

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

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

比较两种方法的速度:

也可以计算 ParametricFunction 的导数:

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

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

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

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

FindMaximum 试图找到一个局部最大值,NMaximize 的目的在于找到全局最大值:

Maximize 求全局最大值,可在无限精度的情况下求解:

可能存在的问题  (4)

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

绘制局部最大值点:

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

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

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

NMaximize 使用自动选择的方法找到此问题的全局解:

使用 RegionBounds 计算边界框:

使用 NMaximizeNMinimize 计算相同的边界:

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

参数值为 2,进行计算:

对符号参数应用该函数,NIntegrate 生成了一条消息:

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

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

参数为数值时进行计算:

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

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

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

文本

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

CMS

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

APA

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

BibTeX

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

BibLaTeX

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