从系列:最优化数学建模
希瑟·高尔,MathWorks
使用优化工具箱(optimization Toolbox™)中基于问题的方法来表示和解决非线性优化问题。交互式地定义变量、目标函数和约束,以反映非线性程序的数学陈述。
首先创建一个优化问题来保存问题。接下来,定义优化变量及其界限。每个优化变量都有自己的显示名称、维度、类型和界限。定义一个或多个标量或数组变量,以匹配数学语句中使用的变量。
使用优化变量构建的优化表达式创建目标和约束。直接为rational表达式指定它们。用MATLAB指定其他表达式®函数并转换为优化表达式与转换函数。转换功能使得使用现有函数定义优化问题变得很容易。
使用显示功能查看已完成的优化问题。然后指定一个初始点并求解。求解器的类型是根据变量、目标和约束的类型自动选择的,这样您就不需要了解许多可用的求解器。
这个视频展示了如何在MATLAB中建立并解决一个有约束的非线性优化问题®。在本例中,目标是在以下约束条件下最小化这个多变量目标函数。绘制目标函数和约束条件。等高线表示目标函数。可行域在蓝色椭圆内,红色曲线下方。
这是一个非线性最优化问题。在MATLAB中求解非线性优化问题有两种方法:基于问题的方法和基于求解器的方法。本例使用基于问题的方法,该方法使用优化变量来定义目标和约束。有关基于求解器的方法,请参阅文档。
用这种方法解决非线性问题有一些常见的步骤。首先,设置问题,定义优化变量,定义目标函数和约束,然后解决问题。
现在我们已经用数学表达了这个问题,我们需要在MATLAB中表达这个问题。创建一个空的优化问题容器。优化问题包含问题信息,包括目标函数和约束条件。
接下来,我们将定义优化变量。通常,优化变量可以是标量、向量、矩阵或N-D数组。这个例子使用变量x和y,它们是标量。为这个问题创建标量优化变量。包括变量的界限。
接下来,我们将为目标函数创建一个优化表达式。目前,优化表达式不支持指数函数,所以把它写成标准的MATLAB函数。金宝app要在基于问题的方法中使用这个目标函数,必须使用一个转换函数,它将创建一个优化表达式。目标函数的文件名用@ "at"符号传递,这将创建一个"函数句柄"。This tells MATLAB to identify or "point to" the function, but not to execute the function as MATLAB typically would do without the symbol. Now, add the objective function to the optimization problem. The problem now shows a non-empty objective and associated variables.
这个问题有以下非线性约束。第一个约束条件是解位于椭圆上。您可以在编写约束时定义它,并将其添加到问题中。该约束为多项式不等式,可表示为优化表达式。第二个约束有一个指数项,不能写成一个优化表达式。它还有x和y之外的额外参数,包括变量a。用输入x、y和a创建一个函数。将函数转换为优化表达式。包括在MATLAB工作空间中定义的优化变量和参数a。表示不等式并在问题中加入约束条件。
现在我们来检查一下问题的表述是否完整。优化变量、目标函数、约束和界限看起来都是正确的。
在求解之前,我们需要定义一个初始点。x和y的初始值必须定义为一个结构。创建一个结构代表了初始点 x = 3, y = 3。从一开始就解决问题。通常,退出消息指示优化过程中遇到的停止条件和任何问题。在这里,退出消息和退出标志表明优化已经成功完成。
试着从不同的起点解决问题。请求关于解决方案的其他输出。优化再次成功完成,但收敛到一个不同的解决方案。这个目标函数值比第一个目标函数值高,说明这个解不是很好。
将解决方案点添加到可视化中。图中显示,一个解位于椭圆的边界上,另一个解位于指数约束和椭圆的边界上。
本视频演示了如何求解一个约束非线性优化问题。有关其他示例,请参见文档。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文),以获得最佳的网站表现。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
本网站使用cookies来改善您的用户体验,个性化内容和广告,并分析网站流量。继续使用本网站,即表示您同意我们使用cookies。请参阅我们的隐私政策了解更多关于cookies和如何更改您的设置。