数学建模(三)整数规划

news/2024/9/29 18:25:27 标签: 数学建模

视频推荐:B站_数学建模老哥

一、整数规划基本原理

数学规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。

1.1 整数规划的分类

(1)变量全限制为整数时,称为纯(完全)整数规划。

(2)变量部分限制为整数的,称为混合整数规划。

(3)变量取值要么为0要么为1,称为0-1规划。

1.2 整数规划的特点

1. 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:

    (1)原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致

    (2)整数规划可能不存在可行解

    (3)有可行解(当然就存在最优解),但最优解值变差。

2. 整数规划最优解不能按照实数最优解简单取整而获得

1.3 案例

合理下料问题:

设用某型号的圆钢下零件A1,A2...,Am的毛坯。在一根圆钢上下料的方式有B1,B2,... Bn种,每种下料方式可以得到各种零件的毛坯数以及每种零件的需要量,如表所示。问怎样安排下料方式,使得即满足需要,所用的原材料又最少?

如表所示:

 模型

其中,xj表示用Bj种方式下料根数,aij为每种下料方式可以得到各种零件的毛坯数,bi每种零件的需要量

1.4  整数规划的数学模型一般形式

另外补充: 整数规划与松弛的线性规划之间的关系。

不难看出两者之间的关系。

 

 

二、整数线性规划的求解方法

        从数学模型上看整数规划似乎是线性规划的一种特殊形式,求解只需在线性规划的基础上,通过舍入取整,寻求满足整数要求的解即可。但实际上两者却有很大的不同,通过舍入得到的解(整数)也不一定就是最优解,有时甚至不能保证所得到的解是整数可行解

2.1 分枝定界法

1. 先求出相应松弛问题最优解

2. 若松弛问题无可行解,则整数线性规划问题无可行解

3. 若求得的松弛问题最优解符合整数要求,则是整数线性规划问题的最优解。若不满足整数条件,则任选一个不满足整数条件的变量 x^0_i 来构造新的约束,分别添加到松弛问题中形成两个子问题

                                                        x_i\leq [x^0_i]x_i\geq [x^0_i]+1

依次在缩小的可行域中求解新构造的线性规划的最优解,并重复上述过程,直到子问题无解或有整数最优解(被查清)。

 

Q:为什么在步骤3中不满足整数条件时要添加上述两个约束条件?

A:因为变量 x^0_i是一个不满足整数条件的变量,它注定无法构成整数规划的最优解,因此我们要向变量 x^0_i的两边去寻找合适的整数最优解。

注意:构造新的约束条件是分别到整数规划问题对应的松弛问题中,独立构成两个不同的子问题再求解。

详情参考:分枝定界法

案例:分枝定界法总体上有点像二叉树,能看懂下面的案例基本就能理解分枝定界法。

 

2.2 割平面法


http://www.niftyadmin.cn/n/4942388.html

相关文章

深入源码分析kubernetes informer机制(三)Resync

[阅读指南] 这是该系列第三篇 基于kubernetes 1.27 stage版本 为了方便阅读,后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 为什么需要resyncresync做了什么 为什么需要resync 如果看过上一篇,大概能了解,client数据主要通…

Python程序的执行方式,是否需要main函数

Python程序的执行方式有两种,一种是交互式编程,一种是文件执行方式。交互式编程是在命令行或者IDLE中直接输入代码,按回车键就可以运行代码,并立即看到输出结果。文件执行方式是创建一个源文件,将所有代码放在源文件中…

远程仓库上创建一个新的分支 `b` 并将远程分支 `a` 的内容克隆到 `b` 分支上

一、需求: 要在远程仓库上创建一个新的分支 b 并将远程分支 a 的内容克隆到 b 分支上,你可以按照以下步骤进行操作: 二、解决方案: 1. 首先,使用 git clone 命令克隆远程仓库到本地。例如,要克隆一个名为…

【Rust日报】2023-08-13 安全验证工具 Kani 0.34.0已经发布了!

Pipelight - 自托管自动化管道 -> v0.6.14 嗨,大家好!距离我和大家分享这个项目已经一个多月了。你们中一些人对这个项目的热情欢迎让我深受感动。感谢你们中许多人一直支持和帮助我改进它。 从那以后发生了什么变化? 您现在可以在文件修改…

基于Yolov5与LabelImg训练自己数据的完整流程

基于Yolov5与LabelImg训练自己数据的完整流程 1. 创建虚拟环境2. 通过git 安装 ultralytics3. 下载yolov54. 安装labelImg标注软件5. 使用labelImg进行标注,图片使用上面的coco1285.1 点击“打开目录”选择存储图像的文件夹进行标注,右下角会出现图像列表…

JVM编译优化

即时编译器 HotSpot虚拟机中内置了两个即时编译器,分别称为Client Compiler和Server Compiler,或者简称为C1编译器和C2编译器。Java8默认开启Server模式。用户可以使用“-client”或“-server”参数去指定编译模式。 C1编译器启动速度快,关注局部简单可靠的优化,比如方法…

Python学习笔记_基础篇(六)_Set集合,函数,深入拷贝,浅入拷贝,文件处理

1、Set基本数据类型 a、set集合,是一个无序且不重复的元素集合 class set(object):"""set() -> new empty set objectset(iterable) -> new set objectBuild an unordered collection of unique elements."""def add(self, *a…

操作符和表达式求值

目录 1.运算符的优先级和结合性 1.1运算符的优先级 1.2结合性 2.操作符的使用最终带来的是一个表达式的值 2.1.隐式类型转换(整型提升) 2.1.1整形提升的例子 2.2算术转换 1.运算符的优先级和结合性 运算符是编程语言中的基本元素之一,主…