从系列:最优化数学建模
希瑟·高尔,MathWorks
用最优化工具箱的基于问题的方法表达和解决一个非线性优化问题。交互式地定义变量、目标函数和约束来反映非线性程序的数学表述。
首先创建一个优化问题来保持这个问题。接下来,定义优化变量及其边界。每个优化变量都有自己的显示名称、维度、类型和边界。定义一个或多个标量或数组变量来匹配数学语句中使用的变量。
用优化变量构建的优化表达式创建目标和约束。直接为理性表达式指定它们。用MATLAB指定其他表达式®函数,并使用转换函数将其转换为优化表达式。转换工具使使用现有函数定义优化问题变得容易。
使用显示功能来回顾已完成的优化问题。然后指定一个初始点并求解。解算器的类型是根据变量、目标和约束的类型自动选择的,从而使您不必了解许多可用解算器。
这个视频展示了如何在MATLAB中建立和解决一个约束非线性优化问题®.在本例中,目标是最小化受以下约束的多变量目标函数。绘制目标函数和约束条件。等高线表示目标函数。可行区域在蓝色椭圆内,红色曲线下方。
这是一个非线性优化问题。在MATLAB中有两种解决非线性优化问题的方法:基于问题的方法或基于求解器的方法。本例使用基于问题的方法,使用优化变量来定义目标和约束。有关基于求解器的方法,请参阅文档。
用这种方法解决非线性问题有一些共同的步骤。首先,设置问题,定义优化变量,定义目标函数和约束条件,然后求解问题。
现在我们已经用数学表达了这个问题,我们需要用MATLAB来表达这个问题。创建一个空的优化问题容器。优化问题包含问题信息,包括目标函数和约束条件。
接下来,我们将定义优化变量。一般来说,优化变量可以是标量、向量、矩阵或N-D数组。这个例子使用变量x和y,它们是标量。为这个问题创建标量优化变量。包括变量的边界。
接下来,我们将为目标函数创建一个优化表达式。目前,优化表达式不支持指数,因此将其作为标准MATLAB函数编写。金宝app要在基于问题的方法中使用这个目标函数,必须使用一个转换函数,它创建一个优化表达式。目标函数的文件名通过@ "at"符号传递,它创建了一个"函数句柄"。这告诉MATLAB识别或“指向”函数,但不是像MATLAB通常在没有符号时那样执行函数。现在,将目标函数加入到优化问题中。这个问题现在显示了一个非空的目标和相关的变量。
这个问题有以下非线性约束。第一个约束条件是解在椭圆内。您可以在编写时定义这个约束,并将其添加到问题中。前面的约束是一个多项式不等式,可以表示为一个优化表达式。第二个约束具有指数项,不能写成优化表达式。它还有x和y之外的额外参数,并包括变量a。创建一个带有x、y和a输入的函数。将函数转换为一个优化表达式。包括优化变量和参数a,在MATLAB工作空间中定义。表示不等式,并在问题中加入约束条件。
现在我们来检查问题的表述是否完整。优化变量、目标函数、约束条件和边界看起来都是正确的。
在解之前,我们需要定义一个初始点。x和y的初始值必须定义为一个结构。创建一个结构来表示初始点 x = -3, y = 3。从起点着手解决问题。通常,退出消息指示停止条件和优化过程中遇到的任何问题。在这里,退出消息和退出标志表明优化已成功完成。
试着从不同的起点解决这个问题。请求关于解决方案的额外输出。优化再次成功完成,但收敛到一个不同的解决方案。这比第一个有更高的目标函数值,说明这个解不是很好。
将解决方案点添加到可视化中。由图可知,一个解位于椭圆的边界上,另一个解位于指数约束和椭圆的边界上。
本视频演示了如何求解一个有约束的非线性优化问题。有关其他示例,请参阅文档。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。