1、第八章 线性规划和整数规划线性规划模型(Linear Programming model)是在一组线性的限制式(a set of linear constraints)之下,寻找极大化(maximize) 或极小化(minimize) 一个特定的目标函数(objective function) ,线性规划模型由下列三个部分组成: 一组决策变量 (A set of decision variables) 一个特定的目标函数(An objective function) 一组线性的限制式 (A set of constraints)线性规划的特点是:参数具有“确定性” ;目标函数与限制符合“固定规
2、模报酬”的假设;决策变量间没有互动性,即某个函数的总价值只能借由线性累加求得;变量值在某一范围之内。81 简单线性规划简单线性规划就是直接利用题目给出的约束关系构建约束函数,利用数学方法直接进行求解,有效率高、程序简单等优点。下题就是简单线性规划的一个典型例子:811 案例 1:炼金术好几个世纪以来,如何从铅得到金一直困扰着炼金学家们。在最近的一次炼金俱乐部会议上,宣布了一个重大的突破。通过将三种化学药品 Algolene、Vasicine 及Cobolase(简称 A、B、C)以正确的比例混合,可以生成一种能将铅转换成金的混合物,由于 A、B 、C 一般不单独出售,而是混合成溶液出售,所以这
3、个问题并不像看起来那么简单。考虑以下的例子。有两种由 A、B 及 C 组成的混合物,比例分别为 1:2:3 和 3:7:1。将这两种混合物再以 1:2 的比例混合,我们得到一种 A、B、C 的溶液,比例为 7:16:5。但没有办法能将这两种混合物混合成比例为 3:4:5 的新溶液。但如果我们增加一种溶液,其含有 A、B、C 三种物质的比例为 2:1:2,那么将八分的 1:2:3、一份的 3:7:1 和五份的 2:1:2 混合后就可以得到 3:4:5 的混合物。决定将给定的一组溶液以何种比例混合并不是件轻松的任务。但是,正如 ACM 所表明的,这可能是一件利润丰厚的任务。你必须写一个程序以寻找混
4、合比例。输入输入文件包含多个测试数据。每个测试数据的第一行包含一个整数 n(0n0,则不可能使 bi1*xi+bi2*xj+bi3*xk =bi00,则称 blk 为主元。通过下述变换关系式进行消元。变换后矩阵各元素为blj/blk i=lbij =bij-(blj/blk)bik il(1ip m,1j,k3)使得第 k 列向量中除第 1 元素 blk=1 外,其余元素为 0。上述一直进行至无解退出或者指针 ip m 为止(目前系数矩阵为单位矩阵或者产生 0矩阵) 。最后分析目前矩阵方程的常量 b1,0,bpm,0:如果都大于等于 0,说明变换后矩阵对应的方程组有解且符合题意。根据线性代数中
5、矩阵初等变换的等价原理“若矩阵 B 经有限次初等变换后变换成矩阵 B,则 B 的行向量组与 B的行向量组等价” ,因此可以断定aixi+ajxj+akxk=xbixi+bjxj+bkxk=ycixi+cjxj+ckxk=zxp=0 (pi、j 、k,1pn)有解。例如,有五种溶液:第一种溶液中 A、B、C 三种物质的比例为 a1=1,b 1=2,c 1=3;第二种溶液中 A、B、C 三种物质的比例为 a2=3,b 2=7,c 2=2;第三种溶液中 A、B、C 三种物质的比例为 a3=2,b 3=1, c3=2;第四种溶液中 A、B、C 三种物质的比例为 a1=1,b 1=2, c1=3;第五种
6、溶液中 A、B、C 三种物质的比例为 a1=2,b 1=3,c 1=4;如果五种溶液配置成 A、B、C 的比例为 x=3,y=4,z=5 的特殊混合溶液,便可以提炼金子。求解过程如下。先列出对应得非齐次方程组和增广矩阵x1+3x2+2x3+x4+2x5=33 1 3 2 1 22x1+7x2+x3+2x4+3x5=4 A= 4 2 7 1 2 35 3 2 2 3 43x1+2x2+2x3+3x4+4x5=5令 x4=x5=0, 得出3 1 3 2 3 1 3 2 9 1 0 11 27/25 1 0 0B = 4 2 7 1 -2 0 1 -3 -2 0 1 -3 4/25 0 1 05 3
7、 2 2 -4 0 -7 -4 -18 0 0 -25 18/25 0 0 1按照 x1=27/25、 x2=4/25、x 3=18/25、x 4=x5=0 的比例提取 5 种溶液,便可产生满足要求的混合溶液。上述消元法可描述如下:设 i 为行向量序号; pm 为目前非零的向量行数;pm=3;i=0;while(i0(1j n)for(r=0;r3 时,究竟应该取哪三种溶液无法预知,因此只能枚举 n 种溶液中取 3 种溶液的全部组合。设三种溶液的一个组合序列为 m,其中 mi为组合中第 i 种溶液的一个序号( 1i 3) 。规定组合中的 3 个溶液序号按递增顺序排列,即 mimi-1+1n-3
8、+i。只有其中一个组合 m 对应的方程组am1xm1+am2xm2+am3xm3=xbm1xm1+bm2xm2+bm3xm3=ycm1xm1+cm2xm2+cm3xm3=z有解,即可断定混合方案存在。如果 c(n,3) 个组合对应的方程组都无解,则断定混合方案不存在。为此,我们设计了一种 solve(s)过程,其中 s 为组合 m 的元素序号(1s3):void solve(s)if(s3)对 m 组合对应的方程组进行消元变换,判断是否有解;elsefor(i=ms-1+1;in-(3-s);i+)ms=i;solve(s+1);if(m 组合对应的方程组有解)exit;ms=0;在主程序中调
9、用 solve(如果一个 m 组合对应的方程组有解,则输出“possible”; 否则输出“impossible” 。程序题解82 整数规划821 案例 2:装箱问题例 1 四件物品将装入一容量为 20 的集装箱。已知每种物品每装入一件所占用的容量和可获得的效益如下表所示。1 2 3 4每件物品占用的容量 2 3 5 4每件物品的效益 110 160 260 210问:如何安排装箱计划,才能使集装箱中的物品有最大的总效益?注:集装箱只有装满或剩余空间不能再容纳下任何一件物品时才有可能取得最大效益。 求解:设四件物品的装箱数量分别为:x1,x2,x3,x4则该问题的数学模型为:max z = 1
10、10x1+160x2+260x3+210x4其中, x1,x2,x3,x4 为非负整数且 2x1+3x2+5x3+4x420分析:已知集装箱的容量为 201)若集装箱放入物品 4 的 x4 件,则 0x 45 装入 x4 件物品 4 后,集装箱中容量消耗为 4x4,但同时带来效益210x4 此时,还能用来装物品 1,2,3 的剩余容量为20-4x4问题转化为:在容量为 20-4x4 的情况下,如何装物品 1,2,3(即求 x1,x2,x3),才能相对于容量 20-4x4 产生最大的效益?重复以上步骤,可以对 x1,x2,x3 进行分析 若上面的 x1,x2,x3 都能确定了,则与 x4 一起所
11、能带来的总效益值为z = 110x1+160x2+260x3+210x4。现求,能产生最大 z 值得 x1,x2,x3,x4 仅就 x4 而言,x 4 的值等于多少,才能使箱中效益达到最大呢?求解:现设一般情况:有 n 件物品,容器(集装箱) 容量为 M记:fn(M)为在容量为 M 时,装入所有 n 件物品所能带来的最大效益, xi 表示装入第 i 件物品的数量(正整数或 0),i=1,2,n。则 x4 的取值由递推式确定:其中 f3(20-4x4)是在容量为 20-4x4 时,装入 1,2,3 物品所能带来的最大效益。记当前容量为 X,则一般情况下递推关系式有:注:xi 的取值范围实例分析f0(k) = 0故,当 b=20 时 (k20)有,f4(20)=1100x4 = 0依次递推得:x 2=x3=x4=0x1=20/2=10max z = 1100例 2 设有一旅客可携带 10 重量单位的物品,现有 3 种物品,每件重 2,3,4 个重量单位,每件物品的价值分别为 11,16,20(x103 元) 试问:3 种物品各应待可使所带物品的总价值最大。分析:设携带 3 中物品的数量分别为:x1,x2,x3则有,max z = 11x1 + 16x2 + 20x3其中 2x1+3x2+4x310x1,x2,x3 为非负整数 解: 动态规划求解策略 采用与前类似的递推策略 计算举例: