当前位置: 首页 > news >正文

数学建模笔记—— 整数规划和0-1规划

数学建模笔记—— 整数规划和0-1规划

  • 整数规划和0-1规划
    • 1. 模型原理
      • 1.1 基本概念
      • 1.2 线性整数规划求解
      • 1.3 线性0-1规划的求解
    • 2. 典型例题
      • 2.1 背包问题
      • 2.2 指派问题
    • 3. matlab代码实现
      • 3.1 背包问题
      • 3.2 指派问题

整数规划和0-1规划

1. 模型原理

1.1 基本概念

在规划问题中,有些最优解可能是分数或小数,但对于某些具体问题,常要求某些变量(全部或部分)的解必须是整数。例如,当变量代表的是机器的台数,工作的人数或装货的车数等。为了满足整数的要求,初看起来似乎只要把已得的非整数解舍入化整就可以了。实际上化整后的数不见得是可行解和最优解,所以应该有特殊的方法来求解整数规划。在整数规划中,如果所有变量都限制为整数,则称为纯整数规划;如果仅一部分变量限制为整数,则称为混合整数规划。整数规划的一种特殊情形是0-1规划,它的变数仅限于0或1。

整数规划:

  1. 线性整数规划

    matlab可进行求解,在线性规划的基础上,加入决策变量取整数的条件

  2. 非线性整数规划

    无特定算法,只能用近似算法,如蒙特卡罗模拟,智能算法

  3. 0-1规划

    特殊的整数规划,matlab中也只能求解线性0-1规划,对于非线性0-1规划也只能求近似解

1.2 线性整数规划求解

[ x , f v a l ] = i n t l i n p r o g ( f , i n t c o n , A , b , A e q , b e q , l b , u b , x 0 ) [x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0) [x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0)

其中:

  • f f f——目标函数的系数变量(必须是求最小值形式下的)
  • i n t c o n intcon intcon—— i n t c o n intcon intcon中的值指示决策变量x中应取整数值的分量
  • A , b A,b A,b——不等式约束条件的变量系数矩阵和常数项矩阵(必须是 ≤ \le 形式)
  • A e q , b e q Aeq,beq Aeq,beq——等式约束条件的变量系数矩阵和常数项矩阵
  • l b , u b lb,ub lb,ub——决策变量的最小取值和最大取值

i n t c o n intcon intcon的用法:决策变量如果有三个: x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3;若 x 1 x_1 x1 x 2 x_2 x2是整数,则 i n t c o n = [ 1 , 3 ] intcon=[1,3] intcon=[1,3]

1.3 线性0-1规划的求解

仍然使用 i n t l i n p r o g intlinprog intlinprog函数求解,只需要限定 l b lb lb u b ub ub即可

例如:三个决策变量: x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3 x 1 x_1 x1 x 3 x_3 x3是0-1变量, x 2 x_2 x2不限制,则 i n t c o n = [ 1 , 3 ] , l b = [ 0 ; − i n f ; 0 ] , u b = 1 ; + i n f ; 1 intcon=[1,3],lb=[0;-inf;0],ub=1;+inf;1 intcon=[1,3]lb=[0;inf;0],ub=1;+inf;1

2. 典型例题

2.1 背包问题

有10件资物要从中地运送到乙地。每件货物的重量(单位:吨)和利润(单位:元)如下表所示

物品12345678910
重量(t)6345123542
利润 (元)54020018035060150280450320120

由于只有一辆最大载重为30t的货车能用来运送货物,所以只能选择部分货物进行运送,要求觉得运送哪些货物,使得这些货物的总利润最大


x i = { 1 , 运送了第 i 件货物 0 没有运送第 i 件货物 , i = 1 , 2 , … , 10 x_i=\begin{cases}1,\text{运送了第}i\text{件货物}\\0\text{ 没有运送第}i\text{件货物}&\end{cases},i=1,2,\ldots,10 xi={1,运送了第i件货物0 没有运送第i件货物,i=1,2,,10

记 w i 表示第 i 件物品的重量,  p i 表示第 i 件物品的利润 \text{记}w_i\text{表示第}i\text{件物品的重量, }p_i\text{表示第}i\text{件物品的利润} wi表示第i件物品的重量pi表示第i件物品的利润
则有
m a x ∑ i = 1 10 p i x i s . t . { ∑ i = 1 10 w i x i ≤ 30 x i ∈ { 0 , 1 } max\:\sum_{i=1}^{10}p_ix_i\\s.t.\begin{cases}\sum_{i=1}^{10}w_ix_i\leq30\\x_i\in\{0,1\}\end{cases} maxi=110pixis.t.{i=110wixi30xi{0,1}
转化后得
m i n − ∑ i = 1 10 p i x i s . t . { ∑ i = 1 10 w i x i ≤ 30 x i ∈ { 0 , 1 } min\:-\sum_{i=1}^{10}p_{i}x_{i}\\s.t.\begin{cases}\sum_{i=1}^{10}w_ix_i\leq30\\x_i\in\{0,1\}\end{cases} mini=110pixis.t.{i=110wixi30xi{0,1}

2.2 指派问题

已知5名游泳候选人的百米成绩怎么选拔队员组成 4 × 100 4\times100 4×100米混合泳接力队伍

蝶泳仰泳蛙泳自由泳
66.875.68758.6
57.26666.453
7867.884.659.4
7074.269.657.2
67.47183.862.4

候 选 人 : i = 1 , 2 , 3 , 4 , 5 i= 1, 2, 3, 4, 5 i=1,2,3,4,5
泳姿: j = 1 , 2 , 3 , 4 j=1,2,3,4 j=1,2,3,4

x i j = { 1 , 队员 i 参加第 j 种泳姿 0 , 队员 i 不参加第 j 种泳姿 x_{ij}=\left\{\begin{array}{l}1,\text{队员}i\text{参加第}j\text{种泳姿}\\0,\text{队员}i\text{不参加第}j\text{种泳姿}\end{array}\right. xij={1,队员i参加第j种泳姿0,队员i不参加第j种泳姿

t i j t_{ij} tij:队员 i i i参加第 j j j种泳姿的耗时

建模如下:
m i n ∑ j = 1 4 ∑ i = 1 5 t i j x i j s . t . { ∑ j = 1 4 x i j ≤ 1 , i = 1 , 2 , 3 , 4 , 5 (每个人只能入选4种泳姿之一) ∑ i = 1 5 x i j = 1 , j = 1 , 2 , 3 , 4 (每种泳姿有且仅有1人参加) x i j ∈ { 0 , 1 } \begin{aligned}&min\quad\sum_{j=1}^4\sum_{i=1}^5t_{ij}x_{ij}\\&s.t.\begin{cases}\sum_{j=1}^4x_{ij}\leq1,i=1,2,3,4,5&\text{(每个人只能入选4种泳姿之一)}\\\sum_{i=1}^5x_{ij}=1,j=1,2,3,4&\text{(每种泳姿有且仅有1人参加)}\\x_{ij}\in\{0,1\}\end{cases}\end{aligned} minj=14i=15tijxijs.t. j=14xij1,i=1,2,3,4,5i=15xij=1,j=1,2,3,4xij{0,1}(每个人只能入选4种泳姿之一)(每种泳姿有且仅有1人参加)

3. matlab代码实现

3.1 背包问题

%% 背包问题(货车运送货物的问题)
clc
clear
c=-[540 200 180 350 60 150 280 450 320 120]; % 目标函数的系数矩阵
intcon=1:10; %整数变量的位置
A=[6 3 4 5 1 2 3 5 4 2]; %线性不等式约束系数矩阵
Aeq=[]; % 线性不等式约束
beq=[]; % 线性不等式约束
b=30; %线性不等式约束的常系数向量
lb=zeros(10,1); %约束变量的范围下限
ub=ones(10,1); %约束变量的范围上限
% 调用intlinprog()函数进行求解
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub)
fval=-fval

输出:

Running HiGHS 1.6.0: Copyright (c) 2023 HiGHS under MIT licence terms
Presolving model
1 rows, 10 cols, 10 nonzeros
1 rows, 7 cols, 7 nonzeros
Objective function is integral with scale 0.1Solving MIP model with:1 rows7 cols (6 binary, 1 integer, 0 implied int., 0 continuous)7 nonzerosNodes      |    B&B Tree     |            Objective Bounds              |  Dynamic Constraints |       Work      Proc. InQueue |  Leaves   Expl. | BestBound       BestSol              Gap |   Cuts   InLp Confl. | LpIters     Time0       0         0   0.00%   -2650           inf                  inf        0      0      0         0     0.0sT       0       0         0   0.00%   -2650           -2410              9.96%        0      0      0         1     0.0sSolving reportStatus            OptimalPrimal bound      -2410Dual bound        -2410Gap               0% (tolerance: 0.01%)Solution status   feasible-2410 (objective)0 (bound viol.)0 (int. viol.)0 (row viol.)Timing            0.01 (total)0.00 (presolve)0.00 (postsolve)Nodes             1LP iterations     1 (total)0 (strong br.)0 (separation)0 (heuristics)找到最优解。Intlinprog 在根节点处停止,因为目标值在最优值的间隙容差范围内,options.AbsoluteGapTolerance = 1e-06。intcon 变量是
容差范围内的整数,options.ConstraintTolerance = 1e-06。x =1101011111fval =-2410fval =2410

3.2 指派问题

%% 指派问题(选择队员去进行游泳接力比赛)
clear;clc
% 双下标要转化为单下标:x11(x1),x12(x2),...,x24(x8),...,x54(x20)
% 目标函数的系数矩阵(先列后行的写法)
c=[66.8 75.6 87 58.6 57.2 66 66.4 53 78 67.8 84.6 59.4 70 74.2 69.6 57.2 67.4 71 83.8 62.4]';
% 整数变量的位置
intcon=1:20;
% 线性不等式约束的系数矩阵和常数项向量
A=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 ];
b=[1;1;1;1;1];
% 线性等式约束的系数矩阵和常数项向量
Aeq=[eye(4),eye(4),eye(4),eye(4),eye(4)];
beq=[1;1;1;1];
% 约束变量的范围下限
lb=zeros(20,1);
% 约束变量的范围上限
ub=ones(20,1);
% 约束变量的范围上限
% 调用intlinprog()函数进行求解
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub)
reshape(x,4,5)'

输出:

%% 指派问题(选择队员去进行游泳接力比赛)
clear;clc
% 双下标要转化为单下标:x11(x1),x12(x2),...,x24(x8),...,x54(x20)
% 目标函数的系数矩阵(先列后行的写法)
c=[66.8 75.6 87 58.6 57.2 66 66.4 53 78 67.8 84.6 59.4 70 74.2 69.6 57.2 67.4 71 83.8 62.4]';
% 整数变量的位置
intcon=1:20;
% 线性不等式约束的系数矩阵和常数项向量
A=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 ];
b=[1;1;1;1;1];
% 线性等式约束的系数矩阵和常数项向量
Aeq=[eye(4),eye(4),eye(4),eye(4),eye(4)];
beq=[1;1;1;1];
% 约束变量的范围下限
lb=zeros(20,1);
% 约束变量的范围上限
ub=ones(20,1);
% 约束变量的范围上限
% 调用intlinprog()函数进行求解
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub)
reshape(x,4,5)'

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 避障小车—51单片机
  • 大数据技术体系架构
  • 为何家用无线路由器不能实现PROFINET通信?
  • EasyExcel 文件导出:表头与内容样式简单设置
  • 【Tools】什么是基座模型
  • 机械学习—零基础学习日志(Python做数据分析02)
  • ✨机器学习笔记(三)—— 多元线性回归、特征缩放、Scikit-Learn(未完待续)
  • 大腾智能出席龙华云创中心启动与鸿蒙园揭牌仪式
  • 《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上
  • 【前端面试】Webpack、Rollup 和 Gulp 构建工具了解
  • 收藏:B站相当精彩的关于向量数据库的2个视频
  • 《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)
  • [数据集][图像分类]熊分类数据集309张5类别黑熊泰迪北极熊等
  • 动手学深度学习(pytorch)学习记录25-汇聚层(池化层)[学习记录]
  • AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)
  • 【知识碎片】第三方登录弹窗效果
  • Android优雅地处理按钮重复点击
  • CAP理论的例子讲解
  • Consul Config 使用Git做版本控制的实现
  • Git 使用集
  • JAVA多线程机制解析-volatilesynchronized
  • JS字符串转数字方法总结
  • Next.js之基础概念(二)
  • sublime配置文件
  • Vue 2.3、2.4 知识点小结
  • Vue学习第二天
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 看域名解析域名安全对SEO的影响
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 找一份好的前端工作,起点很重要
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #APPINVENTOR学习记录
  • (1)bark-ml
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (独孤九剑)--文件系统
  • (附源码)php新闻发布平台 毕业设计 141646
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (力扣题库)跳跃游戏II(c++)
  • (七)Java对象在Hibernate持久化层的状态
  • (四)鸿鹄云架构一服务注册中心
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)菜鸟学数据库(三)——存储过程
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .NetCore发布到IIS
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .php文件都打不开,打不开php文件怎么办
  • 。。。。。
  • /dev/sda2 is mounted; will not make a filesystem here!