数学建模笔记—— 整数规划和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-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...