lingo 指派问题
lingo指派问题
Lingo 作业题1、指派问题设有n 个人, 计划作n 项工作, 其中ij c 表示第i 个人做第j 项工作的收益,求一种指派方式,使得每个人完成一项工作,使总收益最大.现6个人做6项工作的最优指派问题,其收益矩阵如表所示,请给出合理安排.人 工作1 工作2 工作3 工作4 工作5 工作6 1 20 15 16 5 4 7 2 17 15 33 12 8 6 3 9 12 18 16 30 13 4 12 8 11 27 19 14 5 0 7 10 21 10 32 6 0 0 0 6 11 13 解:一、问题分析根据第一题的题意我们可以知道,此题的最终目标是让我们建立一种数学模型来解决这个实际生活中的问题,此题意简而言之就是为了解决6个人做6项工作的指派最优问题,从而使题目中的ij C 收益等达到所需要的目的。
在题目中曾提到:每个人完成一项工作。
其意思就是每人只能做一项工作且每项工作只能做一人做。
二、符号说明此题属于最优指派问题,引入如下变量:题目中说:ij C 表示第i 个人做第j 项工作的收益。
例如56C 则表示第5个人做第6项工作。
即6611max ij ij i j z xy c ===∑∑s.t.:611ij i C==∑ ,j=1,2,3,···,6611ij j C==∑ ,i=1,2,3,···,6 01ij C =或 ,i,j=1,2,3,···,6此题需要求出最大值最优(最大值),即需要使用max ,表示最大。
在编程过程中“@bin (x )”是“限制x 为0或1”。
三、建立模型此题属于最优指派问题,与常见的线性问题极为类似。
因此,使用Lingo软件。
由于“每人只能做一项工作且每项工作只能做一人做”故采用0-1规划求得优。
四、模型求解(一)常规程序求解Lingo输入框:max=20*c11+15*c12+16*c13+5*c14+4*c15+7*c16+17*c21+15*c22+33*c23+12*c24+8*c25+6*c26+9*c31+12*c32+18*c33+16*c34+30*c35+13*c36+12*c41+8*c42+11*c43+27*c44+19*c45+14*c46+0*c51+7*c52+10*c53+21*c54+10*c55+32*c56+0*c61+0*c62+0*c63+6*c64+11*c65+13*c66;c11+c12+c13+c14+c15+c16=1;c21+c22+c23+c24+c25+c26=1;c31+c32+c33+c34+c35+c36=1;c41+c42+c43+c44+c45+c46=1;c51+c52+c53+c54+c55+c56=1;c61+c62+c63+c64+c65+c66=1;c11+c21+c31+c41+c51+c61=1;c12+c22+c32+c42+c52+c62=1;c13+c23+c33+c43+c53+c63=1;c14+c24+c34+c44+c54+c64=1;c15+c25+c35+c45+c55+c65=1;c16+c26+c36+c46+c56+c66=1;@bin(c11);@bin(c12);@bin(c13);@bin(c14);@bin(c15);@bin(c16);@bin(c21);@bin(c22);@bin(c23);@bin(c24);@bin(c25);@bin(c26);@bin(c31);@bin(c32);@bin(c33);@bin(c34);@bin(c35);@bin(c36);@bin(c41);@bin(c42);@bin(c43);@bin(c44);@bin(c45);@bin(c46);@bin(c51);@bin(c52);@bin(c53);@bin(c54);@bin(c55);@bin(c56);@bin(c61);@bin(c62);@bin(c63);@bin(c64);@bin(c65);@bin(c66);Lingo输出(结果)框:Global optimal solution found.Objective value: 142.0000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced CostC11 1.000000 -20.00000C12 0.000000 -15.00000C13 0.000000 -16.00000C14 0.000000 -5.000000C15 0.000000 -4.000000C21 0.000000 -17.00000 C22 0.000000 -15.00000 C23 1.000000 -33.00000 C24 0.000000 -12.00000 C25 0.000000 -8.000000 C26 0.000000 -6.000000 C31 0.000000 -9.000000 C32 0.000000 -12.00000 C33 0.000000 -18.00000 C34 0.000000 -16.00000 C35 1.000000 -30.00000 C36 0.000000 -13.00000 C41 0.000000 -12.00000 C42 0.000000 -8.000000 C43 0.000000 -11.00000 C44 1.000000 -27.00000 C45 0.000000 -19.00000 C46 0.000000 -14.00000 C51 0.000000 0.000000 C52 0.000000 -7.000000 C53 0.000000 -10.00000 C54 0.000000 -21.00000 C55 0.000000 -10.00000 C56 1.000000 -32.00000 C61 0.000000 0.000000 C62 1.000000 0.000000 C63 0.000000 0.000000 C64 0.000000 -6.000000 C65 0.000000 -11.00000 C66 0.000000 -13.00000Row Slack or Surplus Dual Price1 142.0000 1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000011 0.000000 0.00000013 0.000000 0.000000(二)循环语句求解Lingo输入框:model:sets:gz/A1..A6/:a;ry/B1..B6/:b;yw(gz,ry):xy,x;endsetsdata:a=1,1,1,1,1,1;b=1,1,1,1,1,1;xy=20 15 16 5 4 7,17 15 33 12 8 6,9 12 18 16 30 13,12 8 11 27 19 14,0 7 10 21 10 32,0 0 0 6 11 13;enddatamax=@sum(yw:xy*x);@for(gz(i):@sum(ry(j):x(i,j))=1);@for(ry(j):@sum(gz(i):x(i,j))=1);@for(yw(i,j):@bin(x(i,j)));EndLingo输出(结果)框Global optimal solution found.Objective value: 142.0000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced Cost A( A1) 1.000000 0.000000 A( A2) 1.000000 0.000000 A( A3) 1.000000 0.000000 A( A4) 1.000000 0.000000 A( A5) 1.000000 0.000000 A( A6) 1.000000 0.000000 B( B1) 1.000000 0.000000 B( B2) 1.000000 0.000000B( B4) 1.000000 0.000000 B( B5) 1.000000 0.000000 B( B6) 1.000000 0.000000 XY( A1, B1) 20.00000 0.000000 XY( A1, B2) 15.00000 0.000000 XY( A1, B3) 16.00000 0.000000 XY( A1, B4) 5.000000 0.000000 XY( A1, B5) 4.000000 0.000000 XY( A1, B6) 7.000000 0.000000 XY( A2, B1) 17.00000 0.000000 XY( A2, B2) 15.00000 0.000000 XY( A2, B3) 33.00000 0.000000 XY( A2, B4) 12.00000 0.000000 XY( A2, B5) 8.000000 0.000000 XY( A2, B6) 6.000000 0.000000 XY( A3, B1) 9.000000 0.000000 XY( A3, B2) 12.00000 0.000000 XY( A3, B3) 18.00000 0.000000 XY( A3, B4) 16.00000 0.000000 XY( A3, B5) 30.00000 0.000000 XY( A3, B6) 13.00000 0.000000 XY( A4, B1) 12.00000 0.000000 XY( A4, B2) 8.000000 0.000000 XY( A4, B3) 11.00000 0.000000 XY( A4, B4) 27.00000 0.000000 XY( A4, B5) 19.00000 0.000000 XY( A4, B6) 14.00000 0.000000 XY( A5, B1) 0.000000 0.000000 XY( A5, B2) 7.000000 0.000000 XY( A5, B3) 10.00000 0.000000 XY( A5, B4) 21.00000 0.000000 XY( A5, B5) 10.00000 0.000000 XY( A5, B6) 32.00000 0.000000 XY( A6, B1) 0.000000 0.000000 XY( A6, B2) 0.000000 0.000000 XY( A6, B3) 0.000000 0.000000 XY( A6, B4) 6.000000 0.000000 XY( A6, B5) 11.00000 0.000000 XY( A6, B6) 13.00000 0.000000 X( A1, B1) 1.000000 -20.00000 X( A1, B2) 0.000000 -15.00000 X( A1, B3) 0.000000 -16.00000 X( A1, B4) 0.000000 -5.000000X( A1, B6) 0.000000 -7.000000 X( A2, B1) 0.000000 -17.00000 X( A2, B2) 0.000000 -15.00000 X( A2, B3) 1.000000 -33.00000 X( A2, B4) 0.000000 -12.00000 X( A2, B5) 0.000000 -8.000000 X( A2, B6) 0.000000 -6.000000 X( A3, B1) 0.000000 -9.000000 X( A3, B2) 0.000000 -12.00000 X( A3, B3) 0.000000 -18.00000 X( A3, B4) 0.000000 -16.00000 X( A3, B5) 1.000000 -30.00000 X( A3, B6) 0.000000 -13.00000 X( A4, B1) 0.000000 -12.00000 X( A4, B2) 0.000000 -8.000000 X( A4, B3) 0.000000 -11.00000 X( A4, B4) 1.000000 -27.00000 X( A4, B5) 0.000000 -19.00000 X( A4, B6) 0.000000 -14.00000 X( A5, B1) 0.000000 0.000000 X( A5, B2) 0.000000 -7.000000 X( A5, B3) 0.000000 -10.00000 X( A5, B4) 0.000000 -21.00000 X( A5, B5) 0.000000 -10.00000 X( A5, B6) 1.000000 -32.00000 X( A6, B1) 0.000000 0.000000 X( A6, B2) 1.000000 0.000000 X( A6, B3) 0.000000 0.000000 X( A6, B4) 0.000000 -6.000000 X( A6, B5) 0.000000 -11.00000 X( A6, B6) 0.000000 -13.00000Row Slack or Surplus Dual Price1 142.0000 1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000012 0.000000 0.00000013 0.000000 0.000000五、模型结果通过以上的应用Lingo模型求解,得出结论:第1项工作由第1个人来完成。
指派问题的最优解法
指派问题的最优解法指派问题是一个最优化问题,在给定若干个任务和执行者(或机器)的情况下,要求将每个任务指派给一个执行者,并使得总体的执行成本或者效益最优。
指派问题可以用匈牙利算法(Hungarian algorithm)或者KM算法(Kuhn-Munkres algorithm)来求解,这两个算法是目前被广泛采用的指派问题求解方法。
匈牙利算法是一个具有全局优势的贪心算法,它通过不断优化当前的局部选择,最终得到全局最优解。
其基本思想是通过给任务和执行者之间的边标注权重,然后选取最小权重的边进行指派,如果发现某个任务或者执行者已经被指派,就将其它相关的边进行更新,并继续寻找最小权重的边进行指派,直到所有的任务都得到指派。
KM算法是匈牙利算法的一种更加高效的变体。
它首先将指派问题转化为一个最大权匹配问题,然后通过不断调整边的权重,使得每次迭代都可以找到一个指派边的增广路径,并更新相应的匹配结果。
KM算法的核心思想是通过对匹配结果进行调整,减小局部优势并增加全局优势。
无论是匈牙利算法还是KM算法,在最坏情况下的时间复杂度都是O(n^3),其中n表示任务和执行者的数量。
这两个算法的主要区别在于实现的复杂度和算法的效率,KM算法相对于匈牙利算法来说具有更好的性能。
除了匈牙利算法和KM算法之外,还有一些其他的指派问题求解方法,例如启发式搜索、遗传算法等。
这些方法一般适用于指派问题的规模比较大、复杂度比较高的情况下,但是相对于匈牙利算法和KM算法,它们的效率和准确性可能会有所降低。
总之,指派问题的最优解法可以通过匈牙利算法或者KM算法来求解,具体选择哪一种方法可以根据问题的规模和复杂度来决定。
指派问题的四个计算步骤
指派问题的四个计算步骤
指派问题是一种优化问题,旨在找到最佳的分配方式。
解决指派问题通常有四个计算步骤:
1. 创建代价矩阵:将问题抽象为一个二维矩阵,其中每个元素表示将某个任务分配给某个工人的成本或者效益。
代价矩阵的大小为n行m列,其中n表示任务的数量,m表示工人的数量。
2. 匹配行和列:通过在代价矩阵中查找每一行和列的最小元素,将其标记为零。
如果需要,通过减去每一行和列的最小元素,可以使矩阵中至少有n个零。
3. 寻找最佳分配方案:通过选择代价矩阵中的一个零,并将其标记为星号,然后将与该零所在行或列相交的所有其他零标记为井号。
如果井号的数量等于n,则找到了一个最佳分配方案。
如果不是,请执行第4步。
4. 修改代价矩阵:通过选择未被标记的最小元素,并从该元素中减去所有未被标记的行和列的最小值,可以修改代价矩阵。
然后,返回第2步继续迭代,直到找到一个最佳分配方案。
这些计算步骤被称为匈牙利算法或者KM算法。
通过依次执
行这些步骤,可以找到指派问题的最优解。
LINGO模型实例及求解分析
运 筹 学 实 验
钢管下料问题2
目标函数(总根数) 满足需求
Min x1 x2 x3
模式合理:每根 余料不超过3米
约束 条件
安 阳 师 范 学 院 数 学 与 统 计 学 院
1 2 3 4 5 6 安 阳 7
师 范 学 院 数 学 与 统 计 学 院
运 筹 学 实模式 验
钢管下料问题1
4米钢管根数 4 3 2 1 1 0 0 6米钢管根数 0 1 0 2 1 3 0
合理切割模式
8米钢管根数 0 0 1 0 1 0 2 余料(米) 3 1 3 3 1 1 3
为满足客户需要,按照哪些种合理模式,每种模式 切割多少根原料钢管,最为节省? 两种 标准 1. 原料钢管剩余总余量最小
每根原料钢管长19米
ห้องสมุดไป่ตู้
原料钢管总根数下界: 4 50 5 10 6 20 8 15 26 (最佳切割方式) 19
安 特殊生产计划(简单切割方式):对每根原料钢管 阳 师 范 模式1:切割成4根4米钢管,需13根; 学 院 模式2:切割成1根5米和2根6米钢管,需10根; 数 学 模式3:切割成2根8米钢管,需8根。 与 统 原料钢管总根数上界:31 26 x1 x2 x3 31 计 学 院 模式排列顺序可任定 1 2 3
r11 x1 r12 x2 r13 x3 50
r21 x1 r22 x2 r23 x3 10
16 4r11 5r21 6r31 8r41 19
16 4r12 5r22 6r32 8r42 19
Matlab与Lingo在非标准指派问题中的应用
Matlab与Lingo在非标准指派问题中的应用摘要:非标准指派问题是生产管理者在日常工作中经常会遇到的一类问题,它的数学模型是讨论指派个人需要完成项任务的目标最优化()。
为了更好地将数学与计算机结合,本文针对“人少任务多型”及“人多任务少型”两类非标准指派问题,基于数学理论方法:“加边补零法”和“加边补最小值法”,利用计算机软件Matlab与Lingo求解,高效解决问题。
关键词:非标准指派;加边补零法;加边补最小值法;Matlab;Lingo在日常生活安排和企业生产管理工作中,经常会遇到给人分派工作,如:某单位有个人需要完成项任务,根据每个人完成每项任务的工作效率来研究如何分配任务,使完成任务所消耗的总资源最少或总收益最大。
形如这样的问题称之为指派问题,指派问题是0-1型整数规划问题中比较常见的一种,它的特点是决策变量只有0和1两种取值,在问题讨论时,通常把某个人是否执行某项任务取值为1和0,建立一般指派问题与0-1规划对应关系。
目前,一般指派问题根据人数和任务数的数量关系大致有以下三种情况:(1)人数和任务数相等,即每个人必须只完成一项任务;(2)人数小于任务数,一个人可以完成几项任务;(3)人数大于任务数,一项任务可由几个人来完成。
其中,第一种指派为标准指派,它是一种最基础的指派,人与任务一对应;第二、第三种指派属于非标准指派。
对于比较复杂的非标准指派问题的模型,求解也更加困难。
因此,本文通过具体的案例采用计算机软件[1,2]Matlab和Lingo求解非标准型问题。
1预备知识1.1标准指派问题标准指派问题是经济计划工作中经常遇到的一个问题。
当指派个人去完成项任务时,要求满足以下3个前提假设:人数等于任务数;每个人必须且只需完成一项任务;每项任务必须且只需一人去完成。
如果用表示第个人完成第项任务时的效率(或时间、成本等),,而变量则相应的极小化数学模型如下:由该数学模型不难看出其代数性质:每一次指派对应于一个阶排列。
Lingo精选题目及答案
Lingo 精选题目及答案答题要求:将Lingo 程序复制到Word 文档中,并且附上最终结果。
1、简单线性规划求解(目标函数)2134maxx x z += s.t.(约束条件)⎪⎪⎩⎪⎪⎨⎧≥≤≤+≤+0,781022122121x x x x x x x2、整数规划求解219040Max x x z +=⎪⎩⎪⎨⎧≥≤+≤+0,702075679212121x x x x x x 3、0-1规划求解Max 432215.18.04.0x x x x f +++=10106234321≤+++x x x x10,,,4321或=x x x x4、非线性规划求解||4||3||2||min 4321x x x x z +++=s.t. ⎪⎪⎩⎪⎪⎨⎧-=+--=-+-=+--2132130432143214321x x x x x x x x x x x x5、集合综合应用产生一个集合5052--=x x y ,(10,...,2,1=x ),求y 前6个数的和S 1,后6个数的和S 2,第2~8个数中的最小值S 3,最大值S 4。
6、综合题要求列出具体的目标函数和约束条件,然后附上Lingo 程序和最终结果。
6.1 指派问题6.2 分配问题某两个煤厂A1,A2每月进煤数量分别为60t和100t,联合供应3个居民区B1,B2,B3。
3个居民区每月对煤的需求量依次分别为50t,70t,40t,煤厂A1离3个居民区B1,B2,B3的距离依次分别为10km,5km,6km,煤厂A2离3个居民区B1,B2,B3的距离分别为4km,8km,12km。
问如何分配供煤量使得运输量(即t·km)达到最小?1、model:max=4*x1+3*x2;2*x1+x2<10;x1+x2<8;x2<7;end2、model:max=40*x1+90*x2;9*x1+7*x2<56;7*x1+20*x2<70;@gin(x1);@gin(x2);end3、model:max=x1^2+0.4*x2+0.8*x3+1.5*x4;3*x1+2*x2+6*x3+10*x4<10;@bin(x1); @bin(x2);@bin(x3); @bin(x4);end4、model:max=@abs(x1)+2*@abs(x2)+3*@abs(x3)+4*@abs(x4);x1-x2-x3+x4=0;x1-x2+x3-3*x4=1;x1-x2-2*x3+3*x4=-1/2;end5、model:sets:jihe/1..10/:y;ss/1..4/:S;endsets!由于y和s中部分有负数,所以要先去掉这个约束;@for(jihe:@free(y));@for(ss(i):@free(S));!产生元素;@for (jihe(x):y(x)=x^2-5*x-50); S(1)=@sum (jihe(i)|i#le#6:y(i)); S(2)=@sum (jihe(i)|i#ge#5:y(i));S(3)=@min (jihe(i)|i#ge#2 #and# i#le#8:y(i)); S(4)=@max (jihe(i)|i#ge#2 #and# i#le#8:y(i)); end6.1、设:第i 个工人做第j 项工作用时ij t ,标志变量ij f 定义如下:⎩⎨⎧=其他件工作个工人去做第指派第01j i f ijmin∑∑==⨯4141i j ij ijt fs.t. 141=∑=i ijf()4,3,2,1=j 每份工作都有一人做∑==411j ijf()4,3,2,1=i 每人都只做一项工作model : sets :work/A B C D/;worker/jia yi bing ding/; time(worker,work):t,f; endsets!目标函数可以用[obj]标志出,也可以省略;[obj] min =@sum (time(i,j):t(i,j)*f(i,j)); data :!可以直接复制表格,但是在最后要有分号; t=; e !每份工作都有一人做;@for (work(j):@sum (time(i,j):f(i,j))=1); !每人都只做一项工作;@for (worker(i):@sum (time(i,j):f(i,j))=1); !让f 取0-1值,此条件可以省略;!@for(time(i,j):@bin(f(i,j))); end6.2设:煤厂进煤量i s ,居民区需求量为i d ,煤厂i 距居民区j 的距离为ij L ,煤厂i 供给居民区j 的煤量为ij g那么可以列出如下优化方程式∑∑==⨯=3121min j i ij ij L gs.t ()3,2,121==∑=j d gi jij()2,131=≤∑=i s gj iijmodel : sets :supply/1,2/:s; demand/1,2,3/:d;link(supply,demand):road,sd; endsets data :road=10 5 6 4 8 12; d=50 70 40; s=60 100; enddata[obj] min =@sum (link(i,j):road(i,j)*sd(i,j)); @for (demand(i):@sum (supply(j):sd(j,i))=d(i)); @for (supply(i):@sum (demand(j):sd(i,j))<s(i));end1.线性规划模型。
基于单纯形法的LINGO求解一般指派问题的探讨
维普资讯
给人分派工作、 给机床指派加工任务等一般指派问题 。指
派 问题 的主要研 究方 法 是定 量化 、系 统化 和模 型 化方 法 ,
在 日 生活 和企业 生产 经营管 理工 作 中 , 常 面 临着 情 况进行 论述 。 常 经 第一 , , n时, 当 即为每个人都被指派一项任务;
题 。I G LN O工 具可 以给 出解决 相应 问题 的方 案 。本文 力 图 利用 LN O工具 。 求解 一般 指派 问题 。 IG 探讨
m ∑∑
() 3 () 4
约束条件为 : %= , = ,, n 1J 12 …,
2, , … n
2 一般 指派 问题 的数学模 型
般指派问题 ( si m nPolm)足指有 m项任 A s n et rb g e 务, 需要有 n 个人来承担 , 由于各人 的专长不同, 各人完成
一
的任务不同 。 导致其效率也各不相同。因此 , 需要科学地指 派任务 , 使完成 m项任务所消耗 的总资源最少( 或总体效
∈{, , = ,, , 01 i 12 … n },
目 函数() 标 1表示完成全部 n项工作所消耗 的总资源 最少 。 表示指派第 i c 个人去完成第 项任务时所消耗的资 源 , 1 , n jl2 …,) 由c , …,;= , , n组成的方阵 , 2 称为系数矩
[ 收稿 日期 ] 0— 9 1 2 7 0—8 0
指派问题详解
第一章绪论1、指派问题的背景及意义指派问题又称分配问题,其用途非常广泛,比如某公司指派n个人去做n 件事,各人做不同的一件事,如何安排人员使得总费用最少?若考虑每个职工对工作的效率(如熟练程度等),怎样安排会使总效率达到最大?这些都是一个企业经营管理者必须考虑的问题,所以该问题有重要的应用价值.虽然指派问题可以用0-1规划问题来解,设X(I,J)是0-1变量, 用X(I,J)=1表示第I个人做第J件事, X(I,J)=0表示第I个人不做第J件事. 设非负矩阵C(I,J)表示第I个人做第J件事的费用,则问题可以写成LINGO程序SETS:PERSON/1..N/;WORK/1..N/;WEIGHT(PERSON, WORK): C, X ;ENDSETSDATA:W=…ENDDATAMIN=@ SUM(WEIGHT: C*X);@FOR(PERSON(I): @SUM(WORK(J):X(I,J))=1);@FOR(WORK(J): @SUM(PERSONM(I):X(I,J))=1);@FOR(WEIGHT: @BIN(X));其中2*N个约束条件是线性相关的, 可以去掉任意一个而得到线性无关条件.但是由于有N^2个0-1变量, 当N很大时,用完全枚举法解题几乎是不可能的. 而已有的0-1规划都是用隐枚举法做的,计算量较大. 对于指派问题这种特殊的0-1规划,有一个有效的方法——匈牙利算法,是1955年W. W. Kuhn利用匈牙利数学家D.König的二部图G的最大匹配的大小等于G的最小顶点覆盖的大小的定理提出的一种算法,这种算法是多项式算法,计算量为O(N3).匈牙利算法的基本原理是基于以下两个定理.定理1设C=(C ij)n×n是指派问题的效益矩阵,若将C中的任一行(或任一列)减去该行(或该列)中的最小元素,得到新的效率矩阵C’,则C’对应的新的指派问题与原指派问题有相同的最优解.证明:设X’是最优解, 即@SUM(WEIGHT: C*X’)<= @SUM(WEIGHT: C*X), 则当C中任一行或任一列减去该行或该列的最小数m时,得到的阵C’还是非负矩阵, 且@SUM(WEIGHT: C’*X’)<=@SUM(WEIGHT: C*X)-m=@SUM(WEIGHT: C’*X)定理2效率矩阵C中独立的0元素的最多个数等于覆盖所有0元素的最少直线数. 当独立零元素的个数等于矩阵的阶数时就得到最优解.3、理论基础定义:图G的一个匹配M是图G中不相交的边的集合. 属于匹配M中的边的所有端点称为被该匹配M饱和, 其他的顶点称为M-未饱和的. 如果一个匹配M 饱和了图G的所有顶点,则称该匹配M是一个完全匹配. 可见顶点数是奇数的图没有完全匹配. 一个匹配M称为是极大匹配, 如果它不能再扩张成更大的一个匹配. 一个匹配称为是最大匹配, 如果不存在比它更大的匹配.定义:对于一个匹配M, 图G的一个M-交替路是图G中的边交替地在M中及不在M中的边组成. 从M-未饱和点出发到M-为饱和点结束的M-交替路称为一条M-增广路. 把M-增广路中不是M中的边改成新的匹配M’中的边, 把M-增广路中M中的边不作为M’中的边, 在M-增广路以外的M中的边仍作为M’中的边, 则M’的大小比M大1. 故名M-增广路. 因此最大匹配M不存在M-增广路.定义:若图G和图H有相同的顶点集V, 我们称G和H的对称差,记为G∆H,是一个以V为顶点集的图, 但其边集是G和H的边集的对称差: E(G∆H)=E(G) ∆E(H)=E(G)⋂E(H)-(E(G)⋃E(H))=(E(G)-E(H)) ⋂ (E(H)-E(G))定理: (Berge, 1957) 图G的一个匹配M是最大匹配,当且仅当G中没有M-增广路.证明: 我们只要证明, G中没有M-增广路时, M是最大匹配. 用反证法, 若有一个比M大的匹配M’. 令G的一个子图F, E(F)=M∆M’, 因M和M’都是匹配, F的顶点的最大度数至多是2, 从而F由不相交的路和环组成, 它们的边交替地来自M和M’, 于是F中的环的长度是偶数. 由于M’比M大, F中存在一个连通分支,其中M’中的边数大于M中的边数. 这个分支只能是起始和终止的边都在M’中. 而这就是一条G中的M-增广路. 与假设矛盾. 证毕.定理(Hall, 1935)设G是一个二部图, X和Y是其二分集, 则存在匹配M 饱和X当且仅当对于X中的任意子集S, Y 中与S中的点相邻的点组成的集合N(S)中元素的个数大于等于集合S中元素的个数.证明:必要性是显然的. 对于充分性, 假设 |N(S)|≥|S|, ∀S⊂X, 考虑G的一个最大匹配M, 我们用反证法,若M没有饱和X, 我们来找一个集合S不满足假设即可. 设u∈X是一个M-未饱和顶点, 令S⊂X和T⊂Y分别是从u出发的M-交替路上相应的点.我们来证明M中的一些边是T到S-u上的一个匹配. 因为不存在M-增广路,T中的每个点是M-饱和的. 这意味着T中的点通过M中的边到达S中的一个顶点. 另外, S-u中的每个顶点是从T中的一个顶点通过M中的一条边到达的. 因此M 中的这些边建立了T与S-u的一个双射, 即|T|=|S-u|. 这就证明了M中的这些边是T到S-u上的一个匹配,从而意味着T⊂N(S), 实际上, 我们可证明T=N(S). 这是因为连接S和Y-T中的点y的边是不属于M的, 因为不然的话, 就有一条到达y的M-增广路, 与y∉T矛盾. 故|N(S)|=|T|=|S-u|=|S|-1<|S|, 与假设矛盾.当X与Y的集合的大小相同时的Hall定理称为婚姻问题,是由Frobenius(1917)证明的.推论: k-正则的二部图(X的每一点和Y的每一点相关联的二部图)(k>0)存在完全匹配.证明: 设二分集是X,Y. 分别计算端点在X和端点在Y的边的个数, 得k|X|=k|Y|, 即|X|=|Y|.因此只要证明Hall的条件成立即可. 使X饱和的匹配就是完全匹配. 考虑∀S⊂X, 设连接S与N(S)有m条边, 由G的正则性, m=k|S|. 因这m条边是与N(S)相关联的, m≤k|N(S)|, 即k|S|≤ k|N(S)|, 即|N(S)|≥|S|. 这就是Hall的条件.用求M-增广路的方法来得到最大匹配是很费时的. 我们来给出一个对偶最优化问题.定义:图G的一个顶点覆盖是集合S⊂V(G), 使得G的每条边至少有一个端点在S中. 我们称S中的一个顶点覆盖一些边, 若这个顶点是这些边的公共端点.因为匹配的任意两条边不能被同一个顶点覆盖, 所以顶点覆盖的大小不小于匹配的大小: |S|≥|M|. 所以当|S|=|M| 时就同时得到了最大的匹配和最小的顶点覆盖.定理(König [1931],Egerváry[1931])二部图G的最大匹配的大小等于G的最小顶点覆盖的大小.证明: 设M是G的任一个匹配, 对应的二分集是X,Y. 设U是一个最小的顶点覆盖, 则|U|≥|M|, 我们只要由顶点覆盖U来构造一个大小等于|U|的匹配即完成证明. 令R=U⋃X, T=U⋃Y, 令H, H’分别是由顶点集R⋂(Y-T)及T⋂(X-R)诱导的G的子图. 我们应用Hall的定理来证明H有一个R到Y-T中的完全匹配,H’有一个从T到X-R中的完全匹配. 再因这两个子图是不相交的, 这两个匹配合起来就是G中的一个大小为|U|的匹配.因为R⋂T是G的一个覆盖, Y-T与X-R之间没有边相联接. 假设S⊂R, 考虑在H中S的邻接顶点集N(S), N(S) ⊂Y-T. 如果|N(S)|<|S|, 因为N(S)覆盖了不被T覆盖的与S相关联所有边, 我们可以把N(S) 代替S作为U中的顶点覆盖而得到一个更小的顶点覆盖. U的最小性意味着H中Hall条件成立. 对H'作类似的讨论得到余下的匹配. 证毕.最大匹配的增广路算法输入: 一个二分集为X,Y的二部图G,一个G中的匹配M, X中的M-未饱和顶点的集合U.思路: 从U出发探求M-交替路,令S⊂X,T⊂Y为这些路到达过的顶点集. 标记S中不能再扩张的顶点. 对于每个x∈(S⋂T)-U, 记录在M-增广路上位于x前的点.初始化: S=U,T=∅.叠代: 若S中没有未标记过的顶点, 结束并报告T⋂(X-S)是最小顶点覆盖而M是最大匹配.不然, 选取S中未标记的点x, 考虑每个y∈N(x)且xy∉M, 若y是M-未饱和的, 则得到一个更大的匹配,它是把xy加入原来的匹配M得到的,将x从S中去除. 不然, y是由M中的一条边wy相连接的, w∈X, 把y加入T(也有可能y本来就在T中), 把w加入S. w未标记, 记录w前的点是y. 对所有关联到x的边进行这样的探索后, 标记x. 再次叠代.定理: 增广路算法可以得到一个相同大小的匹配和顶点覆盖.证明: 考虑这个算法终止的情况, 即标记了S中所有的点. 我们要证明R=T⋂(X-S)是大小为|M|的一个顶点覆盖.从U出发的M-交替路只能通过M中的边进入X中的顶点, 所以S-U中的每个顶点通过M与T中的顶点匹配, 并且没有M中的边连接S和Y-T. 一旦一条M-交替路到达x∈S, 可以继续沿着任何未饱和的边进入T, 由于算法是对于x的所有邻域顶点进行探索才终止的,所以从S 到Y-T 没有未饱和边. 从而S 到Y-T 没有边, 证明了R 是一个顶点覆盖.因为算法是找不到M-增广路时终止, T 的每一个顶点是饱和的. 这意味着每个顶点y ∈T 是通过M 匹配与S 中的一个顶点. 由于U ⊂S, X-S 的每个顶点是饱和的, 故M 中与X-S 相关联的边不和T 中的点相连接. 即它们与是饱和T 的边不同的, 这样我们可见M 至少有|T|+|X-S|条边. 因不存在一个比顶点覆盖更大的匹配, 所以有|M|=|T|+|X-S|=|R|.设二部图G 的二分集X 和Y 都是n 个元素的点集, 在其边j i y x 上带有非负的权ij w , 对于G 的一个匹配M, M 上各边的权和记作w(M).定义: 一个n ×n 矩阵A 的一个横截(transversal)是A 中的n 个位置, 使得在每行每列中有且只有一个位置(有的文献中把横截化为独立零元素的位置来表示).定义: 指派问题就是给定一个图G=n n K ,(完全二部图, 即每个X 中的顶点和Y 中的每个顶点有边相连接的二部图)的边的权矩阵A, 求A 的一个横截, 使得这个横截上位置的权和最大. 这是最大带权匹配问题的矩阵形式.定义: 对于图G=n n K ,,设其二分集是X ,Y ,给定G 的边j i y x 的n ×n 权矩阵W={ij w }.考虑G 的子图v u G ,, 设其二分集是U ⊂X ,V ⊂Y, 边集是E(v u G ,), 对于子图v u G ,的带权覆盖u,v 是一组非负实数{i u },{j v },使得ij j i w v u ≥+,)(,v u j i G E y x ∈∀, v u G ,的带权覆盖的费用是∑∑+j i v u 记为C(u,v), 最小带权覆盖问题就是求一个具有最小费用C(u,v)的带权覆盖u,v.引理: 若M ⊂E(v u G ,)是一个带权二部子图v u G ,的最大匹配, 且u, v 是v u G ,的带权覆盖, 则C(u,v)≥w(M). 而且, C(u,v)=w(M)当且仅当ij j i w v u =+,M y x j i ∈∀. 这时M 是v u G ,最大带权匹配, u,v 是v u G ,的最小带权覆盖, 定义这时的v u G ,为G 的相等子图(equality subgraph ).证明: 因为匹配M 中的边是不相交的, 由带权覆盖的定义就得C(u,v)≥w(M). 而且C(u,v)=w(M)当且仅当ij j i w v u =+,M y x j i ∈∀成立. 因一般地有C(u,v)≥w(M).所以当C(u,v)=w(M)时. 意味着没有一个匹配的权比C(u,v)大, 也没有一个覆盖的费用比w(M)小.Kuhn 得到一个指派问题的算法,命名为匈牙利算法, 为的是将荣耀归于匈牙利数学家König 和Egerv áry.指派问题的匈牙利算法(Kuhn[1955], Munkres[1957]):输入G=n n K ,的边的权矩阵A, 及G 的二分集X,Y.初始化: 任取一个可行的带权覆盖,例如)(max ij ji w u =,0=j v ,建立G 的相等子图v u G ,, 其二分集是X, Y ’⊂Y, 求v u G ,的一个最大匹配M. 这个匹配的权和w(M)=C(u,v), M 的带权覆盖是具有最小费用的.叠代: 如M 是G 的一个完全匹配, 停止叠代, 输出最大带权匹配M. 不然, 令U 是X 中的M-未饱和顶点. 令S ⊂X, T ⊂Y 是从U 中顶点出发的M-交替路到达的顶点的集合.令},:min{T Y y S x w v u j i ij j i -∈∈-+=ε.对于所有的S x i ∈, 将i u 减少ε, 对于所有的T y j ∈,将j v 增加ε,形成新的带权覆盖u ’,v ’及对应的新的相等子图v u G '',.如果这个新的相等子图含有M-增广路, 求它的最大匹配M ’, 不然不改变M 再进行叠代.定理: 匈牙利算法能找到一个最大权匹配和一个最小费用覆盖.证明: 算法由一个覆盖开始,算法的每个叠代产生一个覆盖,仅在相等子图有一个完全的匹配为止。
lingo指派问题
实用文档大全Lingo 作业题1、指派问题设有n 个人, 计划作n 项工作, 其中ij c 表示第i 个人做第j 项工作的收益,求一种指派方式,使得每个人完成一项工作,使总收益最大.现6个人做6项工作的最优指派问题,其收益矩阵如表所示,请给出合理安排.一、问题分析根据第一题的题意我们可以知道,此题的最终目标是让我们建立一种数学模型来解决这个实际生活中的问题,此题意简而言之就是为了解决6个人做6项工作的指派最优问题,从而使题目中的ij C 收益等达到所需要的目的。
在题目中曾提到:每个人完成一项工作。
其意思就是每人只能做一项工作且每项工作只能做一人做。
二、符号说明此题属于最优指派问题,引入如下变量:题目中说:ij C 表示第i 个人做第j 项工作的收益。
例如56C 则表示第5个人做第6项工作。
即6611max ij ij i j z xy c ===∑∑s.t.:611iji C==∑ ,j=1,2,3,···,6611ijj C==∑ ,i=1,2,3,···,6 01ij C =或 ,i,j=1,2,3,···,6此题需要求出最大值最优(最大值),即需要使用max ,表示最大。
在编程过程中“bin (x )”是“限制x 为0或1”。
三、建立模型此题属于最优指派问题,与常见的线性问题极为类似。
因此,使用Lingo 软实用文档件。
由于“每人只能做一项工作且每项工作只能做一人做”故采用0-1规划求得优。
四、模型求解(一)常规程序求解Lingo输入框:max=20*c11+15*c12+16*c13+5*c14+4*c15+7*c16+17*c21+15*c22+33*c23+12*c24+8*c25+6*c26+9*c31+12*c32+18*c33+16*c34+30*c35+13*c36+12*c41+8*c42+11*c43+27*c44+19*c45+14*c46+0*c51+7*c52+10*c53+21*c54+10*c55+32*c56+0*c61+0*c62+0*c63+6*c64+11*c65+13*c66;c11+c12+c13+c14+c15+c16=1;c21+c22+c23+c24+c25+c26=1;c31+c32+c33+c34+c35+c36=1;c41+c42+c43+c44+c45+c46=1;c51+c52+c53+c54+c55+c56=1;c61+c62+c63+c64+c65+c66=1;c11+c21+c31+c41+c51+c61=1;c12+c22+c32+c42+c52+c62=1;c13+c23+c33+c43+c53+c63=1;c14+c24+c34+c44+c54+c64=1;c15+c25+c35+c45+c55+c65=1;c16+c26+c36+c46+c56+c66=1;bin(c11);bin(c12);bin(c13);bin(c14);bin(c15);bin(c16);bin(c21);bin(c22);bin(c23);bin(c24);bin(c25);bin(c26);bin(c31);bin(c32);bin(c33);bin(c34);bin(c35);bin(c36);bin(c41);bin(c42);bin(c43);bin(c44);bin(c45);bin(c46);bin(c51);bin(c52);bin(c53);bin(c54);bin(c55);bin(c56);bin(c61);bin(c62);bin(c63);bin(c64);bin(c65);bin(c66);Lingo输出(结果)框:Global optimal solution found.Objective value: 142.0000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced CostC11 1.000000 -20.00000C12 0.000000 -15.00000C13 0.000000 -16.00000C14 0.000000 -5.000000C15 0.000000 -4.000000大全实用文档大全C16 0.000000 -7.000000 C21 0.000000 -17.00000 C22 0.000000 -15.00000 C23 1.000000 -33.00000 C24 0.000000 -12.00000 C25 0.000000 -8.000000 C26 0.000000 -6.000000 C31 0.000000 -9.000000 C32 0.000000 -12.00000 C33 0.000000 -18.00000 C34 0.000000 -16.00000 C35 1.000000 -30.00000 C36 0.000000 -13.00000 C41 0.000000 -12.00000 C42 0.000000 -8.000000 C43 0.000000 -11.00000 C44 1.000000 -27.00000 C45 0.000000 -19.00000 C46 0.000000 -14.00000 C51 0.000000 0.000000 C52 0.000000 -7.000000 C53 0.000000 -10.00000 C54 0.000000 -21.00000 C55 0.000000 -10.00000 C56 1.000000 -32.00000 C61 0.000000 0.000000 C62 1.000000 0.000000 C63 0.000000 0.000000 C64 0.000000 -6.000000 C65 0.000000 -11.00000 C66 0.000000 -13.00000Row Slack or Surplus Dual Price1 142.0000 1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000011 0.000000 0.000000实用文档大全12 0.000000 0.00000013 0.000000 0.000000(二)循环语句求解Lingo输入框:model:sets:gz/A1..A6/:a;ry/B1..B6/:b;yw(gz,ry):xy,x;endsetsdata:a=1,1,1,1,1,1;b=1,1,1,1,1,1;xy=20 15 16 5 4 7,17 15 33 12 8 6,9 12 18 16 30 13,12 8 11 27 19 14,0 7 10 21 10 32,0 0 0 6 11 13;enddatamax=sum(yw:xy*x);for(gz(i):sum(ry(j):x(i,j))=1);for(ry(j):sum(gz(i):x(i,j))=1);for(yw(i,j):bin(x(i,j)));EndLingo输出(结果)框Global optimal solution found.Objective value: 142.0000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced CostA( A1) 1.000000 0.000000A( A2) 1.000000 0.000000A( A3) 1.000000 0.000000A( A4) 1.000000 0.000000A( A5) 1.000000 0.000000A( A6) 1.000000 0.000000B( B1) 1.000000 0.000000B( B2) 1.000000 0.000000实用文档大全B( B3) 1.000000 0.000000B( B4) 1.000000 0.000000B( B5) 1.000000 0.000000B( B6) 1.000000 0.000000 XY( A1, B1) 20.00000 0.000000 XY( A1, B2) 15.00000 0.000000 XY( A1, B3) 16.00000 0.000000 XY( A1, B4) 5.000000 0.000000 XY( A1, B5) 4.000000 0.000000 XY( A1, B6) 7.000000 0.000000 XY( A2, B1) 17.00000 0.000000 XY( A2, B2) 15.00000 0.000000 XY( A2, B3) 33.00000 0.000000 XY( A2, B4) 12.00000 0.000000 XY( A2, B5) 8.000000 0.000000 XY( A2, B6) 6.000000 0.000000 XY( A3, B1) 9.000000 0.000000 XY( A3, B2) 12.00000 0.000000 XY( A3, B3) 18.00000 0.000000 XY( A3, B4) 16.00000 0.000000 XY( A3, B5) 30.00000 0.000000 XY( A3, B6) 13.00000 0.000000 XY( A4, B1) 12.00000 0.000000 XY( A4, B2) 8.000000 0.000000 XY( A4, B3) 11.00000 0.000000 XY( A4, B4) 27.00000 0.000000 XY( A4, B5) 19.00000 0.000000 XY( A4, B6) 14.00000 0.000000 XY( A5, B1) 0.000000 0.000000 XY( A5, B2) 7.000000 0.000000 XY( A5, B3) 10.00000 0.000000 XY( A5, B4) 21.00000 0.000000 XY( A5, B5) 10.00000 0.000000 XY( A5, B6) 32.00000 0.000000 XY( A6, B1) 0.000000 0.000000 XY( A6, B2) 0.000000 0.000000 XY( A6, B3) 0.000000 0.000000 XY( A6, B4) 6.000000 0.000000 XY( A6, B5) 11.00000 0.000000 XY( A6, B6) 13.00000 0.000000 X( A1, B1) 1.000000 -20.00000 X( A1, B2) 0.000000 -15.00000 X( A1, B3) 0.000000 -16.00000 X( A1, B4) 0.000000 -5.000000实用文档大全X( A1, B5) 0.000000 -4.000000 X( A1, B6) 0.000000 -7.000000 X( A2, B1) 0.000000 -17.00000 X( A2, B2) 0.000000 -15.00000 X( A2, B3) 1.000000 -33.00000 X( A2, B4) 0.000000 -12.00000 X( A2, B5) 0.000000 -8.000000 X( A2, B6) 0.000000 -6.000000 X( A3, B1) 0.000000 -9.000000 X( A3, B2) 0.000000 -12.00000 X( A3, B3) 0.000000 -18.00000 X( A3, B4) 0.000000 -16.00000 X( A3, B5) 1.000000 -30.00000 X( A3, B6) 0.000000 -13.00000 X( A4, B1) 0.000000 -12.00000 X( A4, B2) 0.000000 -8.000000 X( A4, B3) 0.000000 -11.00000 X( A4, B4) 1.000000 -27.00000 X( A4, B5) 0.000000 -19.00000 X( A4, B6) 0.000000 -14.00000 X( A5, B1) 0.000000 0.000000 X( A5, B2) 0.000000 -7.000000 X( A5, B3) 0.000000 -10.00000 X( A5, B4) 0.000000 -21.00000 X( A5, B5) 0.000000 -10.00000 X( A5, B6) 1.000000 -32.00000 X( A6, B1) 0.000000 0.000000 X( A6, B2) 1.000000 0.000000 X( A6, B3) 0.000000 0.000000 X( A6, B4) 0.000000 -6.000000 X( A6, B5) 0.000000 -11.00000 X( A6, B6) 0.000000 -13.00000Row Slack or Surplus Dual Price1 142.0000 1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.000000实用文档大全11 0.000000 0.00000012 0.000000 0.00000013 0.000000 0.000000五、模型结果通过以上的应用Lingo模型求解,得出结论:第1项工作由第1个人来完成。
指派问题(0-1规划 程序)
指派问题(assignment problem )问题一:今分派n 个工人n W W W ,,,21 去从事n 项工作n J J J ,,,21 . 工人i W 从事工作j J 的工作效率为n j i c ij ,,2,1,, =. 试求一个分派方案,使每个工人都从事一项工作,每项工作都由一个工人承担,且总工作效率最大. 建模: 令⎩⎨⎧=否则,件事,个人做第指派第,0,1j i x ij n j i ,,2,1, = 则可建立如下数学规划模型:⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=======∑∑∑∑====n j i x n j x n i x t s x c z ij n i ij n j ij n i nj ijij ,,2,1,,1,0,,2,1,1,,2,1,1..min 1111算例1 利用LINGO 软件求解如下指派问题:5=n ,⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=61012961061476781296101417971215784C .模型求解: Lingo 程序:model : sets :Worker/W1..W5/; Job/J1..J5/;links(Worker,Job):c,x; endsets data : c=4,8,7,15,12,7,9,17,14,10,6,9,12,8,7, 6,7,14,6,10, 6,9,12,10,6;enddatamin =@sum (links:c*x);@for (Worker(i):@sum (Job(j):x(i,j))=1); @for (Job(j):@sum (Worker(i):x(i,j))=1);end注:程序中并没限制ij x 是0-1变量,但由其余约束条件足以保证返回的结果中变量的值为0、1. 结果:Global optimal solution found.Objective value: 34.00000 Extended solver steps: 0 Total solver iterations: 0Variable Value Reduced Cost C( W1, J1) 4.000000 0.000000 ……C( W5, J5) 6.000000 0.000000 X( W1, J1) 0.000000 4.000000 X( W1, J2) 0.000000 8.000000 X( W1, J3) 1.000000 7.000000 X( W1, J4) 0.000000 15.00000 X( W1, J5) 0.000000 12.00000 X( W2, J1) 0.000000 7.000000 X( W2, J2) 1.000000 9.000000 X( W2, J3) 0.000000 17.00000 X( W2, J4) 0.000000 14.00000 X( W2, J5) 0.000000 10.00000 X( W3, J1) 1.000000 6.000000 X( W3, J2) 0.000000 9.000000 X( W3, J3) 0.000000 12.00000 X( W3, J4) 0.000000 8.000000 X( W3, J5) 0.000000 7.000000 X( W4, J1) 0.000000 6.000000 X( W4, J2) 0.000000 7.000000 X( W4, J3) 0.000000 14.00000 X( W4, J4) 1.000000 6.000000 X( W4, J5) 0.000000 10.00000 X( W5, J1) 0.000000 6.000000 X( W5, J2) 0.000000 9.000000 X( W5, J3) 0.000000 12.00000 X( W5, J4) 0.000000 10.00000 X( W5, J5) 1.000000 6.000000算例2今分派5个工人521,,,W W W 去从事5项工作521,,,J J J . 工人i W 从事工作j J 的时间)5,,2,1,( j i c ij 见下表:试求一个分派方案,使每个工人都从事一项工作,每项工作都由一个工人承担,且总工作时间最少. 建模:令5,,1,,,,0,,1 =⎩⎨⎧=j i J W x j i ij 否则从事工作分派工人,则可建立如下0-1规划模型:⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=======∑∑∑∑====5,,1,,1,05,,1,15,,1,1..max 51515151j i x j x i x t s x c z ij i ij j ij i j ijij 模型求解:Lingo 程序如下:model : sets :Worker/W1..W5/; Job/J1..J5/;links(Worker,Job):c,x; endsets data : c=8,6,10,9,12,9,12,7,11,9, 7,4,3,5,8, 9,5,8,11,8, 4,6,7,5,11;enddatamin =@sum (links:c*x);@for (Worker(i):@sum (Job(j):x(i,j))=1); @for (Job(j):@sum (Worker(i):x(i,j))=1); @for (links:@bin (x));end结果:Global optimal solution found.Objective value: 30.00000 Extended solver steps: 0 Total solver iterations: 0Variable Value Reduced Cost C( W1, J1) 8.000000 0.000000 ……C( W5, J5) 11.00000 0.000000 X( W1, J1) 1.000000 8.000000 X( W1, J2) 0.000000 6.000000 X( W1, J3) 0.000000 10.00000 X( W1, J4) 0.000000 9.000000 X( W1, J5) 0.000000 12.00000 X( W2, J1) 0.000000 9.000000 X( W2, J2) 0.000000 12.00000 X( W2, J3) 0.000000 7.000000 X( W2, J4) 0.000000 11.00000 X( W2, J5) 1.000000 9.000000 X( W3, J1) 0.000000 7.000000 X( W3, J2) 0.000000 4.000000 X( W3, J3) 1.000000 3.000000 X( W3, J4) 0.000000 5.000000 X( W3, J5) 0.000000 8.000000 X( W4, J1) 0.000000 9.000000 X( W4, J2) 1.000000 5.000000 X( W4, J3) 0.000000 8.000000 X( W4, J4) 0.000000 11.00000 X( W4, J5) 0.000000 8.000000 X( W5, J1) 0.000000 4.000000 X( W5, J2) 0.000000 6.000000 X( W5, J3) 0.000000 7.000000 X( W5, J4) 1.000000 5.000000 X( W5, J5) 0.000000 11.00000 Row Slack or Surplus Dual Price 1 30.00000 -1.000000……11 0.000000 0.000000 由上述结果知,问题的最优解为15442332511=====x x x x x ,其余0=ij x . 模型说明:(1)另解:化为六个顶点的完全二分图6,6K 上的最优匹配问题,利用匈牙利算法(1955,Kuhn )来解.(3)Lindo 主要用来解线性规划问题,故建议使用Lingo 来解数学规划. 问题二:某公司拟将8个职员平均分配到4个办公室.根据直观评估,有些职员在一起时合作得很好,有些则不然.下表给出了8个职员两两之间的相容程度ij c (由于对称性,只给出了一半数据),数字越小代表相容得越好:问:应如何分配这些职员,才能是他们相容得最好? 建模: 令⎩⎨⎧=否则,到同一个办公室,和分配职员,0,1j i x ij 8,,1, =j i 则可建立如下数学规划模型:⎪⎪⎩⎪⎪⎨⎧≤<≤====∑∑==<81,1,08,,1,1..min j i x i x t s x c z ij i k i j jk j i ij ij 或 由所给相容程度数据ij c 的对称性,上述模型只针对表中对角线右上方的数据关系而建立;约束条件“8,,1,1 ==∑==i xik i j jk或”保证了任一职员i 仅被分配一次.模型求解:model:sets:ren/1..8/;links(ren,ren)| &2 # GT # &1:c,x;endsetsdata:c=9 3 4 2 1 5 61 7 3 52 14 4 2 9 21 5 5 28 7 62 34;enddatamin=@sum(links:c*x);@for(ren(i):@sum(links(j,k)| j #EQ# i #or# k #EQ# i:x(j,k))=1); @for(links:@bin(x));end结果:Global optimal solution found.Objective value: 6.000000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced CostC( 1, 2) 9.000000 0.000000……C( 7, 8) 4.000000 0.000000X( 1, 2) 0.000000 9.000000X( 1, 3) 0.000000 3.000000X( 1, 4) 0.000000 4.000000X( 1, 5) 0.000000 2.000000X( 1, 6) 1.000000 1.000000X( 1, 7) 0.000000 5.000000X( 1, 8) 0.000000 6.000000X( 2, 3) 0.000000 1.000000X( 2, 4) 0.000000 7.000000X( 2, 5) 0.000000 3.000000X( 2, 6) 0.000000 5.000000X( 2, 7) 1.000000 2.000000X( 2, 8) 0.000000 1.000000X( 3, 4) 0.000000 4.000000X( 3, 5) 0.000000 4.000000X( 3, 6) 0.000000 2.000000X( 3, 7) 0.000000 9.000000X( 3, 8) 1.000000 2.000000X( 4, 6) 0.000000 5.000000X( 4, 7) 0.000000 5.000000X( 4, 8) 0.000000 2.000000X( 5, 6) 0.000000 8.000000X( 5, 7) 0.000000 7.000000X( 5, 8) 0.000000 6.000000X( 6, 7) 0.000000 2.000000X( 6, 8) 0.000000 3.000000X( 7, 8) 0.000000 4.000000Row Slack or Surplus Dual Price1 6.000000 -1.000000……9 0.000000 0.000000或Lingo程序:model:min=9*x12+3*x13+4*x14+2*x15+ x16+5*x17+6*x18+x23+7*x24+3*x25+5*x26+2*x27+ x28+4*x34+4*x35+2*x36+9*x37+2*x38+x45+5*x46+5*x47+2*x48+8*x56+7*x57+6*x58+2*x67+3*x68+4*x78;x12+x13+x14+x15+x16+x17+x18=1;x12+x23+x24+x25+x26+x27+x28=1;x13+x23+x34+x35+x36+x37+x38=1;x14+x24+x34+x45+x46+x47+x48=1;x15+x25+x35+x45+x56+x57+x58=1;x16+x26+x36+x46+x56+x67+x68=1;x17+x27+x37+x47+x57+x67+x78=1;x18+x28+x38+x48+x58+x68+x78=1;@bin(x12);@bin(x13);@bin(x14);@bin(x15);@bin(x16);@bin(x17);@bin(x18); @bin(x23);@bin(x24);@bin(x25);@bin(x26);@bin(x27);@bin(x28);@bin(x34);@bin(x35);@bin(x36);@bin(x37);@bin(x38);@bin(x45);@bin(x46);@bin(x47);@bin(x48);@bin(x56);@bin(x57);@bin(x58);@bin(x67);@bin(x68);@bin(x78);end结果:Global optimal solution found.Objective value: 6.000000Objective bound: 6.000000Infeasibilities: 0.000000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced Cost X12 0.000000 9.000000 X13 0.000000 3.000000 X14 0.000000 4.000000 X15 0.000000 2.000000 X16 1.000000 1.000000 X17 0.000000 5.000000 X18 0.000000 6.000000 X23 0.000000 1.000000 X24 0.000000 7.000000 X25 0.000000 3.000000 X26 0.000000 5.000000 X27 1.000000 2.000000 X28 0.000000 1.000000 X34 0.000000 4.000000 X35 0.000000 4.000000 X36 0.000000 2.000000 X37 0.000000 9.000000 X38 1.000000 2.000000 X45 1.000000 1.000000 X46 0.000000 5.000000 X47 0.000000 5.000000 X48 0.000000 2.000000 X56 0.000000 8.000000 X57 0.000000 7.000000 X58 0.000000 6.000000 X67 0.000000 2.000000 X68 0.000000 3.000000 X78 0.000000 4.000000Row Slack or Surplus Dual Price 1 6.000000 -1.000000 ……9 0.000000 0.000000 问题三:(婚姻问题)某财主想把自己的三个女儿C B A ,,嫁出去。
指派问题的算法
指派问题的算法分析与实现摘要在企业、公司的运营与管理中,管理者总是希望把人员最佳分派以发挥其最大工作效率,从而降低成本、提高效益。
然而,如果没有科学的方法是很难实现优化管理的,由此我们引入了指派问题。
指派问题多是求项目的工时最少,而很多情况下人们并不关心项目总工时的多少,而只关心项目能否在最短的时间内完成,即历时最少的指派问题。
这类问题研究的是n个人执行n项任务,执行每项任务的人数以及总的指派人项数均有限制,要求最优指派。
在运筹学中求解整数规划的指派问题通常是通过匈牙利算法来求解,但指派问题也可以归结为一个0-1整数规划问题,本文先对指派问题进行陈述,引出对实际问题的求解。
在指派问题的背景、描述中充分理解该问题,先运用匈牙利算法实现指派问题,然后再建立一个0-1整数规划模型,并运用matlab和lingo编译程序对问题进行编译,运用软件解决模型问题,最终实现指派问题在实际问题中的运用。
通过运用匈牙利算法和0-1整数规划同时对指派问题求解,我们发现用0-1整数规划的方法来求解可以更简单,也更方便程序的阅读和理解。
与此同时,我们还对0-1整数规划问题由整数数据深入研究到小数数据。
最后通过实例来说明运用matlab,lingo编译程序来解决整数规划问题的简便和有效性。
关键词:指派问题;匈牙利算法;0-1整数规划;matlab模型;lingo模型1. 问题陈述指派问题又称分配问题,其用途非常广泛,比如某公司指派n个人去做n 件事,各人做不同的事,如何安排人员使得总费用最少?若考虑每个职工对工作效率(如熟练程度等),怎样安排会使总销量达到最大?这些都是一个企业经营管理者必须考虑的问题,所以该问题有重要的应用价值。
假设有n 件工作分派给n 个人来做,每项工作只能由一人来做,每个人只能做一项工作。
若给出各人对各项工作所具有的工作效率。
问应该如何安排人选,及发挥个人特长又能使总的效率最大。
为此用0-1整数规划来实现指派问题即如何安排人选。
车辆派遣问题lingo
车辆派遣问题lingo
车辆派送选取最短的行驶路线是商业公司经常要考虑的问题,一个最优的派送方案可以使公司的费用降到最低,从而使公司的利益最大化。
通过建立最优化规划模型来解决最优的车辆行驶路径问题,采用0-1整数规划简化模型,通过Lingo软件进行求解,有效解决了问题2中的具体算例,同时也给出了较普遍的求解这一类车辆行驶路径即问题3当客户i的货物需求量qi为随机参数时的数学模型及处理方法。
对于问题1,我们建立的规划模型是在客户的需求量在车辆运送的承载范围之内,我们使用0-1整数规划来解决车辆是否从客户i行驶到客户j这个问题,有效的简化了模型。
然后在考虑中心仓库的车辆数约束、车辆的载物量约束、时间约束、客户需求量约束的约束情况下,设立了行驶路径最短的目标函数。
并在问题1的具体算例中,利用Lingo软件求得了最优的规划方案:车辆最少数位3辆,行驶路径最短为910公里,路线分别为:0-3-1-2-0,0-8-5-7-0,0-6-4-0。
数模lingo应用-分配问题
例7.7 分配问题(指派问题,Assignment Problem )这是个给n 个人分配n 项工作以获得某个最高总效果的问题。
第i 个人完成第j 项工作 需要平均时间c ij 。
要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任 务的总时间为最小。
该问题可表示如下:minij ni ij x c ∑=1s.t. ∑==⋯=n i ij x 1n;,1,2,j ,1∑==⋯=n j ij x 1n;,1,2,i ,1 i ij x n;,1,2,j ,1,0⋯==显然,此问题可看作是运输问题的特殊情况。
可将此问题看作具有n 个源和n 个汇的问 题,每个源有1 单位的可获量,而每个汇有1 单位的需要量。
从表面看,这问题要求用整数规划以保证xij 能取0 或1。
然而,幸运的是,此问题是运输问题的特例,因此即使不限制xij取0 或1 ,最优解也将取0 或1。
如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可 能很大。
例如,给100 人分配100 项工作将使所得的模型具有10000 个变量。
这时,如采用专门算法效果会更好。
时间复杂度为O(n3) 的匈牙利算法便是好选择,这是由Kuhu (1955) 提出的。
现举一例: 若某单位指派工人做某工作的完成时间表如下:问应如何指派任务,使完成任何的总时间最少?model:!7 个工人,7 个工作的分配问题;sets:workers/w1..w7/;jobs/j1..j7/;links(workers,jobs): cost,volume;endsets!目标函数;min=@sum(links: cost*volume);!每个工人只能有一份工作;@for(workers(I):@sum(jobs(J): volume(I,J))=1;);!每份工作只能有一个工人;@for(jobs(J):@sum(workers(I): volume(I,J))=1;);data:cost= 6 2 6 7 4 2 54 95 3 8 5 85 2 1 9 7 4 37 6 7 3 9 2 72 3 9 5 7 2 65 5 2 2 8 11 49 2 3 12 4 5 10;enddataend计算的部分结果为:Global optimal solution found at iteration: 14Objective value: 18.00000Variable Value Reduced Cost COST( W1, J1) 6.000000 0.000000 COST( W1, J2) 2.000000 0.000000 COST( W1, J3) 6.000000 0.000000 COST( W1, J4) 7.000000 0.000000 COST( W1, J5) 4.000000 0.000000 COST( W1, J6) 2.000000 0.000000 COST( W1, J7) 5.000000 0.000000 COST( W2, J1) 4.000000 0.000000 COST( W2, J2) 9.000000 0.000000 COST( W2, J3) 5.000000 0.000000 COST( W2, J4) 3.000000 0.000000COST( W2, J6) 5.000000 0.000000 COST( W2, J7) 8.000000 0.000000 COST( W3, J1) 5.000000 0.000000 COST( W3, J2) 2.000000 0.000000 COST( W3, J3) 1.000000 0.000000 COST( W3, J4) 9.000000 0.000000 COST( W3, J5) 7.000000 0.000000 COST( W3, J6) 4.000000 0.000000 COST( W3, J7) 3.000000 0.000000 COST( W4, J1) 7.000000 0.000000 COST( W4, J2) 6.000000 0.000000 COST( W4, J3) 7.000000 0.000000 COST( W4, J4) 3.000000 0.000000 COST( W4, J5) 9.000000 0.000000 COST( W4, J6) 2.000000 0.000000 COST( W4, J7) 7.000000 0.000000 COST( W5, J1) 2.000000 0.000000 COST( W5, J2) 3.000000 0.000000 COST( W5, J3) 9.000000 0.000000 COST( W5, J4) 5.000000 0.000000 COST( W5, J5) 7.000000 0.000000 COST( W5, J6) 2.000000 0.000000 COST( W5, J7) 6.000000 0.000000 COST( W6, J1) 5.000000 0.000000 COST( W6, J2) 5.000000 0.000000 COST( W6, J3) 2.000000 0.000000 COST( W6, J4) 2.000000 0.000000 COST( W6, J5) 8.000000 0.000000 COST( W6, J6) 11.00000 0.000000 COST( W6, J7) 4.000000 0.000000 COST( W7, J1) 9.000000 0.000000 COST( W7, J2) 2.000000 0.000000 COST( W7, J3) 3.000000 0.000000 COST( W7, J4) 12.00000 0.000000 COST( W7, J5) 4.000000 0.000000 COST( W7, J6) 5.000000 0.000000 COST( W7, J7) 10.00000 0.000000 VOLUME( W1, J1) 0.000000 4.000000 VOLUME( W1, J2) 0.000000 0.000000 VOLUME( W1, J3) 0.000000 3.000000 VOLUME( W1, J4) 0.000000 4.000000 VOLUME( W1, J5) 1.000000 0.000000 VOLUME( W1, J6) 0.000000 0.000000VOLUME( W2, J1) 0.000000 2.000000 VOLUME( W2, J2) 0.000000 7.000000 VOLUME( W2, J3) 0.000000 2.000000 VOLUME( W2, J4) 1.000000 0.000000 VOLUME( W2, J5) 0.000000 4.000000 VOLUME( W2, J6) 0.000000 3.000000 VOLUME( W2, J7) 0.000000 3.000000 VOLUME( W3, J1) 0.000000 5.000000 VOLUME( W3, J2) 0.000000 2.000000 VOLUME( W3, J3) 0.000000 0.000000 VOLUME( W3, J4) 0.000000 8.000000 VOLUME( W3, J5) 0.000000 5.000000 VOLUME( W3, J6) 0.000000 4.000000 VOLUME( W3, J7) 1.000000 0.000000 VOLUME( W4, J1) 0.000000 5.000000 VOLUME( W4, J2) 0.000000 4.000000 VOLUME( W4, J3) 0.000000 4.000000 VOLUME( W4, J4) 0.000000 0.000000 VOLUME( W4, J5) 0.000000 5.000000 VOLUME( W4, J6) 1.000000 0.000000 VOLUME( W4, J7) 0.000000 2.000000 VOLUME( W5, J1) 1.000000 0.000000 VOLUME( W5, J2) 0.000000 1.000000 VOLUME( W5, J3) 0.000000 6.000000 VOLUME( W5, J4) 0.000000 2.000000 VOLUME( W5, J5) 0.000000 3.000000 VOLUME( W5, J6) 0.000000 0.000000 VOLUME( W5, J7) 0.000000 1.000000 VOLUME( W6, J1) 0.000000 4.000000 VOLUME( W6, J2) 0.000000 4.000000 VOLUME( W6, J3) 1.000000 0.000000 VOLUME( W6, J4) 0.000000 0.000000 VOLUME( W6, J5) 0.000000 5.000000 VOLUME( W6, J6) 0.000000 10.00000 VOLUME( W6, J7) 0.000000 0.000000 VOLUME( W7, J1) 0.000000 7.000000 VOLUME( W7, J2) 1.000000 0.000000 VOLUME( W7, J3) 0.000000 0.000000 VOLUME( W7, J4) 0.000000 9.000000 VOLUME( W7, J5) 0.000000 0.000000 VOLUME( W7, J6) 0.000000 3.000000 VOLUME( W7, J7) 0.000000 5.000000Row Slack or Surplus Dual Price1 18.00000 -1.0000002 0.000000 -5.0000003 0.000000 -5.0000004 0.000000 -3.0000005 0.000000 -5.0000006 0.000000 -5.0000007 0.000000 -4.0000008 0.000000 -5.0000009 0.000000 3.00000010 0.000000 3.00000011 0.000000 2.00000012 0.000000 2.00000013 0.000000 1.00000014 0.000000 3.00000015 0.000000 0.000000 00000。
Lingo软件在求解数学优化问题的使用技巧
3*x3+2*y3+z3<=375;
END
得到的解如下:
X1=200,Y1=0,Z1=0;
X2=58.33333, Y2=312.5,Z2=0;
X3=0,Y3=187.5,Z3=0;
最大总净收益为253333.3元。
3.公司在各地有4项业务,选定了4位业务员去处理。由于业务能力、经验和其它情况不同,4业务员去处理4项业务的费用(单位:元)各不相同,见下表:
常见的集合函数如下:
@FOR(set_name:constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述。
@MAX(set_name:expression)返回集合上的表达式(expression)的最大值。
=
返回如下情形下的净现值:单位时段利率为 ,第 个时段支付单位费用,即:
=
(5)概率函数
@PSN(X)标准正态分布的分布函数。
@PSL(X)单位正态线性损失函数(即返回 的期望值,其中Z为标准正态随机变量)
@PPS(A,X)均值为A的Possion分布的分布函数(当X不是整数时,采用线性插值进行计算)。
(4)初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。
编写LINGO程序要注意的几点:
@PPL(X)Possion分布的线性损失函数(即返回 的期望值,其中Z为Possion分布随机变量)
指派问题
13 0 5 1
7 6 3 0
0 9 ( b ij ) 2 0
第二步: 进行试指派,以寻求最优解。为此,按以 下步骤进行。 经第一步变换后,系数矩阵中每行每 列都已有了0元素;但需找出n个独立的0 元素。若能找出,就以这些独立0元素对 应解矩阵(xij)中的元素为1,其余为0, 这就得到最优解。当n较小时,可用观察 法、试探法去找出n个独立0元素。若n较 大时,就必须按一定的步骤去找,常用 的步骤为:
•减数得零—求初始匹配 •圈零划线—查是否最大匹配 •找数调整—求新的最优匹配 运筹学
指派问题的解法
第一步: 使指派问题的系数矩阵经变换,在各行各列中 都出现0元素。 (1) 从系数矩阵每行元素减去该行的最小元素; (2) 再从所得系数矩阵的每列元素中减去该列 的最小元素。 若某行(列)已有0元素,那就不必再减了。
④
7 4 0 11 0
0 3 8 8 4
2 0 3 0 1
0 0 5 0 4
2 0 0 4 3
运筹学
已具有n个独立0元素。这 就得到了最优解,相应的解 矩阵为: 由解矩阵得最优指派方案 甲—B,乙—D,丙—E,丁—C,戊—A
0 0 0 0 1
想想看!
运筹学
指派问题的形式表述
给定了一系列所要完成的任务(tasks)以及 一系列完成任务的被指派者(assignees), 所需要解决的问题就是要确定出哪一个人 被指派进行哪一项任务,使总的效率最高?
运筹学
指派问题的假设
被指派者的数量和任务的数量是相同的 每一个被指派者只完成一项任务 每一项任务只能由一个被指派者来完成
表1
任 人员 甲 乙 丙 丁 务
《指派问题》课件
指派问题的扩展研究
多目标指派问题
应用场景:生产调度、资源 分配等
解决方法:线性规划、启发 式算法等
定义:指派问题在多个目标 下的扩展
挑战:如何在多个目标之间 找到最优解
动态指派问题
动态指派问题的定 义
动态指派问题的应 用场景
动态指派问题的求 解方法
动态指派问题的优 化策略
大规模指派问题
问题定义:大规模 指派问题是指在给 定一组任务和一组 资源,如何将任务 分配给资源,使得 总成本最小化或总 收益最大化。
混合算法
混合算法的概念: 将多种算法进行 组合,以获得更 好的优化效果
混合算法的优点: 能够充分利用各 种算法的优点, 提高优化效果
混合算法的应用: 在指派问题中, 混合算法可以结 合多种算法,如 遗传算法、模拟 退火算法等,以 提高优化效果
混合算法的挑战: 如何合理选择和 组合各种算法, 以获得最佳的优 化效果
应用场景:大规 模指派问题广泛 应用于物流、供 应链、生产调度 等领域。
研究方法:大规 模指派问题的研 究方法包括启发 式算法、遗传算 法、神经网络等。
挑战与展望:大规 模指派问题的挑战 在于如何设计高效 的算法,以及如何 解决大规模问题中 的优化问题。未来 的研究方向包括分 布式计算、并行计 算等。
禁忌搜索法:在搜索过程中引入禁忌表,避免重复搜索已搜索过的解
元启发式方法
基本概念:元启发式 方法,也称为元启发 式算法,是一种基于 启发式策略的优化方 法。
特点:元启发式方 法具有自适应性、 鲁棒性和易于实现 等特点。
应用:元启发式方法 在指派问题、路径规 划、调度等问题中都 有广泛的应用。
实例:遗传算法、模 拟退火算法、蚁群算 法等都是元启发式方 法的典型代表。
LINGO模型实例及求解
LINGO求解整数非线性规划模型
Local optimal solution found at
iteration: 12211
Objective value:
28.00000
Variable Value Reduced Cost
X1 10.00000
0.000000
X2 10.00000
2.000000
当余料没有用处时,通常以总根数最少为目标
钢管下料问题2
增加一种需求:5米10根;切割模式不超过3种。
现有4种需求:4米50根,5米10根,6米20根,8米 15根,用枚举法确定合理切割模式,过于复杂。
对大规模问题,用模型的约束条件界定合理模式
决策变量 (15维) xi ~按第i 种模式切割的原料钢管根数(i=1,2,3) r1i, r2i, r3i, r4i ~ 第i 种切割模式下,每根原料钢管 生产4米、5米、6米和8米长的钢管的数量
每根原料钢管切割成2某人打算外出旅游并登山路程比较远途中要坐火车和飞机考虑要带许多必要的旅游和生活用品例如照相机摄像机食品衣服雨具书籍等等共n件物品重量分别为a而受航空行李重量限制以及个人体力所限能带的行李总重量为bn件物品的总重量超过了b需要裁减该旅行者为了决策带哪些物品对这些物品的重要性进行了量化用c表示试建立该问题的数学模型
4 x1 3 x22 x3x4x550最优解:x2=15,
x22x4x53x620 x5=5, x7=5,
x3x52x715
其余为0;
xi 为整数
最优值:25。
按模式2切割15根, 与目标1的结果“共切割
按模式5切割5根, 27根,余料27米” 相比
按模式7切割5根, 共25根,余料35米 虽余料增加8米,但减少了2根
lingo 指派问题
Lingo 作业题1、指派问题设有n 个人, 计划作n 项工作, 其中ij c 表示第i 个人做第j 项工作的收益,求一种指派方式,使得每个人完成一项工作,使总收益最大.现6个人做6项工作的最优指派问题,其收益矩阵如表所示,请给出合理安排.一、问题分析根据第一题的题意我们可以知道,此题的最终目标是让我们建立一种数学模型来解决这个实际生活中的问题,此题意简而言之就是为了解决6个人做6项工作的指派最优问题,从而使题目中的ij C 收益等达到所需要的目的。
在题目中曾提到:每个人完成一项工作。
其意思就是每人只能做一项工作且每项工作只能做一人做。
二、符号说明此题属于最优指派问题,引入如下变量:题目中说:ij C 表示第i 个人做第j 项工作的收益。
例如56C 则表示第5个人做第6项工作。
即6611max ij ij i j z xy c ===∑∑s.t.:611ij i C==∑ ,j=1,2,3,···,6611ij j C==∑ ,i=1,2,3,···,6 01ij C =或 ,i,j=1,2,3,···,6此题需要求出最大值最优(最大值),即需要使用max ,表示最大。
在编程过程中“@bin (x )”是“限制x 为0或1”。
三、建立模型此题属于最优指派问题,与常见的线性问题极为类似。
因此,使用Lingo软件。
由于“每人只能做一项工作且每项工作只能做一人做”故采用0-1规划求得优。
四、模型求解(一)常规程序求解Lingo输入框:max=20*c11+15*c12+16*c13+5*c14+4*c15+7*c16+17*c21+15*c22+33*c23+12*c24+8*c25+6*c26+9*c31+12*c32+18*c33+16*c34+30*c35+13*c36+12*c41+8*c42+11*c43+27*c44+19*c45+14*c46+0*c51+7*c52+10*c53+21*c54+10*c55+32*c56+0*c61+0*c62+0*c63+6*c64+11*c65+13*c66;c11+c12+c13+c14+c15+c16=1;c21+c22+c23+c24+c25+c26=1;c31+c32+c33+c34+c35+c36=1;c41+c42+c43+c44+c45+c46=1;c51+c52+c53+c54+c55+c56=1;c61+c62+c63+c64+c65+c66=1;c11+c21+c31+c41+c51+c61=1;c12+c22+c32+c42+c52+c62=1;c13+c23+c33+c43+c53+c63=1;c14+c24+c34+c44+c54+c64=1;c15+c25+c35+c45+c55+c65=1;c16+c26+c36+c46+c56+c66=1;@bin(c11);@bin(c12);@bin(c13);@bin(c14);@bin(c15);@bin(c16);@bin(c21);@bin(c22);@bin(c23);@bin(c24);@bin(c25);@bin(c26);@bin(c31);@bin(c32);@bin(c33);@bin(c34);@bin(c35);@bin(c36);@bin(c41);@bin(c42);@bin(c43);@bin(c44);@bin(c45);@bin(c46);@bin(c51);@bin(c52);@bin(c53);@bin(c54);@bin(c55);@bin(c56);@bin(c61);@bin(c62);@bin(c63);@bin(c64);@bin(c65);@bin(c66);Lingo输出(结果)框:Global optimal solution found.Objective value: 142.0000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced CostC11 1.000000 -20.00000C12 0.000000 -15.00000C13 0.000000 -16.00000C14 0.000000 -5.000000C15 0.000000 -4.000000C21 0.000000 -17.00000 C22 0.000000 -15.00000 C23 1.000000 -33.00000 C24 0.000000 -12.00000 C25 0.000000 -8.000000 C26 0.000000 -6.000000 C31 0.000000 -9.000000 C32 0.000000 -12.00000 C33 0.000000 -18.00000 C34 0.000000 -16.00000 C35 1.000000 -30.00000 C36 0.000000 -13.00000 C41 0.000000 -12.00000 C42 0.000000 -8.000000 C43 0.000000 -11.00000 C44 1.000000 -27.00000 C45 0.000000 -19.00000 C46 0.000000 -14.00000 C51 0.000000 0.000000 C52 0.000000 -7.000000 C53 0.000000 -10.00000 C54 0.000000 -21.00000 C55 0.000000 -10.00000 C56 1.000000 -32.00000 C61 0.000000 0.000000 C62 1.000000 0.000000 C63 0.000000 0.000000 C64 0.000000 -6.000000 C65 0.000000 -11.00000 C66 0.000000 -13.00000Row Slack or Surplus Dual Price1 142.0000 1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000011 0.000000 0.00000013 0.000000 0.000000(二)循环语句求解Lingo输入框:model:sets:gz/A1..A6/:a;ry/B1..B6/:b;yw(gz,ry):xy,x;endsetsdata:a=1,1,1,1,1,1;b=1,1,1,1,1,1;xy=20 15 16 5 4 7,17 15 33 12 8 6,9 12 18 16 30 13,12 8 11 27 19 14,0 7 10 21 10 32,0 0 0 6 11 13;enddatamax=@sum(yw:xy*x);@for(gz(i):@sum(ry(j):x(i,j))=1);@for(ry(j):@sum(gz(i):x(i,j))=1);@for(yw(i,j):@bin(x(i,j)));EndLingo输出(结果)框Global optimal solution found.Objective value: 142.0000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced Cost A( A1) 1.000000 0.000000 A( A2) 1.000000 0.000000 A( A3) 1.000000 0.000000 A( A4) 1.000000 0.000000 A( A5) 1.000000 0.000000 A( A6) 1.000000 0.000000 B( B1) 1.000000 0.000000 B( B2) 1.000000 0.000000B( B4) 1.000000 0.000000 B( B5) 1.000000 0.000000 B( B6) 1.000000 0.000000 XY( A1, B1) 20.00000 0.000000 XY( A1, B2) 15.00000 0.000000 XY( A1, B3) 16.00000 0.000000 XY( A1, B4) 5.000000 0.000000 XY( A1, B5) 4.000000 0.000000 XY( A1, B6) 7.000000 0.000000 XY( A2, B1) 17.00000 0.000000 XY( A2, B2) 15.00000 0.000000 XY( A2, B3) 33.00000 0.000000 XY( A2, B4) 12.00000 0.000000 XY( A2, B5) 8.000000 0.000000 XY( A2, B6) 6.000000 0.000000 XY( A3, B1) 9.000000 0.000000 XY( A3, B2) 12.00000 0.000000 XY( A3, B3) 18.00000 0.000000 XY( A3, B4) 16.00000 0.000000 XY( A3, B5) 30.00000 0.000000 XY( A3, B6) 13.00000 0.000000 XY( A4, B1) 12.00000 0.000000 XY( A4, B2) 8.000000 0.000000 XY( A4, B3) 11.00000 0.000000 XY( A4, B4) 27.00000 0.000000 XY( A4, B5) 19.00000 0.000000 XY( A4, B6) 14.00000 0.000000 XY( A5, B1) 0.000000 0.000000 XY( A5, B2) 7.000000 0.000000 XY( A5, B3) 10.00000 0.000000 XY( A5, B4) 21.00000 0.000000 XY( A5, B5) 10.00000 0.000000 XY( A5, B6) 32.00000 0.000000 XY( A6, B1) 0.000000 0.000000 XY( A6, B2) 0.000000 0.000000 XY( A6, B3) 0.000000 0.000000 XY( A6, B4) 6.000000 0.000000 XY( A6, B5) 11.00000 0.000000 XY( A6, B6) 13.00000 0.000000 X( A1, B1) 1.000000 -20.00000 X( A1, B2) 0.000000 -15.00000 X( A1, B3) 0.000000 -16.00000 X( A1, B4) 0.000000 -5.000000X( A1, B6) 0.000000 -7.000000 X( A2, B1) 0.000000 -17.00000 X( A2, B2) 0.000000 -15.00000 X( A2, B3) 1.000000 -33.00000 X( A2, B4) 0.000000 -12.00000 X( A2, B5) 0.000000 -8.000000 X( A2, B6) 0.000000 -6.000000 X( A3, B1) 0.000000 -9.000000 X( A3, B2) 0.000000 -12.00000 X( A3, B3) 0.000000 -18.00000 X( A3, B4) 0.000000 -16.00000 X( A3, B5) 1.000000 -30.00000 X( A3, B6) 0.000000 -13.00000 X( A4, B1) 0.000000 -12.00000 X( A4, B2) 0.000000 -8.000000 X( A4, B3) 0.000000 -11.00000 X( A4, B4) 1.000000 -27.00000 X( A4, B5) 0.000000 -19.00000 X( A4, B6) 0.000000 -14.00000 X( A5, B1) 0.000000 0.000000 X( A5, B2) 0.000000 -7.000000 X( A5, B3) 0.000000 -10.00000 X( A5, B4) 0.000000 -21.00000 X( A5, B5) 0.000000 -10.00000 X( A5, B6) 1.000000 -32.00000 X( A6, B1) 0.000000 0.000000 X( A6, B2) 1.000000 0.000000 X( A6, B3) 0.000000 0.000000 X( A6, B4) 0.000000 -6.000000 X( A6, B5) 0.000000 -11.00000 X( A6, B6) 0.000000 -13.00000Row Slack or Surplus Dual Price1 142.0000 1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000012 0.000000 0.00000013 0.000000 0.000000五、模型结果通过以上的应用Lingo模型求解,得出结论:第1项工作由第1个人来完成。
指派问题
2、程序结果: R 软件结果显示如下:
Lingo 软件结果显示如下:
五、实验结果及分析:从运行结果可以看出,最优解已成功找 到。最优指派方案是甲做 A 工作,乙做 D 工作,丙做 C 工作,丁 做 B 工作。这样安排能使总的消耗时间最少,为 15+18+16+21=70. 从中可以看出 R 软件可以简单并且迅速解决指派问题。
教师评语
一、 实验目的: 用 R 软件和 lingo 软件解决指派问题
二、 实验内容: 课本 P154 习题 6.9
有 4 个工人,要指派它们分别完成 4 种工作,每个人做各种工作 所消耗的时间如下,问指派哪个人去完成那种工作,可使总得消耗 时间为最小?
三、使用环境: R 软件和 lingo 软件
四、实验步骤: 1、程序实验: R 软件程序代码如下:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Lingo 作业题1、指派问题设有n 个人, 计划作n 项工作, 其中ij c 表示第i 个人做第j 项工作的收益,求一种指派方式,使得每个人完成一项工作,使总收益最大.现6个人做6项工作的最优指派问题,其收益矩阵如表所示,请给出合理安排.一、问题分析根据第一题的题意我们可以知道,此题的最终目标是让我们建立一种数学模型来解决这个实际生活中的问题,此题意简而言之就是为了解决6个人做6项工作的指派最优问题,从而使题目中的ij C 收益等达到所需要的目的。
在题目中曾提到:每个人完成一项工作。
其意思就是每人只能做一项工作且每项工作只能做一人做。
二、符号说明此题属于最优指派问题,引入如下变量:题目中说:ij C 表示第i 个人做第j 项工作的收益。
例如56C 则表示第5个人做第6项工作。
即6611max ij ij i j z xy c ===∑∑s.t.:611ij i C==∑ ,j=1,2,3,···,6611ij j C==∑ ,i=1,2,3,···,6 01ij C =或 ,i,j=1,2,3,···,6此题需要求出最大值最优(最大值),即需要使用max ,表示最大。
在编程过程中“@bin (x )”是“限制x 为0或1”。
三、建立模型此题属于最优指派问题,与常见的线性问题极为类似。
因此,使用Lingo软件。
由于“每人只能做一项工作且每项工作只能做一人做”故采用0-1规划求得优。
四、模型求解(一)常规程序求解Lingo输入框:max=20*c11+15*c12+16*c13+5*c14+4*c15+7*c16+17*c21+15*c22+33*c23+12*c24+8*c25+6*c26+9*c31+12*c32+18*c33+16*c34+30*c35+13*c36+12*c41+8*c42+11*c43+27*c44+19*c45+14*c46+0*c51+7*c52+10*c53+21*c54+10*c55+32*c56+0*c61+0*c62+0*c63+6*c64+11*c65+13*c66;c11+c12+c13+c14+c15+c16=1;c21+c22+c23+c24+c25+c26=1;c31+c32+c33+c34+c35+c36=1;c41+c42+c43+c44+c45+c46=1;c51+c52+c53+c54+c55+c56=1;c61+c62+c63+c64+c65+c66=1;c11+c21+c31+c41+c51+c61=1;c12+c22+c32+c42+c52+c62=1;c13+c23+c33+c43+c53+c63=1;c14+c24+c34+c44+c54+c64=1;c15+c25+c35+c45+c55+c65=1;c16+c26+c36+c46+c56+c66=1;@bin(c11);@bin(c12);@bin(c13);@bin(c14);@bin(c15);@bin(c16);@bin(c21);@bin(c22);@bin(c23);@bin(c24);@bin(c25);@bin(c26);@bin(c31);@bin(c32);@bin(c33);@bin(c34);@bin(c35);@bin(c36);@bin(c41);@bin(c42);@bin(c43);@bin(c44);@bin(c45);@bin(c46);@bin(c51);@bin(c52);@bin(c53);@bin(c54);@bin(c55);@bin(c56);@bin(c61);@bin(c62);@bin(c63);@bin(c64);@bin(c65);@bin(c66);Lingo输出(结果)框:Global optimal solution found.Objective value: 142.0000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced CostC11 1.000000 -20.00000C12 0.000000 -15.00000C13 0.000000 -16.00000C14 0.000000 -5.000000C15 0.000000 -4.000000C21 0.000000 -17.00000 C22 0.000000 -15.00000 C23 1.000000 -33.00000 C24 0.000000 -12.00000 C25 0.000000 -8.000000 C26 0.000000 -6.000000 C31 0.000000 -9.000000 C32 0.000000 -12.00000 C33 0.000000 -18.00000 C34 0.000000 -16.00000 C35 1.000000 -30.00000 C36 0.000000 -13.00000 C41 0.000000 -12.00000 C42 0.000000 -8.000000 C43 0.000000 -11.00000 C44 1.000000 -27.00000 C45 0.000000 -19.00000 C46 0.000000 -14.00000 C51 0.000000 0.000000 C52 0.000000 -7.000000 C53 0.000000 -10.00000 C54 0.000000 -21.00000 C55 0.000000 -10.00000 C56 1.000000 -32.00000 C61 0.000000 0.000000 C62 1.000000 0.000000 C63 0.000000 0.000000 C64 0.000000 -6.000000 C65 0.000000 -11.00000 C66 0.000000 -13.00000Row Slack or Surplus Dual Price1 142.0000 1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000011 0.000000 0.00000013 0.000000 0.000000(二)循环语句求解Lingo输入框:model:sets:gz/A1..A6/:a;ry/B1..B6/:b;yw(gz,ry):xy,x;endsetsdata:a=1,1,1,1,1,1;b=1,1,1,1,1,1;xy=20 15 16 5 4 7,17 15 33 12 8 6,9 12 18 16 30 13,12 8 11 27 19 14,0 7 10 21 10 32,0 0 0 6 11 13;enddatamax=@sum(yw:xy*x);@for(gz(i):@sum(ry(j):x(i,j))=1);@for(ry(j):@sum(gz(i):x(i,j))=1);@for(yw(i,j):@bin(x(i,j)));EndLingo输出(结果)框Global optimal solution found.Objective value: 142.0000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced Cost A( A1) 1.000000 0.000000 A( A2) 1.000000 0.000000 A( A3) 1.000000 0.000000 A( A4) 1.000000 0.000000 A( A5) 1.000000 0.000000 A( A6) 1.000000 0.000000 B( B1) 1.000000 0.000000 B( B2) 1.000000 0.000000B( B4) 1.000000 0.000000 B( B5) 1.000000 0.000000 B( B6) 1.000000 0.000000 XY( A1, B1) 20.00000 0.000000 XY( A1, B2) 15.00000 0.000000 XY( A1, B3) 16.00000 0.000000 XY( A1, B4) 5.000000 0.000000 XY( A1, B5) 4.000000 0.000000 XY( A1, B6) 7.000000 0.000000 XY( A2, B1) 17.00000 0.000000 XY( A2, B2) 15.00000 0.000000 XY( A2, B3) 33.00000 0.000000 XY( A2, B4) 12.00000 0.000000 XY( A2, B5) 8.000000 0.000000 XY( A2, B6) 6.000000 0.000000 XY( A3, B1) 9.000000 0.000000 XY( A3, B2) 12.00000 0.000000 XY( A3, B3) 18.00000 0.000000 XY( A3, B4) 16.00000 0.000000 XY( A3, B5) 30.00000 0.000000 XY( A3, B6) 13.00000 0.000000 XY( A4, B1) 12.00000 0.000000 XY( A4, B2) 8.000000 0.000000 XY( A4, B3) 11.00000 0.000000 XY( A4, B4) 27.00000 0.000000 XY( A4, B5) 19.00000 0.000000 XY( A4, B6) 14.00000 0.000000 XY( A5, B1) 0.000000 0.000000 XY( A5, B2) 7.000000 0.000000 XY( A5, B3) 10.00000 0.000000 XY( A5, B4) 21.00000 0.000000 XY( A5, B5) 10.00000 0.000000 XY( A5, B6) 32.00000 0.000000 XY( A6, B1) 0.000000 0.000000 XY( A6, B2) 0.000000 0.000000 XY( A6, B3) 0.000000 0.000000 XY( A6, B4) 6.000000 0.000000 XY( A6, B5) 11.00000 0.000000 XY( A6, B6) 13.00000 0.000000 X( A1, B1) 1.000000 -20.00000 X( A1, B2) 0.000000 -15.00000 X( A1, B3) 0.000000 -16.00000 X( A1, B4) 0.000000 -5.000000X( A1, B6) 0.000000 -7.000000 X( A2, B1) 0.000000 -17.00000 X( A2, B2) 0.000000 -15.00000 X( A2, B3) 1.000000 -33.00000 X( A2, B4) 0.000000 -12.00000 X( A2, B5) 0.000000 -8.000000 X( A2, B6) 0.000000 -6.000000 X( A3, B1) 0.000000 -9.000000 X( A3, B2) 0.000000 -12.00000 X( A3, B3) 0.000000 -18.00000 X( A3, B4) 0.000000 -16.00000 X( A3, B5) 1.000000 -30.00000 X( A3, B6) 0.000000 -13.00000 X( A4, B1) 0.000000 -12.00000 X( A4, B2) 0.000000 -8.000000 X( A4, B3) 0.000000 -11.00000 X( A4, B4) 1.000000 -27.00000 X( A4, B5) 0.000000 -19.00000 X( A4, B6) 0.000000 -14.00000 X( A5, B1) 0.000000 0.000000 X( A5, B2) 0.000000 -7.000000 X( A5, B3) 0.000000 -10.00000 X( A5, B4) 0.000000 -21.00000 X( A5, B5) 0.000000 -10.00000 X( A5, B6) 1.000000 -32.00000 X( A6, B1) 0.000000 0.000000 X( A6, B2) 1.000000 0.000000 X( A6, B3) 0.000000 0.000000 X( A6, B4) 0.000000 -6.000000 X( A6, B5) 0.000000 -11.00000 X( A6, B6) 0.000000 -13.00000Row Slack or Surplus Dual Price1 142.0000 1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000012 0.000000 0.00000013 0.000000 0.000000五、模型结果通过以上的应用Lingo模型求解,得出结论:第1项工作由第1个人来完成。