原文信息:(包括题目、发表期刊、原文链接等):Model Building in Mathematical Programming, 5th Edition, Chap 8-10
https://books.google.com.tw/books?id=YJRh0tOes7UC
原文作者:H. Paul Williams
编者按:
在现实世界的许多决策问题中,变量往往需要取整数值,例如分配资源、购买商品或安排生产计划,并且往往涉及复杂的逻辑关系和离散组合,例如设施是否建设、项目之间的相互依赖或资源使用的互斥性。线性规划虽然强大,但在处理这些离散决策、逻辑约束和组合特征时显得力不从心。整数规划(Integer Programming, IP)作为一种扩展的数学优化方法,能够有效处理这类问题,提供精确的离散解决方案。它在物流、制造、金融等领域的广泛应用,凸显了其在复杂决策中的重要性。本文将从整数规划的基本概念入手,探讨其适用性和求解方法。接着,探讨了0-1变量的逻辑建模和特殊有序集(SOS)。在此基础上,阐述了多种实用的建模技巧,包括析取约束、非凸区域处理、顺序依赖决策等,详细讨论了几个经典的整数规划问题,如集合覆盖、背包问题等,这些案例展示了整数规划在实际问题中的建模思路。最后,还介绍了模型判断、模型简化和模型稳定性分析等,帮助读者构建更高效的模型。
一、整数规划介绍
整数规划(integer programming,IP)(有时称为离散规划),是使用整数变量和线性约束来建模一类非常广泛的实际问题。
- 纯整数规划模型 (pure integer programming,PIP) :模型仅由整数变量组成。
- 混合整数规划模型(mixed integer programming,MIP) :模型既有传统的连续变量,也存在整数变量。
从数学上讲,IP 模型在解决方案中涉及的计算量是类似大小的 LP 模型的许多倍。
1.1 整数规划的适用性
(1)具有离散输入和输出的问题
可以考虑这样一种情况:只有对某些商品(例如汽车、飞机或房屋)进行整数计算,或使用某些资源(例如员工)的整数才有意义。(在可行性前提下,可以使用传统的 LP 并将最优解值四舍五入到最接近的整数)
(2)具有逻辑条件的问题
常见地,LP 问题需要对其施加额外的条件,这些额外条件通常是逻辑类型的。例如,将整数变量限制为两个值,即 0 或 1,此类 0-1 变量用于表示“是或否”决策。
(3)组合问题
组合问题是一类在数学和运筹学等领域中常见的问题类型,其主要特征是存在大量的可行解,这些可行解通常源于对操作执行顺序、物品分配方式或人员安排位置等不同组合的考量。组合问题涵盖了众多具体的子类型,其中较为常见的包括排序问题和分配问题等。
- 排序问题关注的是如何确定一系列元素的最佳排列顺序,以满足特定的目标或约束条件,例如在车间调度问题中,需要确定不同机器上操作的最优执行顺序,以实现生产效率的最大化或其他相关目标。
- 分配问题则侧重于将资源(如客户、任务、物品等)分配到不同的接收方(如公司部门、工人、存储位置等),同时要考虑各种因素和约束,以达到某种最优的分配效果,像市场份额问题就是将客户分配到公司的各个部门以提供服务。
组合问题通常是 PIP 问题,求解可能很困难,在开始大型模型之前,通常先试验该问题的小规模版本。
(4)非线性问题
非线性问题在实际中广泛存在,其目标函数或约束条件中包含非线性关系。整数规划在处理非线性问题时具有一定的灵活性和优势。当非线性问题能够以可分离规划的形式表达时,即可以将问题分解为多个仅依赖于单个变量的子问题,此时可以利用可分离规划的方法或者将其进一步转化为整数规划问题进行求解。
例如,在涉及固定费用的问题中,如果决定生产任何数量的产品,都需要开启一台机器,此开启成本与生产数量无关。在涉及规模经济的问题中,成本函数可能具有非线性的规模效应,即随着生产规模的扩大,单位成本可能会发生变化。
(5)网络问题
在运筹学中,许多问题都涉及到网络结构,如交通网络、通信网络、物流网络等。整数规划在网络问题的建模和求解中发挥着重要作用,它为网络资源的优化配置和网络结构的优化设计提供了强大的工具和方法。在网络流问题中,IP 可用于确定网络中各条弧上的流量分配,以满足流量守恒等约束条件下实现诸如最小成本流、最大流等目标。
例如,对于网络设施选址问题,如确定物流中心、通信基站等的位置,IP 能综合考虑建设成本、覆盖范围、服务需求等多因素,通过整数变量表示设施的选址决策,结合相关约束和目标函数,找到最优的设施布局方案,以实现网络的整体性能最优和成本效益最大化。
1.2 离散变量的作用
(1)不可分割(离散)量
使用离散变量表示只能以整数表示的量,如飞机、汽车、房屋或人。
(2)决策变量
整数规划(IP)中经常使用离散变量来表示应做出哪些可能的决定。
例如,0-1变量(binary variable), δ = 1 δ = 1 δ=1 表示应该建造一个仓库, δ = 0 δ = 0 δ=0 表示不应该建造一个仓库。
或者,整数变量(integer variable), γ = 0 γ = 0 γ=0 表示不应该建造仓库; γ = 1 γ = 1 γ=1 表示应该建造 A 类仓库; γ = 2 γ = 2 γ=2 表示应该建造 B 类仓库。
(3)指示变量
当对线性规划(LP)模型施加额外条件时,通常会引入0-1变量,并将其与问题中的某些连续变量“联系”起来,以表示某些状态。
例如,对于约束 Σ a j x j ≤ b Σaⱼxⱼ ≤ b Σajxj≤b,要实现以下逻辑:
- δ = 1 → Σ a j x j ≤ b \delta = 1\rightarrow Σaⱼxⱼ ≤ b δ=1→Σajxj≤b
- Σ a j x j ≤ b → δ = 1 Σaⱼxⱼ ≤ b \rightarrow \delta = 1 Σajxj≤b→δ=1 ( δ = 0 → Σ a j x j > b ) (\delta = 0\rightarrow Σaⱼxⱼ > b) (δ=0→Σajxj>b)
可以使用以下约束:
Σ a j x j + M δ ≤ M + b Σaⱼxⱼ + Mδ ≤ M + b Σajxj+Mδ≤M+b (1)
Σ a j x j − ( m − ϵ ) δ ≥ b + ϵ Σaⱼxⱼ - (m-\epsilon)δ \ge b +\epsilon Σajxj−(m−ϵ)δ≥b+ϵ(2)
其中,
M M M:大于等于 ∑ a j x j − b \sum a_jx_j - b ∑ajxj−b的最大可能值 (约束(1)令 δ = 0 \delta=0 δ=0可得)
m m m:小于等于 ∑ a j x j − b \sum a_jx_j - b ∑ajxj−b的最小可能值 (约束(2)令 δ = 1 \delta=1 δ=1可得)
对于约束 Σ a j x j ≥ b Σaⱼxⱼ \ge b Σajxj≥b有相似的推导过程;对于约束 Σ a j x j = b Σaⱼxⱼ = b Σajxj=b,使用指示变量表示“ ≥ \ge ≥”和“ ≤ \le ≤”同时成立。
1.3 求解整数规划模型
(1)割平面法
割平面法应用于一般混合整数规划(MIP)问题时,通常采用先解决线性规划(LP)松弛问题的策略,即暂时放弃整数约束。如果获得的LP解(连续最优解)恰好是整数,那么该解同时也是整数规划的最优解;若不然,则需要通过系统地向问题中添加额外的约束条件(割平面),以进一步缩小可行域。经过这样的约束后得到的新解可能是整数解,也可能仍是非整数解。通过不断重复这一过程,直到找到整数解或证明问题无可行解为止,即可得到IP问题的最终解。虽然从数学角度来看切割平面法非常优雅,但它在处理大规模问题时的表现并不尽如人意。不过,当将其与分支定界法(Branch-and-Bound)结合使用时,却能发挥出显著的威力。
核心思想:
- 通过添加新的线性约束(割平面)来切除非整数解
- 保留所有可行的整数解
- 逐步将可行域收缩到整数点
(2)枚举法
枚举法主要应用于0-1纯整数规划(PIP)问题。从理论上说,此类问题虽然可能解的数量庞大,但都是有限的。尽管检查所有可能的解看似令人望而却步,但通过采用树搜索策略,我们只需考察部分解,并能系统地排除那些明显不可行或非最优的解。实践表明,这类方法及其变体在某些特定类型的问题上表现出色,但在其他类型的问题上则效果欠佳。
优势:
- 保证能找到全局最优解
- 容易理解和实现
- 特别适合规模较小的0-1整数规划问题
局限性: - 计算复杂度随问题规模指数增长
- 对大规模问题计算效率较低
- 需要较多的存储空间
(3)伪布尔算法
伪布尔方法是一种独特的整数规划求解思路,它的核心特点是将传统的数学约束转换为布尔代数形式。这就像是把一个数学问题转换成了逻辑电路问题。
假设有这样一个约束条件:在一个商品选择问题中,要么选择商品A和B,要么选择商品C。用传统数学语言描述是:x₁和x₂都为1,或者x₃为1(其中x₁,x₂,x₃都是0-1变量);使用伪布尔方法,我们可以将其转换为:(x₁ AND x₂) OR x₃,这种表达方式更接近人类的逻辑思维方式。
优势:
- 对某些逻辑性强的问题,约束表达更加直观
- 可以利用布尔代数的化简规则简化问题
- 特别适合处理一些具有明显逻辑结构的0-1规划问题
局限性:
- 不是所有问题都容易转换成布尔形式
- 某些简单的数学约束转换后反而变得复杂
- 在实际应用中,往往需要与其他方法结合使用
(4)分支定界法
分支定界法(Branch and Bound, BNB)的基本思路是首先将整数规划问题放松为线性规划问题(去掉整数约束),如果得到的解恰好是整数解,则找到最优解;如果不是整数解,则通过分支(Branch)和定界(Bound)逐步寻找整数解。
以最小化问题为例,分支策略是对得到的一个非整数解 x₁ = 2.7,分成两个子问题:左分支添加约束 x₁ ≤ 2,右分支添加约束 x₁ ≥ 3。定界过程是指通过比较界限来判断是否需要继续搜索某个分支,其中,上界为当前找到的最好的可行整数解,下界为子问题LP松弛解的目标函数值。
剪枝规则:
- 最优性剪枝:如果子问题的下界大于等于当前最优解,则可以放弃该分支
- 可行性剪枝:如果子问题无可行解,则放弃该分支
- 整数解剪枝:如果找到一个更好的整数解,更新上界
实现要点:
- 选择分支变量的策略(如选择最不接近整数的变量)
- 节点选择策略(深度优先、广度优先或最优下界优先)
- 初始解的获取(好的初始解可以加速收敛)
优势:
- 可以保证找到全局最优解
- 通过剪枝大大减少搜索空间
- 可以随时得到当前最优解的上下界
分支定界法融合了枚举法的完备性和线性规划的计算效率,同时通过有效的界限判断来规避大量无效搜索,并能灵活运用各种启发式策略来改进算法性能。
分支定界法的改进是分支剪切法(Branch and Cut,BNC),它结合了分支定界法和割平面法的优点,在分支定界过程中动态添加割平面约束,能更有效地处理大规模问题。现代的大多数商业求解器(如CPLEX、Gurobi)都是基于Branch and Cut方法实现的。
二、0-1变量的逻辑条件
使用布尔代数中的一些符号会很方便表示逻辑关系,下面给出连接词集:
∨:表示“或”,即 A 或 B 或两者兼而有之
•:表示“和”,即 A 和 B两者兼而有之
∼:表示“非”
→:表示“意味着”(‘if . . . then’)
↔:表示“当且仅当”(‘if and only if’)
重要的是要意识到某些表达式等同于涉及其他连接词的表达式。
为避免不必要的括号,我们认为符号 ‘∼’、‘•’、‘∨’ 和 ‘→’ 在按此顺序书写时,每个符号都比它们的后继符号更具约束力。
尽管布尔代数提供了一种表达和操作逻辑关系的便捷方法,但这里的目的是根据数学规划中的中熟悉的等式和不等式来表示这些关系。(从某种意义上说,正在执行伪布尔方法的相反过程。)
通过引入 0-1 指示变量,表示逻辑相关的决策或状态,使用 δ i = 1 δ_i = 1 δi=1表示命题 X i X_i Xi成立。以下命题和约束可以很容易地看作是等效的:
三、特殊有序集 (SOS)
特殊有序集(Special Ordered Sets, SOS)是数学规划和优化问题中的一种重要概念,主要用于处理离散优化问题,这些变量可以是整数变量或连续变量。SOS 分为两类:SOS1 和 SOS2。它们在建模和求解过程中有不同的应用场景和特性。
3.1 SOS1(特殊有序集类型1)
SOS1 是一种有序集,要求集合中的变量至多有一个变量可以取非零值,且这些变量在集合中是有序的。SOS1 通常用于处理互斥选择的问题,例如在多个选项中选择一个。
特点:
- 集合中的变量是有序的。
- 至多有一个变量可以取非零值。
- 常用于建模“多选一”的问题。
应用场景:
- 选择问题:例如在多个投资项目中选择一个。
示例:
假设有三个变量 x1,x2,x3,它们构成一个 SOS1 集合。这意味着:
- 至多有一个变量可以取非零值。
- 如果 x1 非零,则 x2 和 x3 必须为零。
建模:
假设
(
λ
1
,
λ
2
,
.
.
.
,
λ
n
)
(λ_1, λ_2, . . . , λ_n)
(λ1,λ2,...,λn)属于一个SOS1集合,那么表达这一组约束如下所示:
λ
1
+
λ
2
+
⋯
+
λ
n
≤
1
\lambda_1+\lambda_2+\dots+\lambda_n\le 1
λ1+λ2+⋯+λn≤1
3.2 SOS2(特殊有序集类型2)
SOS2 是一种有序集,要求集合中的变量至多有两个相邻的变量可以取非零值,且这些变量在集合中是有序的。SOS2 通常用于处理分段线性函数的建模问题。
特点:
- 集合中的变量是有序的。
- 至多有两个相邻的变量可以取非零值。
- 常用于建模分段线性函数。
应用场景:
- 分段线性函数的建模:例如在非线性函数的线性逼近中。
示例:
假设有四个变量 x1,x2,x3,x4,它们构成一个 SOS2 集合。这意味着:
- 至多有两个相邻的变量可以取非零值。
- 例如,如果 x2 和 x3 非零,则 x1 和 x4 必须为零。
建模:
假设 ( λ 1 , λ 2 , . . . , λ n ) (λ_1, λ_2, . . . , λ_n) (λ1,λ2,...,λn)属于一个SOS2集合,那么我们引入0–1变量 δ 1 , δ 2 , . . . , δ n − 1 δ_1, δ_2, ..., δ_{n−1} δ1,δ2,...,δn−1来表达这一组约束。
实际上,也可以写为 δ 1 + δ 2 + . . . + δ n − 1 ≤ 1 δ_1 + δ_2 + . . . + δ_{n-1}\le1 δ1+δ2+...+δn−1≤1,这反映了SOS1和SOS2约束集的关系。
可以直接调用求解器
// 创建环境和模型
GRBEnv env = new GRBEnv();
GRBModel model = new GRBModel(env);
// 创建变量
GRBVar x1 = model.addVar(0.0, 1.0, 0.0, GRB.CONTINUOUS, "x1");
GRBVar x2 = model.addVar(0.0, 1.0, 0.0, GRB.CONTINUOUS, "x2");
GRBVar x3 = model.addVar(0.0, 1.0, 0.0, GRB.CONTINUOUS, "x3");
// SOS1约束示例
GRBVar[] sos1Vars = new GRBVar[] {x1, x2, x3};
double[] weights1 = new double[] {1.0, 2.0, 3.0};
model.addSOS(sos1Vars, weights1, GRB.SOS_TYPE1);
// SOS2约束示例
GRBVar[] sos2Vars = new GRBVar[] {x1, x2, x3};
double[] weights2 = new double[] {1.0, 2.0, 3.0};
model.addSOS(sos2Vars, weights2, GRB.SOS_TYPE2);
// 其他模型约束和目标函数...
// 求解模型
model.optimize();
四、适用于线性规划模型的额外条件
4.1 析取约束
对于一组约束 R 1 , R 2 , . . . , R N R_1, R_2, . . . , R_N R1,R2,...,RN,不需要所有约束同时成立,但是需要至少一个约束成立,称为约束的析取:
使用指示变量
δ
i
\delta_i
δi来表示约束
R
i
R_i
Ri是否成立,
δ
i
=
1
→
R
i
\delta_i=1 \rightarrow R_i
δi=1→Ri。那么上述析取约束可以表示为
δ
1
+
δ
2
+
…
δ
N
≥
1
\delta_1+\delta_2+\dots \delta_N \ge 1
δ1+δ2+…δN≥1。
对于至少有
k
k
k个约束成立的一般化形式,则可以表示为
δ
1
+
δ
2
+
…
δ
N
≥
k
\delta_1+\delta_2+\dots \delta_N \ge k
δ1+δ2+…δN≥k。
4.2 非凸区域
非凸区域可以用整数规划(IP)和不相容约束来处理。
将非凸区域分解为若干个凸子区域,用不相容约束表示"解必须位于其中某一个子区域内"。
非凸区域ABCDEFGO可以由三个凸区域ABJO、ODH、KFGO表示。
区域ABJO:
区域ODH:
区域KFJO:
引入三个指示变量 δ 1 , δ 2 , δ 3 \delta_1,\delta_2,\delta_3 δ1,δ2,δ3表示是否满足三个凸区域
那么原始非凸区域可以表示为
上述指示变量的含义可以使用以下的约束表示(不唯一):
星形区域(Star-shaped domain)的定义: 如果存在区域内一点p(这里是原点),使得从p到区域内任意其他点的线段都完全位于该区域内
它保证了可以用## 标题顶点的凸组合来表示区域内任意点,关键在于从原点到任意可行点的射线与区域边界的交点,可以用两个相邻顶点的凸组合表示。这就使得我们可以用类似SOS2的方式进行建模:
4.3 限制解中变量的数目
- 背景:在LP中,最优解的非零变量数量不会超过约束数量,但有时需要进一步限制非零变量的数量为k个。
- 实现方法:引入指示变量 δ i δᵢ δi
对每个连续变量 x i xᵢ xi建立联系: x i > 0 → δ i = 1 xᵢ > 0 → δᵢ = 1 xi>0→δi=1,通过约束 x i − M i δ i ≤ 0 xᵢ - Mᵢδᵢ ≤ 0 xi−Miδi≤0来实现,其中 M i Mᵢ Mi是 x i xᵢ xi的上界,添加约束 δ 1 + δ 2 + . . . + δ n ≤ k δ₁ + δ₂ + ... + δₙ ≤ k δ1+δ2+...+δn≤k来限制非零变量的总数。
- 应用场景:
- 限制混合物中的成分数量
- 限制生产计划中的产品种类数量
- 食品制造中控制配料数量
4.4 顺序依赖决策
背景:多期决策问题中,当前决策会影响后续决策。
以仓库管理为例,分n个时期做决策,每个时期 t t t对应一个变量 γ t \gamma_t γt表示当前的仓库状态: γ t = 0 γ_t = 0 γt=0 表示该仓库应永久关闭; γ t = 1 γ_t = 1 γt=1表示仓库在此期间应暂时关闭; γ t = 2 γ_t = 2 γt=2表示在此期间可以使用该仓库。
那么,应该加入以下约束:如果某时期决定永久关闭( γ t = 0 γₜ = 0 γt=0),则之后所有时期都必须关闭;如果某时期没有决定永久关闭,那么下一时期的状态可以任意。这种约束链保证了决策的顺序依赖性。
4.5 规模经济
背景:特定产品的制造量增加,单位边际成本会降低。规模经济导致非线性、非凸的目标函数。
如图所示,这可能是真实的成本曲线,也可能是分段线性近似值。边际成本依次减低:
其中,变量 ( λ 0 , λ 1 , . . . , λ n ) (λ_0, λ_1, . . . , λ_n ) (λ0,λ1,...,λn)可视为SOS2约束集。
4.6 离散容量扩展
- 背景:现实中的容量约束可能需要付出成本来违反,不同于之前讨论的连续放松约束,容量扩展通常是离散的跳跃(如购买整台新机器)。
- 参数:
- 初始容量为 b 0 b_0 b0,可以依次扩展到 b 1 , b 2 , . . . , b n b₁, b₂, ..., bₙ b1,b2,...,bn
- 扩展成本依次为 c 1 < c 2 < . . . < c n c₁ < c₂ < ... < cₙ c1<c2<...<cn,保持初始容量的成本 c 0 = 0 c₀ = 0 c0=0
初始容量约束
就可以替换为以下约束
并将以下公式加入到目标函数
其中,变量 ( δ 0 , δ 1 , . . . , λ n ) (\delta_0,\delta_1, . . . , λ_n) (δ0,δ1,...,λn)可以视为SOS1约束集。
4.7 Maximax 目标
与Minimax的区别:Minimax可以用线性规划建模,但Maximax不能用线性规划解决,需要借助整数规划和不相容约束(disjunctive constraints)来处理。
转化为以下模型:
其中:
- z表示最大值
- 每个不相容约束对应一个线性表达式
- or表示这些约束是不相容的,只能满足其中之一
五、特殊种类的整数规划模型
5.1 Set Covering, Packing, and Partitioning Problems
考虑具有以下结构的问题类:
min
c
x
s
.
t
.
A
x
≥
e
T
x
j
=
{
0
,
1
}
∀
j
=
1
,
.
.
.
,
n
\min\ cx\\s.t.\ Ax ≥ eᵀ\\ xⱼ = \{0,1\}\quad \forall j = 1,...,n
min cxs.t. Ax≥eTxj={0,1}∀j=1,...,n
其中:
- A A A是一个 m × n m×n m×n的0-1矩阵
- e = ( 1 , . . . , 1 ) e = (1,...,1) e=(1,...,1)是一个含有 m m m个1的向量
- c c c是一个具有 n n n个任意有理数分量的向量
这个纯0-1线性规划问题被称为集合覆盖问题(set covering problem): A x ≥ e T Ax ≥ eᵀ Ax≥eT。解空间最大。
当所有的≥约束都被替换为≤约束时,该问题被称为集合打包问题(set packing problem): A x ≤ e T Ax ≤ eᵀ Ax≤eT。
当不等式约束被替换为等式约束时,该问题被称为集合划分问题(set partitioning problem): A x = e T Ax = eᵀ Ax=eT。解空间最小。
- 应用:
许多应用都是纯粹的集合覆盖、集合打包、集合划分问题,更多的应用是包含这种结构,作为更大问题的一部分。
-
集合覆盖:送货和路由问题、调度问题和定位问题等,其目标是确保某些地点、车辆或人员为每位客户提供服务。
-
集合打包:课程排课、会议室安排等,教室同一时间只能安排一门课,避免时间冲突的会议预订。
-
集合划分:机组人员调度、政治选区划分问题等,航空公司的每个航段必须由恰好一个驾驶舱机组人员进行调度,每个公民都被分配到恰好一个投票区。
-
特点比较:
- 集合覆盖:强调全覆盖,适合服务保障类问题
- 集合打包:强调不冲突,适合资源竞争类问题
- 集合划分:最严格,要求完美匹配,适合精确分配类问题
-
互相转化关系:
集合划分问题可以转化为集合打包问题。通过添加一个带负系数的0-1变量,集合划分(或集合打包)问题可以转化为集合覆盖问题。但集合覆盖问题一般不能转化为集合划分或打包问题。
5.2 Knapsack problem
有一个背包,它有一个固定的容量限制W。现在有n个物品可供选择,每个物品i都有两个基本属性,重量和价值。
目标是在背包容量限制下,选择若干物品放入背包,使得放入背包的物品总价值最大。
-
决策变量: x j x_j xj表示物品 j j j是否被选择或选择数量
-
参数:
- w j wⱼ wj:物品 j j j的重量
- v j vⱼ vj:物品 j j j的价值
- W W W:背包总容量
-
数学模型:
max ∑ j v j x j ( 最大化总价值 ) s . t . ∑ j w j x j ≤ W ( 背包容量约束 ) \max\ ∑ⱼ vⱼxⱼ (最大化总价值)\\ s.t.\ ∑ⱼ wⱼxⱼ ≤ W (背包容量约束) max j∑vjxj(最大化总价值)s.t. j∑wjxj≤W(背包容量约束) -
主要变体:
- 0-1背包问题: $xⱼ ∈ {0,1} $(每个物品只能选择0或1次)
- 有界背包问题:$0 ≤ xⱼ ≤ uⱼ $ (每个物品有上限约束)
- 无界背包问题: x j ≥ 0 xⱼ ≥ 0 xj≥0 (每个物品可以选择任意非负整数次)
- 多维背包:不只有重量一个限制,可能还有体积、长度等多个维度的约束
-
求解方法:动态规划
定义状态dp[i][w]为前i个物品在容量 w w w下的最大价值,状态转移方程考虑是否选择第 i i i个物品。
- 应用:
背包约束在实际应用中经常作为子问题出现:切割库存问题、列生成算法中的子问题、资源分配问题等。
5.3 Travelling salesman problem
旅行商问题(Traveling Salesman Problem, TSP)是运筹学中的一个经典NP-Hard问题,受到了很多关注,其概念简单性与在实践中解决此类问题的难度形成鲜明对比。
问题描述为:给定n个城市和城市之间的距离矩阵,求一条访问每个城市恰好一次并最终回到起点的最短回路。
- 决策变量:
x
i
j
=
1
x_{ij} = 1
xij=1 表示从城市
i
i
i直接到城市
j
j
j
x
i
j
=
0
x_{ij} = 0
xij=0 表示不从城市
i
i
i直接到城市
j
j
j
- 目标函数: min ∑ ∑ c i j x i j \min\ ∑∑c_{ij} x_{ij} min ∑∑cijxij
其中 c i j c_{ij} cij表示城市 i i i到城市 j j j的距离,通常考虑等于城市 j j j到城市 i i i的距离
- 约束条件:
- 度约束:表示每个城市只能有一条路径进入,只能有一条路径离开
∑ i x i j = 1 ∀ j = 1 , . . . , n ∑_ix_{ij} = 1\quad \forall j=1,...,n i∑xij=1∀j=1,...,n
∑ j x i j = 1 ∀ i = 1 , . . . , n ∑_jx_{ij} = 1 \quad \forall i=1,...,n j∑xij=1∀i=1,...,n
- 度约束:表示每个城市只能有一条路径进入,只能有一条路径离开
存在子回路问题:解可能会形成多个不相连的小回路
- 子回路消除约束(SEC, Subtour Elimination Constraints) :消除子回路,TSP问题中最关键的约束
∑
x
i
j
≤
∣
S
∣
−
1
∀
S
⊂
V
,
2
≤
∣
S
∣
≤
n
−
1
∑x_{ij} ≤ |S|-1 \quad \forall S⊂V, 2≤|S|≤n-1
∑xij≤∣S∣−1∀S⊂V,2≤∣S∣≤n−1
其中
V
V
V为城市集合,
S
S
S为
V
V
V的任意真子集。这种建模方式需要指数数量级的约束,计算复杂度很高。
- MTZ模型
为了避免使用指数量级的约束,Miller-Tucker-Zemlin(MTZ)提出了一种更高效的建模方法:
引入新的连续变量
u
i
u_i
ui 表示城市
i
i
i在路径中的序号,则可以用如下线性约束替代SEC:
u
i
−
u
j
+
n
x
i
j
≤
n
−
1
2
≤
i
≠
j
≤
n
u_i - u_j + nx_{ij} ≤ n-1 \quad 2≤i≠j≤n
ui−uj+nxij≤n−12≤i=j≤n
MTZ约束保证了只要存在从
i
i
i到
j
j
j的路径(即
x
i
j
=
1
x_{ij}=1
xij=1),则
j
j
j的序号一定要大于
i
i
i的序号(除非
j
j
j是最后一个城市),从而自然地避免了子回路的形成。这种建模方法只需要O(n²)个约束,大大降低了求解的复杂度。
在处理复杂优化问题时,有时可以通过引入新的变量和巧妙的数学转化,将原本需要指数量级约束的问题转化为多项式规模的问题,从而使得问题在实际中更容易求解。MTZ约束虽然在约束数量上更优,但其线性松弛解的界限较差。在实际应用中,我们往往需要权衡模型的规模和求解效率,选择合适的建模方法。
- 求解方法:
- Concorde算法
目前解决TSP最成功的精确算法,基于分支切割(Branch-and-Cut)框架。
核心技术包括:高效的切平面生成、启发式分支规则、复杂的预处理技术、先进的线性规划求解策略。
- Lin-Kernighan-Helsgaun (LKH)算法
被认为是最好的TSP启发式算法,基于Lin-Kernighan算法的改进版本,核心思想是变邻域搜索。
主要改进:更复杂的移动策略、序列性搜索、新的邻域结构。
5.4 Vehicle routing problem
车辆路径问题(Vehicle Routing Problem, VRP)是旅行商问题最重要的延伸,它描述从一个配送中心向多个客户配送货物,需要合理安排多辆车的路径,使总成本最小。每辆车需要从配送中心出发,服务若干个客户后返回配送中心。每个客户都有一个已知的需求,因此必须考虑到有限的车辆容量。此外,通常存在时间窗条件,要求某些客户只能在特定时间之间接收配送。该问题有许多可能的目标,例如,最大限度地减少所需的车辆数量、最小化总成本或最小化车辆花费的最长时间。
基本VRP问题的主要考虑因素包括:
-
每个客户的需求量
-
车辆的载重限制
-
每条路径必须从配送中心出发并返回
-
每个客户必须且仅能被服务一次
-
服务客户的时间窗限制
-
参数定义:
- V = { v 1 , . . . , v i } V = \{v_1,...,v_i\} V={v1,...,vi}: 客户点集合,0: 表示配送中心
- U = { 1 , . . . , u } U = \{1,...,u\} U={1,...,u}: 车辆集合
- c i j c_{ij} cij: 从点 i i i到点 j j j的距离,同时也是行驶时间(假设速度为1)
- s e r v i serv_i servi: 客户 i i i的服务时长
- d i d_i di: 客户 i i i的需求量
- Q Q Q: 车辆载重限制
- [ a i , b i ] [a_i,b_i] [ai,bi]: 客户 i i i时间窗限制
-
决策变量:
- x i j u x_{ij}^u xiju: 如果车辆 u u u从点 i i i直接到达点 j j j则为1,否则为0
- s i u s^u_i siu:到达客户 i i i开始服务的时间
-
模型:
对于合理大小的问题实例,这样的公式也很难解决。
- 求解方法:列生成
主问题决定路线的选择组合,子问题负责生成新的有潜力的路线,通过对偶信息指导寻找好的路线。
5.5 Quadratic assignment problem
分配问题(Assignment Problem)可以被视为 LP 问题,因此相对容易解决,二次分配问题(Quadratic Assignment Problem, QAP)是其推广,是 IP 问题,通常很难解决。
二次分配问题与两组对象 S 和 T 有关。S 和 T 都具有相同数量的成员,这些成员的索引为 1 到 n。问题是将 S 的每个成员分配给 T 的一个成员,以实现某些目标。
- 决策变量: δ i j = 1 δᵢⱼ =1 δij=1如果S的成员 i i i被分配给T的成员 j j j
- 约束条件:
- 每个S中的成员必须分配到T中的一个成员:
∑ j n δ i j = 1 , i = 1 , 2 , . . . , n ∑ⱼ^n δᵢⱼ = 1,\quad i = 1,2,...,n j∑nδij=1,i=1,2,...,n - 每个T中的成员必须被分配一个S中的成员:
∑ i n δ i j = 1 , j = 1 , 2 , . . . , n ∑_i^n δᵢⱼ = 1,\quad j = 1,2,...,n i∑nδij=1,j=1,2,...,n
- 每个S中的成员必须分配到T中的一个成员:
- 目标函数:
min ∑ i , j , k , l = 1 k > i n c i j k l δ i j δ k l \min\ ∑_{\substack{i,j,k,l=1 \\ k>i}}^n cᵢⱼₖₗ δᵢⱼ δₖₗ min i,j,k,l=1k>i∑ncijklδijδkl
其中 c i j k l = t i k ∗ d j l cᵢⱼₖₗ = tᵢₖ * dⱼₗ cijkl=tik∗djl
QAP是一个NP-hard问题,即使对于中等规模的问题也很难求解。
目标函数是非线性的(二次项),但可以通过引入新变量,将将 0 − 1 变量的乘积线性化。
在实践中有广泛应用,例如:
- 工厂选址问题:
- S: n n n个工厂
- T: n n n个城市
- t i k tᵢₖ tik: 工厂 i i i和 k k k之间的通信频率
- d j l dⱼₗ djl: 城市 j j j和 l l l之间的通信成本
目标:最小化工厂间的总通信成本
- 电子模块布局问题:
- S: n n n个电子模块
- T: 背板上 n n n个预定位置
- t i k tᵢₖ tik: 连接模块 i i i和 k k k所需的导线数量
- d j l dⱼₗ djl: 位置 j j j和 l l l之间的距离
目标:最小化总导线长度
六、好的和差的建模
6.1 IP中的变量数目
变量数目是衡量计算复杂性的一个良好指标。一个包含 n n n个0-1变量的模型有 2 n 2^n 2n种可能的变量设置,这意味着解空间非常大。例如,100个0-1变量的模型有 2 100 2^{100} 2100种可能性,这是一个非常大的数字。尽管解空间巨大,但分支定界法通过排除不可行或不如已知解的部分,显著减少了需要检查的节点数量。因此,即使有大量变量,问题也可能在相对较少的节点内解决。虽然0-1变量的数量通常不是衡量IP模型难度的好指标,但在某些情况下,减少这些变量的数量可能是有益的。
介绍一种将一般整数变量扩展为多个0-1变量的方法,
0
≤
γ
≤
u
0\le \gamma\le u
0≤γ≤u是一个整数,可以用下式表示,
γ
=
δ
0
+
2
δ
1
+
4
δ
2
+
8
δ
3
+
⋅
⋅
⋅
+
2
r
δ
r
\gamma=δ_0 + 2δ_1 + 4δ_2 + 8δ_3 + · · · + 2^r δ_r
γ=δ0+2δ1+4δ2+8δ3+⋅⋅⋅+2rδr
其中,
δ
i
\delta_i
δi是0-1变量,而
2
r
2^r
2r是大于等于
u
u
u的最小的2的幂指数。该表达式可以表示0到
u
u
u之间的所有整数。
这种扩展方便使用某些仅适用于 0-1 问题的专用算法,其他并没有什么好处。
构建 IP 模型后发现解决它的成本高得令人望而却步,这是相当普遍的。通常,可以重新表述问题,从而提供另一个更容易解决的模型。这种重新制定通常必须与要采用的解决方案策略一起考虑,例如可以构建更好的模型配合使用branch-and-bound方法。
e.g.1 增加变量数目是有好处的
需建立一个新的工厂,相关的四个0-1决策变量如下,表示北/南和批处理/连续处理的组合。
需要添加的约束为
通过添加额外的0-1变量 δ δ δ来表示北/南的选择,则需要添加的约束为:
这种方式有助于在分支定界过程中进行分支。
e.g.2 减少变量数目是有好处的
在整数规划模型中如何处理对称性问题,通过重新定义变量来减少冗余和提高计算效率。
例如,原问题使用 δ i j δᵢⱼ δij表示第 i i i辆卡车去第 j j j个地点。由于卡车是相同的,会产生对称解,改用 n j nⱼ nj表示去往地点 j j j的卡车数量可以避免对称性。
e.g.3 整数松弛变量
对于整数约束 ∑ j a j x j ≤ b ∑ⱼaⱼxⱼ ≤ b ∑jajxj≤b,可以引入整数松弛变量 u u u,得到 ∑ j a j x j + u = b ∑ⱼaⱼxⱼ + u = b ∑jajxj+u=b。
在分支定界时优先考虑对 u u u进行分支可以产生更好的切割平面效果。当我们对u进行分支时,比如 u ≤ k u ≤ k u≤k或 u ≥ k + 1 u ≥ k+1 u≥k+1,这等价于对原约束添加切割: ∑ j a j x j ≥ b − k ∑ⱼaⱼxⱼ ≥ b-k ∑jajxj≥b−k 或 ∑ j a j x j ≤ b − ( k + 1 ) ∑ⱼaⱼxⱼ ≤ b-(k+1) ∑jajxj≤b−(k+1),这些切割直接作用于原变量空间。
u u u是一个全局变量,它反映了整个约束的松弛程度,对 u u u的分支会同时影响多个原始变量,这比对单个 x j xⱼ xj分支能更快地缩小可行域。
综上,合理增加0-1变量可能有助于问题求解,但过多的0-1变量也会增加计算复杂性,需要在问题规模和求解效率之间找到平衡。对称性的处理对提高求解效率很重要。
6.2 IP中的约束数目
LP 模型的难度在很大程度上取决于约束的数量。在 IP 模型中,这种影响通常会被其他考虑因素所淹没。事实上,通过增加约束的数量,IP 模型通常更容易求解。
在整数规划中,凸包特指整数可行解的凸包,是所有整数可行解点的凸组合(convex combination),记作:
c o n v ( S ) = { ∑ i λ i x i ∣ x i 是整数可行解 , λ i ≥ 0 , ∑ i λ i = 1 } conv(S) = \{∑ᵢ λᵢxᵢ\ |\ xᵢ是整数可行解, λᵢ ≥ 0, ∑ᵢ λᵢ = 1\} conv(S)={i∑λixi ∣ xi是整数可行解,λi≥0,i∑λi=1}
ABCD区域是LP松弛的可行域,图中的点状标记都是整数可行解,PQRSTUV区域就是这些整数点的凸包。
凸包的重要性在于:它是最小的凸集,包含了所有整数可行解。如果能找到这个凸包的精确表示(通过线性约束),那么直接求解LP问题就能得到整数最优解。它为评价一个IP模型的"好坏"提供了基准 - 模型的LP松弛越接近这个凸包,通常求解效率就越高。
不过,对于一般的IP问题,找到整数可行解的精确凸包是计算上难以实现的目标,并且远远超过解决 IP 问题的原始公式所需的计算。这也是为什么我们需要其他技术(如分支定界、割平面等)来求解IP问题。
对于重要问题类别,可能会发生以下情况之一:
(i) 简单的公式产生了一个 IP 模型,其中可行区域已经是整数点的凸包。
(ii) 这个问题可以很容易地重新表述,以给出一个对应于整数点的凸包的可行区域。
(iii)通过重新表述,可以将 LP 问题的可行区域减少到更接近整数点的凸包区域。
情况(i):相应 LP 问题的最优解总是得到整数变量的整数值。因此,该模型可以被视为 LP 问题。属于此类别的问题包括运输问题、最低成本网络流问题和分配问题。有时可以识别 IP 模型何时具有保证相应 LP 模型将具有整数最优解的结构,实际上这是具有全幺模的性质。
矩阵A的全单模性/全幺模性(total unimodularity):如果约束矩阵具有全单模性(即每个方阵子矩阵的行列式为0或±1),那么对任意整数右端项,LP问题的最优解都将是整数解。
尽管全幺模性质非常有用,但直接检测一个矩阵是否全幺模是非常困难的,因为需要检查所有可能的方阵子矩阵的行列式。为了简化检测过程,可以使用一些充分条件 [性质P] 判断矩阵是否具有全单模性的条件(即满足这些条件的矩阵一定是全幺模的,但全幺模的矩阵不一定满足这些条件)。
性质P:矩阵 A 需要满足以下条件
- 元素限制:矩阵 A 中的每个元素都是 0、1 或 -1。
- 列限制:每列中最多有两个非零元素。
- 行分区:矩阵的行可以被划分为两个子集 P1 和 P2,
- 如果一列中有两个相同符号的非零元素,那么这两个元素分别位于 P1 和 P2 中;
- 如果一列中有两个相反符号的非零元素,那么这两个元素都位于同一个子集中。
性质P 的一个特殊情况是子集 P1 为空,而 P2 由 A 的所有行组成。要使性质P满足,必须让所有列由一个非零元素 ±1 或两个非零元素 +1 和 -1 组成。
情况(ii):约束
δ
1
+
δ
2
+
⋅
⋅
⋅
+
δ
n
−
n
δ
≤
0
δ_1 + δ_2 + · · · + δ_n − nδ ≤ 0
δ1+δ2+⋅⋅⋅+δn−nδ≤0可以重新表述为以下一组约束
δ
1
−
δ
≤
0
,
δ
2
−
δ
≤
0
,
.
.
.
δ
n
−
δ
≤
0.
δ_1 − δ ≤ 0,\\ δ_2 − δ ≤ 0,\\ ... \\δ_n − δ ≤ 0.
δ1−δ≤0,δ2−δ≤0,...δn−δ≤0.
它们在IP意义上等价,在LP意义上不等价,新的一组约束展示了重新表述一个不是全幺模的 PIP 问题使其全幺模的可能性,实现了更好的LP松弛。
情况(iii):在 MIP 模型中可能经常发生,假设只有一些约束是情况(ii)的形式。通过将这些约束扩展到一系列上述情况(ii)的拓展约束,将减小 LP 的可行区域的大小。尽管问题中存在其他约束可能会导致某些整数变量在 LP 最优解中取小数值,但与原始模型相比,此解应“更接近”整数最优解。
例如,一个逻辑条件: x > 0 → δ = 1 x > 0 → δ = 1 x>0→δ=1 这个逻辑可以转化为约束: x − M δ ≤ 0 x - Mδ ≤ 0 x−Mδ≤0。
理论上 M M M只要是 x x x的一个上界即可,但是使 M M M尽可能小是有好处的。
- 通过减小 M M M,可以减小与 MIP 问题相对应的 LP 问题的可行区域的大小。
例如,LP解 x = 70 , δ = 1 / 2 x = 70,δ = 1/2 x=70,δ=1/2满足 M = 1000 M = 1000 M=1000时的约束,而不满足 M = 100 M = 100 M=100时的约束。
- 通过减小 M M M,可以减少数值稳定性问题。
例如, x = 5 , δ = 0.005 x = 5,δ = 0.005 x=5,δ=0.005也满足 M = 1000 M = 1000 M=1000时的约束。 M M M太大会允许 δ \delta δ取非常小的分数值,甚至可能小到低于求解器的整数判定误差,导致错误地接受 δ = 0 \delta=0 δ=0的解。
虽然在原始的整数规划问题中, δ δ δ确实是0-1变量,但我们需要考虑LP松弛的表现,原因是:在求解整数规划时,我们通常使用分支定界法,而分支定界的每个节点都需要求解一个LP松弛问题。松弛问题的求解质量直接影响算法效率。较差的LP松弛意味着可能需要探索更多的节点,较好的LP松弛会给出更紧的界限,有助于更快地剪枝和收敛到整数解。
例如, δ δ δ是一个0-1变量,表示是否建立仓库,如果建立仓库( δ = 1 δ = 1 δ=1),可以为客户 i i i供应最多 M i M_i Mi的量,如果不建仓库( δ = 0 \delta=0 δ=0),则不能供应。 x i x_i xi表示供应给客户 i i i的量。
有两种建模方式:
- 单一约束方式:
x 1 + x 2 + . . . + x n − M δ ≤ 0 x₁ + x₂ + ... + xₙ - Mδ ≤ 0 x1+x2+...+xn−Mδ≤0
其中
M
=
M
1
+
M
2
+
.
.
.
+
M
n
M = M₁ + M₂ + ... + Mₙ
M=M1+M2+...+Mn
2. 分解约束方式:
x
1
−
M
1
δ
≤
0
x₁ - M₁δ ≤ 0
x1−M1δ≤0
x
2
−
M
2
δ
≤
0
x₂ - M₂δ ≤ 0
x2−M2δ≤0
…
x
n
−
M
n
δ
≤
0
xₙ - Mₙδ ≤ 0
xn−Mnδ≤0
第二种方式更好,因为:每个约束使用了最小的可能的
M
M
M值(
M
i
M_i
Mi)。约束更紧,LP松弛更接近整数解的凸包。避免了把所有
M
i
M_i
Mi相加产生的大系数。
这个例子很好地说明了为什么要尽可能使用小的 M M M值,以及如何通过重构模型来实现这一点。大 M M M方法虽然在建模中很有用,但需要谨慎使用,尽可能选择最小的有效 M M M值,必要时可以将一个大 M M M约束分解为多个小 M M M约束。
总结,构建IP模型时可以考虑如下:
- 使用整数变量:这些变量可以在分支定界法的分支过程中发挥良好作用。如有必要,引入额外的0-1变量以创建有意义的两分法。
- 使与整数规划问题对应的线性规划问题尽可能受约束:确保线性规划问题的约束条件尽可能严格。
- 使用特殊有序集:如果可能且所使用的计算机软件包能够处理,使用特殊有序集建模。
七、简化整数规划模型
重新制定 IP 模型,以创建另一个更容易解决的模型。
7.1 收紧边界
通过收紧边界,相应的 LP 问题可能会受到更多约束,从而导致 LP 问题的最佳解更接近最佳 IP 解。
例如,
- 由约束(R3)可知, 2 δ 3 ≥ 1 + δ 2 + δ 4 + δ 5 ≥ 1 2\delta_3\ge 1+\delta_2+\delta_4+\delta_5\ge 1 2δ3≥1+δ2+δ4+δ5≥1,即 δ 3 ≥ 1 2 \delta_3\ge \frac{1}{2} δ3≥21。由于 δ 3 δ_3 δ3是0-1变量,因此可以直接设 δ 3 = 1 δ_3=1 δ3=1,代入到模型中,并从模型中移去。
- 由约束(R2)可知, 6 δ 2 ≥ 3 + 2 δ 1 + 2 δ 4 − 2 δ 5 ≥ 1 6δ_2 ≥ 3 + 2δ_1 + 2δ_4 − 2δ_5 ≥ 1 6δ2≥3+2δ1+2δ4−2δ5≥1,即 δ 2 ≥ 1 6 \delta_2\ge \frac{1}{6} δ2≥61。由于 δ 3 δ_3 δ3是0-1变量,同理可以直接设 δ 2 = 1 δ_2=1 δ2=1,从问题中移去。
- 由约束(R3)可知, 2 δ 4 ≤ − δ 5 ≤ 0 2δ_4 ≤ −δ_5 ≤ 0 2δ4≤−δ5≤0,即 δ 4 ≤ 0 \delta_4\le 0 δ4≤0,从问题中移去。
- 由约束(R3)可知, δ 5 ≤ 0 \delta_5\le 0 δ5≤0,因此 δ 5 = 0 δ_5=0 δ5=0。
- 所有约束都被证明是多余的,可以被删除。唯一剩下的变量是 δ 1 \delta_1 δ1,它显然应该设置为 0。
这个例子显然是 IP 模型中收紧边界效果的极端情况,为仅此程序就可以完全解决问题。
7.2 简化单个整数约束
(1)将单个整数约束简化为另一个整数约束
例如,约束 4 y 1 + 6 y 2 ≤ 9 4y_1 + 6y_2 ≤ 9 4y1+6y2≤9 改为 y 1 + 2 y 2 ≤ 2 y_1 + 2y_2 ≤ 2 y1+2y2≤2
可行域从AB左侧变化为CD左侧,不会减少或者增加任何一个整数可行解
一般形式的表达:其中 δ i δ_i δi都是0-1变量
原约束: a 1 δ 1 + a 2 δ 2 + . . . + a n δ n ≤ a 0 a_1δ_1 + a_2δ_2 + ... + a_nδ_n ≤ a_0 a1δ1+a2δ2+...+anδn≤a0
简化后: b 1 δ 1 + b 2 δ 2 + . . . + b n δ n ≤ b 0 b_1δ_1 + b_2δ_2 + ... + b_nδ_n ≤ b_0 b1δ1+b2δ2+...+bnδn≤b0
这个简化过程本身可以被转化为一个LP问题来求解,约束条件:
- 对于任何满足原约束的0-1解,必须满足新约束
- 对于任何不满足原约束的0-1解,必须不满足新约束
- 系数 b i b_i bi应该尽可能小以使约束更紧
文中没有给出具体计算方法,这是一个复杂的优化问题,通常需要考虑具体问题的特殊结构。
技巧:
- 可以假设所有系数都是非负的,对于负系数,可以通过变量替换 δ i = 1 − δ i ′ δ_i = 1 - δ_i' δi=1−δi′来处理
- ≥ 约束可以转换为 ≤ 约束,等式约束可以转换为两个不等式约束
- 如果涉及一般整数变量,需要先转换为0-1变量
例如,对于 γ ≤ 7 γ ≤ 7 γ≤7的一般整数变量,可以表示为0-1变量 γ i \gamma_i γi的组合: γ = γ 1 + 2 γ 2 + 4 γ 3 γ = γ1 + 2γ2 + 4γ3 γ=γ1+2γ2+4γ3
- 原项: a γ 1 + 2 a γ 2 + 4 a γ 3 aγ_1 + 2aγ_2 + 4aγ_3 aγ1+2aγ2+4aγ3
- 简化为: b 1 γ 1 + b 2 γ 2 + b 3 γ 3 b_1γ1 + b_2γ2 + b_3γ3 b1γ1+b2γ2+b3γ3,需要满足特殊条件: b 3 = 2 b 2 , b 2 = 2 b 1 b_3 = 2b_2, b_2 = 2b_1 b3=2b2,b2=2b1
应用场景和局限性:
- 适用于项目选择和资本预算问题
- 不是所有情况都值得进行这种简化
- 许多逻辑约束已经处于最简形式
这种方法的核心在于:在保持整数可行解不变的前提下,通过改变系数来得到更简单的约束形式。减小LP问题的可行域对于提高求解效率可能有帮助,但需要根据具体问题来判断是否值得使用这种简化方法。
(2)将单个整数约束简化为另一组整数约束
考虑以下纯0–1约束: a 1 δ 1 + a 2 δ 2 + a 3 δ 3 + ⋅ ⋅ ⋅ + a n δ n ≤ a 0 a_1δ_1 + a_2δ_2 + a_3δ_3 + · · ·+ a_nδ_n ≤ a_0 a1δ1+a2δ2+a3δ3+⋅⋅⋅+anδn≤a0
假设所有系数均为非负,约束符号为"<=",这种假设不失一般性。
定义
- Cover (覆盖)
对于系数的索引集合 { i 1 , i 2 , . . . , i r } \{i₁, i₂, ..., iᵣ\} {i1,i2,...,ir},如果对应的系数之和 a i 1 + a i 2 + . . . + a i r > a 0 a_{i_1} + a_{i_2} + ... + a_{i_r} > a₀ ai1+ai2+...+air>a0,则称这个子集为一个覆盖
对于覆盖中的索引 i i i,其对应的 δ i δᵢ δi不能同时为1,这表现为约束条件: δ i 1 + δ i 2 + . . . + δ i r ≤ r − 1 δ_{i_1} + δ_{i_2} + ... + δ_{i_r} ≤ r - 1 δi1+δi2+...+δir≤r−1
- Minimal Cover (最小覆盖)
如果一个覆盖 { i 1 , i 2 , . . . , i r } \{i₁, i₂, ..., iᵣ\} {i1,i2,...,ir}的任何真子集都不是覆盖,则称其为最小覆盖。换句话说,如果从这个覆盖中移除任何一个元素,剩下的集合就不再是覆盖,那么这个覆盖就是最小覆盖。
- Extended Cover (扩展覆盖)
最小覆盖可以通过以下步骤扩展:
- 首先找出最小覆盖中最大的系数 a i j a_{i_j} aij
- 然后找出不在最小覆盖中的、但系数大于等于 a i j a_{i_j} aij的所有索引 { i r + 1 , i r + 2 , . . . , i r + s } \{i_{r + 1}, i_{r + 2}, . . . , i_{r + s} \} {ir+1,ir+2,...,ir+s}
- 将这些新索引添加到原最小覆盖中,形成扩展覆盖 { i 1 , i 2 , . . . , i r + s } \{i_{1}, i_{2}, . . . , i_{r + s} \} {i1,i2,...,ir+s}
扩展覆盖同样满足约束条件: δ i 1 + δ i 2 + . . . + δ i r + s ≤ r − 1 δ_{i_1} + δ_{i_2} + ... + δ_{i_{r+s}} ≤ r - 1 δi1+δi2+...+δir+s≤r−1
- Strong Cover (强覆盖)
如果一个最小覆盖产生的扩展覆盖不是其他同样大小的最小覆盖所产生的扩展覆盖的真子集,则称这个最小覆盖为强覆盖。
例如,考虑以下约束:
3
δ
1
+
3
δ
2
+
2
δ
3
+
2
δ
4
+
2
δ
5
≤
6
3δ₁ + 3δ₂ + 2δ₃ + 2δ₄ + 2δ₅ ≤ 6
3δ1+3δ2+2δ3+2δ4+2δ5≤6
该约束的最小覆盖有:
- {1, 2, 3}
- {1, 2, 4}
- {1, 2, 5}
- {1, 3, 4}
- {1, 3, 5}
- {1, 4, 5}
- {2, 3, 4}
- {2, 3, 5}
- {2, 4, 5}
这些最小覆盖可以扩展为:
- {1, 2, 3} 来自覆盖 {1, 2, 3}
- {1, 2, 4} 来自覆盖 {1, 2, 4}
- {1, 2, 5} 来自覆盖 {1, 2, 5}
- {1, 2, 3, 4} 来自覆盖 {1, 3, 4} 和 {2, 3, 4}
- {1, 2, 3, 5} 来自覆盖 {1, 3, 5} 和 {2, 3, 5}
- {1, 2, 4, 5} 来自覆盖 {1, 4, 5} 和 {2, 4, 5}
强覆盖分析:由于前三个最小覆盖是拓展覆盖的真子集,因此,前三个最小覆盖 {1, 2, 3}、{1, 2, 4}、{1, 2, 5} 不是强覆盖,后六个最小覆盖是强覆盖。强覆盖及其拓展覆盖,对应产生以下facet constraint:
δ
1
+
δ
2
+
δ
3
+
δ
4
≤
2
δ₁ + δ₂ + δ₃ + δ₄ \quad ≤ 2
δ1+δ2+δ3+δ4≤2
δ
1
+
δ
2
+
δ
3
+
δ
5
≤
2
δ₁ + δ₂ + δ₃ \quad + δ₅ ≤ 2
δ1+δ2+δ3+δ5≤2
δ
1
+
δ
2
+
δ
4
+
δ
5
≤
2
δ₁ + δ₂ \quad + δ₄ + δ₅ ≤ 2
δ1+δ2+δ4+δ5≤2
7.3 简化一组整数约束
该问题的整数最优解是 δ 1 = 0 , δ 2 = 0 , δ 3 = 1 δ₁=0, δ₂=0, δ₃=1 δ1=0,δ2=0,δ3=1,目标值为1。
LP松弛的最优解是 δ 1 = 0 , δ 2 = 3 4 , δ 3 = 3 8 δ_1 = 0, δ_2 = \frac{3}{4}, δ_3 = \frac{3}{8} δ1=0,δ2=43,δ3=83 ,目标值为 15 8 \frac{15}{8} 815。
将约束替换为facet constraints,模型如下:
此时,LP松弛的最优解是 δ 1 = 0 , δ 2 = 1 2 , δ 3 = 1 2 δ_1 = 0, δ_2 = \frac{1}{2}, δ_3 = \frac{1}{2} δ1=0,δ2=21,δ3=21 , 目标值为 3 2 \frac{3}{2} 23。
虽然简化后的模型LP解更接近整数解,但仍未完全保证整数可行解。
目前没有通用的高效算法来生成一般0-1约束集对应的凸包,如果存在这样的算法,就可以将PIP问题简化为LP问题。对某些特殊的PIP问题类型存在部分解决方案,例如集合覆盖问题和背包问题。
这部分讨论主要关注如何通过添加额外限制来增强IP模型的LP松弛,这些额外限制可以视为IP切平面算法的背景,重点是在初始模型中添加切割平面,而不是优化过程中生成的切割平面。
7.4 非连续变量
非连续变量:
x
=
0
o
r
a
≤
x
≤
b
o
r
x
=
c
x = 0\ or\ a ≤ x ≤ b\ or\ x = c
x=0 or a≤x≤b or x=c
其中, 0 < a < b < c 0 < a < b < c 0<a<b<c
表达方法:
x
=
0
δ
1
+
a
y
1
+
b
y
2
+
c
δ
2
x = 0δ_1+ay₁ + by₂ + cδ₂
x=0δ1+ay1+by2+cδ2
δ
1
+
y
1
+
y
2
+
δ
2
=
1
δ₁ + y₁ + y₂ + δ₂ = 1
δ1+y1+y2+δ2=1
其中:
- δ 1 , δ 2 δ₁, δ₂ δ1,δ2 是0-1整数变量
- y 1 , y 2 y₁, y₂ y1,y2是非负连续变量
半连续变量:
x
=
0
o
r
x
≥
a
(
a
>
0
)
x = 0\ or\ x ≥ a\ (a > 0)
x=0 or x≥a (a>0)
表达方法:
x
=
0
δ
+
a
y
1
+
M
y
2
x = 0δ+ay₁ + My₂
x=0δ+ay1+My2
δ
+
y
1
+
y
2
=
1
δ + y₁ + y₂ = 1
δ+y1+y2=1
其中:
- δ δ δ 是0-1变量
- y 1 , y 2 y₁, y₂ y1,y2 是非负连续变量
- M M M是预先指定的 x x x的上界
7.5 解的对称性
在整数规划中,解的对称性通常指的是通过某种置换(permutation)变换后,一个可行解可以转化为另一个具有相同目标函数值的可行解。
例如,在设施选址问题中,如果有n个完全相同的设施,它们的任意置换都会产生等价解。
例如,
min
z
=
x
1
+
x
2
+
x
3
s
.
t
.
x
1
+
x
2
+
x
3
=
2
x
1
,
x
2
,
x
3
∈
{
0
,
1
}
\min z = x_1 + x_2 + x_3\\s.t.\ x_1 + x_2 + x_3 = 2 \\ x_1, x_2, x_3 ∈ \{0,1\}
minz=x1+x2+x3s.t. x1+x2+x3=2x1,x2,x3∈{0,1}
解(1,1,0), (1,0,1)和(0,1,1)在目标函数意义下是完全等价的。
这种对称性会导致搜索效率问题:由于对称性的存在,算法可能会重复搜索本质上相同的解,这会导致计算时间的巨大浪费,特别是在大规模问题中。
解决策略:
- 对称破坏约束(Symmetry Breaking Constraints):添加额外的约束来消除对称解。例如强制要求 x1 ≥ x2 ≥ x3。
- 同构剪枝(Isomorphism Pruning):在搜索树中识别同构的子问题,避免重复搜索等价的解空间分支。
八、通过整数规划可获得的经济信息
- 背景:在线性规划(LP)中,除了最优解之外,还可以从影子价格(shadow prices)和简化成本(reduced costs)等获得重要的经济信息。LP的对偶问题在许多情况下也具有重要的经济解释。
对于IP最大化问题P,有对应的LP问题P’和其对偶问题Q’
在LP中,P’的最大目标值等于Q’的最小目标值:
但在IP中,由于增加了整数约束,导致P的最大目标值小于等于P’的最大目标值:
对偶差距(duality gap):指P的最大目标值与P’的最大目标值(或Q’的最小目标值)之间的差距。
这个差距可以粗略地衡量使用影子价格时的不准确程度。
IP中经济信息获取的挑战:
- 与LP相比,从IP模型中获取类似的经济信息要困难得多
- 在某些情况下,这些信息可能会比较模糊
- 文章将通过一个"产品组合"问题来说明这些困难
- 在这个问题中,变量代表不同产品的生产数量,约束表示生产能力的限制,且每种产品只能生产整数个
例如,
最优解:
- IP最优解: γ 1 = 2 , γ 2 = 1 , γ 3 = 0 , γ 4 = 0 \gamma₁=2, \gamma₂=1, \gamma₃=0, \gamma₄=0 γ1=2,γ2=1,γ3=0,γ4=0,目标值为29
- LP最优解: γ 1 = 2 2 3 , γ 2 = 0 , γ 3 = 0 , γ 4 = 0 \gamma₁=2\frac{2}{3}, \gamma₂=0, \gamma₃=0, \gamma₄=0 γ1=232,γ2=0,γ3=0,γ4=0,目标值为32
这里可以看到对偶差距为32-29=3。
-
影子价格(shadow price): 表示某个约束资源增加一个单位时,目标函数值的增量,增量为0时称为免费资源(free good)。
-
总估值:所有约束资源的(数量 × 影子价格)之和。
在LP中:影子价格可以很好地反映约束的经济价值。松弛的约束代表免费资源,其影子价格为0。总估值等于最优生产政策的利润。
在IP中:约束(1)虽然有松弛,但不能简单地认为它没有经济价值。虽然略微增加约束右端项没有意义,但如果增加3或更多,就能通过将两个 γ 3 \gamma₃ γ3替代两个 γ 1 \gamma₁ γ1和一个 γ 2 \gamma₂ γ2来改善解。
因此,在IP中,即使约束有正的松弛量,也不一定意味着它是免费资源,这些约束可能具有正的经济价值。
这说明在IP中评估约束的经济价值比LP更复杂,可能仍然无法像LP那样建立起清晰的决策方法。
九、灵敏度分析和模型的稳定性
9.1 整数规划的灵敏度分析
背景:LP模型中的灵敏度分析方法(如区间分析)不能直接应用到IP模型,IP模型在灵敏度分析方面存在更多困难。
PIP模型:
- 可以尝试将约束条件替换为可行整数点的凸包,然后将其作为LP模型来处理
MIP模型:
- 分支定界法:可以在得到最优整数解的节点上对LP子问题进行灵敏度分析
- 固定值法:将整数变量固定在最优值,对连续部分进行灵敏度分析
这些方法都存在局限性,最有效的方法是直接用修改后的系数重新求解模型,比较不同系数下的最优解,可以利用前一个解的信息来减少求解时间。
结论:IP模型的灵敏度分析比LP要复杂得多,最可靠的方法是通过重新求解来比较不同参数下的结果,而不是使用理论分析方法。这突显了IP模型在实际应用中的一个重要挑战。
9.2 构建稳定的模型
背景:LP模型中,目标函数的最优值会随着右侧常数和目标系数的连续变化而连续变化,IP模型中可能不具备这种连续性,会导致不稳定性。
例如,
该模型的最优解为 δ 1 = 1 δ_1 = 1 δ1=1 和 δ 2 = 1 δ_2 = 1 δ2=1,目标值为 75。但是,如果将右侧值 16 稍微减小,最优解就会变为 δ 1 = 1 、 δ 4 = 1 、 δ 5 = 1 δ_1 = 1、δ_4 = 1、δ_5 = 1 δ1=1、δ4=1、δ5=1,从而得到 57 的目标值。这种突变在实际应用中往往是不合理的,特别是在涉及预算和资本投资的情况下。
改进方法: 引入松弛变量来提高模型稳定性。添加连续变量 u u u作为盈余变量,在目标函数中赋予成本。
如果右侧的值 16 略微减少,将是以 20 的单位成本将“将预算加满”到 16。例如,如果右侧下降到 15.5, u = 0.5 u=0.5 u=0.5,问题将保留相同的最优解,但目标将下降到 65。随着右侧进一步减少,目标的最佳值将继续逐渐下降,直到右侧值减少到 15.1,将得到新的最优解 δ 1 = 1 、 δ 4 = 1 、 δ 5 = 1 δ_1 = 1、δ_4 = 1、δ_5 = 1 δ1=1、δ4=1、δ5=1作为替代。
效果:
- 目标函数的最优值变成右侧系数的连续函数
- 最优解不会随着右侧系数的变化而突变,而是呈现"半连续"特性
可以进一步添加松弛变量 v v v,同样给予一定成本。
通过给予未使用资源一定的成本,鼓励合理使用资源,使模型更符合实际情况:在实践中,资源既可能不够用,也可能用不完。
应用注意事项:
- 这种方法适用于某些特定类型的MIP模型
- 对于某些逻辑型约束的MIP模型,使用此方法可能没有意义
- 某些MIP模型类别不需要重构就能具有连续性质
这种建模方法的核心思想是通过引入带有成本的松弛变量,使模型对输入数据的微小变化具有更好的稳定性和鲁棒性,这在实际应用中尤其重要。
十、何时、如何使用整数规划
- 适用性判断:首先要根据问题特征(见1.1)判断是否适合使用IP模型。
- 规模评估:在建模前要估算潜在规模,如果整数变量超过几百个,除非问题有特殊结构,否则IP在计算上可能过于昂贵。
- 结构分析:详细检查IP模型的结构很重要。
对于PIP模型:
- 如果具有全幺模结构,可以使用LP求解,即使有上千个约束和变量
- 如果不是全幺模结构,值得探索是否可转化为已知的全幺模结构
对于MIP模型,可以考虑对相应的LP问题施加更严格的约束。
- 小规模测试:先构建一个小规模版本的模型进行实验,测试求解的难易程度,必要时尝试不同的重构方案和求解策略。
- 启发式方法:如果问题经过上述分析后仍显得过于困难,可以考虑使用启发式方法,虽然可能不是最优解,但可以得到一个较好的解,这个解可以用作树搜索中目标函数的截断值。
- 求解策略:尽可能利用对实际问题的认识,使用智能的求解策略很重要。
参考文献:
[1] Williams, H. Paul. Model Building in Mathematical Programming. 1st ed. New York Academy of Sciences Series. Newark: John Wiley & Sons, Incorporated, 2013.
[2] Feillet, D. A tutorial on column generation and branch-and-price for vehicle routing problems. 4OR-Q J Oper Res 8, 407–424 (2010). https://doi.org/10.1007/s10288-010-0130-z
[3] Hoffman, K., Padberg, M. (2024). Set Covering, Packing, and Partitioning Problems. In: Pardalos, P.M., Prokopyev, O.A. (eds) Encyclopedia of Optimization. Springer, Cham. https://doi.org/10.1007/978-3-030-54621-2_599-1