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中的常见函数
@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唯一的一元算术运算符是取反函数“﹣”。
这些运算符的优先级由高到底为:高﹣(取反)^﹡/低﹢﹣运算符的运算次序为从左到右按优先级高低来执行。
运算的次序可以用圆括号“()”来改变。
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基本用法总结
Lingo基本⽤法总结Lingo基本⽤法总结(除集函数部分)LINGO是⽤来求解线性和⾮线性优化问题的简易⼯具。
Lingo免费版可以⽀持30个未知数,lingo破解版可以⽀持⼏万个未知数、⼏万个约束条件。
当你在windows下开始运⾏LINGO系统时,会得到类似下⾯的⼀个窗⼝:外层是主框架窗⼝,包含了所有菜单命令和⼯具条,其它所有的窗⼝将被包含在主窗⼝之下。
在主窗⼝内的标题为LINGO Model – LINGO1的窗⼝是LINGO的默认模型窗⼝,建⽴的模型都都要在该窗⼝内编码实现。
下⾯举两个例⼦。
例1.1 如何在LINGO中求解如下的LP问题:在模型窗⼝中输⼊如下代码:min=2*x1+3*x2;x1+x2>=350;x1>=100;2*x1+x2<=600;然后点击⼯具条上的按钮即可。
得到如下结果:所以当x1为250,x2为100时⽬标函数得到最⼤值。
算术运算符Lingo中变量不区分⼤⼩写,以字母开头不超过32个字符算术运算符是针对数值进⾏操作的。
LINGO提供了5种⼆元运算符:^乘⽅﹡乘/除﹢加﹣减LINGO唯⼀的⼀元算术运算符是取反函数“﹣”。
这些运算符的优先级由⾼到底为:⾼﹣(取反)^﹡/低﹢﹣运算符的运算次序为从左到右按优先级⾼低来执⾏。
运算的次序可以⽤圆括号“()”来改变。
例:在x1+x2>=350,x1>=100,2*x1+x2<=600的条件下求2*x1+3*x2的最⼩值在代码窗⼝中编写 min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后单击上⾯菜单lingo 菜单下solve 键即可。
数学函数标准数学函数:@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 的整数部分。
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的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繁忙概率。
Lingo基本用法总结
Lingo基本用法总结(除集函数部分)LINGO是用来求解线性和非线性优化问题的简易工具。
Lingo免费版可以支持30个未知数,lingo破解版可以支持几万个未知数、几万个约束条件。
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO中求解如下的LP问题:在模型窗口中输入如下代码:min=2*x1+3*x2;x1+x2>=350;x1>=100;2*x1+x2<=600;然后点击工具条上的按钮即可。
得到如下结果:所以当x1为250,x2为100时目标函数得到最大值。
算术运算符Lingo 中变量不区分大小写,以字母开头不超过32个字符算术运算符是针对数值进行操作的。
LINGO 提供了5种二元运算符: ^ 乘方 ﹡ 乘 / 除 ﹢ 加 ﹣ 减 LINGO 唯一的一元算术运算符是取反函数“﹣”。
这些运算符的优先级由高到底为:高 ﹣(取反) ^ ﹡/ 低 ﹢﹣运算符的运算次序为从左到右按优先级高低来执行。
运算的次序可以用圆括号“()”来改变。
例:在x1+x2>=350,x1>=100,2*x1+x2<=600的条件下求2*x1+3*x2的最小值 在代码窗口中编写 min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后单击上面菜单lingo 菜单下solve 键即可。
数学函数标准数学函数:@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 的整数部分。
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基本用法与运算函数
例如,目标函数中有求和表达式Σ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函数
六、集操作函数
• 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软件使用教程一般来说,一个优化模型将由以下三部分组成:1. 目标函数(Objective Function):要达到的目标。
2. 决策变量(Decision variables):每组决策变量的值代表一种方案。
在优化模型中需要确定决策变量的最优值,优化的目标就是找到决策变量的最优值使得目标函数取得最优。
3. 约束条件(Constraints):对于决策变量的一些约束,它限定决策变量可以取的值。
在写数学模型时,一般第一行是目标函数,接下来是约束条件,再接着是一些非负限制等。
在模型窗口输入如下代码:Max = 2*x1+3*x2;X1+2*x2<=8;4*x1<16;4*x2<12;注意:1.每一个lingo表达式最后要跟一个分号;2.多数电脑中没有符号,lingo中<=代替;为了方便可以用<代替小于等于,用>代替大于等于。
3.我们可以添加一些注释,增加程序的可读性。
注释以一个!(叹号必须在英文状态下输入,它会自动变为绿色)开始,以;(分号)结束。
4.Lingo中不区分变量名的大小写。
变量名必须以字母(A-Z)开头,后面的字符可以是字母、数字、下划线。
变量名不能超过32个字符。
Lingo程序的一些规则:1. 在Lingo中最开始都是“MAX=”或者“MIN=”开始表示求目标函数的最大或者最小值。
2. 变量和它前面的系数之间要用“*”连接,中间可以有空格。
3. 变量名不区分大小写,但必须以字母开始,不超过32个字符。
4. 数学表达式结束时要用分号“;”表示结束。
表达式可以写在多行上,但是表达式中间不能用分号。
5. 在电脑系统中一般没有“小于等于”符号,在Lingo采用“<=”来表示“小于等于”,用“>=”表示“大于等于”。
小于等于也可以用更简单的“<”表示,大于等于用“>”表示。
集合段:在我们已经得到的程序里有一些量没有定义,如WAREHOUSES( I),DEMAND( J), LINKS( I, J)。
lingo中一些常用的运算符
lingo中一些常用的运算符一、赋值运算符赋值运算符用于将一个值赋给一个变量。
常见的赋值运算符有=、+=、-=、*=、/=和%=。
在程序中,赋值运算符可以用于初始化变量的值,也可以用于更新变量的值。
赋值运算符的使用可以使程序更加简洁,提高代码的可读性。
例如,可以使用赋值运算符将一个数值赋给一个变量:int a = 10;这样,变量a的值就被初始化为10。
二、算术运算符算术运算符用于执行基本的算术操作,包括加法、减法、乘法、除法和取余等。
常见的算术运算符有+、-、*、/和%。
例如,可以使用算术运算符进行加法操作:int a = 10;int b = 20;int c = a + b;这样,变量c的值就是30。
三、比较运算符比较运算符用于比较两个值的大小关系,返回一个布尔值(true或常见的比较运算符有==、!=、>、<、>=和<=。
例如,可以使用比较运算符判断两个数是否相等:int a = 10;int b = 20;boolean result = (a == b);这样,变量result的值就是false。
四、逻辑运算符逻辑运算符用于对布尔值进行逻辑运算,包括与、或和非等。
常见的逻辑运算符有&&、||和!。
例如,可以使用逻辑运算符进行与运算:boolean a = true;boolean b = false;boolean result = (a && b);这样,变量result的值就是false。
五、位运算符位运算符用于对二进制数进行位运算,包括按位与、按位或、按位异或和按位取反等。
常见的位运算符有&、|、^和~。
例如,可以使用位运算符进行按位与运算:int a = 5;int result = a & b;这样,变量result的值就是1。
六、条件运算符条件运算符(三元运算符)用于根据条件选择两个值中的一个。
常见的条件运算符是?和:。
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用法
Lingo 是一种专门用于线性规划和整数规划的建模和求解语言。
它提供了一种简洁的方式来描述数学模型,并使用线性规划算法求解这些模型。
下面是Lingo 的一些基本用法示例:
1. 变量定义:
- 定义实数变量:`X = 0.5;`
- 定义整数变量:`INT_VAR Y;`
2. 目标函数定义:
- 最小化目标函数:`MIN = 2*X + 3*Y;`
- 最大化目标函数:`MAX = -X + 4*Y;`
3. 约束条件定义:
- 等式约束:`EQUATION C1: X + Y = 10;`
- 不等式约束:`INEQUATION C2: X >= 5;`
- 范围约束:`5 <= Y <= 20;`
4. 求解模型:
- 使用默认求解器求解:`SOLVE;`
- 指定求解器和参数:`SOLVE WITH LP_METHOD=3;` 以上是Lingo 的一些基本用法示例,实际上,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 迭 代次数
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是一种广泛应用于计算机编程和计算机科学领域的编程语言。
它是用于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软件一、变量定界函数(Variable Domain Functions )(1)取整变量:@GIN( variable_name);Example 1: @GIN( X); 使X为整数变量;Example 2: @GIN( PRODUCE( 5)); 使PRODUCE( 5)为整数变量;Example 3: @FOR( DAYS( I): @GIN( START( I)));使START( I),I DAYS∈全部为整数变量。
1.2 0,1变量:@BIN( variable_name);Example 1: @BIN( X); 使X取值为0或1;Example 2: @BIN( INCLUDE( 4)); 使变量INCLUDE( 4)取值为0或1;Example 3: @FOR( ITEMS: @BIN( INCLUDE));使INCLUDE(i),i t i m e s∈全部变量为0,1变量。
1.3 自由变量:@FREE( variable_name);Example 1: @FREE( X); 使X为自由变量;Example 2: @FREE( QUANTITY( 4)); 含义同上Example 3: @FOR( ITEMS: @FREE( QUANTITY)); 含义同上1.4 约束变量:@BND( lower_bound, variable_name, upper_bound); Example 1: @BND( -1, X, 1); [1,1]X∈-Example 2: @BND( 100, QUANTITY( 4), 200); 含义同上;Example 3: @FOR( ITEMS: @BND( 10, Q, 20)); 含义同上;Example 4: @FOR( ITEMS: @BND( QL, Q, QU)); 含义同上。
二、常见运算符2.1 代数运算符: +,-, *,/,^;2.2 逻辑运算符:(1)逻辑表达式运算 #AND#(与),#OR#(或) #NOT#(非)(2)数值表达式运算 #EQ#(等于), #NE#(不等于),#GT#(>) #GE#(≥) #LT#(<) #LE#(≤)(3)数值关系运算符:=,>=,<=。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
l i n g o的常用函数
This model paper was revised by the Standardization Office on December 10, 2020
Lingo基本用法总结(除集函数部分)
LINGO是用来求解线性和非线性优化问题的简易工具。
Lingo免费版可以支持30个未知数,lingo破解版可以支持几万个未知数、几万个约束条件。
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例如何在LINGO中求解如下的LP问题:
在模型窗口中输入如下代码:
min=2*x1+3*x2;
x1+x2>=350;
x1>=100;
2*x1+x2<=600;
然后点击工具条上的按钮即可。
得到如下结果:
所以当x1为250,x2为100时目标函数得到最大值。
算术运算符
Lingo中变量不区分大小写,以字母开头不超过32个字符
算术运算符是针对数值进行操作的。
LINGO提供了5种二元运算符:
^乘方﹡乘/除﹢加﹣减
LINGO唯一的一元算术运算符是取反函数“﹣”。
这些运算符的优先级由高到底为:
高﹣(取反)
^
﹡/
低﹢﹣
运算符的运算次序为从左到右按优先级高低来执行。
运算的次序可以用圆括号“()”来改变。
例:在x1+x2>=350,x1>=100,2*x1+x2<=600的条件下求2*x1+3*x2的最小值
在代码窗口中编写
min=2*x1+3*x2;
x1+x2>=350;
x1>=100;
2*x1+x2<=600;
然后单击上面菜单lingo菜单下solve键即可。
数学函数
标准数学函数:
@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中的最小值
边界限定函数:
@bin(x) 限制x为0或1
@bnd(L,x,U) 限制L≤x≤U
@free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数
@gin(x) 限制x为整数
辅助函数
1.@if(logical_condition,true_result,false_result)
@if函数将评价一个逻辑表达式logical_condition,如果为真,返回true_ result,否则返回false_result
在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+∞。
@free取消了默认的下界为0的限制,使变量也可以取负值。
@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。
例:求x1^2+3*x2-x1*x2+e^x3在x1+x2>=350;x1+x3<50;2*x1+x2+x3<=600;x1只能取0或1;x2为整数的条件下的最小值。
在代码窗口中编写
min=x1^2+3*x2-x1*x2+@exp(x3);
x1+x2>=350;
x1+x3<50;
2*x1+x2+x3<=600;
@bin(x1);@gin(x2);
以上是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#
例逻辑运算符示例
2 #gt#
3 #and#
4 #gt# 2,其结果为假(0)。
模型求解状态
@status()
返回LINGO求解模型结束后的状态:
0 Global Optimum(全局最优)
1 Infeasible(不可行)
2 Unbounded(无界)
3 Undetermined(不确定)
4 Feasible(可行)
5 Infeasible or Unbounded(通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界)
6 Local Optimum(局部最优)
7 Locally Infeasible(局部不可行,尽管可行解可能存在,但是LINGO并没有找到一个)
8 Cutoff(目标函数的截断值被达到)
9 Numeric Error(求解器因在某约束中遇到无定义的算术运算而停止)
通常,如果返回值不是0、4或6时,那么解将不可信,几乎不能用。
该函数仅被用在模型的数据部分来输出数据。