lingo的集合
Lingo软件稀疏集合和常用函数数学建模培训

年份-月份型
monthYearM..mont OCT2001.. hYearN JAN2002
OCT2001, NOV2001, DEC2001, JAN2002
基本集合的定义语法
元素列表和属性列表都是可选的。 当属性列表不在集合定义中出现时,这样的集合往往只是为了将来在程 序中作为一个循环变量来使用,或者作为构造更复杂的派生集合的父集合使 用(匹配问题中的集合students没有属性列表)。 而当元素列表不在基本集合的定义中出现时,则必须在程序的数据段以 赋值语句的方式直接给出元素列表。 例如,前例中SAILCO公司决定四个季度的帆船生产量模型的集合段和 数据段可以分别改为: SETS:
类型 数字型 字符-数字型 日期(星期) 型 月份型 隐式列举格式 1..n stringM..stringN dayM..dayN monthM..monthN 示例 1..5 示例集合表示的元素 1, 2, 3, 4, 5
Car101..ca Car101, car102, … , r208 car208 MON..FRI OCT..JAN mon, tue, wed, thu, fri oct, nov, dec, jan
A1
B1 7 B2
6 8 9
C1 C2
5 6
T
分析 S
假设从S到T的最优行驶路线 P 经过城市C1, 则P中从S到C1的子路 也一定是从S到C1的最优行驶路线; 假设 P 经过城市C2, 则P中从S到C2的子路也一定是从S到C2的最优 行驶路线. 因此, 为得到从S到T的最优行驶路线, 只需要先求出从S到Ck(k=1,2) 的最优行驶路线, 就可以方便地得到从S到T的最优行驶路线. 同样,为了求出从S到Ck(k=1,2)的最优行驶路线, 只需要先求出从S 到Bj(j=1,2)的最优行驶路线; 为了求出从S到Bj(j=1,2)的最优行驶路线, 只需要先求出从S到Ai (i=1,2,3)的最优行驶路线. 而S到Ai(i=1,2,3)的最优行驶路线是很容 易得到的(实际上, 此例中S到Ai(i=1,2,3)只有唯一的道路)
Lingo课件-集、数据部分

3.3 模型的数据部分
数据部分从标志符DATA:(包含冒号)开始,到 ENDDATA结束. 可以对一般变量赋值,也可以对集的 属性赋值,数字之间用“,”或空格隔开。 SETS:
STUDENTS /JOE, JOAN, BILL, BETTY/:AGE,SEX;
ENDSETS 在它的 数据部分 中包含了为属性 AGE 和 SEX 赋值 的数值列为: DATA: AGE=20 20 20 20; SEX=0 1 0 1; ENDDATA
ALLOWED ( PRODUCT, MACHINE,) /1,1 1,2 2,1 3,1/:xy;
ENDSETS
生成集引用
SETS: PRODUCT / 1..3/:x; MACHINE / 1..2/:y;
ALLOWED ( PRODUCT, MACHINE):xy;
ENDSETS
xy(1,1),xy(1,2),xy(2,1)……, xy(3,2)
生成集定义
SETS:
PRODUCT / 1..3/:x; MACHINE / 1..2/:y; ALLOWED ( PRODUCT, MACHINE):xy; ENDSETS 初始集:PRODUCT, MACHINE
ቤተ መጻሕፍቲ ባይዱ
生成集: ALLOWED
生成集定义(成员形式)
SETS: PRODUCT / 1..3/:x; MACHINE / 1..2/:y;
3. 集、数据部分
在大多数大型模型中,可能需要表达一组相 似的计算和约束 . 使用直接建模的方法,就要 重复键入每一个约束条件 . LINGO 有处理 集 (SET)的能力,这样的操作就简便了很多.
集是一组相关对象的集合 . 集中的每一个元 素可以有一个或多个相关的特征,称这些特征 为属性,属性可以是已知数据,也可以是待 LINGO求解.
LINGO基本语法和编程ppt课件

f对
x, j
y j
是非线性的,
所以在新建料场时是NLP模型。先解NLP模型,而把现有临时料场的位置作
为初始解告诉LINGO。
本例中集合的概念
利用集合的概念,可以定义需求点DEMAND和供应点 SUPPLY两个集合,分别有6个和2个元素(下标)。但决 策变量(运送量) 与c ij 集合DEMAND和集合SUPPLY都 有关系的。该如何定义这样的属性?
在实际问题中,输入的数据通常是原始数据,不一定 能在模型中直接使用,可以在这个段对这些原始数据进 行一定的“预处理”,得到模型中真正需要的数据。
例如
Calc: TotalWeight = @sum(Box(i): zl(i)*js(i)); EndCalc
注意计算段只能对常量进行计算,不能对需要 通过解优化程序求解出来的变量进行计算。
1 2 3 456
a 1.25 8.75 0.5 5.75 3 7.25
b 1.25 0.75 4.75 5 6.5 7.75
d3
5
4
7 6 11
建立模型
记工地的位置为(a ,b ) ,水泥日用量为d,i1, 6;料场
ii
i
位置为(
x
j
,
y
j
)
,日储量为
e j
,
j 1,2
;从料场
j 向工地i
的
运送量为c ij 。
集合的基本用法
例四这理属个些解性SA季需(LIIL度求ANCtG的必tOrO帆须i公b建u船按司t模e需时需)语求满要的言量足决概最分。定念重别每下。要是个四的季4个0是度条季理正,度解常6的0集的条帆合生,船(产7生5S能条产et)力,量及2是。5其条4下0, 条帆船,每条船的生产费用为400美元。如果加班生产, 每条船的生产费用为450美元。每个季度末,每条船的 库存费用为20美元。假定生产提前期为0,初始库存为 10条船。如何安排生产可使总费用最小?
数学实验lingo派生集合与函数

关系运算符: <
=
>
小于等于
等于
大于等于
(Lingo 中的关系运算式通常作为约束条件来使用,用来规定数与数之间的大小关系)
优先级: #not# -(负号)
^
*/
+-
#eq# #ne# #gt# #ge# #lt# #le#
#and# #or#
<=
>
2.基本的数学函数 ( 对于给定的数 x ,可以计算其函数值 )
(3)当表达式中出现的下标符号多于 1 个时,必须指明针对哪个符号做运算。
又例如下面程序的 cjjh 例 2 model:
sets: dyjh/1..5/; yzjh/1..4/; cjjh(dyjh,yzjh):c,x;
endsets data:
c=66.8,75.6,87Байду номын сангаас58.6,57.2,66,66.4,53,78,67.8,84.6,59.4,70,74.2,69.6,57.2,67.4,71, 83.8,62.4;
三 练习题
某卡车公司拨款 800 万元用于购买新的运输工具,有 3 种运输工具可供选择: A 的载重量 10 吨,平均时速 45 千米,价格 26 万元; B 的载重量 20 吨,平均时速 40 千米,价格 36 万元; C 的载重量 18 吨,平均时速 40 千米,价格 42 万元。 其中,C 是 B 的变种,新设了一个卧铺,所以载重降低了、价格上升了。A 需要 1 名司 机,如果每天三班工作,每天可运行 18 小时. 当地法律规定 B 和 C 均需要两名司机,如果 三班工作,B 每天可运行 18 小时,C 可运行 21 小时. 该公司目前每天有 150 名司机可用, 短期内无法招募到其他训练有素的司机。当地工会禁止司机每天工作超过一个班次。此外, 受维修保障能力的限制,公司最多能拥有 30 辆运输工具。请你建立数学模型,确定 A、B、 C 的数量使得公司的总运力最大。
之三(Lingo中的基本集合与派生集合)

三.Lingo 中的基本集合与派生集合例4:料场选址问题六个建筑工地的位置(用平面坐标a 、b 表示,距离单位:km )及其对水泥的日用量(用d 表示,单位:t )由下表给出:工地的位置(a ,b )及 水泥日用量d-------------------------------------------------------------------------------------------------- 工地编号 1 2 3 4 5 6 a 1.25 8.75 0.5 5.75 3 7.25 b 1.25 0.75 4.75 5 6.5 7.75 d 3 5 4 7 6 11--------------------------------------------------------------------------------------------------现有两个临时料场位于P(5,1), Q(2,7),每日提供水泥的最大能力分别为20t. 假设从料场到各工地均有直线道路连接,运输费用与距离、重量成正比。
(1)请制定运输计划,使总运费尽量低。
(2)进一步调整这两个临时料场的位置,使总运费最低。
解:第i 号工地:位置),(i i b a ,水泥日用量i d , i=1,2,3,4,5,6.第j 号料场:位置),(j j y x ,水泥日供应能力j e , j=1,2.从j 号料场向i 号工地的日运输水泥量记为 ij c .注意:在问题(1)中,),(j j y x 为已知数据,故决策变量为ij c ,共12个; 在问题(2)中,),(j j y x 待定,故决策变量为ij j j c y x ,,,共16个。
从j 号料场到i 号工地,距离为22)()(i j i j b y a x -+-,送去重量为ij c 的水泥,二者乘积即为运输费。
目标函数: ∑∑==-+-216122)()(m i n j i i j i j ij b y a x c约束条件: 满足需求: 6,...,2,1,21==∑=i d ci j ij供应能力: j i ij e c≤∑=61,j=1,2非负性: 0≥ij c这就是本题的优化模型。
LINGO中的集

LINGO中的集实例:例:使用LINGO软件计算6个发点8个收点的最小费用运输问题。
产销单位不用集合时的程序(表达式又长又复杂,不易修改,不易维护)MODEL:!目标函数;[_1]MIN=6*VOLUME_WH1_V1+2*VOLUME_WH1_V2+6*VOLUME_WH1_V3+7*VOLUME_WH1_ V4+4*VOLUME_WH1_V5+2*VOLUME_WH1_V6+9*VOLUME_WH1_V7+5*VOLUME_WH1_V8+4* VOLUME_WH2_V1+9*VOLUME_WH2_V2+5*VOLUME_WH2_V3+3*VOLUME_WH2_V4+8*VOLUM E_WH2_V5+5*VOLUME_WH2_V6+8*VOLUME_WH2_V7+2*VOLUME_WH2_V8+5*VOLUME_WH3 _V1+2*VOLUME_WH3_V2+VOLUME_WH3_V3+9*VOLUME_WH3_V4+7*VOLUME_WH3_V5+4*V OLUME_WH3_V6+3*VOLUME_WH3_V7+3*VOLUME_WH3_V8+7*VOLUME_WH4_V1+6* VOLUME_WH4_V2+7*VOLUME_WH4_V3+3*VOLUME_WH4_V4+9*VOLUME_WH4_V5+2*VOLUM E_WH4_V6+7*VOLUME_WH4_V7+VOLUME_WH4_V8+2*VOLUME_WH5_V1+3*VOLUME_WH5_V 2+9*VOLUME_WH5_V3+5*VOLUME_WH5_V4+7*VOLUME_WH5_V5+2*VOLUME_WH5_V6+6* VOLUME_WH5_V7+5*VOLUME_WH5_V8+5*VOLUME_WH6_V1+5*VOLUME_WH6_V2+2*VOLUM E_WH6_V3+2*VOLUME_WH6_V4+8*VOLUME_WH6_V5+VOLUME_WH6_V6+4*VOLUME_WH6_V 7+3*VOLUME_WH6_V8;[_2]VOLUME_WH1_V1+VOLUME_WH2_V1+VOLUME_WH3_V1+VOLUME_WH4_V1+VOLUME_WH 5_V1+VOLUME_WH6_V1=35;[_3]VOLUME_WH1_V2+VOLUME_WH2_V2+VOLUME_WH3_V2+VOLUME_WH4_V2+VOLUME_WH 5_V2+VOLUME_WH6_V2=37;[_4]VOLUME_WH1_V3+VOLUME_WH2_V3+VOLUME_WH3_V3+VOLUME_WH4_V3+VOLUME_WH 5_V3+VOLUME_WH6_V3=22;[_5]VOLUME_WH1_V4+VOLUME_WH2_V4+VOLUME_WH3_V4+VOLUME_WH4_V4+VOLUME_WH 5_V4+VOLUME_WH6_V4=32;[_6]VOLUME_WH1_V5+VOLUME_WH2_V5+VOLUME_WH3_V5+VOLUME_WH4_V5+VOLUME_WH 5_V5+VOLUME_WH6_V5=41;[_7]VOLUME_WH1_V6+VOLUME_WH2_V6+VOLUME_WH3_V6+VOLUME_WH4_V6+VOLUME_WH 5_V6+VOLUME_WH6_V6=32;[_8]VOLUME_WH1_V7+VOLUME_WH2_V7+VOLUME_WH3_V7+VOLUME_WH4_V7+VOLUME_WH 5_V7+VOLUME_WH6_V7=43;[_9]VOLUME_WH1_V8+VOLUME_WH2_V8+VOLUME_WH3_V8+VOLUME_WH4_V8+VOLUME_WH 5_V8+VOLUME_WH6_V8=38;[_10]VOLUME_WH1_V1+VOLUME_WH1_V2+VOLUME_WH1_V3+VOLUME_WH1_V4+VOLUME_W H1_V5+VOLUME_WH1_V6+VOLUME_WH1_V7+VOLUME_WH1_V8<=60;[_11]VOLUME_WH2_V1+VOLUME_WH2_V2+VOLUME_WH2_V3+VOLUME_WH2_V4+VOLUME_W H2_V5+VOLUME_WH2_V6+VOLUME_WH2_V7+VOLUME_WH2_V8<=55;[_12]VOLUME_WH3_V1+VOLUME_WH3_V2+VOLUME_WH3_V3+VOLUME_WH3_V4+VOLUME_W H3_V5+VOLUME_WH3_V6+VOLUME_WH3_V7+VOLUME_WH3_V8<=51;[_13]VOLUME_WH4_V1+VOLUME_WH4_V2+VOLUME_WH4_V3+VOLUME_WH4_V4+VOLUME_W H4_V5+VOLUME_WH4_V6+VOLUME_WH4_V7+VOLUME_WH4_V8<=43;[_14]VOLUME_WH5_V1+VOLUME_WH5_V2+VOLUME_WH5_V3+VOLUME_WH5_V4+VOLUME_W H5_V5+VOLUME_WH5_V6+VOLUME_WH5_V7+VOLUME_WH5_V8<=41;[_15]VOLUME_WH6_V1+VOLUME_WH6_V2+VOLUME_WH6_V3+VOLUME_WH6_V4+VOLUME_W H6_V5+VOLUME_WH6_V6+VOLUME_WH6_V7+VOLUME_WH6_V8<=52;END而用集合表示则简单得多。
Lingo的基本使用方法
1. LINGO入门
内容提要
2.在LINGO中使用集合
3. 运算符和函数
4. LINGO的主要菜单命令
5. LINGO命令窗口
6.习题
1. LINGO入门
1. LINGO入门 2.在LINGO中使用集合 3. 运算符和函数 4. LINGO的主要菜单命令 5. LINGO命令窗口 6.习题
LINGO软件的主要特色
运行状态窗口
扩展 的求 解器 (求解 程序) 状态 框
使用的特殊求解程序 : B-and-B (分枝定界算法) Global (全局最优求解程序) Multistart(用多个初始点求解的程序)
目前为止找到的可行 解的最佳目标函数值
有效步数
目标函数值的界
特殊求解程序当前运行步数: 分枝数(对B-and-B程序); 子问题数(对Global程序); 初始点数(对Multistart程序)
INV (0) 10
加上变量的非负约束
注:LINGO中没有数组,只能对每个季度分别定义变量,如正常 产量就要有RP1,RP2,RP3,RP4 4个变量等。写起来就比较麻 烦,尤其是更多(如1000个季度)的时候。
记四个季度组成的集合QUARTERS={1,2,3,4},它们就是上 面数组的下标集合,而数组DEM,RP,OP, INV对集合QUARTERS中 的每个元素1,2,3,4分别对应于一个值。LINGO正是充分利用 了这种数组及其下标的关系,引入了“集合”及其“属性”的概 念,把QUARTERS={1,2,3,4}称为集合,把DEM,RP,OP, INV 称为该集合的属性(即定义在该集合上的属性)。
两种命令模式
Windows模式: 通过下拉式菜单命令驱动LINGO运行(多数
LINGO软件的集合功能
二、集合循环函数
集合循环函数遍历整个集合进行操作。 其语法为: @function(setname[(set_index_list)[|c onditional_qualifier]]:expression_list); @function相应于下面罗列的五个集合循环 函数之一: @for, @sum, @prod, @min, @max
10
原始集合定义方法
隐式成员列表格式 示例
1..n 1..5
所产生集合成员
1, 2, 3, 4, 5
StringM..StringN
DayM..DayN MonthM..MonthN
Car2..Car14
Mon..Fri Oct..Jan
Car2, Car3, Car4, …, Car14
Mon, Tue, Wed, Thu, Fri Oct, Nov, Dec, Jan
MonthYearM..Month Oct2001..Jan YearN 2002
Oct2001, Nov2001, Dec2001, Jan2002
11
原始集合定义方法
3. 集合成员不放在集合定义中,而在随后的数 据部分来定义。例如:
12
原始集合定义方法
注意: 开头用感叹号(!),末尾用分号(;)表示 注释,可跨多行。 在集合部分只定义了一个集合students, 并未指定成员。在数据部分罗列了集合成员 John、Jill、Rose和Mike,并对属性sex和 age分别给出了值。 集合成员无论用何种字符标记,它的索引 都是从1开始连续计数。在attribute_ list可以 指定一个或多个集合成员的属性,属性之间必须 用逗号隔开。 13
派生集合定义方法
lingo集合的三种最常用经典用法
lingo集合的三种最常用经典用法热度11已有392 次阅读2010-8-10 12:24 |个人分类:lingo小经验|!集合的使用初步,eg供求问题;MODEL:SETS:QUARTERS/1,2,3,4/:DEM,RP,OP,INV;ENDSETSMIN=@SUM(QUARTERS:400*RP+450*OP+20*INV);@FOR(QUARTERS(I):RP(I)<40);@FOR(QUARTERS(I)|I#GT#1:INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I););INV(1)=10+RP(1)+OP(1)-DEM(1);DATA:DEM=40,60,75,25;ENDDATAEND!稀疏集合的使用方法, 经典最短路问题,;model:sets:cities/S,A1,A2,A3,B1,B2,C1,C2,T/:L; !cities到城市s的距离,索引使用时自动把S,A1..编成了1,2..;roads(cities,cities)/S,A1 S,A2 S,A3A1,B1 A1,B2 A2,B1 A2,B2, A3,B1 A3,B2B1,C1 B1,C2 B2,C1 B2,C2C1,T C2,T/:D;endsetsdata:D= 6 3 36 5 8 67 46 7 8 95 6; !数据段集合的赋值,必须对应集合所有属性,形成一一照应,否则就不要再数据段赋值,在求解段付部分集合的值也是可以的。
;enddataL(1)=0; !这里的索引不能用L(S)=0,只能用L(1)=0,或者用L(index(s))=0 ;@for(cities(i)|i#gt#1:L(i)=@min(roads(j,i):L(j)+D(j,i)););end!稀疏集合的一种好的方法,元素过滤法,体会对索引的操作,以及相应的复制方式,最有配对eg;model:sets:students/s1..s8/;pairs(students,students)|&2#gt#&1:benefit,match;endsetsdata:benefit=9 3 4 2 1 5 61 7 3 52 14 4 2 9 21 5 5 28 7 62 34;enddatamax=@sum( pairs(i,j):benefit(i,j)*match(i,j) );@for(students(i):@sum(pairs(j,k)|(j#eq#i)#or#(k#eq#i):match(j,k))=1);@for(pairs(i,j):@bin(match(i,j)));end。
lingo集合定义
lingo集合定义好的,以下是为您生成的关于“lingo 集合定义”的文章:---【lingo 集合定义】嘿,朋友们!不知道你们有没有过这样的经历,在学习或者工作中,突然遇到一些看起来很专业、很复杂的术语,让人摸不着头脑?今天咱们就来聊聊一个这样的术语——lingo 集合。
其实,lingo 集合就是把具有某种共同特征的元素放在一起形成的一个整体。
比如说,咱们班所有戴眼镜的同学就可以组成一个lingo 集合。
关键点解析核心特征或要素:1. 确定性:集合中的元素是明确的,不能模棱两可。
就像咱们刚刚说的戴眼镜的同学,谁戴眼镜谁不戴,是很确定的。
比如学校足球队的队员们,这是一个明确的集合。
2. 互异性:集合中的元素不能重复。
假设咱们说“优秀学生集合”,那一个学生不能被重复计算。
3. 无序性:集合中元素的排列顺序不影响集合本身。
比如“水果集合”里有苹果、香蕉、橙子,不管先写哪个后写哪个,都是这个集合。
容易混淆的概念:lingo 集合和区间:集合是确定的一组元素,而区间是一段连续的数的范围。
比如集合{1, 2, 3},区间(1, 5),集合里的 1、2、3 是确定的数,而区间 (1, 5) 表示大于 1 小于 5 的所有数。
起源与发展lingo 集合的概念起源于数学领域的发展。
早期数学主要处理单个的数和简单的运算,随着研究的深入,需要对大量具有相同特征的对象进行统一处理和分析,于是集合的概念应运而生。
在当今的数学以及很多相关领域,lingo 集合都有着极其重要的地位。
它为我们解决复杂的问题提供了一种有效的工具和思维方式。
未来,随着科学技术的不断进步,lingo 集合的应用可能会更加广泛和深入,也许会在人工智能、大数据等前沿领域发挥出更加关键的作用。
实际意义与应用在日常生活中,lingo 集合也有不少应用呢。
比如,在超市进行商品分类的时候,就可以把相同类型的商品看作一个集合,方便管理和查找。
再比如,组织一场聚会,确定参加人员名单也可以看作是一个集合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Lingo中的集
对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。
Lingo 允许把这些相联系的对象聚合成集(sets)。
一旦把对象聚合成集,就可以利用集来最大限度的发挥Lingo建模语言的优势。
2.1 为什么使用集
是Lingo建模语言的基础,是程序设计最强有力的基本构件。
借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。
例如:对于100个货栈的运输问题,如果一个一个的写出全部约束将是可怕的工作量。
货栈1的运量<=存量
货栈2的运量<=存量
货栈3的运量<=存量………………………………
2.2 什么是集
Lingo可以采用最为简洁的表示方法:每个货栈的运输量<=存量
集是一群相联系的对象,这些对象也称为集的成员。
一个集可能是一系列产品、卡车或雇员。
每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。
属性值可以预先给定,也可以是未知的,有待于
Lingo求解。
例如:
(1)产品集中的每个产品可以有一个价格属性;
(2)卡车集中的每辆卡车可以有一个牵引力属性;
(3)雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。