线性规划模型
目标函数及约束条件(s.t.)均为线性函数,故被称为线性规划问题。线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。
在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,往往也是很困难的一步,模型建立得是否恰当,直接影响到求解。而选适当的决策变量,是我们建立有效模型的关键之一。
线性规划问题的解的概念
- matlab中规定的线性规划的标准形式:
f, x, b, beq, lb, ub为列向量,f 称为价值向量,b 称为资源向量,A、Aeq 为矩阵。
- 一般线性规划问题的(数学)标准型为:
-
可行解:
满足约束条件的解称为线性规划问题的可行解,而使目标函数达到最大值的可行解叫最优解
-
可行域:
所有可行解构成的集合称为问题的可行域,记为R
-
matlab中求解线性规划的命令为:
[x, fval] = linprog(f, A, b) [x, fval] = linprog(f, A, b, Aeq, beq) [x, fval] = linprog(f, A, b, Aeq, beq, lb, ub)
其中 x 返回的是决策向量的取值,fval 返回的是目标函数的最优值,c 为价值向量,A, b 对应的是线下不等式约束,Aeq, beq 对应的是线下等式约束,lb 和 ub 分别对应的是决策向量的下界向量和上界向量。
整数规划模型(IP)
数学规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。
整数规划分类
- 变量全限制为整数时,称纯(完全)整数规划。
- 变量部分限制为整数的,称混合整数规划。
整数规划特点
- 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况
- 原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
- 整数规划无可行解。
- 有可行解(当然就存在最优解),但最优解值变差。
- 整数规划最优解不能按照实数最优解简单取整而获得。(因为直接四舍五入可能不满足约束条件)
整数规划的数学模型
-
一般形式:
-
依照决策变量取整要求的不同,整数规划可分为纯整数规划、全整数规划、混合整数规划、0-1整数规划。
- 纯整数规划:所有决策变量要求取非负整数(这时引进的松弛变量和剩余变量可以不要求取整数)。
- 全整数规划:除了所有决策变量要求取非负整数外,系数aij和常数bi也要求取整数(这时引进的松弛变量和剩余变量也必须是 整数)。
- 混合整数规划:只有一部分的决策变量要求取非负整数,另一部分可以取非负实数。
- 0-1整数规划:所有决策变量只能取0或1两个整数。(一般适用于工作安排)
整数规划与线性规划的关系
整数规划可行解是松驰问题可行域中的整数格点,松驰问题无可行解,则整数规划无可行解;
ILP(整数线性规划)最优值小于或等于松驰问题的最优值,松驰问题最优解满足整数要求,则该最优解为整数规划最优解;
分枝定界算法
不考虑整数限制先求出相应松弛问题的最优解,
若松弛问题无可行解,则ILP无可行解;
若求得的松弛问题最优解符合整数要求,则是ILP的最优解;
若不满足整数条件,则任选一个不满足整数条件的变量 x i0 来构造新的约束添加到松弛问题中形成两个子问题xi <=[x i0]; xi >=[x i0+1]
依次在缩小的可行域中求解新构造的线性规划的最优解,并重复上述过程,直到子问题无解或有整数最优解(被查清)。
割平面算法
基本思想
-
如果松弛问题(P0)无解,则§无解;
-
如果(P0)的最优解为整数向量,则也是§的最优解;
-
如果(P0)的解含有非整数分量,则对(P0)增加割平面条件:即对(P0)增加一个线性约束,将(P0)的可行区域割掉一块,使得非整数解恰好在割掉的一块中,但又没有割掉原问题§的可行解,得到问题(P1),重复上述的过程。
基本步骤
-
第一步:求解线性规划最优解
-
第二步:
x i + ∑ a i k x k = b i x_i + \sum{a_{ik}x_k} = b_i xi+∑aikxk=bia i k = [ a i k ] + ( a i k − L a i k ) = [ a i k ] + f i k a_{ik} = [a_{ik}] + (a_{ik} - La_{ik}) = [a_{ik}] + f_{ik} aik=[aik]+(aik−Laik)=[aik]+fik
b i = [ b i ] + ( b i − L b i ) = [ b i ] + f i b_i = [b_i] + (b_i - Lb_i) = [b_i] + f_i bi=[bi]+(bi−Lbi)=[bi]+fi
-
第三步:
x i + ∑ [ a i k ] x k + ∑ [ f