1 / 55

运筹学模型与软件 实践

运筹学模型与软件 实践. Models and Software Practice of the Operations Research. 中国科学院研究生院. 第五章 分配问题与实验. 分配问题的数学模型 用 LINGO 软件计算分配问题的实例 匹配问题 二次分配问题模型 分配问题应用. 分配问题概述. 分配问题的数学模型. 用 Lingo 软件计算分配问题的实例. 集合的构造. 如何去构造一个 集合 (SETS) ?. 从 人 和 工作 两个方面进行构造原始集合 集合长度均为 5 项 确定 人 原始集合的属性-- 能力

connie
Download Presentation

运筹学模型与软件 实践

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 运筹学模型与软件实践 Models and Software Practice of the Operations Research 中国科学院研究生院

  2. 第五章 分配问题与实验 • 分配问题的数学模型 • 用LINGO软件计算分配问题的实例 • 匹配问题 • 二次分配问题模型 • 分配问题应用

  3. 分配问题概述

  4. 分配问题的数学模型

  5. 用Lingo软件计算分配问题的实例

  6. 集合的构造 如何去构造一个集合(SETS)? • 从人和工作两个方面进行构造原始集合 • 集合长度均为5项 • 确定人原始集合的属性--能力 • 确定工作原始集合的属性--需求 • 需要构造人和工作的派生集合 • 确定派生集合的属性--费用、数量

  7. 集合的构造 SETS: WORKER/W1,W2,W3,W4,W5/:CAPACITY;!工人的集合; JOB/J1,J2,J3,J4,J5/:DEMAND;!工作的集合; ROUTES(WORKER,JOB):COST,VOLUME;!产生的派生集合--矩阵; ENDSETS DATA: CAPACITY = 1,1,1,1,1; DEMAND = 1,1,1,1,1; COST = 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; ENDDATA

  8. 模型的构造 如何去构造一个模型? • 目标函数--总费用最省 • 约束条件--需求约束 • 约束条件--供给约束

  9. 集合的构造 !目标函数; MIN = @SUM(ROUTES:COST*VOLUME); !需求约束; @FOR(JOB(J): @SUM(WORKER(I):VOLUME(I,J))=DEMAND(J)); !供给约束; @FOR(WORKER(I): @SUM(JOB(J):VOLUME(I,J))=CAPACITY(I));

  10. 构造Lingo程序 MODEL: !5个工人,5项工作的分配问题; SETS: WORKER/W1,W2,W3,W4,W5/:CAPACITY;!工人的集合; JOB/J1,J2,J3,J4,J5/:DEMAND;!工作的集合; ROUTES(WORKER,JOB):COST,VOLUME;!产生的派生集合--矩阵; ENDSETS !目标函数; [OBJ] MIN = @SUM(ROUTES:COST*VOLUME); !需求约束; @FOR(JOB(J):[DEM] @SUM(WORKER(I):VOLUME(I,J))=DEMAND(J)); !供给约束; @FOR(WORKER(I):[SUP] @SUM(JOB(J):VOLUME(I,J))=CAPACITY(I)); !数据输入部分; DATA: CAPACITY = 1,1,1,1,1; DEMAND = 1,1,1,1,1; COST = 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; ENDDATA END

  11. 匹配问题 假设你是公司规划部经理,该部门有8个分析专家,正打算搬入新的办公地点。新办公地点共有4个办公室。你需要将专家配成4对,每一对分配一个新的办公室。基于以往的观察,有些专家在一起合作得很好,而有些在一起则不行。为了部门安宁,你也许想找出一种匹配,使得在一起的专家发生冲突的可能性最小。为了这一目的,要计算出匹配专家的不相容等级分。等级从1到10,某个专家匹配的等级分为1意味着两个专家合作得非常好。反之,等级分为10意味着两个专家不能一起共事。

  12. 专家不相容等级分 由于专家I和专家J的匹配与专家J和专家I的匹配是一样的,所以我们只给出表中斜对角线上方的数据。 大家好好讨论如何当经理的问题!

  13. 构造8个专家构成的基本集合: ANALYSTS/1..8/; 最终含有匹配关系的派生集合 PAIRS(ANALYSTS,ANALYSTS); 由于这个集合里含有(I,J)、(J,I)以及(I,I)。需要去掉后面两个。 PAIRS(ANALYSTS,ANALYSTS)| &2#GT#&1; 通过过滤器,斜线上方的元素记入了集合PAIRS。

  14. 给集合PAIRS定义两个属性,第一个属性是匹配不相容等级分RATING;第二个属性表明专家I是否与专家J匹配MATCH。给集合PAIRS定义两个属性,第一个属性是匹配不相容等级分RATING;第二个属性表明专家I是否与专家J匹配MATCH。 PAIRS(ANALYSTS,ANALYSTS)| &2#GT#&1:RATING,MATCH; 我们用下面的数据域(由上面列出的不相容等级分)初始化属性RATING. DATA: RATING= 9 3 4 2 1 5 6 1 7 3 5 2 1 4 4 2 9 2 1 5 5 2 8 7 6 2 3 4;

  15. 集合和数据部分的构造结果 SETS: ANALYSTS / 1..8/; PAIRS( ANALYSTS, ANALYSTS) | &2 #GT# &1: RATING, MATCH; ENDSETS DATA: RATING = 9 3 4 2 1 5 6 1 7 3 5 2 1 4 4 2 9 2 1 5 5 2 8 7 6 2 3 4; ENDDATA

  16. 我们让MATCH(I,J)取值为1来表示将专家I与专家J匹配,否则MATCH(I,J)取值为0。这样,属性MATCH就是模型的决策变量。我们的目的就是要使得所有最终匹配的不相容等级分的总和最小。我们让MATCH(I,J)取值为1来表示将专家I与专家J匹配,否则MATCH(I,J)取值为0。这样,属性MATCH就是模型的决策变量。我们的目的就是要使得所有最终匹配的不相容等级分的总和最小。 MIN=@SUM(PAIRS(I,J): RATING(I,J)*MATCH(I,J)); 约束条件:对于每一个专家,他只与另外一个专家匹配。 @FOR(ANALYSTS(I): @SUM(PAIRS(J,K)|J#EQ#I#OR#K#EQ#I: MATCH(J,K))=1);

  17. 2] MATCH( 1, 2) + MATCH( 1, 3) + MATCH( 1, 4) + MATCH( 1, 5) + MATCH( 1, 6) + MATCH( 1, 7) + MATCH( 1, 8) = 1 3] MATCH( 1, 2) + MATCH( 2, 3) + MATCH( 2, 4) + MATCH( 2, 5) + MATCH( 2, 6) + MATCH( 2, 7) + MATCH( 2, 8) = 1 4] MATCH( 1, 3) + MATCH( 2, 3) + MATCH( 3, 4) + MATCH( 3, 5) + MATCH( 3, 6) + MATCH( 3, 7) + MATCH( 3, 8) = 1 5] MATCH( 1, 4) + MATCH( 2, 4) + MATCH( 3, 4) + MATCH( 4, 5) + MATCH( 4, 6) + MATCH( 4, 7) + MATCH( 4, 8) = 1 6] MATCH( 1, 5) + MATCH( 2, 5) + MATCH( 3, 5) + MATCH( 4, 5) + MATCH( 5, 6) + MATCH( 5, 7) + MATCH( 5, 8) = 1 7] MATCH( 1, 6) + MATCH( 2, 6) + MATCH( 3, 6) + MATCH( 4, 6) + MATCH( 5, 6) + MATCH( 6, 7) + MATCH( 6, 8) = 1 8] MATCH( 1, 7) + MATCH( 2, 7) + MATCH( 3, 7) + MATCH( 4, 7) + MATCH( 5, 7) + MATCH( 6, 7) + MATCH( 7, 8) = 1 9] MATCH( 1, 8) + MATCH( 2, 8) + MATCH( 3, 8) + MATCH( 4, 8) + MATCH( 5, 8) + MATCH( 6, 8) + MATCH( 7, 8) = 1

  18. 模型的构造 !目标函数部分; MIN = @SUM( PAIRS( I, J): RATING( I, J) * MATCH( I, J)); !约束条件--匹配关系; @FOR( ANALYSTS( I): @SUM( PAIRS( J, K) | J #EQ# I #OR# K #EQ# I: MATCH( J, K)) = 1 ); !0-1约束条件; @FOR( PAIRS( I, J): @BIN( MATCH( I, J)));

  19. 模型的特色 1:采用条件过滤器(J#EQ#I#OR#K#EQ#I)和@SUM函数。对于每一位专家I,我们求出所有含有I的MATCH变量的和并让其值等于1,保证专家I将与且只与另一个专家匹配。 2:如果I和J匹配,我们就让MATCH(I,J)取值为1;否则就为0。@BIN函数限制了MATCH(I,J)的取值。 @FOR(PAIRS(I,J):@BIN(MATCH(I,J)));

  20. SETS: ANALYSTS / 1..8/; PAIRS( ANALYSTS, ANALYSTS) | &2 #GT# &1: RATING, MATCH; ENDSETS DATA: RATING = 9 3 4 2 1 5 6 1 7 3 5 2 1 4 4 2 9 2 1 5 5 2 8 7 6 2 3 4; ENDDATA MIN = @SUM( PAIRS( I, J): RATING( I, J) * MATCH( I, J)); @FOR( ANALYSTS( I): @SUM( PAIRS( J, K) | J #EQ# I #OR# K #EQ# I: MATCH( J, K)) = 1 ); @FOR( PAIRS( I, J): @BIN( MATCH( I, J)));

  21. MIN 9 MATCH( 1, 2) + 3 MATCH( 1, 3) + 4 MATCH( 1, 4) + 2 MATCH( 1, 5) + MATCH( 1, 6) + 5 MATCH( 1, 7) + 6 MATCH( 1, 8) + MATCH( 2, 3) + 7 MATCH( 2, 4) + 3 MATCH( 2, 5) + 5 MATCH( 2, 6) + 2 MATCH( 2, 7) + MATCH( 2, 8) + 4 MATCH( 3, 4) + 4 MATCH( 3, 5) + 2 MATCH( 3, 6) + 9 MATCH( 3, 7) + 2 MATCH( 3, 8) + MATCH( 4, 5) + 5 MATCH( 4, 6) + 5 MATCH( 4, 7) + 2 MATCH( 4, 8) + 8 MATCH( 5, 6) + 7 MATCH( 5, 7) + 6 MATCH( 5, 8) + 2 MATCH( 6, 7) + 3 MATCH( 6, 8) + 4 MATCH( 7, 8) SUBJECT TO 2] MATCH( 1, 2) + MATCH( 1, 3) + MATCH( 1, 4) + MATCH( 1, 5) + MATCH( 1, 6) + MATCH( 1, 7) + MATCH( 1, 8) = 1 3] MATCH( 1, 2) + MATCH( 2, 3) + MATCH( 2, 4) + MATCH( 2, 5) + MATCH( 2, 6) + MATCH( 2, 7) + MATCH( 2, 8) = 1 4] MATCH( 1, 3) + MATCH( 2, 3) + MATCH( 3, 4) + MATCH( 3, 5) + MATCH( 3, 6) + MATCH( 3, 7) + MATCH( 3, 8) = 1 5] MATCH( 1, 4) + MATCH( 2, 4) + MATCH( 3, 4) + MATCH( 4, 5) + MATCH( 4, 6) + MATCH( 4, 7) + MATCH( 4, 8) = 1 6] MATCH( 1, 5) + MATCH( 2, 5) + MATCH( 3, 5) + MATCH( 4, 5) + MATCH( 5, 6) + MATCH( 5, 7) + MATCH( 5, 8) = 1 7] MATCH( 1, 6) + MATCH( 2, 6) + MATCH( 3, 6) + MATCH( 4, 6) + MATCH( 5, 6) + MATCH( 6, 7) + MATCH( 6, 8) = 1 8] MATCH( 1, 7) + MATCH( 2, 7) + MATCH( 3, 7) + MATCH( 4, 7) + MATCH( 5, 7) + MATCH( 6, 7) + MATCH( 7, 8) = 1 9] MATCH( 1, 8) + MATCH( 2, 8) + MATCH( 3, 8) + MATCH( 4, 8) + MATCH( 5, 8) + MATCH( 6, 8) + MATCH( 7, 8) = 1 END INTE MATCH( 1, 2) INTE MATCH( 1, 3) INTE MATCH( 1, 4) INTE MATCH( 1, 5) INTE MATCH( 1, 6) INTE MATCH( 1, 7) INTE MATCH( 1, 8) INTE MATCH( 2, 3) INTE MATCH( 2, 4) INTE MATCH( 2, 5) INTE MATCH( 2, 6) INTE MATCH( 2, 7) INTE MATCH( 2, 8) INTE MATCH( 3, 4) INTE MATCH( 3, 5) INTE MATCH( 3, 6) INTE MATCH( 3, 7) INTE MATCH( 3, 8) INTE MATCH( 4, 5) INTE MATCH( 4, 6) INTE MATCH( 4, 7) INTE MATCH( 4, 8) INTE MATCH( 5, 6) INTE MATCH( 5, 7) INTE MATCH( 5, 8) INTE MATCH( 6, 7) INTE MATCH( 6, 8) INTE MATCH( 7, 8) 展开后的模型

  22. 最终解的情况: 前面的解答告诉我们,最优匹配的不相容等级分是6分。 最优解匹配为:(1,6)、(2,7)、(3,8)、(4,5) 对集合函数的认识更加深刻?

  23. 二次分配问题模型 本节中叙述使用Lingo软件编制二次分配问题模型和求解,现以具体的例子作简单的解释 给定飞机间转机的人数和登机门之间的距离,二次分配问题将解出如何安排飞机至登机门使总的转换飞机人的总距离最小? 具体问题:有3架飞机和4个登机口,此模型求解3架飞机和4个登机门,N表示飞机间转换人数,T为登机口间距离矩阵,分别使用集合FLIGHT (飞机)和集合GATE(门)赋值,登机口间的距离矩阵为T,而飞机间转机人数矩阵为N,程序分别使用GXG(.,.)和FXF(,.,)来赋值。

  24. 集合的构造 如何去构造一个集合(SETS)? • 从飞机和登机门两个方面进行构造原始集合 • 集合长度分别为3、4项 • 构造飞机和登机门的派生集合用于表示所有转机方案 • 构造登机口间距离派生集合(矩阵) • 构造飞机间转机人数派生集合(矩阵)

  25. 集合的构造 SETS: FLIGHT/1..3/; !一共三架赋飞机; GATE/1..4/; !一共四个登机口; FXG(FLIGHT,GATE):X; !飞机-登机口分配矩阵; GXG(GATE,GATE):T; !登机口之间的距离; FXF(FLIGHT,FLIGHT):N; !飞机之间的换乘; ENDSETS !数据输入部分; DATA: N = 0, 30, 5, !飞机之间的转乘人数; 20, 0, 0, 30, 40, 0; T = 0, 5, 10, 14, !登机口之间的距离; 5, 0, 5, 10, 10, 4, 0, 6, 15,10, 5, 0; ENDDATA

  26. 模型的构造 如何去构造一个模型? • 目标函数--总距离最小 • 约束条件--需求约束 • 约束条件--供给约束

  27. 两个飞机之间转乘,必须通过两个不同的登机口两个飞机之间转乘,必须通过两个不同的登机口 SETS: TGTG(FLIGHT,GATE,FLIGHT,GATE)| &1#LT#&3#AND#((N(&1,&3)#NE#0)#AND# (T(&2,&4)#NE#0)#OR#(N(&3,&1)#NE#0)#AND#(T(&4,&2)#NE#0)):Y; ENDSETS

  28. 任一架飞机B必须分配一个登机口 @FOR(FLIGHT(B): @SUM(GATE(J):X(B,J))=1); • 任一登机口J至多接收一架飞机 @FOR(GATE(J): @SUM(FLIGHT(B):X(B,J))<=1);

  29. 如果B飞机在J登机口,C飞机在K登机口,强制Y(B,J,C,K)=1;(否则不是0-1变量)如果B飞机在J登机口,C飞机在K登机口,强制Y(B,J,C,K)=1;(否则不是0-1变量) 假定T和N矩阵都是非负的; @FOR(TGTG(B,J,C,K): Y(B,J,C,K)>=X(B,J)+X(C,K)-1);

  30. 目标是使总的换乘距离最小 MIN=@SUM(TGTG(B,J,C,K): Y(B,J,C,K)*(N(B,C)*T(J,K)+N(C,B)*T(K,J))); • 让X为0-1变量(Y变量自动满足) @FOR(FXG:@BIN(X));

  31. 分配问题的应用

  32. 用WinQSB软件求解指派问题 在选择Network Modeling后,在下图中选择Assignment Problem

  33. 用WinQSB软件求解指派问题 某商业集团计划在市内四个点投资四个专业超市,考虑的商品有电器、服装、食品、家具及计算机5个类别。通过评估,家具超市不能放在第3个点,计算机超市不能放在第4个点,不同类别的商品投资到各点的年利润(万元)预测值参见附表。该商业集团如何做出投资 决策使年利润最大。

More Related