数学实验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基本语法和编程
(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基本用法与运算函数
例如,目标函数中有求和表达式Σ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的基本运算和函数
这些运算符的优先级由高到低为: 高 #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的基本知识及使用
下面定义一个简单的集合: 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软件 稀疏集合和常用函数 数学建模培训
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基本使用方法续
优 优化建模 化建 优 化 建模 模
例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为属性列表。元素列表可以采用显式列举法(即直接 将所有元素全部列出,元素之间用逗号或空格分开),也可以采用隐 式列举法。隐式列举法可以有几种不同格式, 类型 隐式列举格式 示例 示例集合表示的元素
Lingo实验报告3
实验报告课程名称:模型优化与LINGO软件应用专业班级:姓名:学号:湖南工业大学理学院实验名称Lingo的基本编程方法实验地点公共楼405 实验时间实验成绩指导指导教师签名一、实验目的及任务1.编写简单的Lingo程序2.了解Lingo语言中集合与函数的使用二、实验内容与步骤1.用lingo软件求解:max z=cTx+1/2xTQx;s.t -1≤x1x2+x3x4≤1;-3≤x1+x2+x3+x4≤2;x1,x2,x3,x4∈{-1,1}其中c=(6,8,4,-2)T,Q是三对角矩阵,主对角线上元素全为-1,两条次对角线上元素全为2.sets:set1/1..4/:x,c;b/1,2/:value;m(set1,b):d;link(set1,set1):Q;endsetsdata:c=6 8 4 -2;Q=-1 2 0 02 -1 2 00 2 -1 20 0 2 -1;value=1,-1;enddatamax=-1/2*x(1)*x(1)-1/2*x(2)*x(2)-1/2*x(3)*x(3)-1/2*x(4)*x(4)+2*x(1)*x(2 )+2*x(2)*x(3)+2*x(3)*x(4)+6*x(1)+8*x(2)+4*x(3)-2*x(4);@sum(set1(i):x(i))<=2;-3<=@sum(set1(i):x(i));-1<=x(1)*x(2)+x(3)*x(4);x(1)*x(2)+x(3)*x(4)<=1;@for(set1(i):x(i)=@sum(b(j):value(j)*d(i,j)));@for(set1(i):@sum(b(j):d(i,j))=1);@for(set1(i):@gin(x(i)));结果Local optimal solution found.Objective value: 20.00000Extended solver steps: 0Total solver iterations: 5Variable Value Reduced Cost X( 1) 1.000000 0.000000 X( 2) 1.000000 -2.000010 X( 3) 1.000000 -6.000001 X( 4) -1.000000 2.000005 C( 1) 6.000000 0.000000 C( 2) 8.000000 0.000000 C( 3) 4.000000 0.000000 C( 4) -2.000000 0.000000 VALUE( 1) 1.000000 0.000000 VALUE( 2) -1.000000 0.000000 D( 1, 1) 1.000000 0.000000 D( 1, 2) 0.000000 0.000000 D( 2, 1) 1.000000 0.000000 D( 2, 2) 0.000000 0.000000 D( 3, 1) 0.5000000 0.000000 D( 3, 2) 0.5000000 0.000000 D( 4, 1) 0.5000000 0.000000 D( 4, 2) 0.5000000 0.000000 Q( 1, 1) -1.000000 0.000000 Q( 1, 2) 2.000000 0.000000 Q( 1, 3) 0.000000 0.000000 Q( 1, 4) 0.000000 0.000000 Q( 2, 1) 2.000000 0.000000 Q( 2, 2) -1.000000 0.000000 Q( 2, 3) 2.000000 0.000000 Q( 2, 4) 0.000000 0.000000 Q( 3, 1) 0.000000 0.000000 Q( 3, 2) 2.000000 0.000000 Q( 3, 3) -1.000000 0.000000 Q( 3, 4) 2.000000 0.000000 Q( 4, 1) 0.000000 0.000000 Q( 4, 2) 0.000000 0.000000 Q( 4, 3) 2.000000 0.000000 Q( 4, 4) -1.000000 0.000000Row Slack or Surplus Dual Price1 20.00000 1.0000002 0.000000 0.0000003 5.000000 0.0000004 2.000000 0.0000005 0.000000 6.9999966 0.000000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000011 0.000000 0.00000012 0.000000 0.00000013 0.000000 0.000000三、实验结果(1)min=(x1^2+x2-11)^2+(x1+x2^2-7)^2(2)min (x1^2+12x2-1)^2+(49x1^2+49x2^2+84x1+2324x2-681)四、附件sets:set1/1..4/:x,c;b/1,2/:value;m(set1,b):d;link(set1,set1):Q;endsetsdata:c=6 8 4 -2;Q=-1 2 0 02 -1 2 00 2 -1 20 0 2 -1;value=1,-1;enddatamax=-1/2*x(1)*x(1)-1/2*x(2)*x(2)-1/2*x(3)*x(3)-1/2*x(4)*x(4)+2*x(1)*x(2 )+2*x(2)*x(3)+2*x(3)*x(4)+6*x(1)+8*x(2)+4*x(3)-2*x(4);@sum(set1(i):x(i))<=2;-3<=@sum(set1(i):x(i));-1<=x(1)*x(2)+x(3)*x(4);x(1)*x(2)+x(3)*x(4)<=1;@for(set1(i):x(i)=@sum(b(j):value(j)*d(i,j)));@for(set1(i):@sum(b(j):d(i,j))=1);@for(set1(i):@gin(x(i)));。
Lingo教程四 LINGO的函数
Lingo教程四 LINGO的函数有了前几节的基础知识,再加上本节的内容,你就能够借助于LINGO建立并求解复杂的优化模型了。
LINGO有9种类型的函数:1.基本运算符:包括算术运算符、逻辑运算符和关系运算符2.数学函数:三角函数和常规的数学函数3.金融函数:LINGO提供的两种金融函数4.概率函数:LINGO提供了大量概率相关的函数5.变量界定函数:这类函数用来定义变量的取值范围6.集操作函数:这类函数为对集的操作提供帮助7.集循环函数:遍历集的元素,执行一定的操作的函数8.数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出9.辅助函数:各种杂类函数4.1 基本运算符这些运算符是非常基本的,甚至可以不认为它们是一类函数。
事实上,在LINGO中它们是非常重要的。
4.1.1 算术运算符算术运算符是针对数值进行操作的。
LINGO提供了5种二元运算符:^乘方﹡乘/除﹢加﹣减LINGO唯一的一元算术运算符是取反函数“﹣”。
这些运算符的优先级由高到底为:高﹣(取反)^﹡/低﹢﹣运算符的运算次序为从左到右按优先级高低来执行。
运算的次序可以用圆括号“()”来改变。
例4.1算术运算符示例。
2﹣5/3,(2﹢4)/5等等。
4.1.2 逻辑运算符在LINGO中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。
在创建稀疏集时用在成员资格过滤器中。
LINGO具有9种逻辑运算符:#not# 否定该操作数的逻辑值,#not#是一个一元运算符#eq# 若两个运算数相等,则为true;否则为flase#ne# 若两个运算符不相等,则为true;否则为flase#gt# 若左边的运算符严格大于右边的运算符,则为true;否则为flase#ge# 若左边的运算符大于或等于右边的运算符,则为true;否则为flase#lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase#le# 若左边的运算符小于或等于右边的运算符,则为true;否则为flase#and# 仅当两个参数都为true时,结果为true;否则为flase#or# 仅当两个参数都为false时,结果为false;否则为true这些运算符的优先级由高到低为:高 #not##eq# #ne# #gt# #ge# #lt# #le#低 #and# #or#例4.2逻辑运算符示例2 #gt#3 #and#4 #gt# 2,其结果为假(0)。
LINGO软件中集合的使用
LINGO软件中集合的使用作者:陶思俊邹海林来源:《硅谷》2008年第24期[摘要]集合是LINGO软件中重要的组成要素。
介绍集合的定义,结合实例说明集合的基本用法。
对集合做分类,详细讲解派生集合中的稠密集合、稀疏集合的一般形式和使用方法。
[关键词]LINGO软件派生集合稠密集合稀疏集合中图分类号:O1-0文献标识码:A 文章编号:1671-7597(2008)1220074-01一、引言LINGO软件是由美国LINDO系统公司研制开发的求解大型数学规划问题的软件包,可以用来求解线性规划、整数规划、二次规划、非线性规划问题等。
在LINGO软件中,集合及其属性的使用占据了相当重要的作用。
集合能够实现只输入少数几行文字就能建立起含有大规模变量的目标函数或成千上万条约束条件的数学模型。
二、集合的定义和基本用法(一)集合的定义集合(set)是一组相关对象的全体,一个集合可以由一系列产品、任务或时间组成。
集合的定义包含以下几个部分:集合的名字(setname);集合的成员(member_list);集合中成员的属性(attribute_list)。
其表达式为以“SETS:”开始,以“ENDSETS”结束,各字母不区分大小写,集合成员之间可以以逗号或空格分开,各属性之间也以逗号分开。
一般形式为(以下语法中凡是在方括号“[]”中的内容,表示是可选项,即该项可以有也可以没有):SETS:setname[/member_list/][:attribute_list];ENDSETS(二)LINGO软件的数据段在集合的使用过程中,通常需要事先给出集合中的某些属性赋值以便LINGO求解,这些赋值构成LINGO的数据段。
因此,LINGO中的数据段一般与集合搭配使用。
数据段的表达式以“DATA:”开始,以“ENDDATA”结束。
常数列表(value_list)中的数据之间以逗号或空格分开,一般形式为DATA:attribute=value_list(常数列表);ENDDATA(三)集合循环函数集合循环函数是指对集合上的元素(一般指下标)进行循环操作的函数。
lingo的集合
Lingo中的集
对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。
Lingo 允许把这些相联系的对象聚合成集(sets)。
一旦把对象聚合成集,就可以利用集来最大限度的发挥Lingo建模语言的优势。
2.1 为什么使用集
是Lingo建模语言的基础,是程序设计最强有力的基本构件。
借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。
例如:对于100个货栈的运输问题,如果一个一个的写出全部约束将是可怕的工作量。
货栈1的运量<=存量
货栈2的运量<=存量
货栈3的运量<=存量………………………………
2.2 什么是集
Lingo可以采用最为简洁的表示方法:每个货栈的运输量<=存量
集是一群相联系的对象,这些对象也称为集的成员。
一个集可能是一系列产品、卡车或雇员。
每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。
属性值可以预先给定,也可以是未知的,有待于
Lingo求解。
例如:
(1)产品集中的每个产品可以有一个价格属性;
(2)卡车集中的每辆卡车可以有一个牵引力属性;
(3)雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。
lingo中的函数
lingo中的函数2007-09-01 15:11一、数学函数LINGO提供了大量的标准数学函数:@abs(x) 返回x的绝对值@sin(x) 返回x的正弦值,x采用弧度制@cos(x) 返回x的余弦值@tan(x) 返回x的正切值@exp(x) 返回常数e的x次方@log(x) 返回x的自然对数@lgm(x) 返回x的ga mma函数的自然对数(当x 为整数时lgm(x)=log(x-1)!;当x不为整数时,采用线性插值得到结果)。
@sign(x) 如果x<0返回-1;否则,返回1@floor(x) 返回x的整数部分。
当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数。
@pow(x,y)指数函数,返回x的y次方的值。
@sqr(x) 平方函数,返回x的平方(既x*x)的值。
@sqrt(x) 平方根函数,返回x的正的平方根的值。
@sign(x) 符号函数,返回x的符号值(x<0时返回-1,x>=0时返回+1)。
@mod(x,y) 模函数,返回x对y取模的结果,既x除以y的余数,这里x和y应该是整数@smax(x1,x2,…,xn) 返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn) 返回x1,x2,…,xn中的最小值二、变量定界函数@BND(L,X,U):限制L<=X<=U。
注意LING O中没有与LINDO命令SLB,SUB类似的函数@SLB和@SUB@BIN(X):限制X为0或1。
@FREE(X):取消对X的符号限制(即可取负数、0或正数)。
@GIN(X):限制X为正数。
三、概率函数1.@pbn(p,n,x)二项分布的累积分布函数。
当n和(或)x不是整数时,用线性插值法进行计算。
2.@pcx(n,x)自由度为n的χ2分布的累积分布函数。
之三(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教程 有图
从编辑菜单中选用“Select All”命令或按Ctrl+A组合键可选定当前窗口 中的所有内容。 7. 匹配小括号(Match Parenthesis)
从编辑菜单中选用“Match Parenthesis”命令、单击“Match Parenthesis”按钮或按Ctrl+P组合键可以为当前选中的开括号查找匹配的 闭括号。 8. 粘贴函数(Paste Function) 从编辑菜单中选用“Paste Function”命令可以将LINGO的内部函数粘贴 到当前插入点。
LINGO软件菜单——WINDOW
1. 命令行窗口(Open Command Window) 从窗口菜单中选用“Open Command
Window”命令或直接按Ctrl+1可以打开LINGO 的命令行窗口。在命令行窗口中可以获得命 令行界面,在“:”提示符后可以输入LINGO的 命令行命令。 2. 状态窗口(Status Window)
LINGO软件菜单——EIDT
1. 恢复(Undo) 从编辑菜单中选用“恢复”(Undo)命令或按Ctrl+Z组合键,将撤销上 次操作、恢复至其前的状态。 2. 剪切(Cut) 从编辑菜单中选用“剪切”(Cut)命令或按Ctrl+X组合键可以将当前选 中的内容剪切至剪贴板中。 3. 复制(Copy) 从编辑菜单中选用“复制”(Copy)命令、单击“复制”按钮或按Ctrl+C组 合键可以将当前选中的内容复制到剪贴板中。 4. 粘贴(Paste) 从编辑菜单中选用“粘贴”(Paste)命令、单击“粘贴”按钮或按Ctrl+V 组合键可以将粘贴板中的当前内容复制到当前插入点的位置。 5. 粘贴特定..(Paste Special。。) 与上面的命令不同,它可以用于剪贴板中的内容不是文本的情形. 6. 全选(Select All)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.运算符及其优先级
算术运算符:(数与数之间的运算,结果还是数) + - * / ^ .