这个例子展示了如何解决一个包含非线性约束的优化问题。通过编写一个计算等式和不等式约束值的函数来包含非线性约束。非线性约束函数具有这种语法
测查[c] = nonlinconstr (x)
这个函数c (x)
代表了约束c (x) < = 0
.这个函数量表(x)
代表了约束量表(x) = 0
.
注意:你必须让非线性约束函数返回两者c (x)
和量表(x)
,即使你只有一种非线性约束。如果约束不存在,则让函数返回[]
的约束。
假设你有非线性等式约束
以及非线性不等式约束
.
将这些约束重写为
的confuneq
的辅助函数这个例子到此结束以正确的语法实现这些不等式。
解决这个问题
受约束。的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
.
下面的代码创建confuneq
helper函数。
函数测查[c] = confuneq (x)非线性不等式约束C = -x(1)*x(2) - 10;%非线性等式约束Ceq = x(1)^2 + x(2) - 1;结束
下面的代码创建objfun
helper函数。
函数f = objfun f (x) = exp (x (1)) * (4 * x (1) ^ 2 + 2 * x (2) ^ 2 + 4 * x (1) * (2) + 2 * x (2) + 1);结束