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

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

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

\[\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模型代码

调用形式

  1. [X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = fmincon(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON) % 统一形式
  2. [X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = fmincon(F,X0,A,B,Aeq,Beq,LB,UB,NONLCON) % 线性目标函数,包含非线性约束
  3. [X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = fmincon(@(X)MYOBJ(X),X0,A,B,Aeq,Beq,LB,UB,@(X)MYCON(X)) % 自己定义目标函数和非线性约束函数
  4. % 目标函数
  5. function F = MYOBJ(X)
  6. F = ......
  7. % 非线性约束函数
  8. function [G,Heq] = MYCON(X)
  9. G = ..... % 非线性不等式约束条件
  10. 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程序

  1. clc
  2. clear
  3. close all
  4. x0=rand(2,1); % 随机产生初始解
  5. A=[];
  6. B=[];
  7. Aeq=[];
  8. Beq=[];
  9. LB=[0,0];
  10. UB=[];
  11. [x,fval,exitflag]=fmincon(@(x)myobj(x),x0,A,B,Aeq,Beq,LB,UB,@(x)mycon(x))
  12. % 目标函数
  13. function F = myobj(x)
  14. F = x(1)^2+x(2)^2+8;
  15. end
  16. % 非线性约束函数
  17. function [G,Heq] = mycon(x)
  18. G = -x(1)^2+x(2);
  19. Heq = -x(1)-x(2)^2+2;
  20. end

运行结果

  1. x =
  2. 1.0000
  3. 1.0000
  4. fval =
  5. 10.0000
  6. exitflag =
  7. 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. hihocoder#1046: K个串

    [传送门] 这种区间内相同数字只能被统计一次/只有区间内数字都不相同才对答案有贡献的题都可以用扫描线扫右端点,表示当前区间右端点为$r$.然后当前线段树/树状数组维护区间左端点为$[1,r)$时对应的 ...

  2. MongoDB db.stats()&&db.db.serverStatus()

    db.stats()   示例图 参数解释: "db" : "test" ,表示当前是针对"test"这个数据库的描述.想要查看其他数据库, ...

  3. pipelinewise 基于singer 指南的的数据pipeline 工具

    pipelinewise 是基于开源singer 指南开发的数据pipeline工具,与singer tap 以及target 兼容 支持的特性 内置的elt 特性 轻量级 支持多种复制方法,cdc( ...

  4. Spring Could Stream 基本用法

    Spring Cloud Stream是一个建立在Spring Boot和Spring Integration之上的框架,有助于创建事件驱动或消息驱动的微服务. 通过它可以更方便的访问消息服务,如消费 ...

  5. 微信小程序 自定义导航组件 nav头部 全面屏设计

    nav-dynamic 微信小程序自定义nav头部组件:适配全面屏设计: 实现功能 初始进入页面时,展示初始状态下的nav样式: 页面滚动时,监听页面滚动事件,展示滚动状态下的nav样式: 根据配置字 ...

  6. linux 如何改变文件属性与权限1

    我们知道档案权限对于一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性, 那如何修改一个档案的属性与权限呢? 我们这里介绍几个常用于群组.拥有者.各种身份的权限的指令.如下所示: chgr ...

  7. mysql 层级结构查询

    描述:最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询? 在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询, ...

  8. mybatis之批量查询

    关于MyBatis批量更新和添加,参考我的如下文章即可:MyBatis的批量更新实例 MyBatis的批量添加实例 另外不管是批量的新增.删除.修改.查询也好,还是单个新增.删除.修改查询也罢.都会用 ...

  9. Redis缓存穿透、缓存雪崩、redis并发问题 并发竞争key的解决方案 (阿里)

    阿里的人问我 缓存雪崩(大量数据在同一时间过期了)了如何处理,缓存击穿了如何处理,回答的很烂,做了总结: 把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数 ...

  10. 使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明【转】

    原文链接:https://blog.csdn.net/Donjuan/article/details/3865026在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL ...