主要内容

非线性等式和不等式约束

这个例子展示了如何解决一个包含非线性约束的优化问题。包括非线性约束通过编写一个函数,计算两个平等和不平等的约束值。一个非线性约束函数的语法

测查[c] = nonlinconstr (x)

这个函数c (x)代表了约束c (x) < = 0。这个函数量表(x)代表了约束量表(x) = 0

注意:你必须有非线性约束函数返回c (x)量表(x),即使你只有一个类型的非线性约束。如果一个约束条件不存在,函数返回[]的约束。

非线性约束

假设你有非线性等式约束

x 1 2 + x 2 = 1

和非线性不等式约束

x 1 x 2 - - - - - - 1 0

重写这些约束

x 1 2 + x 2 - - - - - - 1 = 0 - - - - - - x 1 x 2 - - - - - - 1 0 0

confuneq辅助函数在这个例子实现了这些不等式在正确的语法。

目标函数

解决这个问题

最小值 x f ( x ) = e x 1 ( 4 x 1 2 + 2 x 2 2 + 4 x 1 x 2 + 2 x 2 + 1 )

受约束。的objfun辅助函数在这个例子实现这个目标函数。

解决问题

通过调用解决问题fmincon解算器。这个解算器需要一个初始点;使用点x0 = [1]

x0 = [1];

这个问题没有边界或线性约束,所以这些输入设置[]

一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];

解算器。

[x, fval] = fmincon (Aeq @objfun x0, A, b,说真的,磅,乌兰巴托,@confuneq)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
x =1×2-0.7529 - 0.4332
fval = 1.5093

满足约束条件的解算器报告的解决方案。检查的非线性约束的解决方案。

测查[c] = confuneq (x)
c = -9.6739
测查= 2.0668 e-12

c小于0,。量表信= 0在默认约束的宽容1 e-6

辅助函数

下面的代码创建confuneqhelper函数。

函数测查[c] = confuneq (x)%非线性不等式约束c = x - x (1) * (2) - 10;%非线性等式约束测查x = x (1) ^ 2 + (2) - 1;结束

下面的代码创建objfunhelper函数。

函数f = objfun f (x) = exp (x (1)) * (4 * x (1) ^ 2 + 2 * x (2) ^ 2 + 4 * x (1) * (2) + 2 * x (2) + 1);结束

相关的话题