数学实验lingo派生集合与函数
- 格式:pdf
- 大小:100.61 KB
- 文档页数:3
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 中使用集合例:某帆船公司需要决定下四个季度的帆船生产量。
下四个季度的帆船需求量分别是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中的集合用法很多,这里主要通过几个例题来进行讲解对于每一个问题,都要先找到对应的目标函数,然后对相应值进行初始化,然后找到约束条件等进行求解例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的最优行驶路线的路长:。
实验报告课程名称:模型优化与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有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软件中集合的使用作者:陶思俊邹海林来源:《硅谷》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 允许把这些相联系的对象聚合成集(sets)。
一旦把对象聚合成集,就可以利用集来最大限度的发挥Lingo建模语言的优势。
2.1 为什么使用集
是Lingo建模语言的基础,是程序设计最强有力的基本构件。
借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。
例如:对于100个货栈的运输问题,如果一个一个的写出全部约束将是可怕的工作量。
货栈1的运量<=存量
货栈2的运量<=存量
货栈3的运量<=存量………………………………
2.2 什么是集
Lingo可以采用最为简洁的表示方法:每个货栈的运输量<=存量
集是一群相联系的对象,这些对象也称为集的成员。
一个集可能是一系列产品、卡车或雇员。
每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。
属性值可以预先给定,也可以是未知的,有待于
Lingo求解。
例如:
(1)产品集中的每个产品可以有一个价格属性;
(2)卡车集中的每辆卡车可以有一个牵引力属性;
(3)雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。
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 中的基本集合与派生集合例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这就是本题的优化模型。