整数规划

  • 整数规划
    • 整数规划的定义
    • 整数规划的分类
    • 0-1型整数规划
  • 蒙特卡洛法(随机取样法)
  • 指派问题的数学模型
  • 整数线性规划的MATLAB求解

整数规划

整数规划的定义

数学规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。

目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。

整数规划的分类

变量全限制为整数时,称纯(完全)整数规划。
变量部分限制为整数时,称混合整数规划。

0-1型整数规划

0-1型整数规划时整数规划中的特殊情形,它的变量xjx_jxj​仅取值0或1。这时xjx_jxj​称为0-1变量,或称二进制变量。可由0≤xj≤1且xj为整数0\leq x_j\leq 1且x_j为整数0≤xj​≤1且xj​为整数所代替。

在实际问题中,如果引入0-1变量,就可以把由各种情况需要分别讨论的数学规划问题统一在一个问题中讨论了。
例如
       有两种运输方式可供选择,但只能选择一种运输方式,或者用车运输,或者用船运输。用车运输的约束条件为5x1+4x2≤245x_1+4x_2\leq 245x1​+4x2​≤24,用船运输的约束条件为7x1+3x2≤457x_1+3x_2\leq 457x1​+3x2​≤45。即有两个相互排斥的约束条件
5x1+4x2≤24\qquad\qquad\qquad\qquad5x_1+4x_2\leq 245x1​+4x2​≤247x1+3x2≤457x_1+3x_2\leq 457x1​+3x2​≤45(无法放在一个方程组中求解)

为了统一在一个问题中,引入0-1变量

y={1,当采取船运方式时,0,当采取车运方式时。\qquad\qquad\qquad\qquad y=\begin{cases}1,当采取船运方式时,\\ 0,当采取车运方式时。\end{cases}y={1,当采取船运方式时,0,当采取车运方式时。​
则上述约束条件可改写为

{5x1+4x2≤24+yM,7x1+3x2≤45+(1−y)M,y=0或1。\qquad\qquad\qquad\qquad \begin{cases}5x_1+4x_2\leq 24+yM,\\ 7x_1+3x_2\leq 45+(1-y)M,\\y=0或1。\end{cases}⎩⎪⎨⎪⎧​5x1​+4x2​≤24+yM,7x1​+3x2​≤45+(1−y)M,y=0或1。​

式中:M为充分大的数。(matlab中可以用inf)
还有一种情况如下

x1=0或500≤x1≤800,\qquad\qquad\qquad\qquad x_1=0或500\leq x_1\leq 800,x1​=0或500≤x1​≤800,
可改写为
{500y≤x1≤800y,y=0或1。\qquad\qquad\qquad\qquad \begin{cases}500y\leq x_1\leq 800y,\\y=0或1。\end{cases}{500y≤x1​≤800y,y=0或1。​

蒙特卡洛法(随机取样法)

    y=x2、y=12−xy=x^2、y=12-xy=x2、y=12−x与xxx轴在第一象限围成一个曲边三角形。设计一个随机实验,求该图形面积的近似值。
       我们可以知道,两条曲线在x=3、y=9x=3、y=9x=3、y=9时有交点,当x=12x=12x=12时,y=12−xy=12-xy=12−x与xxx轴有交点。

       故可以应用概率的知识来解面积的近似值,在矩形[0,12]x[0,9]上产生服从均匀分布的10710^7107个随机点,统计随机点落在三角形的频数,则曲边三角形的面积近似为上述矩形的面积乘以频率。由于是随机模拟,因此每次结果都是不一样的。

整数规划限制了变量为整数,然而又由于整数解是有限个,所以可以用枚举法进行求解,但在自变量维数很大和取值范围很宽的情况下,用枚举法是不现实的,但在一定计算量下,用蒙特卡洛法可以求解整数规划。

指派问题的数学模型

    拟分配nnn人去做nnn项工作,每人做且仅做一项工作,若分配第iii人去做第jjj项工作,需花费cijc_{ij}cij​单位时间,问应如何分配工作才能使工人花费的总时间最少?
       容易看出,要给出一个指派问题的实例,只需给出矩阵CCC=(cij)(c_{ij})(cij​),CCC称为指派问题的系数矩阵。
       引入0-1变量
xij={1,第i人做第j项工作0,第i人不做第j项工作,i,j=1,2,⋅⋅⋅,n。\qquad\qquad\qquad\qquad x_{ij}=\begin{cases}1,第i人做第j项工作 \\0,第i人不做第j项工作,i,j=1,2,···,n。\end{cases}xij​={1,第i人做第j项工作0,第i人不做第j项工作,i,j=1,2,⋅⋅⋅,n。​
上述指派问题的数学模型为

min⁡∑i=1n∑j=1ncijxij\qquad\qquad\qquad\qquad\min \sum ^{n}_{i=1}\sum ^{n}_{j=1}c_{ij}x_{ij}min∑i=1n​∑j=1n​cij​xij​,(ccc是时间,xxx是是否做该项工作)
s.t.{∑j=1nxij=1,i=1,⋅⋅⋅,n,(一个人只做一项工作)∑i=1nxij=1,j=1,⋅⋅⋅,n,(一项工作只有一个人做)xij=0或1,i,j=1,⋅⋅⋅,n。\qquad\qquad\qquad\qquad s.t.\begin{cases} \sum^n_{j=1}x_{ij}=1,i=1,···,n,(一个人只做一项工作)\\ \sum^n_{i=1}x_{ij}=1,j=1,···,n,(一项工作只有一个人做)\\x_{ij}=0或1,i,j=1,···,n。\end{cases}s.t.⎩⎪⎨⎪⎧​∑j=1n​xij​=1,i=1,⋅⋅⋅,n,(一个人只做一项工作)∑i=1n​xij​=1,j=1,⋅⋅⋅,n,(一项工作只有一个人做)xij​=0或1,i,j=1,⋅⋅⋅,n。​

上述指派问题的可行解可以用一个矩阵表示,每行、每列均有且只有一个元素为1,其余元素均为0。(因为一个人只能做一项工作)

整数线性规划的MATLAB求解

MATLAB软件求解数学规划问题必须把所有的决策向量化成一维决策向量。(即上面指派问题就需要变换)

Matlab求解混合整数线性规划的命令为

[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

对应如下数学模型
s.t.{x(intcon)为整数,A⋅x≤b,Aeq⋅x=beq,lb≤x≤ub。\qquad\qquad\qquad\qquad s.t.\begin{cases}x(intcon)为整数,\\ A\cdot x\leq b,\\ Aeq\cdot x=beq,\\ lb\leq x\leq ub。\end{cases}s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧​x(intcon)为整数,A⋅x≤b,Aeq⋅x=beq,lb≤x≤ub。​

intconintconintcon为整数变量的地址,即第iii个决策变量为整数。(因为这是混合整数线性规划)

求解下列指派问题,已知指派矩阵为

[3821038729764275842359106910]\qquad\qquad\qquad\qquad \begin{bmatrix}3&8&2&10&3\\ 8&7&2&9&7\\ 6&4&2&7&5\\ 8&4&2&3&5\\ 9&10&6&9&10\end{bmatrix}⎣⎢⎢⎢⎢⎡​38689​874410​22226​109739​375510​⎦⎥⎥⎥⎥⎤​。
需要把二维决策变量xijx_{ij}xij​(i,j=1,⋅⋅⋅,5i,j=1,···,5i,j=1,⋅⋅⋅,5)变成一维决策变量yk(k=1,⋅⋅⋅,25)y_k(k=1,···,25)yk​(k=1,⋅⋅⋅,25)。

clear;
clc;
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5;8 4 2 3 5;9 10 6 9 10];
c=c(:);%将二维矩阵变为列向量,是否改变对结果无影响。
a=zeros(10,25);
intcon=1:25;%25个决策变量皆为整数。
for i=1:5a(i,(i-1)*5+1:5*i)=1;%前五行对应一个人一定有且仅有一项工作a(5+i,i:5:25)=1;%后五行对应一项工作一定有且仅有一个人做
end
b=ones(10,1);
lb=zeros(25,1);
ub=ones(25,1);
x=intlinprog(c,intcon,[],[],a,b,lb,ub);
x=reshape(x,[5,5])%将一维的决策变量转换为二维矩阵


       前五行每五列对应到决策变量为一个人,因为每个人做且仅做一项工作,所以决策变量每行有且仅有一个元素1,其余元素为0。后五行每一行对应到决策变量为一项工作,每一项工作一定会有一个人做。(这里主要是要将决策变量转换为一维的去思考,主要是线性代数矩阵相乘的问题) 这里是为了实现指派问题数学建模中的两个约束条件。

matlab——整数规划相关推荐

  1. matlab 整数规划工具箱,Matlab中的YALMIP工具箱 混合整数规划

    YALMIP工具箱 混合整数规划 定义变量: sqdvar()实型 intvar()整型 binvar()0-1型 设定目标函数 : f=目标函数 设定限定条件: F=set(限定条件) 多个限定条件 ...

  2. matlab整数规划--简单入门

    整数规划 1.整数规划概论 定义: 数学规划中的变量(部分或者全部)限制为整数时,称为整数规划. 若在线性规划模型中,变量限制为整数,则称为整数线性规划. 分类: 大致分为两类: (1):变量全限制为 ...

  3. matlab割平面方法程序,用割平面法求解整数规划问题max z=x1 x2, s.t.-x1 x2

    用lingo求解0-1整数规划的程序? min=x1+x2+x3;x1+x2>1;x2+x3>1;@bin(x1);@bin(x2);@bin(x3); Lingo求解0-1规划的问题 l ...

  4. matlab编程与最优化设计应用,MATLAB编程与最优化设计应用

    MATLAB编程与最优化设计应用 出版时间:2013年08月 定 价:59.00 I S B N :9787121210525 所属分类: 计算机•网络 &nbsp计算机•网络  >   ...

  5. matlab显示函数表达式_MATLAB在绘图时的用法——线形图

    点击上方蓝字  关注我们 MATLAB有很强的绘图功能,我们可以通过简单的代码画出一些直观而漂亮的代码.今天,我们一起来学习基本绘图常用函数. 在MATLAB中绘图首先需要设定x的范围,一般使用冒号来 ...

  6. 2022年华数杯数学建模B题水下机器人的组装计划解题全过程文档及程序

    2022年华数杯全国大学生数学建模 B题 水下机器人的组装计划 原题再现:   自来水管道清理机器人(Water pipe cleaning robot,简称WPCR)是一种可在水下移动.具有视觉和感 ...

  7. 整数规划matlab实例,整数规划matlab

    整数规划matlabTag内容描述: 1.例已知非线性整数规划为max z=x12+x22+3x32+4x42+2x52-8x1-2x2-3x3-x4-2x5s.t.0xi99,i=1,2,5x1+x ...

  8. 线性规划 - 用单纯形法解决整数规划问题 - (Matlab、Lingo建模)

    现实生活中,比如机器的台数,参与工作的人数,可调动的车辆数,这些数据都是整数.因此对于变量中包含整数.或者完全是整数的规划问题,我们称之为整数规划.在解决整数规划常用的算法便是单纯形法. 课题名称:任 ...

  9. matlab 线性规划求最大值,MATLAB求解线性规划(含整数规划和01规划)问题.pdf

    MATLAB求解线性规划(含整数规划和01规划)问题 MATLAB 求解线性规划(含整数规划和0-1 规划)问题 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约 束的,变量范围为有 ...

  10. matlab中用于离散系统求解的命令,MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)...

    文章目录 基础知识 规划问题的数学模型的三个要素 解 线性规划Linear Programing 理论 示例 整数规划 理论 示例 非线性规划 理论 示例 生产实践中,经常会遇到很多资源分配的问题,如 ...

最新文章

  1. python dlib学习(九):人脸聚类
  2. 使用pyppeteer爬取淘宝商品
  3. ubuntu11.04下配置中文输入法
  4. 前端学习(1912)vue之电商管理系统电商系统之调用api完成删除操作
  5. java 反射 main_java – 通过反射访问main方法中的局部变量
  6. AWK学习笔记四:awk的环境变量
  7. 管理感悟:派谁进行技术合作
  8. sip网络电话 用户一直注册超时无法注册成功
  9. 斜率、梯度(完全不一样的理解)
  10. 遍历数组-forEach
  11. 对261个国家地区快速查找选择
  12. 计算机打印东西怎么横向打印机,打印怎么设置横向打印(打印机怎么调整打印方向)...
  13. C#中Dev配色修改
  14. 如何在图片上添加水印?快把这些方法收好
  15. 四阶龙格-库塔法求解常微分方程的初值问题
  16. 【重点】Selenium + Nightwatch 自动化测试环境搭建
  17. Java解析魔兽争霸3录像W3G文件(三):解析游戏开始前的信息
  18. Vagrant的安装和使用(附带安装Centos 7教程)
  19. 手机回收网迅速兴起,闲置手机快速变现有看点
  20. Python爬虫-爬取快看漫画网图片并拼接成漫画长图

热门文章

  1. html页面播放avi视频
  2. 微信小程序发布版本之后自动更新功能
  3. 最短路径(信息学奥赛一本通 - T1378)
  4. 多线程同步有几种实现方法C语言,线程同步与并发
  5. SAC案例精选:SAC Planning实现SOP(销售与运营计划)模拟沙盘
  6. 生信漫谈如何绘制蛋白序列的二级结构可视化图
  7. Unity-遮挡剔除
  8. Ubuntu 15.10 x64 安装 Android SDK
  9. mysql reconnect_在设置了MYSQL_OPT_RECONNECT之后,mysql_ping是否还有必要?
  10. Beagleboneblack的MLO文件干了些啥