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