其他分享
首页 > 其他分享> > Lingo速上手攻略

Lingo速上手攻略

作者:互联网

目录

Lingo速上手攻略

核心思想

lingo引入了集合(set)概念,集合是这一组相关的对象构成的组合,代表模型中的实际事物。集合的事先声明包括集合的名称、集合的要素、集合的属性,形如WH/W1..W6/:AI

多个基本集合可以通过Links(WH,VD):C,X的方式组成一个衍生集合,衍生集合如果没有指定衍生的成员,将会取所有可能的组合

lingo中数据段的定义是通过DATA: ENDDATA来实现一直变量的赋值的。

基本语法

@sum()求和函数,括号里面填写求和的集合名称(表示对这些成员进行)和表达式(表示对该表达式进行),以:做分割。如果参与运算的属性来自同一个集合,则索引符号可以省略。

@for()循环函数,括号填写同上。如果参与运算的属性来自同一个集合,则索引符号可以省略。

实例

首先建立模型,$min Z=\sum\sum c_{ij} x_{ij}$于是有 $$s.t. \begin{cases}\sum x_{ij}< a_i,i=1...6\ \sum_{i =1}^6 x_{ij} = d_{j}\ x_{ij}> 0\end{cases}$$在lingo中求解如下

MODEL:
  SETS:
    WH/W1..W6/:AI;
    VD/V1..V8/:DJ;
    LINKS(WH,VD):C,X;
  ENDSETS
  
 DATA:
    AI = 60,55,51,43,41,52;
    DJ = 35,37,22,32,41,32,43,28;
    C  = 6,2,6,7,4,2,5,9
         4,9,5,3,8,5,8,2
         5,2,1,9,7,4,3,3
         7,6,7,3,9,2,7,1
         2,3,9,5,7,2,6,5
         5,5,2,2,8,1,4,3;
  ENDDATA

  MIN=@SUM(LINKS(I,J):C(I,J)*X(I,J)); !@SUM(LINKS:C*X);
  @FOR(WH(I):@SUM(VD(J):X(I,J))<=AI(I)); 
  @FOR(VD(J):@SUM(WH(I):X(I,J))= DJ(J));
END

标签:VD,sum,WH,ij,速上,攻略,集合,Lingo
来源: https://www.cnblogs.com/cmcshenwei/p/12493587.html