lingo基础入门Day 5


文章目录
  • lingo基础入门Day 5

    • lingo的原始集合的定义

      • 集合的命名

      • 集合的元素列表

      • 集合的属性列表

      • 数据段中定义集合元素

    • 给常量赋值的三种形式

      • 相同结合属性共同赋值

    • 集合与集合共同属性共同赋予初值

    • 集合遍历函数

    • 集合遍历函数的简化

    • 总结


lingo的原始集合的定义
集合名[/集合的元素列表/] [集合的属性列表];
集合的命名

标识符的命名规范

  • 起始字符只能说字母或者下划线,后续字符只能是字母、数字或者下划线。

  • 标识符最长为32个字符。

  • 标识符不区分大小写。

集合的元素命名

集合元素的命名也要遵循标识符的命名规范。

集合元素命名有特例:集合元素可以是整数。

集合的元素列表

显式罗列:

将集合的每一个元素都完完整整的写出来的方式。

ITEM/1 2 3 4 5 6/;

隐式罗列:

集合中的元素有一定的递增规律,写成起始元素…终止元素的形式

ITEM/1..6/;

隐式罗列的全部列表形式:

格式实例集合元素1…n1…61 2 3 4 5 6alphM…alphNa…ha b c d e f g hstringM…stringNtruck6…truck11dayM…dayNMON…FRIMON TUE WED THU FRImonthM…monthNOCT…JANOCT NOV DEC JANmonthyearM…monthyearNOCT2001…JAN2002OCT2001 NOV2001 DEC2001 JAN2002

集合的属性列表

集合的属性列表就是下标是该集合类型的向量的列表,属性之间只能用逗号分割开来(而不能用空格分隔)

ITEM/1..60/: WEIGHT, PROFIT,X; PROJECT/A1..A10/:INCOME,RISK; WHAREHOUSE/1..8/:CAPACITY
数据段中定义集合元素

举例1:

!Name: 背包问题模型 !Date: 2022-03-16 !Desc: 10件货物的背包问题 ; MODEL: SETS: ITEM/1 2 3 4 5 6 7 8 9 10/:WEIGHT, PROFIT,X; ENDSETS DATA: WEIGHT = 6 3 4 5 1 2 3 5 4 2 PROFIT = 540  200  180  350  60  150  280  450  320  120; ENDDATA MAX = @SUM(ITEM(I):PROFIT(I)*x(I)); @SUM(ITEM(I)): WEIGHT(I)*X(I))<=30; @FOR(ITEM(I):@BIN(X(I))); END

举例2:

MODEL:

SETS:

ITEM:WEIGHT, PROFIT,X;

ENDSETS

DATA:
ITEM = 1 2 3 4 5 6 7 8 9 10;
WEIGHT = 6 3 4 5 1 2 3 5 4 2;
PROFIT = 540  200  180  350  60  150  280  450  320  120;

ENDDATA

MAX = @SUM(ITEM(I):PROFIT(I)*x(I));

@SUM(ITEM(I)): WEIGHT(I)*X(I))<=30;
@FOR(ITEM(I):@BIN(X(I)));

END
给常量赋值的三种形式

在数据段中给常量赋值,赋值的形式只有三种:

  • 每个向量单独赋予初值

  • 相同的集合的属性(相同结构的向量)共同赋予初值

  • 集合与集合的属性共同赋予初值

相同结合属性共同赋值
SETS:

ITEM:WEIGHT,PROFIT,X;

ENDSETS

DATA:
ITEM = 1 2 3 4 5 6 7 8 9 10;
WEIGHT PROFIT = 
6	540
3	200	
4	180
5	350
1	60
2	150
3	280	
5	450
4	320
2	120
;

ENDDATA
集合与集合共同属性共同赋予初值
SETS: ITEM:WEIGHT,PROFIT,X; ENDSETS DATA: ITEM WEIGHT PROFIT = 1 6 540 2 3 200 3 4 180 4 5 350 5 1 60 6 2 150 7 3 280 8 5 450 9 4 320 10 2 120 ; ENDDATA
集合遍历函数

函数名返回值@FOR(s:e)对集合s中的每一个元素都生成一个约束条件表达式,具体约束由e描述@SUM(s:e)对集合s中的每一个元素,计算表达式e的值,然后返回这些值的和@MAX(s:e)对集合s中的每一个元素,计算表达式e的值,然后返回这些值的最大值@MIN(s:e)对集合s中的每一个元素,计算表达式e的值,然后返回这些值的最小值@PROD(s:e)对集合s中的每一个元素,计算表达式e的值,然后返回这些值的乘积

举例:

@FOR(ITEM(I):@BIN(X(I))); @SUN(ITEM(I): X(I));
集合遍历函数的简化

如果在集合遍历函数中只有一个集合,而且上对该集合的所有元素进行相同的操作,可以省略其中的集合元素变量(或下标变量)。

@FOR(ITEM(I):@BIN(X(I))); @FOR(ITEM: @BIN(X)); @SUM(ITEM(I):WEIGHT(I)*X(I))<=30; @SUM(ITEM: WEIGHT*X)<=30; NUM=@SUM(ITEM(I):X(I)); NUM=@SUM(ITEM: X);
总结

本小节主要讲了lingo定义原始集合及其属性的语法规则,还有在数据段给常量赋值的多种形式、还有集合遍历函数及其简化形式、纯粹的语法问题,虽然简单但仍需要认真掌握。