主要内容

非线性等式和不等式约束

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

测查[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(1)*x(2) - 10;%非线性等式约束Ceq = x(1)^2 + x(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);结束

相关的话题