lingo数学建模使用指南
来自: 更新日期:早些时候
~
相信参加过或者学习过《数学建模》这门课程的小伙伴对这个软件都不陌生,lingo可以解决好多数学模型问题。那么好,今天我也学到了这门课,就想着写一个关于lingo的试用总结,方便自己以后复习观看,当然也欢迎大家进行指正。
Lingo软件是美国Lindo公司的产品,主要用来求解优化问题。它是一个非常强大的软件,可以求解大部分优化问题,包括线性规划、二次规划、整数规划、运输问题等。
1)LINGO的数学规划模型包含目标函数、决策变量、约束条件三个要素。
2)在LINGO程序中,每一个语句都必须要用一个英文状态下的分号结束,一个语句可以分几行输入。
3)LINGO的注释以英文状态的!开始,必须以英文状态下的分号结束。
4)LINGO的变量不区分字母的大小写,必须以字母开头,可以包含数字和下划线,不超过32个字符。
5)LINGO程序中,只要定义好集合后,其他语句的顺序是任意的。
6)LINGO中的函数以“@”开头。
7)LINGO程序默认所有的变量都是非负的。
8)LINGO程序中"<"或">"号与"<="或">="号功能相同。
集合部分的语法为
sets: 集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1; 集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2; 派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3; endsets
基本集合:通过列举全部元素所定义的是原始(Primary Set),又被称为基本集合。
派生集合:通过原始集合派生所定义的集合是派生集合(Derived Set)。
注:原始集合和派生集合都在集合段中定义。集合段以SETS(或sets)开始,以ENDSETS(endsets)结束。
定于原始集合的语法:
集合名[/集合的元素列表/] [集合的属性列表];
集合的命名规则集合的元素命名规则
集合元素的命名也要遵循标识符的命名规范。集合元素命名有特例:集合元素可以是整数。
集合的元素列表
显式罗列:
将集合的每一个元素都完完整整的写出来的方式。
item/1 2 3 4 5 6/;
隐式罗列:
集合中的元素有一定的递增规律,写成起始元素…终止元素的形式。
ITEM/1..6/;
隐式罗列的全部列表形式:
集合的属性列表
集合的属性列表就是下标,是该集合类型的向量的列表,属性之间只能用逗号分割开来(而不能用空格分隔)。
sets: product/A B/; 这里是显示罗列 machine/M N/; week/1..2/; 这里是隐式罗列 allowed(product,machine,week):x; 派生集合 endsets
数据部分的语法为:
data:
属性 1= 数据列表; 数据列表; 数据列表;
属性 2= 数据列表; 数据列表; 数据列表;
enddata
常用LINGO函数算术运算符
^ 乘方
﹡ 乘
/ 除
﹢ 加
﹣ 减
逻辑运算符
在 LINGO 中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些 集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。 LINGO 具有9种逻辑运算符。
#not# 否定该操作数的逻辑值,#not#是一个一元运算符。
#eq# 若两个运算数相等,则为 true;否则为 false。
#ne# 若两个运算符不相等,则为 true;否则为 false。
#gt# 若左边的运算符严格大于右边的运算符,则为 true;否则为 false。
#ge# 若左边的运算符大于或等于右边的运算符,则为 true;否则为 false。
#lt# 若左边的运算符严格小于右边的运算符,则为 true;否则为 false。
#le# 若左边的运算符小于或等于右边的运算符,则为 true;否则为 false。
#and# 仅当两个参数都为 true 时,结果为 true;否则为 false。
#or# 仅当两个参数都为 false 时,结果为 false;否则为 true。
数学函数
@abs(x)返回 x 的绝对值。
@sin(x)返回 x 的正弦值,x 采用弧度制。
@cos(x)返回 x 的余弦值。
@tan(x)返回 x 的正切值。
@exp(x)返回常数 e 的 x 次方。
@log(x)返回 x 的自然对数。
@lgm(x)返回 x 的 gamma 函数的自然对数。
@mod(x,y)返回 x 除以 y 的余数。
@sign(x)如果 x0 时返回 1,当 x=0 时返回 0。
@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 为整数。
在默认情况下,LINGO 规定变量是非负的,也就是说下界为 0,上界为+∞。@free 取 消了默认的下界为 0 的限制,使变量也可以取负值。@bnd 用于设定一个变量的上下界,它也 可以取消默认下界为 0 的约束。
集循环函数
@for:该函数用来产生对集成员的约束。
@sum:该函数返回遍历指定的集成员的一个表达式的和。
@min 和@max:返回指定的集成员的一个表达式的最小值或最大值。
例子:
以上部分来自网络。仅供参考。
lingo数学建模使用指南视频
相关评论:13146861862:【数学建模算法】(番外4)解决规划问题的神器——Lingo(下)
汲食堂规划问题本来就是给出 优化条件 和 限制条件 ,之后得出满足条件的自变量的过程。那么它自然可以解决非线性方程问题,那么只需给出一个可以增加运算速度定一个初始点,再给出限制条件,就可以解出来了。输出结果 下面是任务流程图。编写Lingo程序:可以用多种方法把 TSP 表示成整数规划模型。这里介绍的一...
13146861862:优化建模与LINDO、LINGO软件目录
汲食堂第4章着重于LINGO与外部文件的接口,涉及Windows剪贴板、文本文件和电子表格数据的传递。习题4考察这些内容的运用。第5章到第11章分别探讨了生产与服务、经济金融、图论、目标规划、对策论、排队论和存储论管理中的优化问题,通过实例讲解模型建立和求解。每个章节都有相关习题。最后,第12章展示了数学建模...
13146861862:数学建模怎样用lingo程序编写?
汲食堂model:sets:liu\/1..7\/:t,w,p;wen\/1..2\/:;jie(liu,wen):x;endsets min=obj;obj=2*k-@sum(jie(i,j):x(i,j)*t(i));for(wen(j):@sum(liu(i):x(i,j)*t(i))<=k);for(wen(j):@sum(liu(i)|i#ge#5:x(i,j)*t(i))<=q);for(wen(j):@sum(liu(i):x(i,j...
13146861862:在lingo中求解优化问题后怎么利用结果计算别的式子
汲食堂1、题目:求minz=2*x1+3*x2+x3;s.t.[x1+4*x2+2*x3=8;3*x1+2*x2=6;xj=0,j=1,2,3,]。打开Lingo软件,进入下面编程状态。2、根据实际问题,建立数学模型,即使用数学建模的方法建立优化模型;根据优化模型,利用LINGO来求解模型。主要是根据LINGO软件,把数学模型转译成计算机...
13146861862:lingo数学建模
汲食堂!第一块长x1,宽x2,高x3;!第二块长y1,宽y2,高y3;x1*x2>=10000;y1*y2>=10000;x3>=2;y3>=2;(x1*x3\/(0.3*0.1)+x2*x3\/(0.3*0.1)+y1*y3\/(0.3*0.1)+y2*y3\/(0.3*0.1))*2<=100000;max=x1*x2+y1*y2;结果:Global optimal solution found.Objective value: 856...
13146861862:新手第一次用lingo做数模,不知道错在哪里,求大神改错
汲食堂3.LINGO集合的运用。这个你的程序按这么写可能没什么错,但是当问题规模比较大时,比如我的X有10万个,就不太方便了。如果楼主还没有看过系统介绍LINGO的基本使用及其适用的领域的话,可以参考《优化建模与LINDO\/LINGO软件》和《LINGO和Excel在数学建模中的应用》这两本书。论坛上有这两本书的电子版,...
13146861862:数学建模用lingo编程,这一句怎么写
汲食堂model: !表示模型的开头与结束词end搭配;sets: !集合开头词与结束词endsets搭配;ren\/r1..r4\/; !表示隐式列举一维集有4个元素;job\/j1..j4\/;link(ren,job):a,x; !表示多维集有32个元素;endsets data:
13146861862:数学建模过程使用Lingo求解线性规划问题,提示变量过多,麻烦各位高手看...
汲食堂min 3t1+5t2+3t3+6t4+2t5+3t6+4t7 st 150t1+250t2+250t3+450t4-300t5-600t6-700t7=0 t1+t2<=1 t3+t4<=1 t5+t6+t7<=1 end 这个我用lindo测试通过 lingo应该也没问题的
13146861862:数学建模问题,用LINGO软件,有假设和文字说明,谢谢了,很急呀
汲食堂这是笔算的(*^-^*)也是偶算的哦 由于不会用LINGO(T-T连矩阵都不知道怎么输),所以编辑得很雷,先用着吧,答案是121 min=@abs(a1)+3*@abs(b1)+5*@abs(c1)+7*@abs(d1)+1000*@abs(e1)+1000*@abs(f1)+ 2*@abs(a2)+@abs(b2)+9*@abs(c2)+6*@abs(d2)+7*@abs(e2)+...
13146861862:求lingo方面好用的教程
汲食堂精通:matlab(要会编写M文件,记住是编写,不是叫你只会输入几个基本运算命令) ,lingo:要掌握它的基本书写格式,“记住是基本的”(modle:set...,endset,datas...,endatas)是这种格式,因为数学建模所建立的模型一般都是非线性多元模型,要matlab编写,根本不现实,而LINGO 的输入标准格式比较死板...
Lingo软件是美国Lindo公司的产品,主要用来求解优化问题。它是一个非常强大的软件,可以求解大部分优化问题,包括线性规划、二次规划、整数规划、运输问题等。
1)LINGO的数学规划模型包含目标函数、决策变量、约束条件三个要素。
2)在LINGO程序中,每一个语句都必须要用一个英文状态下的分号结束,一个语句可以分几行输入。
3)LINGO的注释以英文状态的!开始,必须以英文状态下的分号结束。
4)LINGO的变量不区分字母的大小写,必须以字母开头,可以包含数字和下划线,不超过32个字符。
5)LINGO程序中,只要定义好集合后,其他语句的顺序是任意的。
6)LINGO中的函数以“@”开头。
7)LINGO程序默认所有的变量都是非负的。
8)LINGO程序中"<"或">"号与"<="或">="号功能相同。
集合部分的语法为
sets: 集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1; 集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2; 派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3; endsets
基本集合:通过列举全部元素所定义的是原始(Primary Set),又被称为基本集合。
派生集合:通过原始集合派生所定义的集合是派生集合(Derived Set)。
注:原始集合和派生集合都在集合段中定义。集合段以SETS(或sets)开始,以ENDSETS(endsets)结束。
定于原始集合的语法:
集合名[/集合的元素列表/] [集合的属性列表];
集合的命名规则集合的元素命名规则
集合元素的命名也要遵循标识符的命名规范。集合元素命名有特例:集合元素可以是整数。
集合的元素列表
显式罗列:
将集合的每一个元素都完完整整的写出来的方式。
item/1 2 3 4 5 6/;
隐式罗列:
集合中的元素有一定的递增规律,写成起始元素…终止元素的形式。
ITEM/1..6/;
隐式罗列的全部列表形式:
集合的属性列表
集合的属性列表就是下标,是该集合类型的向量的列表,属性之间只能用逗号分割开来(而不能用空格分隔)。
sets: product/A B/; 这里是显示罗列 machine/M N/; week/1..2/; 这里是隐式罗列 allowed(product,machine,week):x; 派生集合 endsets
数据部分的语法为:
data:
属性 1= 数据列表; 数据列表; 数据列表;
属性 2= 数据列表; 数据列表; 数据列表;
enddata
常用LINGO函数算术运算符
^ 乘方
﹡ 乘
/ 除
﹢ 加
﹣ 减
逻辑运算符
在 LINGO 中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些 集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。 LINGO 具有9种逻辑运算符。
#not# 否定该操作数的逻辑值,#not#是一个一元运算符。
#eq# 若两个运算数相等,则为 true;否则为 false。
#ne# 若两个运算符不相等,则为 true;否则为 false。
#gt# 若左边的运算符严格大于右边的运算符,则为 true;否则为 false。
#ge# 若左边的运算符大于或等于右边的运算符,则为 true;否则为 false。
#lt# 若左边的运算符严格小于右边的运算符,则为 true;否则为 false。
#le# 若左边的运算符小于或等于右边的运算符,则为 true;否则为 false。
#and# 仅当两个参数都为 true 时,结果为 true;否则为 false。
#or# 仅当两个参数都为 false 时,结果为 false;否则为 true。
数学函数
@abs(x)返回 x 的绝对值。
@sin(x)返回 x 的正弦值,x 采用弧度制。
@cos(x)返回 x 的余弦值。
@tan(x)返回 x 的正切值。
@exp(x)返回常数 e 的 x 次方。
@log(x)返回 x 的自然对数。
@lgm(x)返回 x 的 gamma 函数的自然对数。
@mod(x,y)返回 x 除以 y 的余数。
@sign(x)如果 x0 时返回 1,当 x=0 时返回 0。
@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 为整数。
在默认情况下,LINGO 规定变量是非负的,也就是说下界为 0,上界为+∞。@free 取 消了默认的下界为 0 的限制,使变量也可以取负值。@bnd 用于设定一个变量的上下界,它也 可以取消默认下界为 0 的约束。
集循环函数
@for:该函数用来产生对集成员的约束。
@sum:该函数返回遍历指定的集成员的一个表达式的和。
@min 和@max:返回指定的集成员的一个表达式的最小值或最大值。
例子:
以上部分来自网络。仅供参考。
lingo数学建模使用指南视频
相关评论:
汲食堂规划问题本来就是给出 优化条件 和 限制条件 ,之后得出满足条件的自变量的过程。那么它自然可以解决非线性方程问题,那么只需给出一个可以增加运算速度定一个初始点,再给出限制条件,就可以解出来了。输出结果 下面是任务流程图。编写Lingo程序:可以用多种方法把 TSP 表示成整数规划模型。这里介绍的一...
汲食堂第4章着重于LINGO与外部文件的接口,涉及Windows剪贴板、文本文件和电子表格数据的传递。习题4考察这些内容的运用。第5章到第11章分别探讨了生产与服务、经济金融、图论、目标规划、对策论、排队论和存储论管理中的优化问题,通过实例讲解模型建立和求解。每个章节都有相关习题。最后,第12章展示了数学建模...
汲食堂model:sets:liu\/1..7\/:t,w,p;wen\/1..2\/:;jie(liu,wen):x;endsets min=obj;obj=2*k-@sum(jie(i,j):x(i,j)*t(i));for(wen(j):@sum(liu(i):x(i,j)*t(i))<=k);for(wen(j):@sum(liu(i)|i#ge#5:x(i,j)*t(i))<=q);for(wen(j):@sum(liu(i):x(i,j...
汲食堂1、题目:求minz=2*x1+3*x2+x3;s.t.[x1+4*x2+2*x3=8;3*x1+2*x2=6;xj=0,j=1,2,3,]。打开Lingo软件,进入下面编程状态。2、根据实际问题,建立数学模型,即使用数学建模的方法建立优化模型;根据优化模型,利用LINGO来求解模型。主要是根据LINGO软件,把数学模型转译成计算机...
汲食堂!第一块长x1,宽x2,高x3;!第二块长y1,宽y2,高y3;x1*x2>=10000;y1*y2>=10000;x3>=2;y3>=2;(x1*x3\/(0.3*0.1)+x2*x3\/(0.3*0.1)+y1*y3\/(0.3*0.1)+y2*y3\/(0.3*0.1))*2<=100000;max=x1*x2+y1*y2;结果:Global optimal solution found.Objective value: 856...
汲食堂3.LINGO集合的运用。这个你的程序按这么写可能没什么错,但是当问题规模比较大时,比如我的X有10万个,就不太方便了。如果楼主还没有看过系统介绍LINGO的基本使用及其适用的领域的话,可以参考《优化建模与LINDO\/LINGO软件》和《LINGO和Excel在数学建模中的应用》这两本书。论坛上有这两本书的电子版,...
汲食堂model: !表示模型的开头与结束词end搭配;sets: !集合开头词与结束词endsets搭配;ren\/r1..r4\/; !表示隐式列举一维集有4个元素;job\/j1..j4\/;link(ren,job):a,x; !表示多维集有32个元素;endsets data:
汲食堂min 3t1+5t2+3t3+6t4+2t5+3t6+4t7 st 150t1+250t2+250t3+450t4-300t5-600t6-700t7=0 t1+t2<=1 t3+t4<=1 t5+t6+t7<=1 end 这个我用lindo测试通过 lingo应该也没问题的
汲食堂这是笔算的(*^-^*)也是偶算的哦 由于不会用LINGO(T-T连矩阵都不知道怎么输),所以编辑得很雷,先用着吧,答案是121 min=@abs(a1)+3*@abs(b1)+5*@abs(c1)+7*@abs(d1)+1000*@abs(e1)+1000*@abs(f1)+ 2*@abs(a2)+@abs(b2)+9*@abs(c2)+6*@abs(d2)+7*@abs(e2)+...
汲食堂精通:matlab(要会编写M文件,记住是编写,不是叫你只会输入几个基本运算命令) ,lingo:要掌握它的基本书写格式,“记住是基本的”(modle:set...,endset,datas...,endatas)是这种格式,因为数学建模所建立的模型一般都是非线性多元模型,要matlab编写,根本不现实,而LINGO 的输入标准格式比较死板...