Lingo需要注意的几点1.Lingo中不能省略乘号*以及结束符分号;等1.1在Lindo中目标函数可以写成max2x+3y但是在Lingo这样写是会报错的,应该写成max=2*x+3*y;1.2Lingo中所用的符号均必须是英文状态下的,使用中文状态下的这些符号,运行会报错的。2.Lingo默认变量非负。2.1即有约束条件X≥0,Yij≥0之类的,在Lingo中都可以省略不写。2.2有需要变量取负值的话,可以用@free();函数,令变量取全体实数。3.Lingo中没有π这个常数。3.1在要求不是那么精确的话可以用PI=3.1415926(取几位小数自行估计)。3.2通过三角函数来得到精确的π值,如PI=@acos(-1);(1.不过Lingo运算精度有限,所以效果估计跟3.1差不多吧;2.反三角函数在Lingo11.0以上版本才支持的)等。4.Lingo中没有严格大或严格小的概念(除集下标约束或条件判断中的#gt#,#lt#)。4.1即在Lingo中使用()号跟使用=(=)的效果是相同的,都是表示“大于等于”(小于等于)。4.2用逻辑运算符来表示,例如x5,用x#gt#5=1;表示,x2,用x#lt#2=1;表示.4.3在合理的情况下,可以考虑附加一个极小值来达到严格小的目的,例如X>5,在Lingo中可以写成X=5+0.000001;。5.变量与下标或集名重名。5.1在Lingo中变量和下标或集名重名运行时是会报错的。5.2lingo中不区分大小写的,所以别想用大小写来定义两个不同的变量和集名等。6.在Lingo中@if函数是必须给出正反两种情况的值的,但是有时候我们只知道其中一个该怎么办呢?(描述的可能不清楚,看下面实例)6.1如果x15,则x2=6;否则x2=3;在Lingo中可以表示为:x2=@if(x1#gt#5,6,3);6.2如果条件只有x15时,x2=6,那么在Lingo中要怎么表示呢?x2=@if(x1#gt#5,6);?(这种写法是错误的,求解时会报错)我们可以这样写0=@if(x1#gt#5,x2-6,0);这样既不会报错,又能达到约束要求。7.数据段data7.1多元素(一维以上的数组)赋值时,所给数据个数必须符合前面集的定义。7.2数值之间可以用逗号或空格隔开,结束莫忘了加结束符分号;。7.2.1使用逗号时:两个数值之间用一个逗号隔开,前后可以有空格。7.2.2使用空格时:两个数值之间必须至少有一个空格。7.2.3逗号与空格混用:本来还以为不行的,特地测试一下,竟然可以。7.3数据段data中不得带有运算的表达式,例如x=5/2;y=5*3;之类的,都必须给出确切的结果值,如x=2.5;y=15;7.4已知一维或多维数组中一部分元素的值,该如何表示?(待续)7.5三维以上数据在data中如何表示?(待续)8.用lingo表示阶乘:x!=@exp(@lgm(x+1));9.奇偶数限制(以下只限制非负数情况,如需取负数请加@free(x);限制)9.1用到mod函数,函数功能:进行取模(取余)运算。9.1.1限制x为奇数,@mod(x,2)=1;9..1.2限制x为偶数,@mod(x,2)=0;9.2用奇偶数的定义来写9.2.1限制x为偶数,x=2*k;@gin(k);9.2.2限制x为奇数,x=2*k+1;@gin(k);10.变量为某几个不连续的数值之一10.1例如x为0或3或7,可表示为x*(x-3)*(x-7)=0;10.2借助0-1变量来实现(线性的,比上一种方法要好)同样的例如x为0或3或7:可表示为@bin(a);@bin(b);@bin(c);a+b+c=1;x=a*0+b*3+c*7;LINGO出错时错误代码含义:0LINGO模型生成器的内存已经用尽(可用“LINGO|Options命令对GeneralSolver选项卡中的“GeneratorMemoryLimit选项进行内存大小的修改)1模型中的行数太多(对于有实际意义的模型,这个错误很少出现)2模型中的字符数太多(对于有实际意义的模型,这个错误很少出现)3模型中某行的字符数太多(每行不应该超过200个字符,否则应换行)4指定的行号超出了模型中实际具有的最大行号(这个错误通常在LOOK命令中指定了非法的行号时出现)5当前内存中没有模型6脚本文件中TAKE命令的嵌套重数太多(LINGO中限定TAKE命令最多嵌套10次)7无法打开指定的文件(通常是指定的文件名拼写错误)8脚本文件中的错误太多,因此直接返回到命令模式(不再继续处理这个脚本文件)9(该错误编号目前没有使用)10(该错误编号目前没有使用)11模型中的语句出现了语法错误(不符合LINGO语法)12模型中的括号不匹配13在电子表格文件中找不到指定的单元范围名称14运算所需的,临时堆栈空间不够(这通常意味着模型中的表达式太长了)15找不到关系运算符(通常是丢了“”,“=”或“”)16输入输出时不同对象的大小不一样(使用集合循环方式输入输出时,集合大小应相同)17集合元素的索引的内存堆栈空间不够18集合的内存堆栈空间不够19索引函数@INDEX使用不当20集合名使用不当21属性名使用不当22不等式或等式关系太多(例如,约束2x4是不允许出现在同一个语句中的)23参数个数不符24集合名不合法25函数@WKX()的参数非法(注:在LING09.0中已经没有函数@WKX())26集合的索引变量的个数不符27在电子表格文件中指定的单元范围不连续28行名不合法29数据段或初始段的数据个数不符30链接到Excel时出现错误31使用@TEXT函数时参数不合法32使用了空的集合成员名33使用@OLET函数时参数不合法34用电子表格文件中指定的多个单元范围生成派生集合时,单元范围的大小应该一致35输出时用到了不可识别的变量名36基本集合的元素名不合法37集合名已经被使用过38ODBC服务返回了错误信息39派生集合的分量元素(下标)不再原来的父集合中40派生集合的索引元素的个数不符41定义派生集合时所使用的基本集合的个数太多(一般不会出现这个错误)42集合过滤条件的表达式中出现了取值不固定的变量43集合过滤条件的表达式运算出错44过滤条件的表达式没有结束(即没有“:”标志)45@ODBC函数的参数列表错误46文件名不合法47打开的文件太多48不能打开文件49读文件时发生错误50@FOR函数使用不合法51编译时LINGO模型生成器的内存不足52@IN函数使用不当53在电子表格文件中找不到指定的单元范围名称(似乎与出错代码“13”含义类似)54读取电子表格文件时出现错误55@TEXT函数不能打开文件56@TEXT函数读文件时发生错误57@TEXT函数读文件时出现了非法输入数据58@TEXT函数读文件时出现发现输入数据比实际所需要的少59@TEXT函数读文件时出现发现输入数据比实际所需要的多60用@TEXT函数输入数据时,没有指定文件名61行命令拼写错误62LINGO生成模型时工作内存不足63模型的定义不正确64@FOR函数嵌套太多65@WARN函数使用不当66警告:固定变量取值不唯一(例如:任意正数都是约束@SIGN(X)=l的解)67模型中非零系数过多导致内存耗尽68对字符串进行非法的算术运算69约束中的运算符非法70属性的下标越界71变量定界函数(@GIN,@BIN,@FREE,@BND)使用错误72不能从固定约束(只含有固定变量的约束)中求出固定变量的值(相当于方程无解,或者LINGO的算法解不出来,如迭代求解算法不收敛)73在LINGO生成模型(对模型进行结构分析)时,用户中断了模型生成过程74变量越界,超出了103275对变量的定界相互冲突(例如:一个模型中同时指定@BND(-6,X,6)和@BND(-5,X,5)是允许的,但同时指定@BND(-6,X,6)和@BND(7,X,9)则是冲突的.)76LINGO生成模型时出现错误,不能将模型转交给优化求解程序77无定义的算术运算(例如除数为0)78(该错误编号目前没有使用)79(该错误编号目前没有使用)80生成LINGO模型时系统内存已经用尽81找不到可行解82最优值无界83(该错误编号目前没有使用)84模型中非零系数过多85表达式过于复杂导致堆栈溢出86算术运算错误(如1/0或@LOG(-1)等)87@IN函数使用不当(似乎与错误代码“52”相同)88当前内存中没有存放任何解89LINGO运行时出现了意想不到的错误(请与LINGO公司联系解决问题)90在LINGO生成模型时,用户中断了模型生成过程91当在数据段有“变量=?”语句时,LINGO运行中将要求用户输人这个变量的值,如果这个值输入错误,将显示这个错误代码92警告:当前解可能不是可行的/最优的93命令行中的转换修饰词错误94(该错误编号目前没有使用)95模型求解完成前,用户中断了求解过程96(该错误编号目前没有使用)97用TAKE命令输入模型时,出现了不可识别的语法98用TAKE命令输入模型时,出现了语法错误99语法错误,缺少变量100语法错误,缺少常量101(该错误编号目前没有使用)102指定的输出变量名不存在103(该错误编号目前没有使用)104模型还没有被求解,或者模型是空的105(该错误编号目前没有使用)106行宽的最小最大值分别为68和200107函数@POINTER指定的索引值无效108模型的规模超出了当前LINGO版本的限制109达到了迭代上限,所以LINGO停止继续求解模型(迭代上限可以通过“LING0|0ptions”命令对GeneralSolver选项卡中的“Iteration”选项进行修改)110HIDE(隐藏)命令指定的密码超出了8个字符的限制111模型是隐藏的,所以当前命令不能使用112恢复隐藏模型时输入的密码错误113因为一行内容太长,导致LOOK或SAVE命令失败114HIDE(隐藏)命令指定的两次密码不一致,命令失败115参数列表过长116文件名(包括路径名)太长117无效的命令118命令不明确(例如,可能输入的是命令的缩写名,而这一缩写可有多个命令与之对应)119命令脚本文件中的错误太多,LINGO放弃对它继续处翠120LINGO无法将配置文件(LINGO.CNF)写入启动目录或工作目录(可能是权限问题)121整数规划没有敏感性分析122敏感性分析选项没有激活,敏感性分析不能进行(可通过“LINGO|Options”命令对GeneralSolver选项卡中的“DualComputation”选项进行修改)123调试(Debug)命令只对线性模型、且模型不可行或无界时才能使用124对一个空集合的属性进行初始化125集合中没有元素126使用ODBC连接输出时,发现制定的输出变量名不存在127使用ODBC连接输出时,同时输出的变量的维数必须相同128使用SET命令时指定的参数索弓I无效129使用SET命令时指定的参数的取值无效130使用SET命令时指定的参数名无效131FREEZE命令无法保存配置文件LINGO.CNF(可能是权限问题)132LINGO读配置文件(LINGO.CNF)时发生错误133LINGO无法通过OLE连接电子表格文件(如:当其他人正在编辑这个文件时)134输出时出现错误,不能完成所有输出操作135求解时间超出了限制(可通过“LING0|0ptions”命令对GeneralSolver选项卡中的“Time”选项进行修改)136使用@TEXT函数输出时出现错误操作137(该错误编号目前没有使用)138DIVERT(输出重新定向)命令的嵌套次数太多(最多不能超过10次嵌套)139DIVERT(输出重新定向)命令不能打开指定文件140只求原始最优解时无法给出敏感性分析信息(可通过“LING0|0ptions”命令对GeneralSolver选项卡中的“DualComputation”选项进行修改)141对某行约束的敏感性分析无法进行,因为这一行已经是固定约束(即该约束中所有变量都已经在直接求解程序进行预处