lingo基础入门Day 5
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定义原始集合及其属性的语法规则,还有在数据段给常量赋值的多种形式、还有集合遍历函数及其简化形式、纯粹的语法问题,虽然简单但仍需要认真掌握。