数学建模笔记—— 整数规划和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。
整数规划:
-
线性整数规划
matlab可进行求解,在线性规划的基础上,加入决策变量取整数的条件
-
非线性整数规划
无特定算法,只能用近似算法,如蒙特卡罗模拟,智能算法
-
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件资物要从中地运送到乙地。每件货物的重量(单位:吨)和利润(单位:元)如下表所示
物品 1 2 3 4 5 6 7 8 9 10 重量(t) 6 3 4 5 1 2 3 5 4 2 利润 (元) 540 200 180 350 60 150 280 450 320 120 由于只有一辆最大载重为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=1∑10pixis.t.{∑i=110wixi≤30xi∈{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} min−i=1∑10pixis.t.{∑i=110wixi≤30xi∈{0,1}
2.2 指派问题
已知5名游泳候选人的百米成绩怎么选拔队员组成 4 × 100 4\times100 4×100米混合泳接力队伍
| 蝶泳 | 仰泳 | 蛙泳 | 自由泳 | |
|---|---|---|---|---|
| 甲 | 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 |
候 选 人 : 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=1∑4i=1∑5tijxijs.t.⎩ ⎨ ⎧∑j=14xij≤1,i=1,2,3,4,5∑i=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)'
相关文章:
数学建模笔记—— 整数规划和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 基本概念 在规划问题中&am…...
[001-03-007].第26节:分布式锁迭代3->优化基于setnx命令实现的分布式锁-防锁的误删
我的博客大纲 我的后端学习大纲 1、问题分析: 1.1.问题: 1.锁的超时释放,可能会释放其他服务器的锁 1.2.场景: 1.如果业务逻辑的执行时间是7s。执行流程如下 1.index1业务逻辑没执行完,3秒后锁被自动释放。2.index…...
【Unity踩坑】为什么有Rigidbody的物体运行时位置会变化
先上图,不知你有没有注意过这个现象呢? 一个物体加上了Rigidbody组件,当勾选上Use Gravity时,运行后,这个物体的位置的值会有变化。这是为什么呢? 刚体由物理系统处理,因此它会对重力、碰撞等做…...
NGINX开启HTTP3,给web应用提个速
环境说明 linuxdockernginx版本:1.27 HTTP3/QUIC介绍 HTTP3是由IETF于2022年发布的一个标准,文档地址为:https://datatracker.ietf.org/doc/html/rfc9114 如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了…...
秋招季!别浮躁!
好久没写了,今天兴致来了,众所周知我一旦想说话,就来这里疯狂写。 最近,我去了一家国企的研究院,听着是不是贼高大上,呵——这玩意儿把我分配到三级机构,我一个学计算机的,它不把我…...
Java的时间复杂度和空间复杂度和常见排序
目录 一丶时间复杂度 二丶空间复杂度 三丶Java常见排序 1. 冒泡排序(Bubble Sort) 2.插入排序(Insertion Sort) 3.希尔排序(Shell Sort) 4.选择排序(Selection Sort) 5.堆排序&am…...
Qt 学习第十天:标准对话框 页面布局
系统标准对话框 错误对话框 //错误对话框connect(createPro, &QAction::triggered, this, []{//参数1 父亲 参数2 标题 参数3 对话框内显示文本内容 。。。QMessageBox::critical(this, "报错!", "没加头文件!");}); 【运行结果】 信息对话框 co…...
体育数据API纳米足球数据API:足球数据接口文档API示例⑩
纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口,无请求次数限制,可按需购买,接口稳定高效; 覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本…...
[数据集][目标检测]高铁受电弓检测数据集VOC+YOLO格式1245张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1245 标注数量(xml文件个数):1245 标注数量(txt文件个数):1245 标注…...
Vuex:深入理解所涉及的几个问题
你好,我是沐爸,欢迎点赞、收藏、评论和关注。 一、Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 二、Vu…...
vue原理分析(六)研究new Vue()
今天我们来分析使用new Vue() 之前研究时,只是说是在创建一个实例。并没有深入进行研究 在vue的源码中找下Vue的构造函数 function Vue(options) {if (!(this instanceof Vue)) {warn$2(Vue is a constructor and should be called with the new keyword);}this.…...
滑动窗口+动态规划
前言:分析这个题目的时候,就知道要这两个线段要分开,但是要保证得到最优解,那么我们在选取第二根线段的时候,要保证我们第一根线段是左边最优解 并且我们选的两根线段的右端点一定是我们的数组的点(贪心思…...
vscode配置django环境并创建django项目
1、创建文件夹 创建文件夹 并在vscode打开 终端输入命令 “ python -m venv env ” 查看目录结构 2、创建项目 在终端输入 django-admin startproject 文件名(这里以myshop为例) 3、创建应用 在myshop打开终端 在终端输入 django-admin startapp 应用名 这里以app1为例…...
WebGL系列教程四(绘制彩色三角形)
目录 1 前言2 varying变量介绍3 开始绘制3.1 声明顶点着色器3.2 声明片元着色器3.3 创建顶点和颜色的缓冲区3.4 指定变量从缓冲区获取值3.5 效果3.6 varying的内涵3.7 完整代码 4 总结 1 前言 上一篇中我们介绍了如何使用缓冲区来绘制三角形,这一篇我们来讲讲如何给…...
通过mxGraph在ARMxy边缘计算网关上实现工业物联网
在当今的工业4.0时代,工业物联网(IIoT)已经成为制造业转型升级的关键技术之一。ARMxy边缘计算网关作为工业自动化和物联网的重要组成部分,能够为工厂车间提供实时的数据处理能力和智能化服务。而mxGraph作为一种流行的JavaScript库…...
GEE案例:利用sentinel-1数据进行洪水监测分析(直方图统计)
目录 简介 数据 函数 ee.Filter.calendarRange(start, end, field) Arguments: Returns: Filter updateMask(mask) Arguments: Returns: Image 代码 结果 简介 利用sentinel-1数据进行洪水监测分析 数据 COPERNICUS/S1_GRD数据是由欧洲空间局(ESA)的Copernicus项…...
QT 联合opencv 易错点
https://blog.csdn.net/qq_51699436/article/details/135777911 网上已经有大量优秀切详尽的文章来讲述QT联合opencv了,我把容易出错的点列出来备忘 1、在进行opencv进行编译时,要确认好是32位还是64位,因为在创建QT项目的时候QT和opencv要匹…...
例如/举例的使用方法 ,e.g., 以及etc的使用方法
e.g. 例如 for example for the sake of example such as 1 e.g. 是拉丁语 exempli gratia 的缩写意思是“举个例子,比如”,等同于for example、 for the sake of example、such as,使用 e.g. 的目的是用几个例子来说明前面的观点。 2 例…...
20240902-VSCode-1.19.1-部署vcpkg-win10-22h2
20240902-VSCode-1.19.1-部署vcpkg-win10-22h2 软件环境 标签:C++ VSCode mingw gcc13 vcpkg cmake分栏:C++操作系统:Windows10 x64 22h2一、安装VScode-1.19.1 请参考另一篇文章《20240717-VSCode-1.91.1-部署gcc13-C++23-win10-22h2》。 二、安装cmake 本文流程需要安…...
MySQL学习(多表操作)
基本知识 一对多 创建部门表 – 主表 create table if not exists dept(deptno varchar(20) primary key ,name varchar(20) );创建员工表 – 创建外键约束 方式1constraint emp_fk foreign key(dept_id) references dept(deptno) create table if not exists emp(eid varc…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
