数学实验lingo派生集合与函数

合集下载

LINGO教程(精)

LINGO教程(精)

LINGO中的集集是一群相联系的对象,这些对象也称为集的成员。

一个集可能是一系列产品、卡车或雇员。

每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。

属性值可以预先给定,也可以是未知的,有待于LINGO求解。

例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。

LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。

一个原始集是由一些最基本的对象组成的。

一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。

1 模型的集部分集部分是LINGO模型的一个可选部分。

在LINGO 模型中使用集之前,必须在集部分事先定义。

集部分以关键字“sets:”开始,以“endsets”结束。

一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。

一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须定义了它们。

2 定义原始集为了定义一个原始集,必须详细声明:·集的名字·可选,集的成员·可选,集成员的属性定义一个原始集,用下面的语法:setname[/member_list/][:attribute_list];注意:用“[]”表示该部分内容可选。

下同,不再赘述。

Setname是你选择的来标记集的名字,最好具有较强的可读性。

集名字必须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉伯数字(0,1,…,9)组成的总长度不超过32个字符的字符串,且不区分大小写。

注意:该命名规则同样适用于集成员名和属性名等的命名。

Member_list是集成员列表。

如果集成员放在集定义中,那么对它们可采取显式罗列和隐式罗列两种方式。

如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。

LINGO基本语法和编程

LINGO基本语法和编程

(5)目标与约束段:目标函数、约束条件等,没有段 的开始和结束标记,因此实际上就是除其它四个段(都有 明确的段标记)外的LINGO模型。这是Lingo程序最重要 的部分。
•!目标函数; min=@sum(links: cost*volume);
!需求约束; @for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));
Vendors Warehouse
wh1 wh2 V1 V2 V3 V4 V5 V6 V7 V8
wh3
wh4 wh5 wh6
6 4 5 7 2 5
2 9 2 6 3 5
6 5 1 7 9 2
7 3 9 3 5 2
4 8 7 9 7 8
2 5 4 2 2 1
9 8 3 7 6 4
5 2 3 1 5 3
(3)初始段(INIT):以“INIT: ”开始, “ENDINIT” 结束,对集合的属性(数组)定义初值(因为求解算法一般 是迭代算法,所以用户如果能给出一个比较好的迭代初 值,对提高算法的计算效果是有益的)。 如果有一个接近最优解的初值,对LINGO求解模型是 有帮助的。定义初值的格式为: “attribute(属性) = value_list(常数列表);” 这与数据段中的用法是类似的。 Init: x=1111111 1 1 1 1 1 1 1; Endinit
问:links表示什么? cost? Volume? •Links:表示一个下标集
Vendors Warehouse wh1 wh2 wh3 V1 Wh1, V1 Wh1, V2 Wh2, V3 V2 V3 V4 V5 V6 V7 V8
wh4
wh5 wh6 Wh6,v8

LINGO基本用法与运算函数

LINGO基本用法与运算函数
LINGO的基本用法和运算 函数
例如,目标函数中有求和表达式ΣCijXij(i从1 到10,j从1到20),若用直接输入的方式,将有 200个系数与200个变量相乘再相加,需要输入 长长一大串,既不便于输入,又不便于修改, 别人看不懂,可读性较差.
LINGO提供了建模语言,能够用较少语 句描述目标函数和约束条件,为建立大规 模数学规划模型提供了方便.我们以一个 运输规划模型为例说明其用法。
办法是用现成软件求解.LINGO是专门
用来求解各种规划问题的软件包,其功
能十分强大,是解决最优化问题的最佳
选择。
LINGO的基本用法和运算 函数
§1.1 LINGO 入门
LINGO的基本用法和运算 函数
一、概况
LINGO 是 美 国 LINDO 系 统 公 司 ( Lindo SystemInc)开发的求解数学规划系列软件中的一 个(其它软件为LINDO,GINO,What’s Best等 等),的主要功能是求解大型线性、非线性和整数 规 划 , 目 前 的 版 本 是 11.0 . 可 以 从 Internet 网 址 http://下载该软件的安装文件lingo11.exe,执行该 文件即可在计算机内安装LINGO 软件系统,首次 运行该软件时,要求用户输入密码,如果输入了正 确的密码,则该软件就成了正式版,如果密码不对 或不输入密码,则该软件就成为演示版.
1.目标函数(求某个数学表达式的最大值或最 小值);
2. 决策变量,即目标函数值取决于哪些变量;
3. 约束条件,即对变量附加一些条件限制(等 式或不等式).
LINGO的基本用法和运算 函数
例1:某工厂有两条生产线,分别用来生产 M和P两种型号的产品,利润分别为200元/个 和300元/个,生产线的最大生产能力分别为 每日100和120,生产线每生产一个M产品需 要1个劳动日进行调试、检测等工作,而每个 P产品需要2个劳动日,该厂每天只有160个 劳动日可用,假如原材料等其它条件不受限 制,问应如何安排生产计划,使获得的利润 最大?

LINGO的基本运算和函数

LINGO的基本运算和函数

这些运算符的优先级由高到低为: 高 #not# #eq# #ne# #gt# 低 #and# #or#
关系运算符
#ge#
#lt#
#le#
LINGO 有三种关系运算符:“=”、“<=”和“>=”。
LINGO 函数
数学函数
LINGO 提供了大量的标准数学函数:
@ABS( X)
绝对值
@ACOS( X)
反余弦
x 的 gamma 函数的自然对数
@LOG( X)
自然对数
@LOG10( X)
以十为底的对数
@MOD( X, Y) X 模 Y
@POW( X, Y) X 的 Y 次方
@SIGN( X)
符号函数
@SIN( X)
正弦
@SINH( X)
双曲正弦
@SMAX( X1, X2,..., XN)
求最大
@SMIN( X1, X2,..., XN)

@gin(x)
限制 x 为整数
பைடு நூலகம்
在默认情况下,LINGO 规定变量是非负的,也就是说下界为 0,上界为+∞。
@free 取消了默认的下界为 0 的限制,使变量也可以取负值。@bnd 用于设定一个
变量的上下界,它也可以取消默认下界为 0 的约束。
集操作函数
@size(set_name) 该函数返回集 set_name 的成员个数。在模型中明确给出集大小时最好使用 该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。
集循环函数
@function(setname[(set_index_list)[|conditional_qualifier]]:expressio n_list);

LINGO的基本知识及使用

LINGO的基本知识及使用
有了集合,许多类似的约束条件就可以简化。
下面定义一个简单的集合: SETS: SETS: CARS/car1,car2,car3/:topspeed,price; ENDSETS 其中,CARS是集合名,是一个标记; /car1,car2,car3/是集合中的成员列表(类似 于集合中的元素); topspeed和price则是car1,car2,car3的属性, 如car2的topspeed为180km/h,price为40万; SETS和ENDSETS为LINGO中定义集合域 的关键词。
LINGO中的函数有基本运算符,数学 中的函数有基本运算符, 中的函数有基本运算符 函数,金融函数,变量限定函数等。 函数,金融函数,变量限定函数等。这里我 们看一下集合循环函数,这是lingo中的特色。 中的特色。 们看一下集合循环函数,这是 中的特色 其余函数的使用与该函数一致。 其余函数的使用与该函数一致。
LINDO API: LINDO Application Programming Interface (V2.0) What’s Best!: (SpreadSheet e.g. EXCEL) (V7.0)
一、一个最简单的LP( 一、一个最简单的LP(线性规划)问题
max z = 3 x1 + 5 x2
元素过滤器派生集合中的成员可以省略这时这个集合就是密集也可以显式罗列也就是用类似原始集的方法直接列出只选取集合中的一部分元素用在模型中还可以用元素过滤器筛选
LINGO的基本知识 LINGO的基本知识
美国LINDO公司的主要产品: 公司的主要产品: 美国 公司的主要产品 LINDO: Linear INteractive and Discrete Optimizer LINGO: Linear INteractive General Optimizer (V6.1) (V8.0)

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

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

Chongqing University of Arts and Sciences
分析
暑期培训
这是一个匹配(match)问题。把上表的效率矩阵记为 benefit(由于对称性,这个矩阵只有严格上三角部分共28个数取非 零值)。 C 用match(si,sj)=1表示同学si,sj组成一队 ,而match(si, 2 sj)=0表示si,sj不组队。由于对称性,只需考虑i<j共28[ C 8 ]个0-1 变量(而不是全部32个变量)。 显然,目标函数正好是benefit(si,sj)*match(s,sj)对i,j之和。 约束条件是每个同学只能而且必须在某一组,即对于任意i 有:只要属性match的下标有i的都加起来,此和应该等于1。 由上面的分析,因此,完整的数学模型如下(显然,这是一 min {benefit (i, j ) * match(i, j )} 1 个0-1线性规划): i j
L S 0;
L X min L Y d Y , X ,
YX
X S.
1 2
QQ:51726652
Imagination is more important than knowledge.
Chongqing University of Arts and Sciences
Imagination is more important than knowledge.
QQ:51726652
56 6 A2 8 3 6 7 3 A3 4
A1
B1
7 B2
6 8 9
C1 C2
暑期培训
5
T
6
Chongqing University of Arts and Sciences

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

第三讲
稀疏集合 和lingo函数
稠密集合与稀疏集合
包含了两个基本集合构成的所有二元有序对的派生集合 称为稠密集合(简称稠集)。有时候,在实际问题中,一 些属性(数组) 只在笛卡儿积的一个真子集合上定义,这 种派生集合称为稀疏集合(简称疏集)。
例 (最短路问题) 在纵横交错的公路网中,货车司机希望找到一条 从一个城市到另一个城市的最短路. 下图表示的是公路网, 节点表 示货车可以停靠的城市,弧上的权表示两个城市之间的距离(百公 里). 那么,货车从城市S出发到达城市T,如何选择行驶路线,使所经 过的路程最短?
类型 数字型 字符-数字型 日期(星期) 型 月份型 隐式列举格式 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
例 某班8名同学准备分成4个调查队(每队两人)前往4个 地区进行社会调查。这8名同学两两之间组队的效率如 下表所示(由于对称性,只列出了严格上三角部分),问 如何组队可以使总效率最高?
学生 S1 S1 S2 S3 S4 S5 S6 S7 S2 9 S3 3 1 S4 4 7 4 S5 2 3 4 1 S6 1 5 2 5 8 S7 5 2 9 5 7 2 S8 6 1 2 2 6 3 4
LINGO求解结果
“LINGO|SOLVE”运行这个程序,可以得到全局最优值为30 选择 Text(文 MATCH变量中多数为 0,可以更清晰地浏览最优解解。 本格式) 选择菜单命令“LINGO|SOLUTION” ,可以看到图示对话框。

lingo中的集合

在LINGO 中使用集合例:某帆船公司需要决定下四个季度的帆船生产量。

下四个季度的帆船需求量分别是40条,60条,75条,25条,这些需求必须按时满足。

每个季度正常的生产能力是40条帆船,每条船的生产费用为400美元。

如果加班生产,每条船的生产费用为450美元。

每个季度末,每条船的库存费用为20美元。

假定生产提前期为0,初始库存为10条船。

如何安排使总费用最小?我们用DEM,RP,OP,INV 分别表示需求、正常生产的产量、加班生产的产量、库存量,则DEM,RP,OP,INV 对每个季度都应该有一个对应的値,也就是说他们都应该是一个由4个元素组成的数组,其中DEM 是已知的,而RP,OP,INV 是未知数。

现在我们可以写出这个问题的模型。

首先,目标函数是所有费用的总和:MIN }{41400()450()20()i RP i O P i IN V i =++∑约束条件主要有两个:1) 限制能力:()RP i <40, 1,2,3,4i =2) 产品数量的平衡方程:()(1)()()(),1,2,3,4INV i INV i RP i OP i DEM i I =-++-=(0)10INV =当然,还要加上变量的非负约束,构成了这个问题的LP 模型。

用LINGO求解此问题:记四个季度组成的集合QUARTERS={1,2,3,4},它们就是上面数组的下标集合,而数组DEM,RP,OP,INV对集合的每个元素1,2,3,4分别对应一个値,LINGO正是利用了这种数组及其下标的关系,引入了“集合”及其“属性”的概念,把QUARTERS={1,2,3,4}称为集合,把DEM,RP,OP,INV称为该集合的属性。

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得出以下结果:Global optimal solution found at iteration: 0Objective value: 78450.00Variable Value Reduced CostDEM( 1) 40.00000 0.000000DEM( 2) 60.00000 0.000000DEM( 3) 75.00000 0.000000DEM( 4) 25.00000 0.000000RP( 1) 40.00000 0.000000RP( 2) 40.00000 0.000000RP( 3) 40.00000 0.000000RP( 4) 25.00000 0.000000OP( 1) 0.000000 20.00000OP( 2) 10.00000 0.000000OP( 3) 35.00000 0.000000OP( 4) 0.000000 50.00000INV( 1) 10.00000 0.000000INV( 2) 0.000000 20.00000INV( 3) 0.000000 70.00000INV( 4) 0.000000 420.0000 全局最优解为RP(40,40,40,25),OP=(0,10,35,0),最小成本=78450。

lingo入门教程 --- 集合运用

lingo入门教程之二--- 集合运用lingo中的集合用法很多,这里主要通过几个例题来进行讲解对于每一个问题,都要先找到对应的目标函数,然后对相应值进行初始化,然后找到约束条件等进行求解例1:SAILCO公司需要决定下四个季度的帆船生产量。

下四个季度的帆船需求量分别是40条,60条,75条,25条,这些需求必须按时满足。

每个季度正常的生产能力是40条帆船,每条船的生产费用为400美元。

如果加班生产,每条船的生产费用为450美元。

每个季度末,每条船的库存费用为20美元。

假定生产提前期为0,初始库存为10条船。

如何安排生产可使总费用最小?分析:用DEM,RP,OP,INV分别表示需求量、正常生产的产量、加班生产的产量、库存量,则DEM,RP,OP,INV对每个季度都应该有一个对应的值,也就说他们都应该是一个由4个元素组成的数组,其中DEM是已知的,而RP,OP,INV是未知数接下里这里例子会讲到关于集合的派生问题,这个跟c++里面的继承与派生比较相像例2:建筑工地的位置(用平面坐标a,b表示,距离单位:公里)及水泥日用量d(吨)下表给出。

有两个临时料场位于P (5,1), Q (2, 7),日储量各有20吨。

从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。

两个新的料场应建在何处,节省的吨公里数有多大?例3:(最短路问题) 在纵横交错的公路网中,货车司机希望找到一条从一个城市到另一个城市的最短路.下图表示的是公路网,节点表示货车可以停靠的城市,弧上的权表示两个城市之间的距离(百公里).那么,货车从城市S出发到达城市T,如何选择行驶路线,使所经过的路程最短?分析:假设从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)只有唯一的道路) .此例中可把从S到T的行驶过程分成4个阶段,即S→Ai(i=1,2或3),Ai→Bj(j=1或2),Bj→Ck(k=1或2),Ck→T. 记d(Y,X)为城市Y与城市X之间的直接距离(若这两个城市之间没有道路直接相连,则可以认为直接距离为∞),用L(X)表示城市S到城市X的最优行驶路线的路长:。

第4讲LINGO基本使用方法续

新余学院rsity MCM
优 优化建模 化建 优 化 建模 模
例2 某班8名同学准备分成4个调查队(每队两人)前往4个 地区进行社会调查。这8名同学两两之间组队的效率如 下表所示(由于对称性,只列出了严格上三角部分),问 如何组队可以使总效率最高?
学生 S1 S2 S3 S1 S2 S3 S4 S5 S6 S7 S8
56 6 8 A 2 3 6 7 3 A3 4
A1
优 优化建模 化建 优 化 建模 模
B1
7 B2
6 8 9
C1 C2
5 6
T
L B1 min L A1 6, L A2 8, L A3 7 10 L A3 7; L B2 min L A1 5, L A2 6, L A3 4 7 L A3 4; L C1 min L B1 6, L B2 8 15 L B2 8; L C2 min L B1 7, L B2 9 16 L B2 9; L T min L C1 5, L C2 6 20 L C1 5.
集合的使用小结
集合的不同类型及其关系 集合 派生集合 基本集合
稀疏集合
稠密集合
元素列表法 元素过滤法 直接列举法
2019/4/6
隐式列举法
上一页 下一页
新余学院
建模组
Xinyu University MCM
优 优化建模 化建 优 化 建模 模
基本集合的定义语法
基本集合的定义格式为(方括号“[ ]”中的内容是可选项, 可以没 有): setname [/member_list/] [: attribute_list]; 其中setname为定义的集合名,member_list为元素列表, attribute_list为属性列表。元素列表可以采用显式列举法(即直接 将所有元素全部列出,元素之间用逗号或空格分开),也可以采用隐 式列举法。隐式列举法可以有几种不同格式, 类型 隐式列举格式 示例 示例集合表示的元素
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关系运算符: <
=
>
小于等于
等于
大于等于
(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 中的逻辑运算通常作为过滤条件来使用,分两类
第一类: #and#
#or#
#not#



(逻辑值与逻辑值之间的运算,结果还是逻辑值)
第二类: #eq# #ne# #gt# #ge# #lt# #le#
等于 不等于 大于 大于等于 小于 小于等于
(数与数之间的运算,结果是逻辑值)
个集合的属性。 model:
sets: gdjh/1..6/:a,b,d; lcjh/1,2/:x,y,e; gdlcjh(gdjh,lcjh):c;
endsets data:
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; x,y=5,1,2,7;e=20,20; enddata min=@sum(gdlcjh(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^0.5); @for(gdjh(i):@sum(lcjh(j):c(i,j))=d(i)); @for(lcjh(j):@sum(gdjh(i):c(i,j))<=e(j)); end
一 派生集合
26
例 1 min
cij (x j ai )2 ( y j bi )2
j 1 i1
2
cij di , i 1,2,...,6
j 1
6
cij e j ,j=1,2
i1
cij 0
根据两个基本集合 gdjh 与 lcjh 构造一个派生集合 gdlcjh,再把 cij 定义为这
sin(x) cos(x) tan(x) exp(x) log(x) sqrt(x) abs(x)
3.集合循环函数
(下面 5 个函数,其括号中的格式为 集合名:表达式 )
@for( ) @sum( )
@max( ) @min( )
@prod( ) 积
4.变量定界函数
@free(x) :把 x 放宽为任意实数 @gin(x) :限制 x 为整数 @bin(x) :限制 x 只能取 0 或 1 @bnd(-6,x,18) :限制 x 为闭区间[-6,18]上的任意实数
(1)定义派生集合及其属性的命令格式为 派生集合名(基本集合 1,基本集合 2):属性
(2)赋值语句“x,y=5,1,2,7”的赋值顺序是“x(1)=5,y(1)=1,x(2)=2,y(2)=7”,而不是 “x(1),x(2),y(1),y(2)”;在程序中,该语句可换成“x=5,2;y=1,7”,功能相同。
enddata min=@sum(cjjh:c*x); @for(dyjh(i):@sum(yzjh(j):x(i,j))<=1); @for(yzjh(j):@sum(dyjh(i):x(i,j))=1); @for(cjjh:@bin(x)); end
二、运算符和函数
1.运算符及其优先级
算术运算符:(数与数之间的运算,结果还是数) + - * / ^ .
相关文档
最新文档