栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数学建模常用算法汇总及python,MATLAB实现(三)—— 非线性规划

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数学建模常用算法汇总及python,MATLAB实现(三)—— 非线性规划

非线性规划

文章目录
  • 非线性规划
      • 定义
      • 1. 数学原型
      • 2. MATLAB内置函数原型
      • 3. 例题

定义

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

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} Acdot x le b qquadqquad;;; \ Aeq cdot x = beq qquadqquad\ left . begin{aligned} c(x) le 0 \ ceq(x) = 0 \ end{aligned} right }非线性部分 \ lb le x le ub qquadqquad;\ end{aligned} right . argminf(x)s.t.⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧​A⋅x≤bAeq⋅x=beqc(x)≤0ceq(x)=0​}非线性部分lb≤x≤ub​



2. MATLAB内置函数原型
[x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options)

参数含义

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

  • fun: 优化目标f(x)

  • x0是x的初始值(非线性规划算法必须要一个初始值, 一般就设置成随机值, 具体原因在此不解释)

  • nonlcon: c(x), 和ceq(x)

  • option: 优化参数

  • 其他的参数跟线性规划一模一样, 数学原型中也看得出来是啥意思, 具体见线性规划的文章

    线性规划链接: 数学建模常用算法汇总及python,MATLAB实现(一)—— 线性规划



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^2ge 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.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​x12​−x2​+x32​≥0x1​+x22​+x32​≤20−x1​−x22​+2=0x2​+2x32​=3x1​,x2​,x3​≥0​

代码

注意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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000752.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号