NMaximize
NMaximize[f,x]
用数值法搜索关于 x 的 f 的全局最大值.
NMaximize[f,{x,y,…}]
用数值法搜索关于 x、y、 … 的 f 的全局最大值.
NMaximize[{f,cons},{x,y,…}]
用数值法搜索约束条件 cons 限制下 f 的全局最大值.
NMaximize[…,x∈rdom]
将 x 限制在区域或域 rdom 内.
更多信息和选项
- NMaximize 亦称为全局优化 (GO).
- NMaximize 总是尝试求给定约束条件限制下 f 的全局最大值.
- NMaximize 通常用于求给定约束条件下可能的最大值. 在不同的领域,这可能被称为最佳策略、最佳方案、最佳配置等.
- NMaximize 返回形如 {fmax,{x->xmax,y->ymax,…}} 的列表.
- 如果 f 是线性的或凹的,cons 是线性的或凸的,NMaximize 给出的结果将是实数和整数值上的全局最大值;否则,有时结果可能只是局部最大值.
- 如果 NMaximize 发现无法满足约束条件,则会返回 {Infinity,{x->Indeterminate,…}}.
- NMaximize 支持一种建模语言,其中目标函数 f 和约束条件 cons 是用依赖于标量或向量变量的表达式给出的. f 和 cons 通常被解析为非常有效的形式,但只要 f 和 cons 中的项给出变量的数值结果,NMaximize 通常可以找到解.
- 约束条件 cons 可以是以下表达式的任意逻辑组合:
-
lhs==rhs 等式 lhs>rhs, lhs≥rhs, lhs<rhs, lhs≤rhs 不等式 (LessEqual、…) lhsrhs, lhsrhs, lhsrhs, lhsrhs 向量不等式 (VectorLessEqual、…) {x,y,…}∈rdom 区域或域的指定 - NMaximize[{f,cons},x∈rdom] 实际上等价于 NMaximize[{f,cons&&x∈rdom},x].
- 对于 x∈rdom,可用 Indexed[x,i] 来指代不同的坐标.
- 可能的域 rdom 包括:
-
Reals 实标量变量 Integers 整数标量变量 Vectors[n,dom] 中的向量变量 Matrices[{m,n},dom] 中的矩阵变量 ℛ 限制在几何区域 中的向量变量 - 在默认情况下,所有变量假定为实数.
- 可给出下列选项:
-
AccuracyGoal Automatic 追求多少位的准确度 EvaluationMonitor None 计算 f 时要计算的表达式 MaxIterations Automatic 使用的最大迭代次数 Method Automatic 使用的方法 PrecisionGoal Automatic 追求多少位的精度 StepMonitor None 每次迭代时要计算的表达式 WorkingPrecision MachinePrecision 内部计算使用的精度 - AccuracyGoal 和 PrecisionGoal 的设置指定了搜索最大值所在位置(最大化点)和函数的最大值时应使用的位数.
- NMaximize 持续运行,直到 AccuracyGoal 或 PrecisionGoal 指定的目标实现为止.
- NMaximize 的方法分为两类. 第一类方法利用问题的属性,因此当方法收敛时,找到的最大值保证是全局的. 第二类启发式方法使用的方法可能包括多个局部搜索,通常通过一些随机性进行调整以锁定全局最大值. 这些方法通常能找到全局最大值,但无法保证.
- 在收敛到解时确保可以给出全局最大值的方法包括:
-
"Convex" 只使用凸方法 "MOSEK" 对于凸问题,使用商用 MOSEK 库 "Gurobi" 对于凸问题,使用商用 Gurobi 库 "Xpress" 对于凸问题,使用商用 Xpress 库 - 启发式方法包括:
-
"NelderMead" Nelder 和 Mead 的单纯形法 "DifferentialEvolution" 使用差分进化 "SimulatedAnnealing" 使用模拟退火 "RandomSearch" 使用从多个随机起始点中找到的最佳局部最大值 "Couenne" 使用 Couenne 库处理非凸混合整数非线性问题
范例
打开所有单元关闭所有单元范围 (35)
基本用法 (11)
可用 VectorGreaterEqual 表示几个线性不等式约束条件:
用 v>= 或 \[VectorGreaterEqual] 输入向量不等式符号 :
如果想要避免 中不想要的逐项运算,可使用 Inactive[Plus]:
VectorGreaterEqual 表示关于 "NonNegativeCone" 的锥不等式:
如果想明确指定锥体的尺寸,可使用 {"NonNegativeCone",n}:
用 Indexed 访问向量变量的分量,如 :
当向量变量不明确时,用 Vectors[n,dom] 指定维度和域:
用 NonNegativeReals () 指定非负约束条件:
用 NonPositiveReals () 指定非正约束条件:
域约束条件 (5)
用 Integers 指定整数域约束条件:
用 Vectors[n,Integers] 指定向量变量的整数域约束条件:
用 NonNegativeIntegers () 指定非负整数域约束条件:
用 NonPositiveIntegers () 指定非正整数域约束条件:
可以指定 Or 约束条件:
区域约束条件 (5)
用 Circumsphere 直接给出同样的结果:
线性问题 (5)
凸问题 (3)
可转化为凸问题的问题 (3)
选项 (10)
AccuracyGoal 和 PrecisionGoal (2)
Method (5)
WorkingPrecision (1)
工作精度设为 时,AccuracyGoal 和 PrecisionGoal 默认值为 :
应用 (8)
几何问题 (4)
投资组合优化 (1)
投资问题 (2)
属性和关系 (6)
NMaximize 给出最大值,并以规则形式给出使结果最大化的变量值:
NArgMax 给出使结果最大化的值的列表:
NMaxValue 只给出最大值:
对于凸问题,可用 ConvexOptimization 获取解的其他属性:
对于含有参数的凸问题,用 ParametricConvexOptimization 给出 ParametricFunction:
可通过计算 ParametricFunction 求得参数的值:
用 NMaximize 定义参数化问题的函数:
也可以计算 ParametricFunction 的导数:
对于含有参数化约束条件的凸问题,RobustConvexOptimization 将找到适用于所有可能参数值的最优值:
对于特定参数值,NMaximize 可能会找到更大的值:
FindMaximum 试图找到一个局部最大值,NMaximize 的目的在于找到全局最大值:
Maximize 求全局最大值,可在无限精度的情况下求解:
可能存在的问题 (4)
对于非线性函数,NMaximize 的某些方法有时可能只能找到局部最大值:
对于某些方法,NMaximize 找到的是圆盘上二维函数的局部最大值:
NMaximize 使用自动选择的方法找到此问题的全局解:
使用 RegionBounds 计算边界框:
使用 NMaximize 和 NMinimize 计算相同的边界:
对符号参数应用该函数,NIntegrate 生成了一条消息:
当该函数与其他数值函数(如 NMaximize)一起使用时,也会产生警告消息:
定义一个仅在其参数为数值时才进行计算的函数,以避免出现这些消息:
现在,该函数可与其他数值函数(如 NMaximize)一起使用:
文本
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 年