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