一款优秀的求解最优化模型的数学工具——Lingo

        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后便能得到他的最优解。
   
注(关于这个软件及其更详细的求解最优化模型的方法可以参考同济教育出版社的《最优化模型及实验》)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值