非线性规划

定义

相较于线性规划, 增加了非线性部分不等式或等式约束的模型(见下面数学原型, 不多解释)

1. 数学原型

a r g m i n    f ( x ) s . t . { A ⋅ x ≤ b        A e q ⋅ x = b e q c ( x ) ≤ 0 c e q ( x ) = 0 } 非 线 性 部 分 l b ≤ x ≤ u b    argmin \; f(x) \qquad s.t. \left\{ \begin{aligned} A\cdot x \le b \qquad\qquad\;\;\; \\ Aeq \cdot x = beq \qquad\qquad\\ \left . \begin{aligned} c(x) \le 0 \\ ceq(x) = 0 \\ \end{aligned} \right \}非线性部分 \\ lb \le x \le ub \qquad\qquad\;\\ \end{aligned} \right . argminf(x)s.t.AxbAeqx=beqc(x)0ceq(x)=0}线lbxub



2. MATLAB内置函数原型

[x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options)

参数含义

命名请参考数学原型中的字母



3. 例题

题目
a r g m i n    f ( x ) = x 1 2 + x 2 2 + x 3 2 + 8 s . t .    { x 1 2 − x 2 + x 3 2 ≥ 0 x 1 + x 2 2 + x 3 2 ≤ 20 − x 1 − x 2 2 + 2 = 0 x 2 + 2 x 3 2 = 3 x 1 , x 2 , x 3 ≥ 0 argmin \; f(x) = x_1^2 + x_2^2 + x^2_3 +8\\ s.t. \; \left \{ \begin{aligned} x_1^2 - x_2 + x_3^2\ge 0 \\ x_1 + x_2^2 + x_3^2 \le 20 \\ -x_1 - x_2^2 + 2 = 0 \\ x_2 +2x_3^2 = 3\\ x_1, x_2, x_3 \ge 0 \\ \end{aligned} \right . argminf(x)=x12+x22+x32+8s.t.x12x2+x320x1+x22+x3220x1x22+2=0x2+2x32=3x1,x2,x30

代码

注意matlab不支持自定义函数定义在主脚本中

必须创建一个.m文件File->New->Function 在.m文件中定义函数

  1. 函数fun的定义(定义在另一个.m文件中)
function res = fun(x)
    res = sum(x.^2) + 8;
end
  1. 函数nonlcon的定义
function [g, h] = nonlcon(x)
    g = [-x(1)^2 + x(2) - x(3)^2, x(1) + x(2)^2 + x(3)^2 - 20];
    h = [-x(1) - x(2)^2 + 2, x(2) + 2 * x(3)^2 - 3];
end
  1. 主脚本
clc
clear


[x, fval] = fmincon('fun', rand(3, 1), [], [], [], [], zeros(3, 1), [], 'nonlcon', [])
% 自定义函数作为参数传递要加上'', 不能直接写上函数名

附上答案

x =

    0.5522
    1.2033
    0.9478


fval =

   10.6511
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐