数学建模社区-数学中国

标题: 与lingo相关的运筹学 精品课程 [打印本页]

作者: ljwabc115    时间: 2009-7-20 21:15
标题: 与lingo相关的运筹学 精品课程
本帖最后由 ljwabc115 于 2009-7-21 14:50 编辑 . Z7 z) p( H/ |/ o& c) }

5 w( o0 g. T! E5 H: ^( e温州大学 运筹学 精品课程

运筹学 01.rar

76.96 KB, 下载次数: 19, 下载积分: 体力 -2 点

02.rar

1.33 MB, 下载次数: 24, 下载积分: 体力 -2 点

03.rar

384.82 KB, 下载次数: 30, 下载积分: 体力 -2 点

04.rar

541.17 KB, 下载次数: 29, 下载积分: 体力 -2 点

05.rar

82.96 KB, 下载次数: 24, 下载积分: 体力 -2 点

06.rar

661.23 KB, 下载次数: 34, 下载积分: 体力 -2 点

07.rar

238.94 KB, 下载次数: 16, 下载积分: 体力 -2 点

08.rar

65.7 KB, 下载次数: 14, 下载积分: 体力 -2 点

09.rar

430.73 KB, 下载次数: 15, 下载积分: 体力 -2 点

精品课程 求解网络问题的WinQSB软件.rar

360 KB, 下载次数: 22, 下载积分: 体力 -2 点

Winqsb运筹学软件.rar

3.72 MB, 下载次数: 15, 下载积分: 体力 -2 点


作者: ljwabc115    时间: 2009-7-21 16:21
单纯形法  单纯形法 " ?' n4 W  b) g
  simplex method
1 B8 \  p  B6 S1 E4 i  求解线性规划问题的通用方法。单纯形是美国数学家G.B.丹齐克于1947年首先提出来的。它的理论根据是:线性规划问题的可行域是 n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。顶点所对应的可行解称为基本可行解。单纯形法的基本思想是:先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解也可用此法判别。
( g" q: [/ R& E* `& H. h, `  根据单纯形法的原理,在线性规划问题中,决策变量(控制变量)x1,x2,…x n的值称为一个解,满足所有的约束条件的解称为可行解。使目标函数达到最大值(或最小值)的可行解称为最优解。这样,一个最优解能在整个由约束条件所确定的可行区域内使目标函数达到最大值(或最小值)。求解线性规划问题的目的就是要找出最优解。 # T3 p6 A( K- c( `6 x9 Z  i
  最优解可能出现下列情况之一:①存在着一个最优解;②存在着无穷多个最优解;③不存在最优解,这只在两种情况下发生,即没有可行解或各项约束条件不阻止目标函数的值无限增大(或向负的方向无限增大)。
4 W: W4 ]5 P0 c3 B/ Q$ M  单纯形法的一般解题步骤可归纳如下:①把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作为初始基本可行解。②若基本可行解不存在,即约束条件有矛盾,则问题无解。③若基本可行解存在,从初始基本可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解。④按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。⑤若迭代过程中发现问题的目标函数值无界,则终止迭代。 / J( s) i# D& J7 ^% n
  用单纯形法求解线性规划问题所需的迭代次数主要取决于约束条件的个数。现在一般的线性规划问题都是应用单纯形法标准软件在计算机上求解,对于具有106个决策变量和104个约束条件的线性规划问题已能在计算机上解得。
  [3 m7 T2 k8 [# R( F3 ~: q  改进单纯形法 9 X6 e0 R1 K' V  z
  原单纯形法不是很经济的算法。1953年美国数学家G.B.丹齐克为了改进单纯形法每次迭代中积累起来的进位误差,提出改进单纯形法。其基本步骤和单纯形法大致相同,主要区别是在逐次迭代中不再以高斯消去法为基础,而是由旧基阵的逆去直接计算新基阵的逆,再由此确定检验数。这样做可以减少迭代中的累积误差,提高计算精度,同时也减少了在计算机上的存储量。
- Q4 a' P0 i1 p6 Z/ K  对偶单纯形法 3 h8 f. d- v4 Q% v& b
  1954年美国数学家C.莱姆基提出对偶单纯形法。单纯形法是从原始问题的一个可行解通过迭代转到另一个可行解,直到检验数满足最优性条件为止。对偶单纯形法则是从满足对偶可行性条件出发通过迭代逐步搜索原始问题的最优解。在迭代过程中始终保持基解的对偶可行性,而使不可行性逐步消失。设原始问题为min{cx|Ax=b,x≥0},则其对偶问题为 max{yb|yA≤c}。当原始问题的一个基解满足最优性条件时,其检验数cBB-1A-c≤0。即知y=cBB-1(称为单纯形算子)为对偶问题的可行解。所谓满足对偶可行性,即指其检验数满足最优性条件。因此在保持对偶可行性的前提下,一当基解成为可行解时,便也就是最优解。 % F: F/ t' z6 M2 |4 M
  数学优化中,由George Dantzig发明的单纯形法是线性规划问题的数值求解的流行技术。有一个算法与此无关,但名称类似,它是Nelder-Mead法或称下山单纯形法,由Nelder和Mead发现(1965年),这是用于优化多维无约束问题的一种数值方法,属于更一般的搜索算法的类别。
. d( A, a0 W9 g  R; B" F  这二者都使用了单纯形的概念,它是N维中的N + 1个顶点的凸包,是一个多胞体:直线上的一个线段,平面上的一个三角形,三维空间中的一个四面体,等等。
作者: ljwabc115    时间: 2009-7-21 22:12
分枝定界(branch and bound)是另一种系统地搜索解空间的方法,它与回溯法的主要区别在于对E-节点的扩充方式。每个活节点有且仅有一次机会变成E-节点。当一个节点变为E-节点时,则生成从该节点移动一步即可到达的所有新节点。在生成的节点中,抛弃那些不可能导出(最优)可行解的节点,其余节点加入活节点表,然后从表中选择一个节点作为下一个E-节点。从活节点表中取出所选择的节点并进行扩充,直到找到解或活动表为空,扩充过程才结束。
  N) t1 T( H) U8 z# {  有两种常用的方法可用来选择下一个E-节点(虽然也可能存在其他的方法):& G5 a2 v. k6 U" C# f7 ?
  1) 先进先出(F I F O) 即从活节点表中取出节点的顺序与加入节点的顺序相同,因此活节点表的性质与队列相同。
7 U' g6 s) f6 O. D7 P  2) 最小耗费或最大收益法在这种模式中,每个节点都有一个对应的耗费或收益。如果查找一个具有最小耗费的解,则活节点表可用最小堆来建立,下一个E-节点就是具有最小耗费的活节点;如果希望搜索一个具有最大收益的解,则可用最大堆来构造活节点表,下一个E-节点是具有最大收益的活节点。
( N/ H( ~8 K# f. T  例5-1 [迷宫老鼠] 考察图16-3a 给出的迷宫老鼠例子和图1 6 - 1的解空间结构。使用F I F O分枝定界,初始时取(1,1)作为E-节点且活动队列为空。迷宫的位置( 1 , 1)被置为1,以免再次返回到这个位置。(1,1)被扩充,它的相邻节点( 1,2)和(2,1)加入到队列中(即活节点表)。为避免再次回到这两个位置,将位置( 1,2)和(2,1)置为1。此时迷宫如图1 7 - 1 a所示,E-节点(1,1)被删除。, X5 R, L' }: Y4 p  ~+ @1 B3 p
  节点(1,2)从队列中移出并被扩充。检查它的三个相邻节点(见图1 6 - 1的解空间),只有(1,3)是可行的移动(剩余的两个节点是障碍节点),将其加入队列,并把相应的迷宫位置置为1,所得到的迷宫状态如图17-1b 所示。节点(1,2)被删除,而下一个E-节点(2,1)将会被取出,当此节点被展开时,节点(3,1)被加入队列中,节点(3,1)被置为1,节点(2,1)被删除,所得到的迷宫如图17-1c 所示。此时队列中包含(1,3)和(3,1)两个节点。随后节点(1,3)变成下一个E-节点,由于此节点不能到达任何新的节点,所以此节点即被删除,节点(3,1)成为新的E-节点,将队列清空。节点( 3,1)展开,(3,2)被加入队列中,而(3,1)被删除。(3,2)变为新的E-节点,展开此节点后,到达节点(3,3),即迷宫的出口。
' Y& ~! g1 E- p* o% D1 k( Y  使用F I F O搜索,总能找出从迷宫入口到出口的最短路径。需要注意的是:利用回溯法找到的路径却不一定是最短路径。有趣的是,程序6 - 11已经给出了利用F I F O分枝定界搜索从迷宫的(1,1)位置到(n,n) 位置的最短路径的代码。# O; W! S, Z3 t8 g: i
  例5-2 [0/1背包问题] 下面比较分别利用F I F O分枝定界和最大收益分枝定界方法来解决如下背包问题:n=3, w=[20,15,15], p=[40,25,25], c= 3 0。F I F O分枝定界利用一个队列来记录活节点,节点将按照F I F O顺序从队列中取出;而最大收益分枝定界使用一个最大堆,其中的E-节点按照每个活节点收益值的降序,或是按照活节点任意子树的叶节点所能获得的收益估计值的降序从队列中取出。本例所使用的背包问题与例1 6 . 2相同,并且有相同的解空间树。" p  `7 H! r- P
  使用F I F O分枝定界法搜索,初始时以根节点A作为E-节点,此时活节点队列为空。当节点8 U6 q) w' i9 g
  A展开时,生成了节点B和C,由于这两个节点都是可行的,因此都被加入活节点队列中,节点A被删除。下一个E-节点是B,展开它并产生了节点D和E,D是不可行的,被删除,而E被加入队列中。下一步节点C成为E-节点,它展开后生成节点F和G,两者都是可行节点,加入队列中。下一个E-节点E生成节点J和K,J不可行而被删除,K是一个可行的叶节点,并产生一个到目前为止可行的解,它的收益值为4 0。
- u4 y" \8 p% g1 S% s  下一个E-节点是F,它产生两个孩子L、M,L代表一个可行的解且其收益值为5 0,M代表另一个收益值为1 5的可行解。G是最后一个E-节点,它的孩子N和O都是可行的。由于活节点队列变为空,因此搜索过程终止,最佳解的收益值为5 0。$ A% C  T% q. r# s
  可以看到,工作在解空间树上的F I F O分枝定界方法非常象从根节点出发的宽度优先搜索。它们的主要区别是在F I F O分枝定界中不可行的节点不会被搜索。最大收益分枝定界算法以解空间树中的节点A作为初始节点。展开初始节点得到节点B和C,两者都是可行的并被插入堆中,节点B获得的收益值是4 0(设x1 = 1),而节点C得到的收益值为0。A被删除,B成为下一个E-节点,因为它的收益值比C的大。当展开B时得到了节点D和E,D是不可行的而被删除,E加入堆中。由于E具有收益值4 0,而C为0,因为E成为下一个E-节点。: ^0 ^& `6 b5 n* [9 V8 l- v* N
  展开E时生成节点J和K,J不可行而被删除,K是一个可行的解,因此K为作为目前能找到的最优解而记录下来,然后K被删除。由于只剩下一个活节点C在堆中,因此C作为E-节点被展开,生成F、G两个节点插入堆中。F的收益值为2 5,因此成为下一个E-节点,展开后得到节点L和M,但L、M都被删除,因为它们是叶节点,同时L所对应的解被作为当前最优解记录下来。最终,G成为E-节点,生成的节点为N和O,两者都是叶节点而被删除,两者所对应的解都不比当前的最优解更好,因此最优解保持不变。此时堆变为空,没有下一个E-节点产生,搜索过程终止。终止于J的搜索即为最优解。/ [0 p3 z) X: U7 |$ f5 S3 G* x# j' b
  犹如在回溯方法中一样,可利用一个定界函数来加速最优解的搜索过程。定界函数为最大收益设置了一个上限,通过展开一个特殊的节点可能获得这个最大收益。如果一个节点的定界函数值不大于目前最优解的收益值,则此节点会被删除而不作展开,更进一步,在最大收益分枝定界方法中,可以使节点按照它们收益的定界函数值的非升序从堆中取出,而不是按照节点的实际收益值来取出。这种策略从可能到达一个好的叶节点的活节点出发,而不是从目前具有较大收益值的节点出发。" K' F* Q8 S7 d- R" v* r0 `3 Z
  例5-3 [旅行商问题] 对于图1 6 - 4的四城市旅行商问题,其对应的解空间为图1 6 - 5所示的排列树。F I F O分枝定界使用节点B作为初始的E-节点,活节点队列初始为空。当B展开时,生成节点C、D和E。由于从顶点1到顶点2,3,4都有边相连,所以C、D、E三个节点都是可行的并加入队列中。当前的E-节点B被删除,新的E-节点是队列中的第一个节点,即节点C。因为在图1 6 - 4中存在从顶点2到顶点3和4的边,因此展开C,生成节点F和G,两者都被加入队列。下一步,D成为E-节点,接着又是E,到目前为止活节点队列中包含节点F到K。下一个E-节点是F,展开它得到了叶节点L。至此找到了一个旅行路径,它的开销是5 9。展开下一个E-节点G,得到叶节点M,它对应于一个开销为6 6的旅行路径。接着H成为E-节点,从而找到叶节点N,对应开销为2 5的旅行路径。下一个E-节点是I,它对应的部分旅行1 - 3 - 4的开销已经为2 6,超过了目前最优的旅行路径,因此, I不会被展开。最后,节点J,K成为E-节点并被展开。经过这些展开过程,队列变为空,算法结束。找到的最优方案是节点N所对应的旅行路径。! ~& L! R+ `- C
  如果不使用F I F O方法,还可以使用最小耗费方法来搜索解空间树,即用一个最小堆来存储活节点。这种方法同样从节点B开始搜索,并使用一个空的活节点列表。当节点B展开时,生成节点C、D和E并将它们加入最小堆中。在最小堆的节点中, E具有最小耗费(因为1 - 4的局部旅行的耗费是4),因此成为E-节点。展开E生成节点J和K并将它们加入最小堆,这两个节点的耗费分别为1 4和2 4。此时,在所有最小堆的节点中,D具有最小耗费,因而成为E-节点,并生成节点H和I。至此,最小堆中包含节点C、H、I、J和K,H具有最小耗费,因此H成为下一个E-节点。展开节点E,得到一个完整的旅行路径1 - 3 - 2 - 4 - 1,它的开销是2 5。节点J是下一个E-节点,展开它得到节点P,它对应于一个耗费为2 5的旅行路径。节点K和I是下两个E-节点。由于I的开销超过了当前最优的旅行路径,因此搜索结束,而剩下的所有活节点都不能使我们找到更优的解。! t4 a6 E# L3 L! }
  对于例5 - 2的背包问题,可以使用一个定界函数来减少生成和展开的节点数量。这种函数将确定旅行的最小耗费的下限,这个下限可通过展开某个特定的节点而得到。如果一个节点的定界函数值不能比当前的最优旅行更小,则它将被删除而不被展开。另外,对于最小耗费分枝定界,节点按照它在最小堆中的非降序取出。
9 g% h( s  t; }( y: X* V  在以上几个例子中,可以利用定界函数来降低所产生的树型解空间的节点数目。当设计定界函数时,必须记住主要目的是利用最少的时间,在内存允许的范围内去解决问题。而通过产生具有最少节点的树来解决问题并不是根本的目标。因此,我们需要的是一个能够有效地减少计算时间并因此而使产生的节点数目也减少的定界函数。: f% T6 S: L( _* L
  回溯法比分枝定界在占用内存方面具有优势。回溯法占用的内存是O(解空间的最大路径长度),而分枝定界所占用的内存为O(解空间大小)。对于一个子集空间,回溯法需要(n)的内存空间,而分枝定界则需要O ( 2n ) 的空间。对于排列空间,回溯需要(n) 的内存空间,分枝定界需要O (n!) 的空间。虽然最大收益(或最小耗费)分枝定界在直觉上要好于回溯法,并且在许多情况下可能会比回溯法检查更少的节点,但在实际应用中,它可能会在回溯法超出允许的时间限制之前就超出了内存的限制。
作者: ljwabc115    时间: 2009-7-21 22:19
这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下:) T: e$ S. }2 s: k5 f" f

7 q+ ^- ?5 m. C! e/ k$ F    显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。% \% v5 M/ @# w$ ?) Z1 Y
model:. x4 g8 R+ U" M% T6 W6 j& N7 X3 L
  !7个工人,7个工作的分配问题;5 u% A% R* Y! ?6 A5 ~
sets:
3 @$ w1 z3 D  w4 j  workers/w1..w7/;
- p% q4 C. x* }4 p2 t  jobs/j1..j7/;
3 A  K, k6 B9 Y; ?  links(workers,jobs): cost,volume;
/ r0 T- J' I+ }9 i1 Lendsets$ @+ H! n! f1 R! H+ ^/ {3 t6 A
  !目标函数;5 M! b" w( e" v6 I* l, E1 U
  min=@sum(links: cost*volume);
7 ?9 [# i2 L  p  d% V2 Q  !每个工人只能有一份工作;
6 M* Z# d2 U1 m) l" u  @for(workers(I):7 Z! |3 G/ @% G' b
    @sum(jobs(J): volume(I,J))=1;2 j& L. S; @: n* s. y$ K. R& N
  );
+ Y2 J; f) ~" r6 I  !每份工作只能有一个工人;
2 }  J0 i$ Q1 N0 S  @for(jobs(J):7 L+ m8 u, x) m, g$ L, T4 Y, o
    @sum(workers(I): volume(I,J))=1;2 t6 t' k/ v7 L' p9 x
  );1 G/ E% r& X6 U6 V
data:
; j, w3 g# H* Y3 G' ~3 W  cost= 6  2  6  7  4  2  5
5 b- g% s  o4 o4 e+ d6 l        4  9  5  3  8  5  81 d4 o8 U$ B5 Z1 U5 g
        5  2  1  9  7  4  3
$ @- ]1 [& h$ Y& k: V        7  6  7  3  9  2  78 C$ ^5 X" o2 K0 D
        2  3  9  5  7  2  60 J, H! @5 ?5 f) ~
        5  5  2  2  8  11 4
" k' w- W& A# o' x        9  2  3  12 4  5  10;
4 p, v" `4 \8 N4 v& _8 h+ Eenddata- P" g/ K6 h4 j6 n9 G5 A
end
作者: pmm    时间: 2009-7-28 16:59
好东西,谢谢共享!!!
作者: 绿豆沙13    时间: 2009-7-29 17:03
顶,顶,顶,顶
作者: stephinia.pan    时间: 2009-7-30 22:24
可以压缩成一个包啊,这么多,黑死了
作者: qlau2007    时间: 2009-8-12 13:44
好东西,O(∩_∩)O~
作者: cuso4512    时间: 2009-8-15 14:30
1# ljwabc115 5 M# D6 G$ n7 i6 b7 U- x! L$ P0 \( l( A3 U

; O$ I1 \! X5 [9 T8 v  v7 T( @: ]
  t2 l4 g/ _" C7 U3 L duo xie lou zhu
作者: cuso4512    时间: 2009-8-15 14:30
多谢楼主[img][/img]
作者: cuso4512    时间: 2009-8-15 14:31
谢谢楼主谢谢楼主
作者: cuso4512    时间: 2009-8-15 14:32
谢谢楼主谢谢楼主谢谢楼主谢谢谢谢楼主楼主
作者: cuso4512    时间: 2009-8-15 14:33
谢谢楼主谢谢楼主谢谢楼主谢谢谢谢楼主谢谢谢谢谢楼主谢楼主谢楼主谢楼主谢谢楼主谢楼主谢楼主
作者: csuyjj    时间: 2009-8-15 20:28
有时间再来啊下载吧
作者: plan    时间: 2009-10-9 17:36
打包多好呀 还浪费时间
作者: qinjian    时间: 2009-10-29 17:41
先顶一下,改天下载学习
作者: 风云雨哲    时间: 2010-4-12 23:49
打包多好呀 还浪费时间打包多好呀 还浪费时间
作者: 时光如风    时间: 2013-8-22 19:40
卧槽,可以说好黑么?卧槽,可以说好黑么?卧槽,可以说好黑么?卧槽,可以说好黑么?




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5