2024国赛数学建模备赛|30种常用的算法模型之最优算法-整数规划

1.概论

1.1定义;

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

1.2 整数规划的分类

如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:

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

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

1.3 整数规划特点

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

①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。

②整数规划无可行解。 例 1 原线性规划为

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

例 2 原线性规划为

其最优实数解为:

若限制整数得:

(ii) 整数规划最优解不能按照实数最优解简单取整而获得。

1.4 求解方法分类:

(i)分枝定界法—可求纯或混合整数线性规划。

(ii)割平面法—可求纯或混合整数线性规划。

(iii)隐枚举法—求解“0-1”整数规划: ①过滤隐枚举法; ②分枝隐枚举法。

(iv)匈牙利法—解决指派问题(“0-1”规划特殊情形)。

(v)蒙特卡洛法—求解各种类型规划。 下面将简要介绍常用的几种求解整数规划的方法

2 各种算法

2.1分枝定界法 

 对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系 统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子 集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称 为定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。

分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由 Land Doig 和 Dakin 等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解 整数规划的重要方法。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂 选址问题、背包问题及分配问题等

设有最大化的整数规划问题 A ,与它相应的线性规划为问题 B ,从解问题 B 开始, 若其最优解不符合 A 的整数条件,那么 B 的最优目标函数必是 A 的最优目标函数 * z 的 上界,记作 z ;而 A 的任意可行解的目标函数值将是 * z 的一个下界 z 。分枝定界法就 是将 B 的可行域分成子区域的方法。逐步减小 z 和增大 z ,最终求到 * z 。现用下例来 说明:

 (iii)对问题 B1 再进行分枝得问题 B11和 B12 ,它们的最优解为

 

 从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为: 开始,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问 题 B 。

(i)解问题 B 可能得到以下情况之一:

(a) B 没有可行解,这时 A 也没有可行解,则停止.

(b) B 有最优解,并符合问题 A 的整数条件, B 的最优解即为 A 的最优解,则 停止。

(c) B 有最优解,但不符合问题 A 的整数条件,记它的目标函数值为 z

 将这两个约束条件,分别加入问题 B ,求两个后继规划问题 B1 和 B2 。不考虑整数条件 求解这两个后继问题。 定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出 最优目标函数值最大者作为新的上界 z 。从已符合整数条件的各分支中,找出目标函数 值为最大者作为新的下界 z ,若无作用 z 不变

 这个例子在具体一下

在上面的整数规划问题中,我们要求解如下的目标函数,并使用分枝定界法进行求解:

Maximize f(x1,x2)=−x12−x22\text{Maximize } f(x_1, x_2) = -x_1^2 - x_2^2Maximize f(x1​,x2​)=−x12​−x22​ Subject to x1+x2≤3,x1,x2∈Z\text{Subject to } x_1 + x_2 \leq 3, \quad x_1, x_2 \in \mathbb{Z}Subject to x1​+x2​≤3,x1​,x2​∈Z

解题过程:分枝定界法的详细步骤

1. 初始化

我们从原问题开始,初始条件为 x1+x2≤3x_1 + x_2 \leq 3x1​+x2​≤3,并且 x1,x2x_1, x_2x1​,x2​ 都是整数。当前最优解设为负无穷大(用于存储最大值)。

2. 分枝操作

 

 

2.2 0 −1型整数规划

0 −1型整数规划是整数规划中的特殊情形,它的变量 j x 仅取值 0 或 1。这时 j x 称 为0 −1变量,或称二进制变量。 x_j 仅取值 0 或 1 这个条件可由下述约束条件:

 所代替,是和一般整数规划的约束条件形式一致的。在实际问题中,如果引入 0 −1变 量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。我们 先介绍引入0 −1变量的实际问题,再研究解法。

3.1 引入0 −1变量的实际问题 3.1.1 投资场所的选定——相互排斥的计划 例 4 某公司拟在市东、西、南三区建立门市部。拟议中有 7 个位置(点) A (i = 1,2,L,7) i 可供选择。规定在东区。

由 A 1 , A2 , A 3三个点中至多选两个; 在西区。由 A4 , A5 两个点中至少选一个; 在南区,由 A 6,  A 7,两个点中至少选一个。 如选用 Ai 点,设备投资估计为bi 元,每年可获利润估计为 c i 元,但投资总额不能 超过 B 元。问应选择哪几个点可使年利润为最大?

如果有 m 个互相排斥的约束条件:

2.3 关于固定费用的问题(Fixed Cost Problem)

在讨论线性规划时,有些问题是要求使成本为最小。那时总设固定成本为常数,并 在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线 性规划来描述,但可改变为混合整数规划来解决,见下例。

例 5 某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产 方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成 本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。 所以必须全面考虑。今设有三种方式可供选择,令

 

解0 −1型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法, 即检查变量取值为 0 或 1 的每一种组合,比较目标函数值以求得最优解,这就需要检查 变量取值的 n 2 个组合。对于变量个数 n 较大(例如 n >100 ),这几乎是不可能的。因 此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的 方法称为隐枚举法(Implicit Enumeration),分枝定界法也是一种隐枚举法。当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的

下面举例说明一种解0 −1型整数规划的隐枚举法。

 

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

前面介绍的常用的整数规划求解方法,主要是针对线性整数规划而言,而对于非线 性整数规划目前尚未有一种成熟而准确的求解方法,因为非线性规划本身的通用有效解 法尚未找到,更何况是非线性整数规划。 然而,尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限 个,于是为枚举法提供了方便。当然,当自变量维数很大和取值范围很宽情况下,企图 用显枚举法(即穷举法)计算出最优值是不现实的,但是应用概率理论可以证明,在一 定的计算量的情况下,完全可以得出一个满意解

如果用显枚举法试探,共需计算  (100) ^5= 10^10 个点,其计算量非常之大。然而应 用蒙特卡洛去随机计算 10^6 个点,便可找到满意解,那么这种方法的可信度究竟怎样 呢?

下面就分析随机取样采集 6 10 个点计算时,应用概率理论来估计一下可信度。 不失一般性,假定一个整数规划的最优点不是孤立的奇点。 假设目标函数落在高值区的概率分别为 0.01,0.00001,则当计算 6 10 个点后,有任一个点能落在高值区的概率分别为

function [f,g]=mengte(x);
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(3)-...
x(4)-2*x(5);
g=[sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];
(ii)编写M文件mainint.m如下求问题的解:
rand('state',sum(clock)); 
p0=0; 
tic 
for i=1:10^6 
 x=99*rand(5,1); 
x1=floor(x);x2=ceil(x); 
[f,g]=mengte(x1); 
if sum(g<=0)==4 
 if p0<=f 
 x0=x1;p0=f; 
 end 
end 
[f,g]=mengte(x2); 
if sum(g<=0)==4 
 if p0<=f 
 x0=x2;p0=f; 
 end 
end 
end 
x0,p0 
toc 

 2.5.生产与销售计划问题

6.1 问题实例

例 9 某公司用两种原油( A 和 B )混合加工成两种汽油(甲和乙)。甲、乙两种 汽油含原油的最低比例分别为 50%和 60%,每吨售价分别为 4800 元和 5600 元。该公 司现有原油 A 和 B 的库存量分别为 500 吨和 1000 吨,还可以从市场上买到不超过 1500 吨的原油 A 。原油 A 的市场价为:购买量不超过 500 吨时的单价为 10000 元/吨;购买 量超过 500 吨单不超过 1000 吨时,超过 500 吨的部分 8000 元/吨;购买量超过 1000 吨 时,超过 1000 吨的部分 6000 元/吨。该公司应如何安排原油的采购和加工。

6.2 建立模型

(1)问题分析

安排原油采购、加工的目标是利润最大,题目中给出的是两种汽油的售价和原油 A 的采购价,利润为销售汽油的收入与购买原油 A 的支出之差。这里的难点在于原油 A 的 采购价与购买量的关系比较复杂,是分段函数关系,能否及如何用线性规划、整数规划 模型加以处理是关键所在。

(2)模型建立

设原油 A 的购买量为 x(单位:吨)。根据题目所给数据,采购的支出c(x) 可表示 为如下的分段线性函数(以下价格以千元/吨为单位):

 

由于(5)式中的c(x) 不是线性函数,(5)~(12)给出的是一个非线性规划,而 且,对于这样用分段函数定义的c(x) ,一般的非线性规划软件也难以输入和求解。能 不能想办法将该模型化简,从而用现成的软件求解呢?

 6.3 求解模型

可以用菜单命令“LINGO|Options”在“Global Solver”选项卡上启动全局优化选 型,并运行上述程序求得全局最有解:购买 1000 吨原油 A ,与库存的 500 吨原油 A 和 1000 吨原油 B 一起,共生产 2500 吨汽油乙,利润为 5000(千元)

(2)解法二

引入 0-1 变量将(15)和(16)转化为线性约束。 令 1 z1 = , 1 z2 = , z3 = 1分别表示以 10 千元/吨、8 千元/吨、6 千元/吨的价格采 购原油 A ,则约束(15)和(16)可以替换为

 

 

 

 

 

全国大学生数学建模竞赛|国赛数学建模写作模板 | 2024国赛数学建模-CSDN (shuxuejianmo.online)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值