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最大值的语法

lingo最大值的语法Lingo是一种用于线性规划和整数规划问题求解的计算机软件。

它以其强大的求解能力和灵活的语法而闻名于世。

本文将介绍Lingo 语法中的最大值函数,并以此为标题展开讨论。

Lingo中的最大值函数可以用于求解问题中的最大值。

它的语法格式为"maximize"后面跟着一个表达式,表达式中可以包含变量、常数和运算符。

Lingo会自动寻找使得表达式达到最大值的变量取值,并将最大值返回。

在使用Lingo的最大值函数时,需要注意以下几点。

首先,表达式中的变量必须在之前进行定义或声明。

其次,表达式中可以使用多种运算符,包括加法、减法、乘法和除法等。

此外,还可以使用一些内置函数,如幂函数和指数函数等。

为了更好地理解Lingo的最大值函数,我们可以通过一个具体的例子进行说明。

假设有一个线性规划问题,要求在一定的约束条件下,使某个目标函数的值最大化。

我们可以使用Lingo的最大值函数来求解这个问题。

我们需要定义目标函数和约束条件。

假设目标函数为f(x)=2x+3y,约束条件为x+y≤10和2x+y≤15。

其中,x和y为变量。

然后,我们可以使用Lingo的最大值函数来求解这个问题。

Lingo的最大值函数的语法为"maximize f(x)",其中f(x)为目标函数。

在这个例子中,我们可以写成"maximize 2x+3y"。

然后,我们需要添加约束条件。

Lingo的约束条件语法为"subject to"后面跟着具体的约束条件。

在这个例子中,我们可以写成"subject to x+y≤10 and 2x+y≤15"。

我们需要指定变量的类型和取值范围。

Lingo的变量声明语法为"integer"或"binary"后面跟着具体的变量名称。

在这个例子中,我们可以写成"integer x,y"。

LINGO中的常见函数

LINGO中的常见函数

@bin(x) 限制x为0或1@bnd(L,x,U) 限制L≤x≤U@free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数@gin(x) 限制x为整数LINGO提供了大量的标准数学函数:@abs(x) 返回x的绝对值@sin(x) 返回x的正弦值,x采用弧度制@cos(x) 返回x的余弦值@tan(x) 返回x的正切值@exp(x) 返回常数e的x次方@log(x) 返回x的自然对数@lgm(x) 返回x的gamma函数的自然对数@sign(x) 如果x<0返回-1;否则,返回1@floor(x) 返回x的整数部分。

当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数。

@smax(x1,x2,…,xn) 返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn) 返回x1,x2,…,xn中的最小值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^乘方﹡乘/除﹢加﹣减LINGO唯一的一元算术运算符是取反函数“﹣”。

这些运算符的优先级由高到底为:高﹣(取反)^﹡/低﹢﹣运算符的运算次序为从左到右按优先级高低来执行。

运算的次序可以用圆括号“()”来改变。

2.Lingo优化软件的使用方法

2.Lingo优化软件的使用方法

然后再在求解的基础上,在菜单上选择lingo/range(ctr+R), 计算机会自动对每个变量和资源用有量进行范围分析:保 持最优基不变的情况下,变量或约束行的右端允许增加和 减少的量。注意:对整数规划和0-1规划灵敏度分析意义不 大。
Ranges in which the basis is unchanged:
数学模型如下:
max z [ t (i) r (i)]x (i) s(i) y(i)
i 1 i 1
3
3
s.t.
3 c ijx i b( j) j 1,2,3 i 1 x (i) My(i) i 1,2,3 ___ x (i) 0, x Z y(i) 0,1 i 1,2,3
产品1
资源A 资源B 资源C 2 2 1
产品2 产品3
4 3 2 8 4 3
资源量
500 300
单件可变费 固定费用 单件售价
4 100 8
5 150 10
6 200 12
分析问题和设置变量 x(i)表示第i种产品的产量;i=1,2,3 c(i,j)表示第i种产品对第j种资源的消耗量;i=1,23,j=1,23 b(j)表示第j种资源的拥有量; r(i)表示第i种产品的单件可变费用; s(i)表示第i种产品的固定费用; t(i)表示第i种产品的单位售价。 总收益=销售收入-固定费用-可变费用,由于不知道第i种产品 生产与否,所以,必须给定第i种产品的选择变量 y(i)表示第I种产品的生产选择,y(i)=0,表示不生产第i种产品, y(i)=1表示生产第i种产品。
#LT#(小于) #LE#(小于等于) 逻辑运算的结果只有“真”(TRUE)和“假”(FALES), Llingo用1表示True,其它的都是False。

LINGO的函数

LINGO的函数

例15 借用例13,说明@text用法。 model: sets: days/mon..sun/: required,start; endsets data: !每天所需的最少职员数; required = 20 16 13 16 19 14 12; @text(‘d:\out.txt’)=days '至少需要的职员数:' start; enddata !最小化每周所需职员数; min=@sum(days: start); @for(days(J): @sum(days(I) | I #le# 5: start(@wrap(J+I+2,7))) >= required(J)); end
LINGO 的集处理函数
3.@wrap(index,limit) 返回j=index-k*limit,k是整数,取适当值保证j落在 [1,limit]内,相当于index模limit再加1。该函数在循环、 多阶段计划编制中特别有用。
4.@size(set_name) 返回集set_name的成员个数。 模型中明确给出集大小时最好使用该函数。优点是使模型更 加数据中立,集大小改变时也更易维护。
LINGO 的集处理函数
2.@sum 返回遍历指定的集成员的一个表达式的和。 例11 求向量[5,1,3,4,6,10]前5个数的和。 model: data: N=6; enddata sets: number/1..N/:x; endsets data: x = 5 1 3 4 6 10; enddata s=@sum(number(I) | I #le# 5: x); end
LINGO 的集循环函数
遍历整个集进行操作。 语法格式: @function(setname[(set_index_list)[|conditional_qualifier] ]:expression_list); @function相应于下面罗列的四个集循环函数之一; Setname:遍历的集; set_ index_list:集索引列表; conditional_qualifier:限制集循环函数范围,当集循环函数遍 历集的每个成员时,LINGO都要对conditional_qualifier进行评价 ,若结果为真,则对该成员执行@function操作,否则跳过,继续 执行下一次循环。 expression_list:被应用到每个集成员的表达式列表, 当用的是@for函数时,expression_list可包含多个表达式,其间 用分号隔开。这些表达式将被作为约束加到模型中。

Lingo软件学习

Lingo软件学习

算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符: ^ 乘方 ﹡ 乘 / 除 ﹢ 加 ﹣ 减 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
Lingo以Model:开头,以end结束,这两个语句单独成行
补充:关于与Excel中数据的链接
先将Excel中的数据复制到剪切板上,然后将光标置于要插入 数据的部位,再在lingo编辑菜单中选择选择性粘贴(Paste Special),注意粘贴与粘贴链接的区别!
四、Lingo中部分函数介绍
LINGO中的函数有基本元算符,数学函数,金融函数,变 量限定函数等,全部函数请参照Edit|paste funtion。
对例一结果的相关说明
例一运行后得到如下结果:
Global optimal solution found. Objective value: Total solver iterations: Variable X1 X2 Value 250.0000 100.0000 800.0000 2 Reduced Cost 0.000000 0.000000

lingo函数命令

lingo函数命令

集合操作函数
@IN( set_name, primitive_index_1 [, primitive_index_2 ...]) 判断一个集合中是否含有某个索引值。如果集合set_name中包含 由索引primitive_index_1 [, primitive_index_2 ...]所对应元素,则返 回1(逻辑值“真”),否则返回0(逻辑值“假”)。索引用“&1”、 “&2”或@INDEX函数等形式给出,这里“&1”表示对应于第1个 父集合的元素的索引值,“&2”表示对应于第2个父集合的元素的 索引值。 例:定义一个集合STUDENTS(基本集合),派生出集合PASSED和 FAILED,定义: SETS: STUDENTS / ZHAO, QIAN, SUN, LI/:; PASSED( STUDENTS) /QIAN,SUN/:; FAILED( STUDENTS) | #NOT# @IN( PASSED, &1):; ENDSETS
• @PFS(A,X,C) :当负荷上限为A,顾客数为C,并行服务器数 量为X时,有限源的Poisson服务系统的等待或返修顾客数的期 望值。(A是顾客数乘以平均服务时间,再除以平均返修时间。 当C和(或)X不是整数时,采用线性插值进行计算)。
概率相关函数
• @PFD(N,D,X):自由度为N和D的F分布的分布函数在X点的取 值。
• @FPL(I,N) 返回如下情形下总的净现值:单位时段 利率为I,第N个时段支付单位费用。根据复利的计 算公式,很容易知道 1 @FPL(I,N) ( 1 I ) N 。
概率相关函数
• @PSN(X):标准正态分布函数,即返回标准正态分布的分布函 数在X点的取值。 • @PSL(X):标准正态线性损失函数,即返回 MAX(0, Z-X)的期 望值, 其中 Z为标准正态随机变量。 • @PPS(A,X):Poisson分布函数,即返回均值为A的Poisson分布 的分布函数在X点的取值(当X不是整数时,采用线性插值进行 计算)。 • @PPL(A,X):Poisson分布的线性损失函数,即返回 MAX(0, ZX)的期望值, 其中 Z为均值为A的Poisson随机变量。 • @PBN(P,N,X):二项分布函数,即返回参数为(N,P)的二项 分布的分布函数在X点的取值(当N和(或)X不是整数时,采 用线性插值进行计算) 。

Matlab编程 - 第六章 lingo软件基础

Matlab编程 - 第六章 lingo软件基础
第六章
LINGO软件基础
1
第六章 lingo软件简介 LINGO(linear interactive and general optimiuzer) 的基本含义是交互式的线性和离散化求解器。 最初是由芝加哥大学的Linus Schrage教授于1980年 开发的. 是主要用来求解优化问题的软件。 最大特色:允许优化问题中的决策变量为整数,即可 求解整数规划,而且执行速度快。
x2+2*x4+x5+3*x6>=20; x3+x5+2*x7>=15; @gin(x1);@gin(x2);@gin(x3); @gin(x4);@gin(x5);@gin(x6); @gin(x7);
x3 x5 2 x7 15,
xi 为整数
结论:按第1种模式切5根,第2种模式切5根,第5种 模式切15根,共需切割25根原料钢管。
9
二、LINGO中集 集是一群相联系的对象,这些对象也称为集的成员。 每个集成员可能有一个或多个与之有关联的特征, 这些特征称为属性。 LINGO有两种类型的集:原始集和派生集。 原始集是由一些最基本的对象组成的。 派生集是用一个或多个其它集来定义的。
10
1.定义原始集 sets: setname/member_list /:attribute_list; endsets
Feasible solution found. Total solver iterations: Variable I1 I2
0 Value 2.000000 3.000000
27
4.集循环函数:@for, @sum, @max, @min 用法:(1) @for(setname: expression_list) 对集合setnane的每个元素独立生成expression_list。 (2) @for(setname(i)|logical_condition:expression_list) 对集合setnane中满足logical_condition的成员独立生成 expression_list。 data: 如: x=3,8,5,7,6,-2; sets: enddata niu/1..6/:x,y,z; @ for(niu:y=x^2+2); endsets @for(niu(i)|i#le#3:z(i)=x(i)-3); @for(niu(i)|i#gt#3:z(i)=x(i)^2-2);

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使用说明(比较简单)

Lingo介绍Lingo是美国LINDO系统公司(Lindo Symtem Inc)开发的求解数学规划系列软件中的一个(其他软件为LINGDO,GINO,What’s Best等),它的主要功能是求解大型线性、非线性和整数规划问题,目前的版本是lingo11.0。

lingo分为Demo、solve suite、hyper、industrial、extended等六类不同版本,只有Demo版本是免费的,其他版本需要向LINDO系统公司(在中国的代理商)购买,Lingo的不同版本对模型的变量总数、非线性变量个数、整型变量个数和约束条件的数量做出不同的限制(其中extended版本无限制)。

Lingo的主要功能特色为:(1)既能求解线性规划,也有较强的求解非线性规划的能力;(2)输入模型简练直观;(3)运行速度快、计算能力强;(4)内置建模语言,提供几十种内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型;(5)将集合的概念引入编程语言,很容易将实际问题转换为Lingo语言;(6)能方便地与excel、数据库等其他软件交换数据。

学校图书馆40本《lingo和excel在数学建模中的应用》,袁新生、邵大宏、郁时炼主编,科学出版社Lingo程序设计简要说明在数学建模中会遇到如规划类的题型,在这种模型中总存在着一个目标,并希望这个目标的取值尽可能的大或小,同时与这个目标有关的一系列变量之间存在一些约束。

在构造出目标函数和约束条件的表达式后,我们需要对求出这个最值和各变量的取值。

一般我们用LINGO来对模型进行求解,本文将通过举一个简单的例子,围绕这个例子逐步学习LINGO 的使用。

LINGO只是一个求解工具,我们主要的任务还是模型的建立!当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。

在主窗口内的标题为LINGO Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。

lingo函数

lingo函数

六、集操作函数
• 2.@index([set_name,] primitive_set_element) 该函数 返回在集set_name中原始集成员primitive_set_element的 索引。如果set_name被忽略,那么LINGO将返回与 primitive_set_element匹配的第一个原始集成员的索引。 如果找不到,则产生一个错误。 • 例8 如何确定集成员(B,Y)属于派生集S3。 • sets: • S1/A B C/; • S2/X Y Z/; • S3(S1,S2)/A X, A Z, B Y, C X/; • endsets • X=@in(S3,@index(S1,B),@index(S2,Y)); • 看下面的例子,表明有时为@index指定集是必要的。
三、金融函数
• 目前LINGO提供了两个金融函数。 • 1.@fpa(I,n) • 返回如下情形的净现值:单位时段利率为I, 连续n个时段支付,每个时段支付单位费用。 若每个时段支付x单位的费用,则净现值可 用x乘以@fpa(I,n)算得。@fpa的计算公式 为 • 净现值就是在一定时期内为了获得一定收 益在该时期初所支付的实际费用。
二、数学函数
• @lgm(x) 返回x的gamma函数的自然对数 • @sign(x) 如果x<0返回-1;否则,返回1 • @floor(x) 返回x的整数部分。当x>=0时, 返回不超过x的最大整数;当x<0时,返回 不低于x的最大整数。 • @smax(x1,x2,…,xn) 返回x1,x2,…,xn 中的最大值 • @smin(x1,x2,…,xn) 返回x1,x2,…,xn 中的最小值
四、概率函数
• 10.@psl(x) 单位正态线性损失函数,即返回 max(0,z-x)的期望值,其中随机变量z服从标准正态分 布。 • 11.@psn(x) 标准正态分布的累积分布函数。 • 12.@ptd(n,x) 自由度为n的t分布的累积分布函数。 • 13.@qrand(seed) 产生服从(0,1)区间的拟随机数。 @qrand只允许在模型的数据部分使用,它将用拟随机 数填满集属性。通常,声明一个m×n的二维表,m表 示运行实验的次数,n表示每次实验所需的随机数的个 数。在行内,随机数是独立分布的;在行间,随机数 是非常均匀的。这些随机数是用“分层取样”的方法 产生的。

lingo中的常用函数

lingo中的常用函数

lingo中的常用函数一、数学函数LINGO提供了大量的标准数学函数:@abs(x) 返回x的绝对值@sin(x) 返回x的正弦值,x采用弧度制@cos(x) 返回x的余弦值@tan(x) 返回x的正切值@exp(x) 返回常数e的x次方@log(x) 返回x的自然对数@lgm(x) 返回x的gamma函数的自然对数(当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。

注意LINGO中没有与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分布的累积分布函数。

3.@peb(a,x)当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。

4.@pel(a,x)当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。

lingo简介(1)

lingo简介(1)

2
迭代次数 目标函数最优值
Reduced Cost 0.000000 影响值的变化率 0.000000
松弛变量值
Slack or Surplus Dual Price 800.0000 -1.000000 0.000000 -4.000000 150.0000 0.000000 对偶价格 0.000000 1.000000 250.0000 0.000000 100.0000 0.000000
LINGO程序(模型)的框架: 程序(模型)的框架: 程序
(1)集合段 集合段 (2)数据段 数据段 (3)优化目标与约束段 优化目标与约束段 (4)初始段 初始段 (5)数据预处理段 数据预处理段
LINGO软件的求解过程 软件的求解过程
1. 确定常数 2. 识别类型 LINGO预处理程序 预处理程序 LP QP NLP ILP IQP 线性优化求解程序 1. 单纯形算法 2. 内点算法 选) 内点算法(选 IP 分枝定界管理程序 INLP
setname(parent_set_list)[/member_list/][:attribute_list]; ②设置成员资格过滤器: 设置成员资格过滤器: 成员资格过滤器以“ 开头 之后为过滤条件。 开头, 成员资格过滤器以“|”开头,之后为过滤条件。 例2.5 sets: num_i/1..3 /; num_j/1..3/; link(num_i,num_j)|&1#gt#1#and#&2#lt#2:x; endsets &1:表示第一个原始父集的索引 :
模型代码如下: 模型代码如下: max=72*x1+64*x2; x1+x2<=50; 12*x1+8*x2<=480; 3*x1<=100;

LINGO软件的简介与使用

LINGO软件的简介与使用

LINGO软件的使用
运算符的优先级: 优先级 运算符 最高 #NOT# —(负号) ^ * / + —(减法) #EQ# #NE# #GT# #GE# #LT# #LE# #AND# #OR# <(=) = >(=) 最低
LINGO软件的使用
常用函数: ABS(X) 绝对值函数 COS(X) 余弦函数 EXP(X) 指数函数 FLOOR(X) 取整函数 LOG(X) 自然对数函数 MOD(X,Y) 模函数 POW(X,Y) 指数函数 SIGN(X) 符号函数 SIN(X) 正弦函数 SQR(X) 平方函数 SQRT(X) 平方根函数 TAN(X) 正切函数 BIN(X) 限定0-1变量 FREE(X) 取消符号限制 GIN(X) 限制整数 等等还有很多~
absx绝对值函数cosx余弦函数expx指数函数floorx取整函数logx自然对数函数modxy模函数powxy指数函数signx符号函数sinx正弦函数sqrx平方函数sqrtx平方根函数tanx正切函数binx限定01变量freex取消符号限制ginx限制整数等等还有很多lingosolverstatus求解程序状态框
LINGO软件的使用
Solver Status 求解程 序状态框: Model 模型类型 State 解的状态 Objective 最优值 Infeasibility 不满足约 束总数 Iterations 迭代次数
பைடு நூலகம்
LINGO软件的使用
Solution Report 解答报告: 解的状态 Objective value 最优值 Extended solver steps 特 殊求解程序运行步数 Total solver iterations 迭 代次数

floor函数在lingo中的使用方法及实例

floor函数在lingo中的使用方法及实例

floor函数在lingo中的使用方法及实例(本文将介绍在LINGO中使用floor函数的方法及实例。

)一、floor函数的概念和作用在数学中,floor函数是指向下取整函数,即返回不大于其参数的最大整数。

在LINGO编程语言中,floor函数也被引入,用于对数值进行向下取整操作。

它可以将一个实数转换为比它小的最大整数。

二、floor函数的语法在LINGO中,floor函数的语法如下:floor(x)其中,x为待取整的数值。

三、floor函数的使用方法使用floor函数的一般步骤如下:步骤1:定义一个实数变量,用于存储待取整的数值。

步骤2:使用floor函数对待取整的数值进行取整操作。

步骤3:将取整后的结果赋值给另一个变量,或直接使用取整后的结果进行相关计算、输出等操作。

四、floor函数的实例演示下面通过几个实例演示,展示在LINGO中使用floor函数的具体应用方法。

实例1:求取整数假设有一个实数变量x=3.78,我们要使用floor函数对其进行取整操作,并输出取整后的结果。

x = 3.78y = floor(x)print "取整后的结果为:", y该代码将会输出:取整后的结果为:3实例2:向下取整用于约束条件假设有一个线性规划问题,其中x和y为决策变量,且都是非负整数。

现在要求x和y满足以下约束条件:x ≤floor(3.78),y ≤floor(7.92)。

我们可以使用floor函数将浮点数约束为整数。

minimize Objective: ...subject to Constraint1: x <= floor(3.78)subject to Constraint2: y <= floor(7.92)实例3:向下取整用于计算假设有一个数学模型,要求计算某个数值的下一个整数。

我们可以使用floor函数进行向下取整操作,然后再加1来得到下一个整数。

x = 3.78y = floor(x) + 1print "下一个整数为:", y该代码将会输出:下一个整数为:4五、总结上述是在LINGO中使用floor函数的方法及实例的介绍。

Lingo简介

Lingo简介

如何在LINGO中求解如下问题:
线性规划问题
Lingo程序如下:
model: min = 2*x1+3*x2;
x1+x2>=350;
x1>=100;
2*x1+x2<=600;
end
Lingo中的常用函数()
• @bin(x) 限制x为0或1 • @bnd(L,x,U) 限制L≤x≤U • @free(x) 取消对变量 x 的默认下 界为0的限制,即x可以取任意实数 • @gin(x) 限制x为整数 • @if(x#eq#0,100,0) 如果x=0,就返回100, 否则 ,返回0
原油采购程序
Max = 4.8*x11+4.8*x21+5.6*x12+5.6*x22-c; X11+x12<=500+x; x21+x22<=1000;x<1500;
x11-x21>0; 2*x12-3*x22>=0;
C=@if(x#le#500,10*x,
@if(x#le#1000,8*x+1000,6*x+3000));
cij j=1 j=2 j=3 j=4 i=1 66.8 75.6 87 58.6 i=2 57.2 66 66.4 53 i=3 78 67.8 84.6 59.4 i=4 70 74.2 69.6 57.2 i=5 67.4 71 83.8 62.4
若选择队员i参加泳姿j 的比赛,记xij=1, 否则记xij=0
B
x21 x22
x11 x12
甲(A50%) 乙(A60%)
目标函数中c(x)不是线性函数,是非线性规划;
对于用分段函数定义的c(x),一般的非线性规划软 件也难以输入和求解; 想办法将模型化简,用现成的软件求解。

lingo入门教程

lingo入门教程

lingo入门教程Lingo是一种广泛应用于计算机编程和计算机科学领域的编程语言。

它是用于Adobe Director(一种多媒体应用程序)中的脚本语言,用于控制多媒体元素和动画。

Lingo的语法比较简单易懂,有助于创建交互式和多媒体项目。

下面是一些Lingo的基本概念和用法。

1. 变量(Variables): 在Lingo中,变量用于存储数据值。

变量可以是数字、文本或其他数据类型。

要创建变量,可以使用关键字`global`或`local`,后跟变量名和初始值(可选)。

例如:```global myVariable = 10local myText = "Hello World"```2. 条件语句(Conditional statements): 条件语句用于根据条件执行特定的代码块。

常用的条件语句有`if-then`和`if-then-else`。

例如:```if myVariable > 5 thenalert "Value is greater than 5"elsealert "Value is less than or equal to 5"end if```3. 循环(Loops): 循环用于重复执行一段代码块,直到满足指定条件为止。

Lingo提供了`repeat`和`repeat while`循环语句。

例如:```repeat with i = 1 to 5put iend repeat```4. 函数(Functions): 函数是一组预定义的代码,用于执行特定的任务。

Lingo提供了许多内置函数,如`alert`、`put`等。

您还可以创建自己的函数。

例如:```on multiplyNumbers(a, b)return a * bend multiplyNumbersput multiplyNumbers(2, 4) -- 输出8```这些只是Lingo的一些基本概念和用法。

LINGO软件介绍

LINGO软件介绍

基本模型
获利24元/kg 0.8kg B1 获利16元/kg 获利32元/kg 0.75kg B2 x3 kg B1, x4 kg B2 获利44元/kg
变量 目标 函数 约束 条件
x5 kg A1加工B1, x6 kg A2加工B2 利润 原料 供应 劳动 时间
max z 24x1 16x2 44x3 32x4 3x5 3x6
• 35元可买到1桶牛奶,要买吗?
35 <48, 应该买! 2元!
• 聘用临时工人付出的工资最多每小时几元?
敏感性分析 (“LINGO|Ranges” )
Ranges in which the basis is unchanged: Objective Coefficient Ranges Current Allowable Allowable Variable Coefficient Increase Decrease X1 72.00000 24.00000 8.000000 X2 64.00000 8.000000 16.00000 Righthand Side Ranges Row Current Allowable Allowable RHS Increase Decrease MILK 50.00000 10.00000 6.666667 TIME 480.0000 53.33333 80.00000 CPCT 100.0000 INFINITY 40.00000
例1 加工奶制品的生产计划 问 题
1桶 牛奶 或 12h 3kgA1 4kgA2 获利24元/kg 获利16元/kg
8h 每天: 50桶牛奶 时间480h
至多加工100kgA1
制订生产计划,使每天获利最大 • 35元可买到1桶牛奶,买吗?若买,每天最多买多少? • 可聘用临时工人,付出的工资最多是每小时几元? • A1的获利增加到 30元/kg,应否改变生产计划?
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.@pfd(n,d,x)
自由度为n和d的F分布的累积分布函数。
6.@pfs(a,x,c)
当负荷上限为a,顾客数为c,平行服务器数量为x时,有限源的Poisson服务系统的
等待或返修顾客数的期望值。a是顾客数乘以平均服务时间,再除以平均返修时间。当c和
(或)x不是整数时,采用线性插值进行计算。
7.@phg(pop,g,n,x)
以取消默认下界为0的约束。
4.6集操作函数
LINGO提供了几个函数帮助处理集。
1.@in(set_name,primitive_index_1 [,primitive_index_2,…])
如果元素在指定集中,返回1;否则返回0。
例4.7全集为I,B是I的一个子集,C是B的补集。
sets:
I/x1..x4/;
是非常重要的。
10
4.1.1算术运算符
算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符:
^乘方
﹡乘
/除
﹢加
﹣减
LINGO唯一的一元算术运算符是取反函数“﹣”。
这些运算符的优先级由高到底为:
高﹣(取反)

﹡/
低﹢﹣
运算符的运算次序为从左到右按优先级高低来执行。运算的次序可以用圆括号“()”来
#eq#若两个运算数相等,则为true;否则为flase
#ne#若两个运算符不相等,则为true;否则为flase
#gt#若左边的运算符严格大于右边的运算符,则为true;否则为flase
#ge#若左边的运算符大于或等于右边的运算符,则为true;否则为flase
#lt#若左边的运算符严格小于右边的运算符,则为true;否则为flase
低<= = >=
4.2数学函数
LINGO提供了大量的标准数学函数:
@abs(x)返回x的绝对值
@sin(x)返回x的正弦值,x采用弧度制
@cos(x)返回x的余弦值
@tan(x)返回x的正切值
@exp(x)返回常数e的x次方
@log(x)返回x的自然对数
@lgm(x)返回x的gamma函数的自然对数
为a的Poisson分布。
9.@pps(a,x)
均值为a的Poisson分布的累积分布函数。当x不是整数时,采用线性插值进行计算。
10.@psl(x)
单位正态线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从标准正态
分布。
11.@psn(x)
标准正态分布的累积分布函数。
12.@ptd(n,x)
!正态分布随机数;
@psn( znorm( I)) = u( I);
14
!和自由度为2的t分布随机数;
@ptd( 2, zt( I)) = u( I);
!ZNORM和ZT可以是负数;
@free( znorm( I)); @free( zt( I));
);
end
4.5变量界定函数
变量界定函数实现对变量取值范围的附加限制,共4种:
@sign(x)如果x<0返回-1;否则,返回1
@floor(x)返回x的整数部分。当x>=0时,返回不超过x的最大整数;当
x<0时,返回不低于x的最大整数。
@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值
@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值
例4.3给定一个直角三角形,求包含该三角形的最小正方形。
series/1..15/: u, znorm, zt;
endsets
!第一个均匀分布随机数是任意的;
u( 1) = @rand( .1234);
!产生其余的均匀分布的随机数;
@for(series( I)| I #GT# 1:
u( I) = @rand( u( I - 1))
);
@for( series( I):
#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该
关系是否被满足:满足为真,不满足为假。
LINGO有三种关系运算符:“=”、“<=”和“>=”。LINGO中还能用“<”表示小于等
11
于关系,“>”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,
@bin(x)限制x为0或1
@bnd(L,x,U)限制L≤x≤U
@free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数
@gin(x)限制x为整数
在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+∞。@free取消
了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可
§4 LINGO函数
有了前几节的基础知识,再加上本节的内容,你就能够借助于LINGO建立并求解复杂
的优化模型了。
LINGO有9种类型的函数:
1.基本运算符:包括算术运算符、逻辑运算符和关系运算符
2.数学函数:三角函数和常规的数学函数
3.金融函数:LINGO提供的两种金融函数
4.概率函数:LINGO提供了大量概率相关的函数
B(I)/x2/;
C(I)|#not#@in(B,&1):;
endsets
2.@index([set_name,] primitive_set_element)
该函数返回在集set_name中原始集成员primitive_set_element的索引。如果set_name
被忽略,那么LINGO将返回与primitive_set_element匹配的第一个原始集成员的索引。如
14.@rand(seed)
返回0和1间的伪随机数,依赖于指定的种子。典型用法是U(I+1)=@rand(U(I))。注
意如果seed不变,那么产生的随机数也不变。
例4.6利用@rand产生15个标准正态分布的随机数和自由度为2的t分布的随机数。
model:
!产生一列正态分布和t分布的随机数;
sets:
解:如图所示。
,sincos,cos,sin xbxaDExbADxaCE +===
求最小的正方形就相当于求如下的最优化问题:
LINGO代码如下:
model:
sets:
object/1..3/: f;
endsets
data:
a, b = 3, 4; !两个直角边长,修改很方便;
enddata
f(1) = a * @sin(x);
低#and# #or#
例4.2逻辑运算符示例
2 #gt# 3 #and# 4 #gt# 2,其结果为假(0)。
4.1.3关系运算符
在LINGO中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小
于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、
机数是用“分层取样”的方法产生的。
例4.5
model:
data:
M=4; N=2; seed=1234567;
enddata
sets:
rows/1..M/;
cols/1..N/;
table(rows,cols): x;
endsets
data:
X=@qrand(seed);
enddata
end
如果没有为函数指定种子,那么LINGO将用系统时间构造种子。
果找不到,则产生一个错误。
例4.8如何确定集成员(B,Y)属于派生集S3。
sets:
S1/A B C/;
S2/X Y Z/;
S3(S1,S2)/A X, A Z, B Y, C X/;
endsets
X=@in(S3,@index(S1,B),@index(S2,Y));
看下面的例子,表明有时为@index指定集是必要的。
1.@fpa(I,n)
返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单位费
用。若每个时段支付x单位的费用,则净现值可用x乘以@fpa(I,n)算得。@fpa的计算公式
净现值就是在一定时期内为了获得一定收益在该时期初所支付的实际费用。
例4.4贷款买房问题贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每
f(2) = b * @cos(x);
f(3) = a * @cos(x) + b * @sin(x);
min = @smax(f(1),f(2),f(3));
@bnd(0,x,1.57);
end
12
在上面的代码中用到了函数@bnd,详情请见4.5节。
4.3金融函数
目前LINGO提供了两个金融函数。
二项分布的累积分布函数。当n和(或)x不是整数时,用线性插值法进行计算。
2.@pcx(n,x)
自由度为n的χ
2
分布的累积分布函数。
3.@peb(a,x)
当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。
4.@pel(a,x)
当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。
#le#若左边的运算符小于或等于右边的运算符,则为true;否则为flase
#and#仅当两个参数都为true时,结果为true;否则为flase
#or#仅当两个参数都为false时,结果为false;否则为true
这些运算符的优先级由高到低为:
高#not#
#eq# #ne# #gt# #ge# #lt# #le#
如果需要严格小于和严格大于关系,比如让A严格小于B:
A
相关文档
最新文档