数学建模 非线性规划(NLP)

简介: 数学建模 非线性规划(NLP)

非线性规划(NLP)

有约束条件的非线性规划

非线性规划_NLP_1.png

例题1

非线性规划_NLP_2.png

% 非线性规划NLP
%如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。
%{
   
   
[x,fval,exitflag,output,lambda,grad,hessian]= fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB,'nonlcon',options)
其中,大部分参数同线性规划;
    VLB和UVB分别是变量x的下界和上界;
    "fun'为用M文件定义的目标函数F(x);
“nonlcon'为用M文件定义的非线性向量函数[C(x),Ceq(x)]。
A,b,Aeq,beq定义了线性约束A.x<b,Aeq.x =beq,
如果没有线性约束,则A=[],b=[],Aeq =[],beq =[]%}
function func_1 = fun1(x)
    func_1 = x(1)^2+x(2)^2+8;
end

function [C,Ceq] = fun2(x)
    C = -x(1)^2+x(2);   %matlab标准,不等式通通都是小于号 所以取负号
    Ceq = x(1)+x(2)^2-2;
end

x0 = rand(2,1);
VLB = zeros(2,1);
[x,fval,exitflag,output,lambda,grad,hessian]= fmincon('fun1',x0,[],[],[],[],VLB,[],'fun2')

lingo

非线性规划_NLP_2 Lingo.png

例题2

非线性规划_NLP_3.png

% 非线性规划NLP
%如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。
%{
   
   
[x,fval,exitflag,output,lambda,grad,hessian]= fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB,'nonlcon',options)
其中,大部分参数同线性规划;
    VLB和UVB分别是变量x的下界和上界;
    "fun'为用M文件定义的目标函数F(x);
“nonlcon'为用M文件定义的非线性向量函数[C(x),Ceq(x)]。
A,b,Aeq,beq定义了线性约束A.x<b,Aeq.x =beq,
如果没有线性约束,则A=[],b=[],Aeq =[],beq =[]%}
%目标函数

function fun_c = fun_c1(x)
    fun_c = x(1)^2+x(2)^2+x(3)^2+8;  %f(x)= x1^2+x2^2+x3^2+8
end

% 非线性函数
function [fun_c,fun_ceq] = fun_c2(x)
    fun_c = [-x(1)^2+x(2)-x(3)^2 , x(1)+x(2)^2+x(3)^2-20]; %大于号转换小于号 写成符号
    %非线性约束条件 函数表达式 不等式矩阵
    fun_ceq = [-x(1)-x(2)^2+2 , x(2)+2*x(3)^2-3];
    %非线性约束条件 函数表达式 等式矩阵
end

x0_1= rand(3,1);
VLB1 = zeros(3,1);
[x,fval]= fmincon('fun_c1',x0_1,[],[],[],[],VLB1,[],'fun_c2')
例题3

非线性规划_NLP_5.png
非线性规划_NLP_6.png
非线性规划_NLP_7.png

二次规划

若某非线性规划的目标函数为自变量x的二次函数,约束条件又全是线性的,则称这种规划为二次规划。

    min 1/2*(x)'H(x)+(f)'x %‘'’ 单引号表示转置符号
    %二次型换实对称矩阵时,需要把矩阵元素扩大2%eg: f = 2*x1^2-4*x1*x2+4*x2^2-6*x1-3*x2  %只需要看二次型,和交互项
    %实对称矩阵 [2,-2;-2,2] 二次项系数不变化,交互项减半 
    %在调用二次规划函数时,需要把实对称矩阵变成2

二次规划1.png
二次规划2.png

%二次规划(线性代数 二次型)(题目见--优化算法-非线性规划.md)
%{
   
   
[x,fval,exitflag,output] = quadprog(H,f,A,b,Aeq,beq,LB,UB,x0,options)
\其中,大部分参数同线性规划;
    LB和VB分别是变量x的下界和上界;
    A和b对应不等式约束Ax<b;
    Aeq和beq对应等式约束Ax=b;
    H %实对称矩阵的2倍
    f %一次项系数
    x0为x的初始值;options为控制参数。
%}
%二次型换实对称矩阵

Hx2 = 2*[2,-2;-2,4]; %实对称矩阵
fx2 = [-6,-3];%一次项系数
Ax2 = [1,1;4,1];%不等式约束条件
bx2 = [3;9];%不等式约束条件

[x,fval,exitflag] = quadprog(Hx2,fx2,Ax2,bx2,[],[],zeros(2,1))

无约束条件的非线性规划

  1. fminbnd 查找单变量函数在定区间上的最小值
    fminbnd.png

    x = fminbnd(fun,x1,x2) 返回一个值 x,该值是 fun 中描述的标量值函数在区间 x1 < x < x2 中的局部最小值。
    
  2. fminunc 求无约束多变量函数的最小值

    [x,fval,exitflag,output,lambda,grad,hessian]= fmincon('fun',x0,options)
    options参数:
         LargeScale,on或off设置大型中型优化算法;
         HessUpdate,设置中型优化算法的搜索方向的算法。
         'bfgs'(默认)为拟牛顿法的BFGS公式;
         'dfp'为拟牛顿法的DFP公式;
         'steepdesc'为最速下降法;
         LineSearchType,设置中型优化算法的步长一维搜索的两种算法。
         'quadcubic'(默认)为混合的二次和三次多项式插值;
         'cubicpoly'为三次多项式插值。
    
  3. fminsearch 使用无导数法计算无约束的多变量函数的最小值
    fminsearch.png
    ```c
    x = fminsearch(fun,x0) 在点 x0 处开始并尝试求 fun 中描述的函数的局部最小值 x。
    %无约束条件的非线性规划(题目见--优化算法-非线性规划.md)
    %绘制图像
    f3x = linspace(-pi, pi);
    y3x = abs(1./(f3x));
    plot(f3x, y3x,'ro');
    grid on

x3_0 =1;%初值
x3_1 =-3;
x3_2 =1;
[x1,fval1,exitflag] = fminbnd(@fun3, x3_1, x3_2) %在x3_1~x3_2之间的最值
[x2,fval2,exitflag] = fminunc(@fun3, x3_0)
[x3,fval3,exitflag] = fminsearch(@fun3, x3_0)

##### 函数说明
(1)三个函数可能只输出局部最优解。
(2)三个函数均只对变量为实数的问题进行优化。
(3) fminunc函数要求目标函数必须连续。
##### 例题(3种类型函数求解)
![fminpro.png](https://ucc.alicdn.com/images/user-upload-01/img_convert/2b078dec4941a3a93f5a888cab0e2b9a.png)
![abs.png](https://ucc.alicdn.com/images/user-upload-01/img_convert/30e23d5904dcdbdc6d6715448e1e77e6.png)
```c
%无约束条件的非线性规划(题目见--优化算法-非线性规划.md)
%绘制图像
f3x = linspace(-pi, pi);
y3x = abs(1./(f3x));
plot(f3x, y3x,'ro');
grid on

x3_0 =1;%初值
x3_1 =-3;
x3_2 =1;
[x1,fval1,exitflag] = fminbnd(@fun3, x3_1, x3_2) %在x3_1~x3_2之间的最值
%fminunc函数优化成功,但解是错误的(fminunc的目标函数必须是连续函数,本例目标函数不连续)
[x2,fval2,exitflag] = fminunc(@fun3, x3_0)
%fminsearch函数优化失败,因为该函数只能求解多变量目标函数。
[x3,fval3,exitflag] = fminsearch(@fun3, x3_0)

fminbnd1.png
fminunc.png
fminsearch2.png

目录
相关文章
|
2天前
|
机器学习/深度学习 算法 网络架构
matlab使用贝叶斯优化的深度学习
matlab使用贝叶斯优化的深度学习
|
5月前
|
机器学习/深度学习 人工智能 算法
数学建模——人工神经网络模型
数学建模——人工神经网络模型
|
9月前
|
自然语言处理 算法
nlp入门之隐马尔科夫模型
本文简述了隐马尔科夫模型的原理,并且使用hmmlearn库进行隐马尔科夫模型的实验
|
10月前
|
数据采集 自然语言处理 算法
NLP之文本聚类算法综述
NLP之文本聚类算法综述
611 0
|
10月前
|
机器学习/深度学习 数据采集 人工智能
NLP之文本分词综述
NLP之文本分词综述
300 0
|
机器学习/深度学习 自然语言处理 并行计算
【NLP】Transformer理论解读
Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,目前已经在目标检测、自然语言处理、时序预测等多个深度学习领域获得了应用,成为了新的研究热点。
177 0
【NLP】Transformer理论解读
|
机器学习/深度学习 人工智能 自然语言处理
斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法
NLP课程第16讲介绍了共指消解(指代消解) 的定义、作用和应用、指代检测、指代对模型、指代排序模型 、指代聚类模型 、效果评估等。
893 1
斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法
|
机器学习/深度学习 人工智能 自然语言处理
斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络
NLP课程第18讲介绍了基于词向量空间模型的构建、结构反向传播(BTS)及其Python编程、简单TreeRNN及应用、 复杂TreeRNN结构、斯坦福大学HAI研究所等。
488 1
斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络
|
机器学习/深度学习 数据采集 人工智能
斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来
NLP课程第20讲是课程最后一讲,介绍了NLP的兴起历程和发展方向,包括使用未标记数据进行翻译、大模型、GPT-2、QuAC、HotPotQA等。
455 1
斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来
|
机器学习/深度学习 人工智能 自然语言处理
斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络
NLP课程第11讲介绍了卷积神经网络 (CNN)及模型细节,并讲解CNN和深度CNN在文本分类中的使用,最后介绍了Q-RNN模型。
434 1
斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络