您好,欢迎访问三七文档
1目录1分析题....................................................................................................21.1几个基本问题............................................................................21.2数字的逻辑游戏.......................................................................41.3混合配料问题...........................................................................51.4最大流量问题...........................................................................61.5最小费用流问题.......................................................................92综合题..................................................................................................113参考资料..............................................................................................1621分析题1.1几个基本问题1、LINGO为什么要用SETS编程?答:集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。2、相比LINGO8.0,LINGO9有什么新的内容?答:LINGO9完全支持LINDO模型程序的书写格式,在LINGO9以前的版本中,如LINGO8.0,“FILEIMPORTLINDOFILE”命令可以将LINDO模型文件转换成LINGO模型。这个菜单命令的意思是“导入LINDO文件”,在LINGO9中已无必要,所以该命令已经被取消了。3、LINGO10有什么新的内容?答:(1)LINGO10.0最显著的新特征在于增强了用LINGO编程的能力。这主要包括:①程序流程的控制在LINGO9.0及更早的版本的计算段(CALC)中,控制程序流程的只有一种语句,即集合循环函数@FOR引导的语句,此外所有计算段中的语句是顺序执行的。LINGO10.0在计算段中增加了控制程序流程的语句,主要包括条件分支控制(@IFC或@IFC/@ELSE语句)、条件循环控制(@WHILE语句)、循环跳出控制(@BREAK语句)、程序暂停控制(@PAUSE语句)以及程序终止控制(@STOP语句)。②子模型(SUBMODEL)在LINGO9.0及更早的版本中,在每个LINGO模型窗口中只允许有一个优化模型,可以称为主模型(MAINMODEL)。在LINGO10.0中,每个LINGO模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。子模型可以在主模型的计算段中被调用,这就进一步增强了LINGO的编程能力。相应的新增函数还包括@SOLVE、@GEN、@PIC、@SMPI、@RELEASE等。③其他新增函数LINGO10.0增加了输出函数@TABLE,可以更方便地以格式化的表格形式输出数据;新增了数学函数@NORMSINV,即标准正态分布的分布函数的逆函数;新增了缺省输出设备(文件)的重定义函数@DIVERT;新增了参数设置函数@SET和@APISET等。(2)对LINGO内部采用的一些求解程序(如混合整数规划、非线性优化和全局3优化求解程序,包括一些相应的选项)的功能进行了完善和改进,使求解过程更快速、更可靠,对模型进行调试的能力和对模型错误进行更准确定位的能力也得到了进一步增强。(3)增加了对一些新的软硬件的支持,如支持64位运算和更大的内存等,以及支持JavaJNI接口技术,新的@ODBC函数支持MicrosoftSQLServer等。4、LINGO13有什么新的内容?答:支持机会约束方案;随机规划求解的改进;新的概率分布;MIP的求解器的改进;指定可变分支优先;全球求解器的改进;改进的制图功能:图表的能力已被广泛的更新;置换矩阵显示;新Lingo编程接口功能;更多的文件支持类型/MPI的翻译。5、几种软件相比,各有什么特点?例如:EXCEL,Matlab,LINGO,AMPL,AIMMS,……答:(1)EXCEL它的基本职能是对数据进行记录、计算与分析。在实际应用中,它小到可以充当一般的计算器,或者记算个人收支情况,计算贷款或储蓄等等;大到可以进行专业的科学统计运算,以及通过对大量数据的计算分析,为公司财政政策的制定,提供有效的参考。(2)Matlab有强大的自带的帮助手册,基于HTML的完整的帮助功能;运算符丰富。由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短;高级但简单的程序环境,与其它语言编写的程序结合和输入输出格式化数据的能力;MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。有大量事先定义的数学函数,并且有很强的用户自定义函数的能力;程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行;MATLAB的图形功能强大。在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。MATLAB还具有较强的编辑图形界面的能力。具有教育、科学和艺术学的图解和可视化的二维、三维图;语言简洁紧凑,使用方便灵活,库函数极其丰富。有高性能数值计算的高级算法,特别适合矩阵代数领域;MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用MATLAB进行科技开发是站在专家的肩膀上;功能强大的工具箱是MATLAB的另一特色。MATLAB包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工具箱是专业性比较强的,如(control、signalproceessing、commumnication)toolbox等。这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究;源程序的开放性。开放性也许是MATLAB最受人们欢迎的特点。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱;MATLAB的缺点是,它和其他高级程序相比,程序的执行速度4较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。(3)LINGO,简单的模型表示。方便的数据输入和输出选择。强大的求解器。交互式模型或创建Turn-key应用程序。其特色在于内置建模语言,提供十几个内部函数,可以允许决策变量是整数。1.2数字的逻辑游戏有a,b,c三个数,它们之间的关系要满足:1、a,b都不超过16,并且都不小于-102、a是偶数,b是奇数,c只能取{0,2,3,6,8,10,28}中的一个。3、2*a-b+c=3;b+3*c=8;3*a+b+2*c=11;回答下列问题:1)a,b,c分别等于多少时,它们的和最大?2)a,b,c分别等于多少时,它们的绝对值的和最大?3)a,b,c分别等于多少时,它们的和的绝对值最大?4)a,b,c分别等于多少时,它们的积最大?5)a,b,c分别等于多少时,它们的绝对值的积最大?6)a,b,c分别等于多少时,它们的积的绝对值最大?7)a,b,c分别等于多少时,它们中的最大者和最小者之差最大?8)a,b,c分别等于多少时,它们中的最大者和最小者之差最小?另外,思考:9)能否用LINGO辅助计算?能否用SETS编程?10)在LINGO中,试一试能否用Submodel,Calc等语句11)能否用LINGO辅助计算?能否用SETS编程?12)若数字变化,对编程有什么影响?例如:a,b都不超过30,并且都不小于-30.13)能否用MATLAB辅助计算?答:约束的LINGO程序如下:2*a-b+c=3;b+3*c=8;3*a+b+2*c=11;(c-28)*(c-2)*(c-3)*(c-6)*(c-8)*c*(c-10)=0;@bnd(-10,a,16);@bnd(-10,b,16);a=2*n;b=2*m+1;@gin(n);@gin(m);@free(n);@free(m);1)a=4,b=15,c=10,max=29;max=a+b+c;2)a=-8,b=15,c=10,max=33;max=@abs(a)+@abs(b)+@abs(c);3)a=4,b=15,c=10,max=29;max=@abs(a+b+c);4)a=4,b=15,c=10,max=600;max=a*b*c;55)a=-8,b=15,c=10,max=1200;max=@abs(a)*@abs(b)*@abs(c);6)a=-8,b=15,c=10,max=1200;max=@abs(a*b*c);7)a=-8,b=15,c=10,max=23;max=@smax(a,b,c)-@smin(a,b,c);8)a=2,b=3,c=2,min=1;min=@smax(a,b,c)-@smin(a,b,c);9)可以用LINGO和SETS辅助编程。10)能;11)能;12)能;13)能。1.3混合配料问题(therawmaterialblendingproblem)某厂准备将具有下列成分的几种现成合金混合起来,成为一种含铅30%,含锌20%,含锡50%的新合金。有关数据见下表。合金含量ABCDE含铅百分比3010501050含锌百分比6020201010含锡百分比1070308040费用(元/公斤)8.56.08.95.78.8应如何混合这些合金,使得既满足新合金的要求又花费最小?配料问题也称配方问题、营养问题或混合问题,在石油冶炼、食品生产等许多行业生产中都能遇到。值得注意的是,在实际冶炼过程中,矿石的金属含量会发生变化,建模时应将这种变化考虑进去,有可能是非线性关系。在这里假设在冶炼过程中,矿石的金属含量不会发生变化。思考:1)试建立此问题的线性规划模型,并求解。2)下面的LINGO代码是SETS编程有语法错误吗?编程似乎有问题,该如何修改?如何建立本问题基于sets的LINGO模型?3)能否用MATLAB辅助计算?答:(1)Lingomin=8.5*x1+6*x2+8.9*x3+5.7*x4*8.8*x5;x1+x2+x3+x4+x5=1;0.3*x1+0.1*x2+0.5*x3+0.1*x4+0.5*x5=0.3;0.6*x1+0.2*x2+0.2*x3+0.1*x4+0.1*x5=0.2;0.1*x1+0.7*x2+0.3*x3+0.8*x4+0.4*x5=0.5;x1=0;x2=0;x3=0;x4=0;x5=0;其运行结果如下图:6即ABCDE0.110.44000.441.4最大流量问题(MaximalFlowP
本文标题:LINGO编程训练
链接地址:https://www.777doc.com/doc-5957448 .html