非线性规划问题的基本内容

非线性规划解决的是自变量在一定的非线性约束或线性约束组合条件下,使得非线性目标函数求得最大值或者最小值的问题。

当目标函数为最小值时,上述问题可以写成如下形式:

\[\min z={F(x)}
\]

\[\text { s.t. }
\left\{\begin{array}{l}
{\mathbf{A}\mathbf{X} \leqslant \mathbf{B}}
\\ {\mathbf{A}_{\mathrm{eq}} \mathbf{X}=\mathbf{B}_{\mathrm{eq}}}
\\ G(x) \leqslant 0
\\ H_{\mathrm{eq}}(x) = 0
\\ {\mathbf{LB} \leqslant \mathbf{X} \leqslant \mathbf{UB}}
\end{array}\right.
\]

其中

\(F(x)\) 为非线性目标函数

\(G(x)\) 为非线性不等式约束条件

\(H_\mathrm{eq}(x)\) 为非线性等式约束条件

\(\mathbf{X}\) 为决策变量向量

\(\mathbf{A}\) 为线性不等式系数矩阵

\(\mathbf{B}\) 为线性不等式右端常数向量

\(\mathbf{A}_\mathrm{eq}\) 为线性等式系数矩阵

\(\mathbf{B}_\mathrm{eq}\) 为线性等式右端常数向量

\(\mathbf{L B}\) 为决策变量下界向量

\(\mathbf{U B}\) 为决策变量上界向量

Matlab模型代码

调用形式

    [X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = fmincon(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON) % 统一形式
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = fmincon(F,X0,A,B,Aeq,Beq,LB,UB,NONLCON) % 线性目标函数,包含非线性约束
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = fmincon(@(X)MYOBJ(X),X0,A,B,Aeq,Beq,LB,UB,@(X)MYCON(X)) % 自己定义目标函数和非线性约束函数
% 目标函数
function F = MYOBJ(X)
F = ......
% 非线性约束函数
function [G,Heq] = MYCON(X)
G = ..... % 非线性不等式约束条件
Heq = ..... % 非线性等式约束条件

输入变量

  • FUN 为目标函数,可以自己定义,输入变量X,输出目标值
  • X0 为初始解
  • A 为不等式约束系数矩阵(注意默认不等式方向为小于等于,若为大于等于,需要将其取相反数)
  • B 为不等式右端常数向量(注意默认不等式方向为小于等于,若为大于等于,需要将其取相反数)
  • Aeq 为等式约束系数矩阵
  • Beq 为等式右端常数向量
  • LB 为决策变量下界向量
  • UB为决策变量上界向量
  • NONLCON 为非线性约束,可以自己定义,其中包括非线性不等式约束,非线性等式约束两种约束。输入变量X,输出不等式计算值,等式计算值

在调用时,输入参数不存在时,可以将其输入用 [] 空矩阵表示。

输出变量

  • X 为最优解
  • FVAL 为最优目标值
  • EXITFLAG 为运行结束标志,当等于1时,表示程序收敛于解 X;当等于0时,表示程序运行次数到达最大;当小于0时,说明情况较多
  • OUTPUT 为程序迭代次数
  • LAMBDA 为解X相关的Largrange乘子和影子价格

案例演示

目标函数与约束条件

\[\min f(x)=x_{1}^{2}+x_{2}^{2}+8$$ $$\text { s.t. }\left\{\begin{array}{l}{x_{1}^{2}-x_{2} \geq 0} \\ {-x_{1}-x_{2}^{2}+2=0} \\ {x_{1}, x_{2} \geq 0}\end{array}\right.
\]

Matlab程序

clc
clear
close all
x0=rand(2,1); % 随机产生初始解
A=[];
B=[];
Aeq=[];
Beq=[];
LB=[0,0];
UB=[];
[x,fval,exitflag]=fmincon(@(x)myobj(x),x0,A,B,Aeq,Beq,LB,UB,@(x)mycon(x)) % 目标函数
function F = myobj(x)
F = x(1)^2+x(2)^2+8;
end
% 非线性约束函数
function [G,Heq] = mycon(x)
G = -x(1)^2+x(2);
Heq = -x(1)-x(2)^2+2;
end

运行结果

x =

    1.0000
1.0000 fval = 10.0000 exitflag = 1

Matlab 非线性规划问题模型代码的更多相关文章

  1. Matlab 线性规划问题模型代码

    线性规划问题的基本内容 线性规划解决的是自变量在一定的线性约束条件下,使得线性目标函数求得最大值或者最小值的问题. \[ \min z=\sum_{j=1}^{n} f_{j} x_{j} \] \[ ...

  2. Matlab 图论最短路问题模型代码

    最短路问题的基本内容 最短路问题研究的是,在一个点与点之间连接形成的网络图中,对应路径赋予一定的权重(可以理解为两点之间的距离),计算任意两点之间如何和走,路径最短的问题.在这里的距离可以理解成各种两 ...

  3. Matlab 模拟退火算法模型代码

    function [best_solution,best_fit,iter] = mySa(solution,a,t0,tf,Markov) % 模拟退化算法 % ===== 输入 ======% % ...

  4. Matlab 整数线性规划问题模型代码

    整数线性规划问题的基本内容 整数线性规划解决的是自变量在一定的线性约束条件下,使得线性目标函数求得最大值或者最小值的问题.其中自变量只能取整数.特别地,当自变量只能取0或者1时,称之为 0-1 整数规 ...

  5. [原创] Matlab 指派问题模型代码

    指派问题的基本内容 一般来说指派问题解决的是如何将任务分配到人,使得任务完成的效益最大化(成本型效益则求最小值,利润型效益则求最大值).上述问题一个 0 - 1 整数规划问题. 问题围绕着任务和人展开 ...

  6. MATLAB Coder从MATLAB生成C/C++代码步骤

    MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. 使用MATLAB Coder产生代码的3个步骤: 准备用于产生代码的MATLAB算法: 检查MATLAB代 ...

  7. 转 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤

    MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. http://www.mathworks.cn/products/matlab-coder/ 使用MATL ...

  8. 多路复用I/O模型poll() 模型 代码实现

    多路复用I/O模型poll() 模型 代码实现 poll()机制和select()机制是相似的,都是对多个描述符进行轮询的方式. 不同的是poll()没有描述符数目的限制. 是通过struct pol ...

  9. Windows Socket五种I/O模型——代码全攻略(转)

    Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操 ...

随机推荐

  1. [Java] Spring boot 的 SrpingSecurity 框架搭建

    参考: SrpingSecurity]之一:框架搭建https://blog.csdn.net/qq_28296925/article/details/82021092 [SpringSecurity ...

  2. 为什么vue组件中的data不是一个对象而是一个函数

    如果两个实例引用同一个对象,当其中一个实例的属性发生改变时,另一个实例属性也随之改变,只有当两个实例拥有自己的作用域时,才不会相互干扰. 这是因为JavaScript的特性所导致,在component ...

  3. shell 输出文件各行的长度

    test.sh #!/bin/bash string="hello,shell,split,test" array=(${string//,/ }) for var in ${ar ...

  4. BDD的概念

    BDD的概念Behavior-Driven Development (BDD) is a set of software engineering practices designed to help ...

  5. Java Array二维数组使用

    二维数组:元素为一维数组的数组 package myArray.arrayarray; /* *二维数组:元素为一维数组的数组 * * 定义格式: * A:数组类型[][] 数组名: (推荐用法) * ...

  6. Centos7 守护进程supervisord 安装使用

    pervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统.它 ...

  7. DataGrip:Error encountered when performing Introspect schema xxx 错误的解决方法

    datagrip的问题,转载自: https://www.cnblogs.com/geb515/p/7995249.html 把Introspect using JDBC _metadata打上勾 然 ...

  8. php – cURL从重定向获取url

    我目前正在使用cURL尝试从网站刮刀的重定向获取URL.我只需要网站上的网址.我在过去几天研究过stackoverflow和其他网站,但都没有成功.我目前使用的代码来自这个网站: $url = &qu ...

  9. dubbo连接过程

    场景1 启动时 dubbo服务提供端在Zookeeper上注册的节点目录:假设接口名称是:com.bob.dubbo.service.CityDubboService dubbo服务提供端连接到注册中 ...

  10. SNF快速开发平台2019-角色、权限、账户的概念理解-非常全的理论讲解权限控制

    组织模型   资源模型  操作模型 谁能够执行哪些操作    执行资源的范围 资源概念资源就是想要的到的最终物质,我们可以给每一个资源定义一个权限,也可以给某一类资源定义一个权限 权限概念权限是对资源 ...