来自系列:数学建模优化
希瑟Gorr,Mathworks
用基于问题的优化工具箱™方法表达并解决非线性优化问题。以交互方式定义变量,目标函数和约束,以反映非线性程序的数学陈述。
首先创建优化问题以解决问题。接下来,定义优化变量及其界限。每个优化变量都有自己的显示名称,维度,类型和界限。定义一个或多个标量或数组变量以匹配数学语句中使用的变量。
使用优化变量构建的优化表达式创建目标和约束。直接指定它们以获取Rational表达式。使用matlab指定其他表达式®使用转换功能函数并转换为优化表达式。转换工具可以使用现有功能轻松定义优化问题。
使用显示功能查看已完成的优化问题。然后指定初始点并解决。根据变量,目标和约束的类型自动选择求解器,使您需要了解许多可用求解器。
此视频显示如何在MATLAB中设置和解决约束的非线性优化问题®。在此示例中,目标是最小化该多变量目标函数,该函数受以下约束。绘制目标函数和约束。轮廓线显示目标函数。可行的区域位于蓝色椭圆和红色曲线下方。
这是一个非线性优化问题。有两种方法可以解决Matlab中的非线性优化问题:使用基于问题的方法或基于求解器的方法。此示例使用基于问题的方法,它使用优化变量来定义目标和约束。查看基于求解器的方法的文档。
通过这种方法解决非线性问题存在常见步骤。首先,您设置问题,定义优化变量,定义目标函数和约束,并解决问题。
现在我们在数学上表达了这个问题,我们需要在Matlab中表达问题。创建一个空的优化问题容器。优化问题包含问题信息,包括目标函数和约束。
接下来,我们将定义优化变量。通常,优化变量可以是标量,矢量,矩阵或n-d阵列。此示例使用变量x和y,这是标量。为此问题创建标量优化变量。包括变量上的界限。
接下来,我们将为目标函数创建一个优化表达式。目前,优化表达式不支持指数,因此将此写为标准的MATLAB函数。金宝app要在基于问题的方法中使用此目标函数,必须使用转换功能,该函数创建优化表达式。目标函数的文件名通过@“在”符号中传递,该符号创建“功能句柄”。这告诉MATLAB识别或“指向”函数,但不能执行函数,因为Matlab通常会没有符号。现在,将目标函数添加到优化问题。问题现在显示了非空的目标和相关变量。
此问题具有以下非线性约束。首先是解决方案在于椭圆形的约束。您可以将此约束定义为写入并将其添加到问题。以前的约束是多项式不等式,可以表示为优化表达。第二个约束具有指数术语,不能作为优化表达写入。这也具有超出x和y的额外参数,并包括变量a。创建输入x,y和a的函数。将函数转换为优化表达式。包括在MATLAB工作区中定义的优化变量和参数A.表达不等式并将限制添加到问题。
现在我们将检查问题配方是否完整。优化变量,目标函数,约束和界限都看起来正确。
在解决之前,我们需要定义初始点。x和y的初始值必须定义为结构。创建表示初始点ASX = -3,Y = 3的结构。从初始点解决问题。通常,退出消息指示在优化期间停止条件和遇到的任何问题。这里,退出消息和退出标志表示优化成功完成。
尝试解决不同初始点的问题。请求关于解决方案的其他输出。优化再次完成成功但融合到不同的解决方案。这具有比第一个更高的目标函数值,这表明该解决方案不如。
将解决方案点添加到可视化。该曲线表明,一个解决方案位于椭圆的边界,另一个解决方案在于指数约束和椭圆的边界。
该视频说明了求解受约束的非线性优化问题。有关其他示例,请参阅文档。
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。