Lingo使用教程
(即内点法);2:原始单纯形法;3: 对偶单纯形法) 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 REOPTX MAXCTP RCTLIM GUBCTS FLWCTS LFTCTS PLOCTS DISCTS KNPCTS LATCTS GOMCTS COFCTS GCDCTS SCLRLM SCLRDL PRNCLR MULTIS USEQPR GLOBAL LNRISE LNBIGM LNDLTA BASCTS MAXCTR HUMNTM DECOMP GLBOPT GLBDLT GLBVBD GLBUBD 0 200 .75 1 1 1 1 1 1 1 1 1 1 1000 0 1 0 0 0 0 .1e-5 0 2 0 0 .1e-5 .1e-6 .1e+11 2 IP冷启动时的LP算法(选项同上) 分枝中根节点增加割平面时,最大迭代检查的次数 割(平面)的个数相对于原问题的约束个数的上限(比值) 是否使用广义上界(GUB)割 (1:是, 0:否) 是否使用流(Flow)割 (1:是, 0:否) 是否使用Lift割 (1:是, 0:否) 是否使用选址问题的割 (1:是, 0:否) 是否使用分解割 (1:是, 0:否) 是否使用背包覆盖割 (1:是, 0:否) 是否使用格(Lattice)割 (1:是, 0:否) 是否使用Gomory割(1:是, 0:否) 是否使用系数归约割 (1:是, 0:否) 是否使用最大公因子割 (1:是, 0:否) 语法配色的最大行数 (仅Windows系统使用) 语法配色的延时(秒) (仅Windows系统使用) 括号匹配配色 (1:是, 0:否, 仅Windows系统使用) NLP多点求解的次数 (0:无, 可设为任意非负整数) 是否识别二次规划 (1:是, 0:否) 是否对NLP采用全局最优求解程序 (1:是, 0:否) 线性化级别 (0:LINGO自动决定, 1:无, 2:低, 3:高) 线性化的Delta误差系数 是否使用基本(Basis) 割 (1:是, 0:否) 分枝中非根节点增加割平面时,最大迭代检查的次数 分枝中每个节点使用启发式搜索的最小时间(秒) 是否使用矩阵分解技术 (1:是, 0:否) 全局最优求解程序的最优性误差限 全局最优求解程序在凸化过程中增加的约束的误差限 全局最优求解程序中变量的上界 全局最优求解程序中变量的上界的应用范围(0: 所有变量都不使用上界; 1: 所有变量都使用上界; 2:部分使用) 全局最优求解程序中第1次对变量分枝时使用的分枝策略(0:绝对宽度;1:局部宽度;2:全局宽度;3:全局距离;4:绝对冲突;5:相对冲突) 全局最优求解程序选择活跃分枝节点的方法(0:深度优先;1:具有最坏界的分枝优先) 全局最优求解程序中模型重整的级别:(0:不进行重整;1:低;2:中;3:高) 100,000 线性化的大M系数 84 85 86 GLBBRN GLBBXS GLBREF 5 1 3
第41页(共59页)
Lingo使用教程
§7 综合举例
例7.1 求解非线性方程组
22??x?y?2 ?22??2x?x?y?y?4其LINGO代码如下:
model:
x^2+y^2=2;
2*x^2+x+y^2+y=4; @free(x);@free(y); end
计算的部分结果为
Feasible solution found.
Extended solver steps: 1 Total solver iterations: 10 Variable Value X 1.221330 Y -0.7129766
例7.2 装配线平衡模型 一条装配线含有一系列的工作站,在最终产品的加工过程中每个工作站执行一种或几种特定的任务。装配线周期是指所有工作站完成分配给它们各自的任务所化费时间中的最大值。平衡装配线的目标是为每个工作站分配加工任务,尽可能使每个工作站执行相同数量的任务,其最终标准是装配线周期最短。不适当的平衡装配线将会产生瓶颈——有较少任务的工作站将被迫等待其前面分配了较多任务的工作站。
问题会因为众多任务间存在优先关系而变得更复杂,任务的分配必须服从这种优先关系。
这个模型的目标是最小化装配线周期。有2类约束: ① 要保证每件任务只能也必须分配至一个工作站来加工; ② 要保证满足任务间的所有优先关系。
例 有11件任务(A—K)分配到4个工作站(1—4),任务的优先次序如下图。每件任务所花费的时间如下表。
任务 A 时间 45 B 11 C 9 D 50 E 15 (F) (A)
(B) (C) (G) (J) (H) (D) (E) (I)
MODEL:
!装配线平衡模型;
第42页(共59页)
F 12 G 12 H 12 I 12 J 8 K 9 (K)
Lingo使用教程
SETS:
!任务集合,有一个完成时间属性T; TASK/ A B C D E F G H I J K/: T;
!任务之间的优先关系集合(A 必须完成才能开始B,等等); PRED( TASK, TASK)/ A,B B,C C,F C,G F,J G,J J,K D,E E,H E,I H,J I,J /; ! 工作站集合;
STATION/1..4/;
TXS( TASK, STATION): X;
! X是派生集合TXS的一个属性。如果X(I,K)=1,则表示第I个任务 指派给第K个工作站完成; ENDSETS DATA:
!任务A B C D E F G H I J K的完成时间估计如下; T = 45 11 9 50 15 12 12 12 12 8 9; ENDDATA
! 当任务超过15个时,模型的求解将变得很慢; !每一个作业必须指派到一个工作站,即满足约束①; @FOR( TASK( I): @SUM( STATION( K): X( I, K)) = 1);
!对于每一个存在优先关系的作业对来说,前者对应的工作站I必须小于后 者对应的工作站J,即满足约束②;
@FOR( PRED( I, J): @SUM( STATION( K): K * X( J, K) - K * X( I, K)) >= 0); !对于每一个工作站来说,其花费时间必须不大于装配线周期; @FOR( STATION( K):
@SUM( TXS( I, K): T( I) * X( I, K)) <= CYCTIME); !目标函数是最小化转配线周期; MIN = CYCTIME; !指定X(I,J) 为0/1变量; @FOR( TXS: @BIN( X)); END
计算的部分结果为
Global optimal solution found at iteration: 1255
Objective value: 50.00000 Variable Value Reduced Cost CYCTIME 50.00000 0.000000 X( A, 1) 1.000000 0.000000 X( A, 2) 0.000000 0.000000 X( A, 3) 0.000000 45.00000 X( A, 4) 0.000000 0.000000 X( B, 1) 0.000000 0.000000 X( B, 2) 0.000000 0.000000 X( B, 3) 1.000000 11.00000 X( B, 4) 0.000000 0.000000 X( C, 1) 0.000000 0.000000
第43页(共59页)
Lingo使用教程
X( C, 2) 0.000000 0.000000 X( C, 3) 0.000000 9.000000 X( C, 4) 1.000000 0.000000 X( D, 1) 0.000000 0.000000 X( D, 2) 1.000000 0.000000 X( D, 3) 0.000000 50.00000 X( D, 4) 0.000000 0.000000 X( E, 1) 0.000000 0.000000 X( E, 2) 0.000000 0.000000 X( E, 3) 1.000000 15.00000 X( E, 4) 0.000000 0.000000 X( F, 1) 0.000000 0.000000 X( F, 2) 0.000000 0.000000 X( F, 3) 0.000000 12.00000 X( F, 4) 1.000000 0.000000 X( G, 1) 0.000000 0.000000 X( G, 2) 0.000000 0.000000 X( G, 3) 0.000000 12.00000 X( G, 4) 1.000000 0.000000 X( H, 1) 0.000000 0.000000 X( H, 2) 0.000000 0.000000 X( H, 3) 1.000000 12.00000 X( H, 4) 0.000000 0.000000 X( I, 1) 0.000000 0.000000 X( I, 2) 0.000000 0.000000 X( I, 3) 1.000000 12.00000 X( I, 4) 0.000000 0.000000 X( J, 1) 0.000000 0.000000 X( J, 2) 0.000000 0.000000 X( J, 3) 0.000000 8.000000 X( J, 4) 1.000000 0.000000 X( K, 1) 0.000000 0.000000 X( K, 2) 0.000000 0.000000 X( K, 3) 0.000000 9.000000 X( K, 4) 1.000000 0.000000
例7.3 旅行售货员问题(又称货郎担问题,Traveling Salesman Problem)
有一个推销员,从城市1出发,要遍访城市2,3,…,n各一次,最后返回城市1。已知从城市i到j的旅费为cij,问他应按怎样的次序访问这些城市,使得总旅费最少?
可以用多种方法把TSP表示成整数规划模型。这里介绍的一种建立模型的方法,是把该问题的每个解(不一定是最优的)看作是一次―巡回‖。
在下述意义下,引入一些0-1整数变量: ?1巡回路线是从i到j,且i?j xij??0其他情况?
第44页(共59页)
Lingo使用教程
nn其目标是使
??cxi?1j?1ijij为最小。
这里有两个明显的必须满足的条件:
访问城市i后必须要有一个即将访问的确切城市;访问城市j前必须要有一个刚刚访问过的确切城市。用下面的两组约束分别实现上面的两个条件。
n?xj?nij?1,i?1,2,?,n ?1,j?1,2,?,n
?xi?1ij到此我们得到了一个模型,它是一个指派问题的整数规划模型。但以上两个条件对于TSP来说并不充分,仅仅是必要条件。例如:
3 6 1 2
4 5
以上两个条件都满足,但它显然不是TSP的解,它存在两个子巡回。
这里,我们将叙述一种在原模型上附加充分的约束条件以避免产生子巡回的方法。把额外变量ui(i?2,3,?,n)附加到问题中。可把这些变量看作是连续的(最然这些变量在最优解中取普通的整数值)。现在附加下面形式的约束条件
ui?uj?nxij?n?1,2?i?j?n。
为了证明该约束条件有预期的效果,必须证明:(1)任何含子巡回的路线都不满足该约束条件;(2)全部巡回都满足该约束条件。
首先证明(1),用反证法。假设还存在子巡回,也就是说至少有两个子巡回。那么至少存在一个子巡回中不含城市1。把该子巡回记为i1i2?iki1,则必有
ui1?ui2?n?n?1ui2?ui3?n?n?1???????uik?ui1?n?n?1
把这k个式子相加,有 n?n?1,矛盾!
故假设不正确,结论(1)得证。
下面证明(2),采用构造法。对于任意的总巡回1i1i2?in?11,可取 ui?访问城市i的顺序数,取值范围为?0,1,?,n?2?。
因此,ui?uj?n?2,2?i?j?n。下面来证明总巡回满足该约束条件。 (ⅰ)总巡回上的边
第45页(共59页)