MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)

2023-05-16

文章目录

  • 基础知识
    • 规划问题的数学模型的三个要素
  • 线性规划Linear Programing
    • 理论
    • 示例
  • 整数规划
    • 理论
    • 示例
  • 非线性规划
    • 理论
    • 示例

生产实践中,经常会遇到很多资源分配的问题,如何分配各种资源以获得最大经济效益,这就形成了运筹学的一个分支——数学规划。

离散系统的优化问题一般都用规划模型求解

而matlab提供了很多强大的规划问题求解命令,使得求解非常简单

基础知识

规划问题的数学模型的三个要素

  • 决策变量
  • 目标函数
  • 约束条件

  • 可行解 满足约束条件的解
  • 可行域 所有可行解构成的集合,R
  • 最优解 使目标函数达到最小值的可行解

线性规划Linear Programing

理论

目标函数和约束条件均为线性的最优化问题。约束为线性等式Or不等式

线性规划问题的通用的求解方法:单纯形法(由美国数学家,线性规划之父:George Bernard Dantzig(1914-2005)于1947年提出),正是这个单纯形为线性规划的整个学科打下了基础。

总之现在线性规划问题非常好求解,就用单纯形,MATLAB的linprog就是用的单纯形。
在这里插入图片描述

分支:整数线性规划Iinteger Linear Programing(全部决策变量都必须取整数值)

1947年J.von诺依曼提出了对偶理论,开创了线性规划的新领域, 他在1946年提出经典的计算机体系架构(程序和数据一样存储起来),世界上第一台计算机ENIAC也是他参与设计的。

“对偶”不是“等价”
“对偶”不是“等价”
“对偶”不是“等价”

具体定义
在这里插入图片描述
不等式方向相反,即原问题的约束不等式是大于等于则对偶问题的对应条件则是小于等于

优化方向相反,即原问题max对偶问题就是min
在这里插入图片描述
行约束是变量范围的约束条件,如 x ≥ 0 x\geq0 x0,这种条件不变号

在这里插入图片描述
上面的定义看起来仍然很迷,尤其说啥行列转置······但下面这几个性质就能让我们明白对偶问题想干啥了

第二点,原问题是最大化问题,对偶是最小化问题,而原问题的任意可行解小于对偶问题的任意可行解, 这不就说明对偶问题的下界就是原问题的上界麽,这和第四点呼应了,当两个可行解相遇(相等)时,就是原问题和对偶问题的最优解。

类似于这么个意思,仅供理解大致思想,不准确不严谨的地方请忽略

在这里插入图片描述

在这里插入图片描述

由于现在的计算机可以处理有成千上万的约束和决策变量的规划问题, 所以线性规划已经是现代管理中常用的基本方法了。
在这里插入图片描述

示例

这几个线性规划的例子除了是变量多了一些以外,都类似于初中数学最基本的练习题(一般只有俩变量,便于在二维坐标系画图手动求解),都上不了期末考试台面的那种
在这里插入图片描述

注意使用matlab求解一定要化为上面说的标准型:
在这里插入图片描述

c=[2;3;1];
a=[1 4 2;3 2 0];
b=[8;6];
[x,fval]=linprog(c,-a,-b,[],[],zeros(3,1));
% x向量是使得目标函数取得最小值的那组决策变量
% fval是最小值
% [],[]是等式约束,本问题中没有
% zeros(3,1)是x向量的下限,是第三个约束条件
% 初始值和控制变量参数没写
x =

    0.8066
    1.7900
    0.0166

>> fval

fval =

    7.0000

在这里插入图片描述
就这么一点点代码!!so easy有没有,比自己手算快多了,正在上初中的朋友们应该学习一下

c=[-5;-4;-6];
a=[1 -1 1;3 2 4;3 2 0];
b=[20;42;30];
[x,fval,exitflag,output,lambda]=linprog(c,a,b,[],[],zeros(3,1))
% exitflag是收敛标志,取1则问题收敛
% output可以显示迭代总次数和使用的算法等
% lambda是问题求解中用到的拉格朗日乘子
警告: Your current settings will run a different algorithm ('dual-simplex') in a
future release.
 
> In linprog (line 204)
  In me_test (line 6) 
Optimization terminated.

x =

    0.0000
   15.0000
    3.0000


fval =

  -78.0000


exitflag =

     1


output = 

  包含以下字段的 struct:

         iterations: 6
          algorithm: 'interior-point-legacy'
       cgiterations: 0
            message: 'Optimization terminated.'
    constrviolation: 0
      firstorderopt: 5.8704e-10


lambda = 

  包含以下字段的 struct:

    ineqlin: [3×1 double]
      eqlin: [0×1 double]
      upper: [3×1 double]
      lower: [3×1 double]

>> 
help linprog
  1  linprog converged to a solution X.
      0  Maximum number of iterations reached.
     -2  No feasible point found.
     -3  Problem is unbounded.
     -4  NaN value encountered during execution of algorithm.
     -5  Both primal and dual problems are infeasible.
     -7  Magnitude of search direction became too small; no further
          progress can be made. The problem is ill-posed or badly
          conditioned.

不明白拉格朗日乘子可以参看我的这篇博客和我的另一篇博客

再来个有等式约束的:
在这里插入图片描述

c=[2;3;-5];
a=[2 -5 1];
b=10;
aeq=[1 1 1];
beq=7;
% 注意matlab标准形式
[x,fval,exitflag,output,lambda]=linprog(-c,-a,-b,aeq,beq,zeros(3,1))
警告: Your current settings will run a different algorithm ('dual-simplex') in a
future release.
 
> In linprog (line 204)
  In me_test (line 8) 
Optimization terminated.

x =

    6.4286
    0.5714
    0.0000


fval =

  -14.5714


exitflag =

     1


output = 

  包含以下字段的 struct:

         iterations: 6
          algorithm: 'interior-point-legacy'
       cgiterations: 0
            message: 'Optimization terminated.'
    constrviolation: 1.5099e-14
      firstorderopt: 8.5009e-12


lambda = 

  包含以下字段的 struct:

    ineqlin: 0.1429
      eqlin: 2.2857
      upper: [3×1 double]
      lower: [3×1 double]

整数规划

理论

示例

非线性规划

理论

只要目标函数和约束条件包含非线性函数,就是非线性规划

求解非线性规划比线性规划难很多很多很多,没有适用于各类问题的通用方法,(线性规划的单纯形就是通用解法)

示例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB求解规划问题(线性规划, 整数规划, 非线性规划) 的相关文章

  • LQR制导

    LQR制导 引言 在ardupilot中固定翼飞机横航向位置控制 xff08 制导律 xff09 采用L1制导律 xff0c 最近想将一些其他的控制理论用于ardupilot代码中 xff0c 通过ardupilot论坛 xff0c 看到已
  • 2022年度总结

    年度总结 参加工作的第一年很快就过去了 xff0c 从四月份离校到公司 xff0c 直到农历腊月27回家 xff0c 工作了9个月的时间 xff0c 总的来说工作和学习的差别还是很大的 xff0c 从学生到社畜的转换还是花了一段时间的 接下
  • HTTP基本认证

    在HTTP中 xff0c 基本认证 xff08 英语 xff1a Basic access authentication xff09 是允许http用户代理 xff08 如 xff1a 网页浏览器 xff09 在请求时 xff0c 提供 用
  • c# 设置代理服务器发送http请求

    span class token keyword using span span class token namespace System span span class token punctuation span span class
  • Blaze:高性能C++数学库

    Blaze xff1a 高性能C 43 43 数学库 本文译自 xff1a Blaze A high performance C 43 43 math library Blaze是一个用于密集和稀疏算法的开源 高性能 C 43 43 数学库
  • c/c++编译:使用CMAKE进行跨平台开发

    前言 本文介绍跨平台cmake的编写 xff0c 主要是linux和windows用cmake对项目的编译 这是一个通用模板 xff0c 能够应用到更加复杂的项目中 xff0c 项目例子用https blog csdn net qq 364
  • 对于应用层HTTP协议的学习

    lt start gt 在TCP IP协议栈中 xff0c HTTP协议处于应用层 xff0c 它在最顶层进行数据报转发给应用进程 xff0c 它是最靠近用户的那一层 它的默认端口号为80 HTTP协议是基于请求响应的协议 xff0c 那么
  • 编程开发环境搭建

    全部目录 下载 amp 安装官方下载Vs2019其它历史 版本下载 开始使用安装C 43 43 的工作负载 xff08 环境 xff09 打开vs后有这些模板创建出一个控制台应用程序更多参考文档 使用手册c 43 43 参考手册Visual
  • c++创建第一个控制台程序

    目录 创建控制台应用程序打印出Hello World 空项目创建vs自带打印的创建桌面向导 自定义创建 了解代码 抛转引玉减少为什么 什么是 include 它是预处理指令什么是iostream 它是c 43 43 标准库头件 编写前的了解
  • python3-操作SQLite、创建表、添加数据、查询数据

    SQLlte数据类型 SQLite能保存什么样的数据类型 可以保存空值 整数 浮点数 字符串和blob 什么是blob xff1f xff1f 是二进制大对象 例如图片 音乐 zip文件 什么是游标 游标是在数据库中用来移动和执行查询的对象
  • 初学者都能看懂的95%置信区间

    项目github地址 xff1a bitcarmanlee easy algorithm interview and practice 经常有同学私信或留言询问相关问题 xff0c V号bitcarmanlee github上star的同学
  • c# WindowForm练习项目主窗体设计

    窗体分割器 SpliContainer分割器 在项目主窗体分割成左右俩部分 设置边框线属性 MonthCalendar月历控件 添加程序所需要的按钮 退出 修改密码 添加会员 按钮 固定好左边的容器 组件 ImageList 按钮太多添加图
  • C#-WinForm班级下拉框数据绑定

    前台展示 后台方法 span class hljs keyword using span System span class hljs keyword using span System Collections Generic span c
  • C#--WinForm项目主窗体设计

    主窗体基本设置 大小 颜色 去边框 出现的位置 Panel控件 背景图 颜色 布局 xff1a Label标签 文本 字体 背景颜色 布局 按钮 布局 文本 字体颜色 背景色 底部panel 绑定控件边框 颜色 用label标签导入图标 S
  • C# -- 实现WinForm程序的密码修改

    修改窗体程序密码的示例 实现分析 前台弹出修改窗体 编写后台方法 xff0c 调用通用数据访问类Update方法 数据验证 xff0c 判断原密码是否与旧密码符合 xff0c 俩次输入的新密码是否一致 更新程序全局变量 前台弹出修改窗体 编
  • C#--WinForm--表格数据控件DataGridView--绑定模式

    官方文档 DataGridView控件提供了一种强大而灵活的以表格形式显示数据的方式 用户可以使用DataGridView控件来显示少量数据的只读视图 xff0c 也可以对其进行缩放以显示特大数据集的可编辑视图 扩展DataGridView
  • ASP.NET--网站配置、发布与部署

    网站发布前的配置信息 配置文件下载 网站发布的基本步骤 写好的项目 在本机上发布 打开目录查看 xff1a 部署网站 安装IIs 打开控制面板 程序和功能 启用或关闭Windows功能 安装后 返回控制面板 管理工具 双击打开 xff1a
  • c/c++ hash表 (哈希表、字典表)

    表 1 表 存储数据 key gt value 2 表存储数据结构的困难 怎么查找 一个一个key去比较去查找 xff1f 61 61 效率不高 3 Hash算法加快查找 将字符串的key 转成整数 使用整数找到对应的value Hash算
  • c/c++ UDP通讯

    UDP通讯 1 无连接的 不需要反复的确认和握手等待 根本不关心对方是否存在 2 不可靠 可能有丢包 和先发后到 3 UDP通讯快速 占用系统资源少 4 UDP提供作为传输层协议的最基本功能 将其他的交给用户自己来管理 UDP服务端 1 创
  • c#程序流程控制与调试技术

    If选择结构 为什么要使用关系运算符 简单If 选择结构1 逻辑运算符

随机推荐