Lingo是一款优秀的求解最优化模型的数学工具。无论是线性规划还是动态规划在其中都能很容易的得到求解。软件本生能在www.lindo.org上下载得到。
用Lingo来解题需要一定的输入格式,以便Lingo能够来处理。每个模型都定义在以“MODEL:”开始以“END”结束之间。集合定义在“SETS”和“ENDSETS”之间,数据定义在“DATA”和“ENDDATA”之间。然后便是模型的约束条件,可以写N组方程。然后用SOLVE来迭代解题。在Lingo中用!作为注释的开始每个语句结束用分号,函数以@开始,如@SUM。Lingo是大小写不敏感的。Lingo附带的EXAMPLES和HELPS是很好的学习资料。以下就举个最简单的例子。
MODEL:
! 生产线负载平衡模型;
! 这个模型涉及到将任务加载到工作站而要避免产生瓶颈,希望实现负载平衡,而使工作时间最短;
SETS:
! 定义任务集合;
TASK/ A B C D E F G H I J K/: T;
! 定义先后配对(如. A 必须在 B之前做, B必须在 C之前做, 等等.);
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;
! 当任务I交给工作站K时 用X(I,K) = 1标注;
ENDSETS
DATA:
! 为任务集合的每个元素赋值,该值为任务的时间花消;
T = 45 11 9 50 15 12 12 12 12 8 9;
ENDDATA
! 以下计算式约束了每个工作站一次只能接受一个任务;
@FOR( TASK( I): @SUM( STATION( K): X( I, K)) = 1);
! 以下表达式约束了任务的执行顺序必须按照PRED集合中的定义;
@FOR( PRED( I, J):@SUM( STATION( K):K * X( J, K) - K * X( I, K)) >= 0);
! 定义变量CYCTIME使得每个工作站的工作时间小于这个数值
@FOR( STATION( K):@SUM( TXS( I, K): T( I) * X( I, K)) <= CYCTIME);
! 约束CYCTIME为最小,solve时会以迭代的方法求得满足这个要求得最优解;
MIN = CYCTIME;
! 最后一个等式约束了X值必须是整数。
@FOR( TXS: @BIN( X));
END
以上便是这个模型的表达,将其输入Lingo然后Solve后便能得到他的最优解。
注(关于这个软件及其更详细的求解最优化模型的方法可以参考同济教育出版社的《最优化模型及实验》)
一款优秀的求解最优化模型的数学工具——Lingo
最新推荐文章于 2024-05-29 10:24:20 发布