一、实验名称:推销员指派问题 二、实验目的及任务:1、掌握Lingo 软件的使用方法2、编写简单的Lingo 程序3、解决Lingo 中的最优指派问题三、实验容1、问题描述一个公司要分派5个推销员去5个地区推销某种产品,5个推销员在各个地区推销这种产品的预期利润如下表所示。
若每个推销员只能去一个地区。
应如何分派这5个推销员才能使公司的利润为最大?2、模型建立决策变量:设⎩⎨⎧=个地区个人去第不指派第个地区个人去第指派第j i 0j i 1ij x (i,j=1,2,3,4,5)目标函数:设总利润为z ,第i 个人去第j 个地区的利润为A ij (i,j=1,2,3,4,5),假设A ij 为指派矩阵,则Max ∑∑===5151i j ij ij x A z约束条件:1.第j 个地区只有一个人去:151=∑=i ijx(j=1,2,3,4,5)2.第i 个人只去一个地区:151=∑=j ijx(i=1,2,3,4,5)由此得基本模型:Max ∑∑===5151i j ij ij x A zS,t, 151=∑=i ij x (j=1,2,3,4,5)151=∑=j ijx(i=1,2,3,4,5)10或=ij x (i,j=1,2,3,4,5)3、Lingo 程序 (一)常规程序 Lingo 输入:model :max =1*x11+8*x12+9*x13+2*x14+1*x15+5*x21+6*x22+3*x23+10*x24+7*x25+3*x31+10*x32+4*x33+11*x34+3*x35+7*x41+7*x42+5*x43+4*x44+8*x45+4*x51+2*x52+6*x53+3*x54+9*x 55;x11+x12+x13+x14+x15=1; x21+x22+x23+x24+x25=1; x31+x32+x33+x34+x35=1; x41+x42+x43+x44+x45=1; x51+x52+x53+x54+x55=1; x11+x21+x31+x41+x51=1; x12+x22+x32+x42+x52=1; x13+x23+x33+x43+x53=1; x14+x24+x34+x44+x54=1; x15+x25+x35+x45+x55=1; endLingo 输出:Global optimal solution found.Objective value: 45.00000 Infeasibilities: 0.000000 Total solver iterations: 8Variable Value Reduced CostX11 0.000000 7.000000X12 0.000000 0.000000X13 1.000000 0.000000X14 0.000000 7.000000X15 0.000000 8.000000X21 0.000000 4.000000X22 0.000000 3.000000X23 0.000000 7.000000X24 1.000000 0.000000X25 0.000000 3.000000X31 0.000000 7.000000X32 1.000000 0.000000X33 0.000000 7.000000X34 0.000000 0.000000X35 0.000000 8.000000X41 1.000000 0.000000X42 0.000000 0.000000X43 0.000000 3.000000X44 0.000000 4.000000X45 0.000000 0.000000X51 0.000000 4.000000X52 0.000000 6.000000X53 0.000000 3.000000X54 0.000000 6.000000X55 1.000000 0.000000Row Slack or Surplus Dual Price1 45.00000 1.0000002 0.000000 9.0000003 0.000000 10.000004 0.000000 11.000005 0.000000 8.0000006 0.000000 9.0000007 0.000000 -1.0000008 0.000000 -1.0000009 0.000000 0.00000010 0.000000 0.00000011 0.000000 0.000000(二)集合函数程序Lingo输入:model:sets:person/1..5/;area/1..5/;assign(person,area):A,x;endsetsdata:A=1,8,9,2,15,6,3,10,73,10,4,11,37,7,5,4,84,2,6,3,9;enddatamax=sum(assign:A*x);for(person(i):sum(area(j):x(i,j))=1);for(area(j):sum(person(i):x(i,j))=1);for(assign(i,j):bin(x(i,j)));endLingo输出:Global optimal solution found.Objective value: 45.00000 Objective bound: 45.00000 Infeasibilities: 0.000000Extended solver steps: 0Total solver iterations: 0Variable Value Reduced CostA( 1, 1) 1.000000 0.000000A( 1, 2) 8.000000 0.000000A( 1, 3) 9.000000 0.000000A( 1, 4) 2.000000 0.000000A( 1, 5) 1.000000 0.000000A( 2, 1) 5.000000 0.000000A( 2, 2) 6.000000 0.000000A( 2, 3) 3.000000 0.000000A( 2, 4) 10.00000 0.000000A( 2, 5) 7.000000 0.000000A( 3, 1) 3.000000 0.000000A( 3, 2) 10.00000 0.000000A( 3, 3) 4.000000 0.000000A( 3, 4) 11.00000 0.000000A( 3, 5) 3.000000 0.000000A( 4, 1) 7.000000 0.000000A( 4, 2) 7.000000 0.000000A( 4, 3) 5.000000 0.000000A( 4, 4) 4.000000 0.000000A( 4, 5) 8.000000 0.000000 A( 5, 1) 4.000000 0.000000 A( 5, 2) 2.000000 0.000000 A( 5, 3) 6.000000 0.000000 A( 5, 4) 3.000000 0.000000 A( 5, 5) 9.000000 0.000000 X( 1, 1) 0.000000 -1.000000 X( 1, 2) 0.000000 -8.000000 X( 1, 3) 1.000000 -9.000000 X( 1, 4) 0.000000 -2.000000 X( 1, 5) 0.000000 -1.000000 X( 2, 1) 0.000000 -5.000000 X( 2, 2) 0.000000 -6.000000 X( 2, 3) 0.000000 -3.000000 X( 2, 4) 1.000000 -10.00000 X( 2, 5) 0.000000 -7.000000 X( 3, 1) 0.000000 -3.000000 X( 3, 2) 1.000000 -10.00000 X( 3, 3) 0.000000 -4.000000 X( 3, 4) 0.000000 -11.00000 X( 3, 5) 0.000000 -3.000000 X( 4, 1) 1.000000 -7.000000 X( 4, 2) 0.000000 -7.000000 X( 4, 3) 0.000000 -5.000000 X( 4, 4) 0.000000 -4.000000 X( 4, 5) 0.000000 -8.000000 X( 5, 1) 0.000000 -4.000000 X( 5, 2) 0.000000 -2.000000 X( 5, 3) 0.000000 -6.000000 X( 5, 4) 0.000000 -3.000000 X( 5, 5) 1.000000 -9.000000Row Slack or Surplus Dual Price1 45.00000 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.0000004、求解结果通过上面的lingo程序求解,得出结论:甲去C地区,乙去D地区,丙去B地区,丁去A地区,茂去E地区,此时公司的利润最大。
四、实验总结在该实验中,我对lingo软件有了一些基本的了解,学会了用lingo软件求解指派问题的方法,并且能运用部分集合函数编写一些简单的程序。