目录
Lingo速上手攻略
核心思想
lingo引入了集合(set)概念,集合是这一组相关的对象构成的组合,代表模型中的实际事物。集合的事先声明包括集合的名称、集合的要素、集合的属性,形如WH/W1..W6/:AI
多个基本集合可以通过Links(WH,VD):C,X
的方式组成一个衍生集合,衍生集合如果没有指定衍生的成员,将会取所有可能的组合
lingo中数据段的定义是通过DATA: ENDDATA
来实现一直变量的赋值的。
基本语法
@sum()
求和函数,括号里面填写求和的集合名称(表示对这些成员进行)和表达式(表示对该表达式进行),以:做分割。如果参与运算的属性来自同一个集合,则索引符号可以省略。
@for()
循环函数,括号填写同上。如果参与运算的属性来自同一个集合,则索引符号可以省略。
实例
- okay,来看一个实例
首先建立模型,$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