lingo基础入门Day 5——lingo集合遍历函数与赋值方式

lingo基础入门Day 5

lingo的原始集合的定义

  • 通过列举全部元素所定义的是原始(Primary Set),又被称为基本集合。

  • 通过原始集合派生所定义的集合是派生集合(Derived Set)。

  • 原始集合和派生集合都在集合段中定义。

  • 集合段以SETS:开始,以ENDSETS结束。

  • 定于原始集合的语法:

    集合名[/集合的元素列表/] [集合的属性列表];
    
集合的命名

标识符的命名规范

  • 起始字符只能说字母或者下划线,后续字符只能是字母、数字或者下划线。
  • 标识符最长为32个字符。
  • 标识符不区分大小写。

集合的元素命名

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

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

集合的元素列表

显式罗列:

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

ITEM/1 2 3 4 5 6/;

隐式罗列:

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

ITEM/1..6/;

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

格式实例集合元素
1…n1…61 2 3 4 5 6
alphM…alphNa…ha b c d e f g h
stringM…stringNtruck6…truck11
dayM…dayNMON…FRIMON TUE WED THU FRI
monthM…monthNOCT…JANOCT NOV DEC JAN
monthyearM…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定义原始集合及其属性的语法规则,还有在数据段给常量赋值的多种形式、还有集合遍历函数及其简化形式、纯粹的语法问题,虽然简单但仍需要认真掌握。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值