西南交大数学模型与LINGO软件
Lingo教案
第Ⅱ部分运筹学实验§1 LINGO快速入门一、LINDO/LINGO软件简介LINDO和LINGO是美国LINDO系统公司开发的一套专门用于求解最优化问题的软件,这源于芝加哥大学的Linus Schrage教授于1980年前后开发的一套专门用于求解最优化问题的软件包.LINDO用于求解线性规划和二次规划.目前LINGO除了具有LINDO的全部功能外,还可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解以及代数方程求根等.LINDO和LINGO软件的最大特色是可以求解决策变量为整数的优化问题,而且执行速度很快. LINGO实际上是一种最优化问题的建模语言,简单易学、包括许多常用的函数可调用,并提供与其它数据文件的接口,易于输入、求解和分析大规模最优化问题. 由于这些特点,LINDO和LINGO软件在教学、科研、工业、商业和服务等领域得到广泛应用.本章着重在Microsoft Windows系统下,介绍lingo9.0在运筹学中的使用和课本中相关问题求解的LINGO实现.二、LINGO软件的安装LINGO软件的安装非常简单,在Windows系统下双击运行安装光盘(或其它源)中的安装程序setup.exe,接受安装协议,选择安装目录,选择默认的LINGO 语法(recommended),最后完成(finish)安装.安装完成后,第一次运行LINGO软件,这时提示要输入密码,输入正版的密码输入,即可以使用LINGO软件;当然可以选择测试/试用(demo)版本,这时求解变量不能超过300个.运行成功后得到如下窗口:图1.1图1.1中:File(文件)、Edit(编辑)、LINGO、Window(窗口)和Help为下拉菜单项,下面一行为菜单项中的一些快捷工具按钮.主窗口LINGO Model为输入模型的窗口,在没有命名保存(save)模型时,LINGO自动命名为LINGO1,LINGO2等.点击help菜单的About LINGO 可以获得版本的相关信息,如约束(constrain)、变量(variable)、整数变量(integer variable)、非线性变量(nonlinear variable)的限定个数,可用内存(generator memory)使用等.§2求解规划问题一、LINGO 求解LP 问题下面就用简单的例子来说明LINGO 中线性规划问题的求解. 例2.1求如下线性规划问题:2132min x x z +=⎪⎪⎩⎪⎪⎨⎧≥≤+≥≥+0,600210035026..2121121x x x x x x x t s 在LINGO 模型窗口中图2.1输入:图2.1学习要点:(1) 输入max ,min 后LINGO 就会识别优化类型;数学运算符“乘号,除号,乘方”分别输入“*,/,^”; 关系运算符“≥,≤”分别输入“>=,<=” 来表示; 每行命令结束用“;”来表示.(2)算术运算符按优先级从高到低排序为:-(负号);^;*,/;+,-(减号) (3)关系运算符按优先级从高到低排序为:<,=,>. 输入完毕后,点击求解按钮(或依次点击菜单LINGO/Solve ,或按Ctrl+S),求解状态窗口(LINGO Solve Status )被激活,如图2.2:图2.2此窗口显示:当前的求解状态,包括模型的类型(Model ),解的状态类型(State ),目标值(objective )等,如果模型由于陷入循环等一时无法得到解,可以点击中断求解按钮(Interrupt Solver ).学习要点:(1)LINGO 默认所有变量非负.(2)LINGO 关于求解的种类一般有如下几种(在asibility 处显示):0 全局最优(Global Optimum ) 1 不可行(Infeasible ) 2 无界(Unbounded )3 不确定(Undetermined )4 可行(Feasible )5 可行或者无界(Infeasible or Unbounded )6 局部最优(Local Optimum )7 局部不可行(Locally Infeasible ) 8 目标函数的截断值被达到(Cutoff ) 9 算术运算错误而停止(Numeric Error )当关闭(Close )求解状态窗口时,求解报告窗口(Solution Report )被激活,如图2.3:图2.3求解报告显示:求解所需的迭代次数(iteration )(线性规划默认单纯形法);变量的值(value );及变量变化一个单位时,目标值发生的变化量(Reduced Cost );以及松弛或剩余变量(Slack or Surplus ,按模型输入行的顺序显示)的值和对偶价格(Dual Price ).二、LINGO 求解ILP 问题例2.2 求如下整数规划问题:2123max x x z +=⎪⎩⎪⎨⎧≥≤+≤+且为整数0,14325.45.0..212121x x x x x x t s 在LINGO 模型窗口中按如图2.4输入:图2.4点击求解按钮,就会得到:求解状态窗口显示为纯整数规划(PILP ),全局最优解得到.求解报告窗口显示最优解为x1=4,x2=1,最优值为14. 学习要点:(1)“!”后面可添加为注释语句(注释以英文标识下“;” 结束); “title ” 命令可以添加文档的标题和注释,在解的报告里会显示; LINGO 只有在“!”和“title ” 命令后才可以使用中文字符. (2)LINGO 不区分大小写;(3)LINGO 模型的目标、约束和约束之间的顺序可以颠倒; (4)变量界定函数:@gin(x) :限制x 为整数. @bin(x) : 限制x 为0或1; @bnd(L,x,U) : 限制L ≤ x ≤ U ;@free(x) : 取消对变量x 的默认下界为0的限制,即x 可以为任意 实数;其中符号“@”表示调用函数;三、LINGO 求解非线性规划(NLP)问题例2.3 求如下非线性规划问题:322312119210max x x x x x z -+-+= ⎩⎨⎧≥≤+0,5..2121x x x x t s在模型窗口中输入:max=10*x1+2*x1^2-*x1^3+9*x2-x2^3;x1+x2<=5;运行结果为:x1=2.61,x2=1.73,z=32.33.§3 灵敏度分析对模型的目标函数的系数,约束右端项进行灵敏度分析,首先要激活灵敏度分析.依次点击菜单LINGO|Option|General Solver Tab ,在Dual Computations 列表框中,选择Prices and Ranges 选项.当求解模型时,也作出了灵敏度分析,可以点击菜单LINGO 中的Range (Ctrl+R )来查看.例2.4 对例1.1的线性规划模型,按照上述步骤作灵敏度分析,打开灵敏度分析报告(Range Report )显示如图3.1:图3.1灵敏度分析报告中显示,当前模型中的目标系数(Current Coefficient),约束右端项( Current RHS), 对应参数在其它条件不变的情况下,可允许的增加量和减少量(Allowable Increase, Allowable Decrease),INFINITY 表示无穷.本例显示在其它参数不变的情况下,参数在下列变化范围内,最优基保持不变:目标函数中1x 的系数为2,其允许变化范围为)0,()22,(-∞=--∞,2x 的系数为3,其允许变化范围为)0,()33,(-∞=--∞;第一个约束右端项为350,其允许变化范围为)600,()250350,(-∞=+-∞,第二个右端项为100,其可变化范围为)300,3333.58()200100,6667.41100(=+-,第三个右端项600,其可变化范围为),200(),400600(+∞=+∞-.§4 LINGO中集合的定义与操作当模型的变量、数据较多时,按照前面按照模型逐个输入的办法,就显得力不从心了.LINGO是一种建模语言,使用LINGO语言可以通过输入简单的文字而代替大规模变量和约束,处理大型问题就得心应手.理解LINGO语言,最重要的是理解集合(sets)和属性(atrribute)的概念.下面我们从简单例子出发来说明这些问题.一、定义一个基本集(原始集)基本集的格式为:集合名/成员1,成员2,…/:属性1,属性2,…;例 4.1 产生表示价格的向量x=[35 26 45 78 69 66]:在模型窗口中输入如图4.1:图4.1运行得到:Variable ValueX(1) 35.00000X(2) 26.00000X(3) 45.00000X(4) 78.00000X(5) 69.00000X(6) 66.00000例 4.2 定义一个名为产品的的基本集(可记为products),包括三种产品A,B和C(即它具有成员A,B和C),现在想研究它们对应的单位价格120、100和80以及对应的质量等级1、2和3(即属性可以记为price, quality)在模型窗口中输入如图4.2:图4.2运行结果为:Variable ValuePRICE(A) 120.0000PRICE(B) 100.0000 PRICE(C) 80.00000 QUALITY(A) 1.000000 QUALITY(B) 2.000000 QUALITY(C) 3.000000学习要点:(1)定义一个基本集:集合名/集合的成员/:属性,属性,…,属性; (2)集合要夹在sets 和endsets 之间;(3)连续可编号的n 个成员可以使用1..n 或用带字母的编号表示如w1..wn 来输入,也可以直接以逗号间隔,将n 个成员输入为w1,…,wn ;(4)数据部分要夹在data 和enddata 之间; (5)成员可以当作数据输入.二、定义一个派生集派生集的基本格式:派生集名(基本集1,基本集2,…):属性1,属性2,…;例4.3 导入矩阵⎥⎦⎤⎢⎣⎡=645241A . 在模型窗口中输入如图4.3:图4.3运行结果为:Variable Value A(1,1) 1.000000 A(1,2) 2.000000 A(1,3) 4.000000 A(2,1) 4.000000 A(2,2) 5.000000 A(2,3) 6.000000例4.4 产生矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---=314022221221B ,其中“-”表示对应位置没有数据. 在模型窗口中输入如图4.4:图4.4运行结果为:Variable ValueB(1,1) 21.00000B(1,3) 40.00000B(2,1) 12.00000B(2,2) 22.00000B(3,2) 22.00000B(3,3) 31.00000例4.5 在模型窗口中输入:sets:product/1..2/;quality/1..2/;cost/1..2/;links(product,quality,cost):x;endsets运行后会发现:派生集合links产生八个成员:(1,1,1), (1,1,2),(1,2,1),(1,2,2) ,(2,1,1),(2,1,2),(2,2,1),(2,2,2).学习要点:(1)派生集的基本格式为:派生集名(基本集1,基本集2):属性1,属性2,…,属性n;利用派生集可以产生多维数组,它是基本集合成员的所有可能组合;(2)对于派生集,可以定义其具体的成员,其格式与基本集的格式类似:派生集名(基本集1,基本集2)/成员/:属性1,属性2,…,属性n;(3)在例4.4中只取了派生集links中的一些元素,也称为稀疏集.三、集循环函数集循环函数是指对集合的元素进行循环操作的函数,其格式为:@函数名(集合(指标)|过滤条件:表达式)函数有for,max,min,prod,sum五种,分别表示对集合满足过滤条件的每一元素:独立生成表达式,求最大元素,求最小元素,计算乘积,求和.下面以简单例子来介绍@for和@sum函数的使用:1、@for例4.6 产生序列{4 9 16 25 36 49}.在模型窗口中输入:model:sets:number/1..7/:x;endsets@for(number(i)|i#ge#2:x(i)=i^2);end运行结果为:X(2) 4.000000X(3) 9.000000X(4) 16.00000X(5) 25.00000X(6) 36.00000X(7) 49.000002)@sum 求和例4.7 对数列1 2 5 4 6求和.在模型窗口中输入:model:sets:number/1..5/:x;endsetsS=@sum(number(I):x(I));data:x=1 2 5 4 6 ;enddataend运行结果为:Variable ValueS 18.00000X(1) 1.000000X(2) 2.000000X(3) 5.000000X(4) 4.000000X(5) 6.000000学习要点:(1)一个模型可写在model和end之间,这是为了表示一个完整的模型,不至于与模型窗口中的其它模型混淆;(2)集合中使用符号“|”表示其后为过滤条件,只有集合中满足条件的指标才执行其后的表达式;(3)如使用循环函数时,其中number(i) 表示集合number中的第i个元素,循环函数就会遍历number中满足条件的每个元素,执行其后所有表达式;(4)“ge”为逻辑符号,表示“大于等于”,逻辑运算符使用时要夹在“#”之间;所有逻辑运算符按优先级顺序由高到低排序为:not(非);eq(等于),ne(不等于),gt(大于),lt(小于);ge(大于等于),le(小于等于);and(与),or(或).§5 求解运输问题学习了LINGO的集合操作之后,运输问题就可以编写成简单的LINGO程序来求解.例5.1计算有5个产地A1—A5,8个销地B1-B8的运输问题的最优调运方案.分析:六个产地的总产量和为160,8个销售地的销量和为264,故产销不平衡,销大于产.定义集合workshop为有六个成员的产地,shop为有八个成员的销地,a为产量,b为销量,c为单位运价,x为待求调运量,编写程序如图5.1:图5.1运行部分结果为:Objective value: 272.0000X(W1,V1) 0.000000X(W1,V2) 0.000000X(W1,V3) 8.000000X(W1,V4) 0.000000X(W1,V5) 12.00000. . . . . . . .X(W5,V5) 0.000000X(W5,V6) 0.000000X(W5,V7) 0.000000X(W5,V8) 0.000000学习要点:(1)当销大于产时,对任意的销地j,从各个产地调往j的调运量之和不大于b(j),即有需求约束中为小于等于号;若产大于销,则产量约束中为小于等于号;(2)目标函数可以进一步简化为:min=@sum(links: c*x)不影响结果.§6求解网络问题一、最短路问题例6.1 用LINGO 求解图论中§6.3中例6.3.1所示的图6.3.1中从始点1到终点8的最短路问题的求解.分析:图中有8个顶点,需求出从结点1到结点8的最短路;设决策变量⎩⎨⎧=其它,的最短路上到于结点)(当081位,弧,1j i x ij 可把最短问题转化成一个规划问题,∑∈=Ej i ijijxw z ),(min⎪⎪⎩⎪⎪⎨⎧∈≥⎪⎩⎪⎨⎧-=-∑∑∈=∈=E j i x i ,i ,i ,x x ijEi j j ji Ej i j ij ),(,008111s.t.8),(18),(1为中间点为终点为始点 其中ij w 为弧),(j i 上的权(即结点i 与结点j 之间的距离) 在模型窗口中编写程序如图6.1:图6.1运行后部分结果为:Objective value: 12.00000Variable ValueX(1,6) 1.000000 X(5,8) 1.000000 X(6,7) 1.000000 X(7,5) 1.000000这表明路线85761→→→→为从始点1到终点8的最短路,长度为12.学习要点:(1)对无向图要把始点出发的弧和到达终点的弧当作单向弧,其余的等价为双向弧;(2)终点约束与其余约束线性相关可以省略;二、最大流问题例6.2下面介绍运用LINGO 求解§6.4中例6.4.1中图6.4.1所示的从始点s 到终点t 的最大流问题的求解.分析:根据最大流问题的要求和平衡条件,用flow 表示可行流量,可以把它转化成一个规划问题,flow max⎪⎪⎩⎪⎪⎨⎧∈≤≤⎪⎩⎪⎨⎧-=-∑∑∈∈∈∈Aj i c f i ,ti flow ,s i flow ,f f ij ij Ai j V i ji Aj i V j ij ),(,00s.t.),(),(为中间点为终点为始点 在模型窗口中编写程序如图6.2:图6.2运行得到一种最大流方案为:FLOW 22.00000F(S,4) 8.000000 F(2,3) 4.000000F(2,5) 10.00000 F(3,T) 4.000000 F(4,5) 8.000000 F(5,3) 0.000000 F(5,T) 18.00000三、最小费用最大流问题例6.3用LINGO 求解书中§6.5中图6.5.1所示的从始点s 到终点t 的最小费用最大流问题的求解.分析:根据最大流问题的要求和平衡条件,用F 表最大流量,可以把它转化成一个规划问题,∑∈Aj i ij ijf b),(min⎪⎪⎩⎪⎪⎨⎧∈≤≤⎪⎩⎪⎨⎧-=-∑∑∈∈∈∈Aj i c f i ,ti F ,s i F ,f f ij ij Ai j V i ji A j i V j ij ),(,00s.t.),(),(为中间点为终点为始点 根据最大流的求法可求得此网络的最大流量Q=15,编写程序如图6.3:图6.3运行得到一种最小费用最大流方案为:Objective value: 69.00000 F(S,2) 8.000000 F(S,3) 7.000000 F(2,3) 0.000000F(3,4) 7.000000F(4,2) 1.000000F(4,T) 6.000000这与增广链和最短路标号法求得的结果一致.§7 LINGO中外部数据文件的调用一、LINGO中调用文本文件数据调用文本数据函数@file(‘filename’)用于将文本文件中的数据调入LINGO 模型中,可以写相对和绝对路径,文件中的每组数据之间用符号“~”间隔,LINGO 将按照此函数在模型中出现的顺序依次读取每组数据.下面以简例说明之.例7.1 对x=[2 5 8]求和,对y=[3 6 1 4]取其最小元.按如图7.1在模型窗口中编写程序:图7.1其中data1.txt文件与此模型放在同一目录下,内容编写如图7.2:图7.2运行结果可得:S 15.00000,P 1.000000二、LINGO中调用excel数据电子表格数据调用函数@ole(‘filename’)用于将excel表中的数据导入LINGO,文件路径设置与@file函数一致,例7.2 对例7.1,可编程如图7.3:图7.3其中data2.xls文件与模型放在同一目录,编辑如图7.4:图7.4其中要定义单元格A3:A5为集合的名称price,B3:B5定义为x,C3:C6定义为y.定义单元格名称的方法是:选定要定义的单元格,依次打开菜单插入|名称|定义,输入想要定义的名称即可.学习要点:(1)@file和@ole函数可以在模型的集合段,数据段和开始段使用,其他段落不能使用.(2)@ole函数的完整格式为:@ole(‘filename.xls’,[rangelist]),其中rangelist为包含数据的单元范围(与excel表格中的记法一致)(3)这两个函数在集合段可以直接采用@file(‘filename’)和@ole(‘filename’)的形式,而在数据段要采用x=@file(‘filename’)或@ole(‘filename’)格式.。
Lingo软件与数学建模
变量数目:变量总数 (Total)、非线型变量 数(Nonlinear)、整数 变量数(Integer)
约束变量:约束总数 ( Total )、非线性约束 个数(Nonlinear)
非线性系数数量:总数 ( Total )、非线性项的 系数个数(Nonlinear)
内存使用量:单位为千字节
数据多,咋办?
value=1,1.2,0.9,1.1;
enddata
max=@sum(goods:weight*value);
@for(goods:@bin(x));
end
游泳
四名同学的混合泳接 力赛的四种成绩如左 表所示,确定如何分 配使成绩最佳。
蛙蝶自仰 泳泳由泳
泳
甲 99 60 59 73
线性规划
二次规划
非线性规划
LINGO软件的基本操作
双击快捷方式 即可计入程序编辑界面
Lingo软件介绍
➢解决一个简单的线性规划(LP)问题
max z 2x 3y 4x 3y 10
s.t. 3x 5y 12 x, y 0
LINGO软件介绍
点击图标
运行,屏幕上显示运行状态窗口如下: 对于LINGO运行状态窗口,
基 @EXP(X):指数函数(以自然对数e为底),返回eX的值
本 数 学
@ LOG(X):自然对数函数,返回X的自然对数值; @POW(X,Y):指数函数,返回XY的值;
函 @SQR(X):平方函数,返回X2的值;
数 @SQRT( X ):平方根函数,返回X的平方根;
@FLOOR(X):取整函数,返回X的整数部分(向靠近0 的方向取);
@GIN(X):限制X为整数.
0-1规划(线性规划)
lingo软件入门及其一般数学模型求解解析
LINGO|Options (Ctrl+I) 选项设置
Window|Close All (Alt+X) 关闭所有窗口 Help|Co ntents (F1) 在线帮 助
LINGO|Solution (Alt+O)显示解答
File|Save (F4) 保存文件
Edit|Paste (Ctrl+V) 粘贴 Edit|Redo (Ctrl+Y) 恢复操作
3x1 100 x1 , x2 0
模型求解:点击工具条上的按钮
即可
全局最优解找到 最优目标值 Global optimal solution found. Objective value: 3360.000 求解迭代次数 Total solver iterations: 2 Variable Value Reduced Cost X1 20.00000 0.000000 最优决策 X2 30.00000 0.000000 变量值 Row Slack or Surplus Dual Price 1 3360.000 1.000000 2 0.000000 48.00000 3 0.000000 2.000000 4 40.00000 0.000000
• 状态行(最左边显 示“Ready”,表示 “准备就绪”)
• 当前时间
工具栏
File|Open (F3) 打开文件 File|Print (F7) 打印文件 Edit|Copy (Ctrl+C) 复制 Edit|Undo (Ctrl+Z) 取消操作 Edit|Find (Ctrl+F) 查找 Edit|Match Parenthesis (Ctrl+P) 匹配括号
有效步数
【分析】数学建模有关纳税的分析与计算
【关键字】分析西南交通大学第二届“新秀杯”数学建模竞赛-西南交通大学教务处西南交通大学实验室及设备管理处西南交通大学数学建模创新实践基地工资薪金所得个人所得税计算方法的优化模型摘要本文研究的是关于工资薪金所得个人所得税计算方法的优化问题,主要运用了数学lingo软件,建立了数学优化模型,最后对模型作出分析、评价和改进。
对于问题一:本文根据速算扣除数的相关定义,再结合月工资的纳税计算方法,最后得出计算扣除数。
对于问题二:本文首先从实际情况出发,结合题目要求,在从分考虑修订前后的个人所得税的前提下,确定了该员工年总收入分为工资薪金与年终奖金的基本思路,随后,本文建立了数学优化模型,并利用lingo软件,对该模型进行了求解,得出最优解,即该员工的个人年终纳税的最合理纳税方案。
对于问题三:本文首先以第三问为基础,结合实际情况,综合考虑税率大小,建立了数学优化模型,本文将节假日费用和偶然所得费用归于月工资报税,年终奖金一万元单独报税,建立了数学优化模型,并利用lingo软件,对该模型进行了求解,得出最优解,最合理的报税方案即为总税额最小的方案。
关键词:个人所得税合理纳税数学优化模型lingo数学软件§ 1问题的重述一背景介绍十一届全国人大常委会第二十一次会议30日表决通过关于修改个人所得税法的决定。
法律规定,工资、薪金所得,以每月收入额减除费用3500元后的余额为应纳税所得额;工资、薪金所得,适用超额累进税率,税率为3%至45%。
修改后的个税法将于2011年9月1日起施行。
因此我国公民在今年纳税时,要对纳税方案进行合理规划。
二要解决的问题1、问题一如何计算税率计算公式的速算扣除数?2、问题二某公司员工连续两年全年总收入5—7万元/年, 若采用修改前、后的个税法,他应如何报税,从而达到合理报税。
3、问题三若该公司将在节假日(五一、国庆)发放节日费500-2000元,以及单独发放年终奖励1万元,而该员工在某月有工资外偶尔所得7000元,则该员工又应如何报税?1§2问题的分析一相关知识的介绍个人所得税是调整征税机关与自然人(居民、非居民人)之间在个人所得税的征纳与管理过程中所发生的社会关系的法律规范的总称。
运输问题的数学模型及其LINGO求解
,
m其需求量 分别是 b i , j = l , 2 , …, n . 从A 到 运 输单 位物
质 的运价 ( 单价 ) 为c 若用 %表示从 A 到 马 的运量 , 那 么产
表2
销 售 商 需 求
销平衡 的条件下 , 要求得总运费最小的调运方案. 通 过对问题 的分析 , 我们建立以下数学模型 :
表示从仓库 i 到销售 商 的成本 , D e m a n d j 表示第 个销 售商 的需求量 , C a p a c i t y  ̄ 表示第 i 个仓库 的货物量 , 我们 要求 运输
成本最低 即要解决以下问题 :
表示从仓库到销售商 运送 的商品数量 , 表示从仓 库到销
售 商 的成 本 , 表示第个 销售商 的需求 量 , 表示第 个仓库 的货
1
2
表 1 存 货数 据 货 物 量
4 3
4 1
已知有 m个 生产 基地 A i = 1 , 2 ,… , m. 可供 应某 种物
质 ,其 供应量分别 为 a / , i = 1 , 2 ,… , m有 n个销 地 目, j = l , 2 ,
…
3 4
5
6 0 5 5
14variablevaluereducedcostvolumewh1v260000000000000volumewh1v537000000000000volumewh2v116000000000000volumewh2v315000000000000volumewh2v410000000000000volumewh3v328000000000000volumewh3v732000000000000volumewh4v4125000000000000volumefwh4v622000000000000volumewh5v125000000000000volumewh5v22601000000000从上述求解报告中可以看到该公司所需的最低运输费用为7005其中仓库l向销售商2运送6个单位的商品仓库1向销售商5运送37个单位的商品仓库2向销售商1运送16个单位的商品仓库2向销售商3运送15个单位的商品仓库2向销售商4运送10个单位的商品仓库3向销售商3运送28个单位的商品仓库3向销售商7运送32个单位的商品仓库4向销售商4运送25个单位的商品仓库4向销售商6运送22个单位的商品仓库5向销售商1运送25个单位的商品仓库5向销售商2运送26个单位的商品
数学建模精讲_西南交通大学中国大学mooc课后章节答案期末考试题库2023年
数学建模精讲_西南交通大学中国大学mooc课后章节答案期末考试题库2023年1.Lingo软件是常用的优化问题的求解软件。
参考答案:正确2.0-1规划是整数规划。
参考答案:正确3.求解整数规划一定能得到最优解。
参考答案:错误4.整数规划是指规划问题中的全部变量限制为整数。
参考答案:错误5.所有决策变量均要求为整数的整数规划称为纯整数规划。
参考答案:正确6.整数规划与线性规划不同之处在于增加了整数约束。
参考答案:正确7.分枝定界法是整数规划的常见算法。
参考答案:正确8.原线性规划有最优解,当自变量限制为整数后,其整数规划也一定有最优解。
参考答案:错误9.整数规划最优解常可以按照实数最优解简单取整而获得。
参考答案:错误10.与线性规划连续的可行域不同,整数规划的可行域是离散的。
参考答案:正确11.整数规划由于限制变量是整数,增加了求解难度,但整数解是有限个,所以有时候可以采用枚举法。
参考答案:正确12.非线性规划已经有一般的适合所有问题的成熟的解法。
参考答案:错误13.非线性规划的局部最优解和全局最优解等价。
参考答案:错误14.多目标规划的目标函数多于1个。
参考答案:正确15.非线性规划是指规划模型的目标函数或者约束条件中至少有一个为非线性表达式。
参考答案:正确16.多目标规划的解法包括分枝定界法,单纯形法。
参考答案:错误17.根据地球上任意两点的经纬度就可以计算这两点间的距离。
参考答案:正确18.如果可能,把非线性规划转换为线性规划是非常好的一个思路,原因是线性规划有比较成熟的算法。
参考答案:正确19.Lingo软件求解非线性规划的结果都是全部最优解。
参考答案:错误20.求解多目标规划的线性加权和法,在确定权系数之前,一般要对目标函数值做统一量纲处理,其目的是避免出现大数吃小数、权系数失去其作用的问题。
参考答案:正确21.哥尼斯堡七桥问题由欧拉证明了是可以走通的。
参考答案:错误22.“健康中国2030”规划纲要其中一项主要指标是将我国人均预期寿命提升至79岁左右。
运筹学软件(LINGO)简介
目标与约束段
对于产品数量的平衡方程而言, 由于下标I=1时的约束关系 与I=2,3,4时有所区别(因为定义的变量INV是不包含INV(0)), 因 此把I=1的约束关系单独写出“INV(1)=10+RP(1)+OP(1)-DEM(1);”, 而对I=2,3,4对应的约束, 增加了一个逻辑表达式来刻划: @FOR(QUARTERS(I)|I#GT#1: INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I););
② 变量定界函数 @GIN(X): @BIN(X): @FREE(X): 限制X为整数. 限制X为0或1. 取消对X的符号限制.
@BND(L,X,U): 限制 L ≤ X ≤ U .
注: 有关其它函数的介绍, 请参考LINGO的帮助文件.
4、运算符说明 ① 运算符 算数运算符: +(加法), -(减法或负号), *(乘法), /(除法), ^(求幂). 关系运算符: <(即<=,小于等于), >(即>=,大于等于). 注:优化模型中的约束一般没有严格小于、严格大于关系. =(等于),
逻辑运算符: #AND#(与), #EQ#(等于), #OR#(或), #NE#(不等于), #NOT#(非); #GT#(大于).
#GE#(大于等于), #LT#(小于),#LE#(小于等于).
注: 逻辑运算的结果为“真”(TRUE)和“假”(FALSE), LINGO 中用数字1代表TRUE, 其它值都是FALSE.
2、状态窗口说明(例1)
Variables(变量数量) Total(变量总数) Nonlinear(非线性变量) Integer(整数数量)
注:由于LINGO对中文操作系 统的兼容性不好, 所以有些 显示字符和单词被截掉了.
lingo在运筹学中的运用
lingo在运筹学中的运用
Lingo在运筹学中是一类特别有用的工具,它是一种针对非线性优
化问题的建模语言。
它提供了一种实现复杂求解过程的有效方法,可
以帮助企业创建可衡量的、可控的模型,本质上提高解决难题的能力。
Lingo在运筹学中的应用如下:
一、数据建模
Lingo可以帮助企业更好地利用数据分析,通过数据可视化,实时监测,以及建立超级等式和复合对象,更好地实现数据建模。
这样可以提高
数据管理能力,让企业能够更好地组织、管理、分析及设计数据模型。
二、决策模型
Lingo可以帮助企业构建复杂的决策模型,允许运筹学家在多变量制约
条件下建立决策模型。
Lingo可以在多种应用场景中使用,从传统的精
确方程求解到组合优化多目标问题,从分布式系统的模拟到深度学习
的应用模型,Lingo都有着重要的用途。
三、数学优化
Lingo可以帮助企业有效地实现数学优化目标,在模型本身的表述上,Lingo具有更快的执行速度,并且可以处理大量的数量和变量,可以表
示复杂的最优化目标函数,从而提供最佳的运行数值。
四、机器学习
Lingo在运筹学中也可以应用于机器学习领域,可以用来构建收敛性更
强的机器学习模型,比如基于复杂决策树的模型,或者用Lingo设计的模型来处理视觉捕获和多机实时分析的问题。
总结:Lingo在运筹学中具有重要的作用,它可以帮助企业更加有效地实现数据建模、决策模型、数学优化和机器学习等方面的目标,进而提高企业的解决问题的能力。
LINGO软件简介
LINGO 软件简介LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整数规划等问题.一个简单示例有如下一个混合非线性规划问题:⎪⎩⎪⎨⎧≥≤≤+++---+为整数2132121321322212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x .LINGO 程序模型:max =98x1+277x2-x1^2-0.3x1x2-2x2^2+150x3; x1+2x2+2x3<=100; x1<=2x2;gin x1;gin x2; Lingo 默认变量非负注意:binx 表示x 是0-1变量;ginx 表示x 是整数变量;bndL,x,U表示限制LxU ;freex 表示取消对x 的符号限制,即可正、可负.结果:Global optimal solution found.Objective value: 9561.200 Extended solver steps: 0 Total solver iterations: 45 Variable Value Reduced CostX1 6.000000 -76.70000X2 31.00000 -151.2000X3 16.00000 -150.0000Row Slack or Surplus Dual Price1 9561.200 1.0000002 0.000000 0.0000003 56.00000 0.000000———————— 非常简单在LINGO 中使用集合为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化下标表示.例如:对⎪⎪⎩⎪⎪⎨⎧==-++-==≤++∑=.,,;10)0(;4,3,2,1),()())()1()(;4,3,2,1,20)(..)}(20)(450)(400{min4,3,2,1均非负INV OP RP INV I I DEM I OP I RP I INV I INV I I RP t s I INV I OP I RP I求解程序:model :sets :mark/1,2,3,4/:dem,rp,op,inv;也可以vmark/1..4/:dem,rp,op,inv;endsetsmin=sum mark:400rp+450op+20inv;也可以markI:400rpI+450opI+20invI;for markI: rpI<40;for markI|Igt1: invI=invI-1+rpI+opI-demI;inv1=10+rp1+op1-dem1;data:dem=40,60,75,35;enddataend上面程序在model…end之间有1集合定义、2数据输入和3其他三部分内容.集合定义部分从sets:到endsets:定义了一个指标集合mark可以理解为数组下标及其范围和其4个属性dem、rp、op、inv用此向量的数组变量.数据输入部分从data:到enddata依次给出常量dem的值.其他部分:给出优化目标及约束.一般而言,LINGO中建立优化模型的程序可以由五部分组成,或称为五段section:1集合段SETS:这部分以“SETS:”开始,以“ENDSETS”结束,作用在于定义必要的集合变量SET及其元素member,含义类似于数组的下标和属性attribute,含义类似于数组.2目标与约束段:这部分实际上定义了目标函数、约束条件等,但这部分没有段的开始和结束标记;该段一般常用到LINGO内部函数,尤其是和集合相关的求和函数SUM和循环函数FOR等.3数据段DATA:这部分以“DATA:”开始,以“ENDDATA”结束,作用在于对集合的属性数组输入必要的常数数据.格式为:attribute属性=value_list常数列表;常数列表中的数据之间可以用逗号、空格或回车符分隔.如果想要在运行时才对参数赋值,可以在数据段使用输入语句,其格式为“变量名=;”,但仅限对单个变量赋值,而不能用于属性变量数组的单个元素.4初始段INIT:这部分以“INIT:”开始,以“ENDINIT”结束,作用在于对集合的属性数组定义初值因为求解算法一般是迭代算法,提供一个较好的初值,能提高计算效果.定义初值的语句格式为:attribute属性=value_list常数列表;这与数据段中的用法类似.5计算段CALC:这部分以“CALC:”开始,以“ENDCALC”结束,作用在于对一些原始数据进行预处理加工,使其成为模型直接需要的数据.该段中通常是计算赋值语句.基本集合与派生集合为了处理二维数组变量等有多个下标的问题,LINGO引入了“派生集”的概念.我们把直接列出元素的指标集合叫“基本集合”,而基于其他集合派生出来的二维或多维指标集合称为“派生集”.派生集的定义格式为:派生集名原始集合1,原始集合2,…,原始集合n:属性变量列表;实际上就是笛卡儿积的意思,即:派生集={i1,i2, (i)n| i1集合1, i2集合2,…, in集合n}.1一个应用例子布局问题:某些建筑工地的位置用平面坐标a,b表示及水泥日用量d已知.现有A、B两临时料场位于P5,1、Q2,7,日储量20.问A、B两料场分别向各工地运输多少吨水泥,使总吨公里数最小若重新安排两料场的位置,应怎样安排才能使总吨公里数最小这样安排可节省多少吨公里设工地位置ai ,bi,水泥日用量为dii=1,2,…,6;料场位置xi,yi,日储量ej,j=1,2;从料场j向工地i运送量为cij.该问题的数学模型为:LINGO求解程序为:MODEL:sets:Imark/1..6/:a,b,d;Jmark/1,2/:x,y,e;IJmarkImark,Jmark:c;endsetsdata:Location for demand需求点位置;a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;Quantities of the demand and supply供需量;d=3,5,4,7,6,11;e=20,20;enddatainit:Initial location for the supply初始点;x,y=5,1,2,7;endinitObjective function目标;OBJ min=sum IJmarki,j: ci,jxj-ai^2+yj-bi^2^1/2; demand contraints需求约束;for Imarki:DEMAND_CON SUM Jmarkj:ci,j=di;; supply constrains供给约束;for Jmarkj:SUPPLY_CON SUM Imarki:ci,j<=ej;;for Jmark: free x;free y;;2一个动态规划的例子:最短路问题从S城市到T城市之间找一条最短路径,道路情况如下:数学模型为:LINGO求解程序:model:sets:cities/s,a1,a2,a3,b1,b2,c1,c2,t/:L; 属性Li表示城市S到城市i的最优行驶路线的里程;roadscities,cities/ 派生集合roads表示的是网络中的道路;s,a1 s,a2 s,a3 由于并非所有城市间都有道路直接连接,所以将路具体列出;a1,b1 a1,b2 a2,b1 a2,b2 a3,b1 a3,b2b1,c1 b1,c2 b2,c1 b2,c2 属性Di,j是城市i到城市j的直接距离已知;c1,t c2,t/:D;endsetsD= 6 3 36 5 8 67 46 7 8 95 6;L=0,,,,,,,,; 因为Ls=0;enddatafor citiesi|igt index s: 这行中"indexs"可以直接写成"1";Li=min roadsj,i:Lj+Dj,i;; 这就是最短路关系式;endVariable ValueL S0.000000L A16.000000L A23.000000L A33.000000L B110.00000L B27.000000L C115.00000L C216.00000L T20.00000最短路径为: S-〉A3-〉B2-〉C1-〉T3指派问题设有6个人做6件事.其中cij表示第i人做第j事的收益;设第i人做第j事时xij =1,否则xij=0.该问题的规划模型:说明:其中“-”表示某人无法做该事.可令其为-表示绝对不行或0领薪不用干活LINGO求解程序:MODEL:sets:Imark/1..6/:i;Jmark/1..6/:j;IJmarkImark,Jmark:c,x;endsetsdata:第i人做第j事的收益;c=20,15,16,5,4,717,15,33,12,8,69,12,18,16,30,1312,8,11,27,19,14-99,7,10,21,10,32-99,-99,-99,6,11,13;enddataOBJ max=sum IJmarki,j: cx;每人做一项工作;for Imarki: SUM Jmarkj:xi,j=1;;每事一人做;for Jmarkj: SUM Imarki:xi,j=1;;for IJmark: bin x;本约束可以不要,因为有解时必为0或1; END4生产与销售计划问题某公司用两种原油A 和B 混合加工成两种汽油甲和乙.甲、乙两种汽油含原油A 的最低比例分别为50%和60%,每吨售价分别是4800元和5600元.该公司现有原油A 和B 的库存量分别为500吨和1000吨,还可以从市场上买到不超过1500吨的原油A.原油A 的市场价为:购买量不超500吨时单价为10000元/吨;购买量超过500吨但不超1000吨时,超过500吨部分单价为8000元/吨;购买量超过1000吨部分的单价是6000元/吨.该公司应如何安排原油的采购和加工以获得最大利润数学模型: 设原油A 用于生产甲、乙两种汽油的数量分别是x11和x12,原油B 用于生产甲、乙两种汽油的数量分别是x21和x22;购买原油A 的数量是x 吨,采购支出为cx 千元/吨.为了处理分段函数cx,将原油采购量x 分解为对应价格10千元/吨的采购量x1、对应对应价格8千元/吨的采购量x2和对应价格6千元/吨的采购量x3,它们应满足:0)500(21=-x x 表示要么x1=500要么x2=0,即x1的量不达到500时x2=00)500(32=-x x 表示要么x2=500要么x3=0,即x2的量不达到500时x3=0此时采购支出3216810)(x x x x c ++=模型改变为:LINGO 求解程序:model :init:x1=500;x2=500;x3=0;x12=1500;x22=1000;x11=0;x21=0;endinitmax=4.8x11+4.8x21+5.6x12+5.6x22-10x1-8x2-6x3; x11+x12<=x+500;x21+x22<=1000;0.5x11-0.5x21>=0;0.4x12-0.6x22>=0;x=x1+x2+x3;x1-500x2=0;x2-500x3=0;bnd0,x1,500;bnd0,x2,500;bnd0,x3,500;。
数学建模Lingo软件简介
版本类型 总变量数 整数变量数 非线性变量数 约束数
演示版 求解包 高级版 超级版 工业版 扩展版
300 500 2000 8000 32000 无限
30 50 200 800 3200 无限
30 50 200 800 3200 无限
150 250 1000 4000 16000 无限
Lingo(Linear Interactive and General Optimizer),即交互 式的线性和通用优化求解器,可求解线性规划,也可以求解非 线性规划,还可以用于一些线性和非线性方程组的求解等。 Lingo软件的最大特),而且执行速度很快。Lingo实际上还是最 优化问题的一种建模语言,包括许多常用的数学函数共建立优 化模型时调用,并可以接受其它数据文件。
2. 建立LINDO/LINGO优化模型需要注意的几个基本问题
1. 尽量使用实数优化模型,尽量减少证书约束和整数变 量的个数;
2. 尽量使用光滑优化模型,尽量避免使用非光滑函数; 3. 尽量使用线性优化模型,尽量减少非线性约束和非线 性变量的个数; 4. 合理设定变量的上下界,尽可能给出变量的初始值; 5. 模型中使用的单位的数量级要适当。
演示版和正式版的基本功能是类似的,只是试用版能够
求解问题的规模受到严格限制,对于规模稍微大些的问题就不 能求解。即使对于正式版,通常也被分成求解包(solver suite)、 高级版(super)、超级版(hyper)、工业版(industrial)、扩展版 (extended)等不同档次的版本,不同档次的版本的区别也在于 能够求解的问题的规模大小不同,下表给出了不同版本 LINGO程序对求解规模的限制:
LINDO,LINGO,LINDO API 和 What’s Best! 在最优化软件的市场上占有很大的份额,尤其在供微机上使用 的最优化软件的市场上,上述软件产品具有绝对的优势。根据 LINDO公司主页()上提供的信息,位列 全球《财富》杂志500强的企业中一半以上使用上述产品,其 中位列全球《财富》杂志25强企业中有23家使用上述产品。读 者可以从上述主页下载上面4种软件的演示版和大量应用例子。
用lingo编程解决运输问题大全
LINGO是用来求解线性和非线性优化问题的简易工具。
LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例如何在LINGO中求解如下的LP问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码:min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如下表。
销地产地B 1B 2B 3B 4B 5B 6B 7B 8产量A 1 6 2 6 7 4 2 5 9 60 A 2 4 9 5 3 8 5 8 2 55 A 3 5 2 1 9 7 4 3 3 51 A 4 7 6 7 3 9 2 7 1 43 A 5 2 3 9 5 7 2 6 5 41 A 6 5 5 2 2 8 1 4 3 52 销量3537223241324338使用LINGO软件,编制程序如下:model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume; endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J)); !产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
数学建模软件LinDoLinGo的简介(修改)
X——表示变量X可取任意实数值。 GIN X——表示变量X只取非负整数值。 INT X——表示变量X只能取0或1。 SLB X value——表示变量X以value为下界。 SUB X value——表示变量X以value为上界。 FREE m——表示问题的前m个变量为自由变量 GIN m——表示问题前m个变量为非负整数值 INT m——表示问题前m个变量为0-1变量。
LINGO 示例
查看简单例子
LINHGO程序
Lindo模型到Lingo模型的转换
“ST”在Lingo模型中不再需要,所以删除了; 在每个系数与变量之间增加了运算符“*”;
将目标函数的表示方式从“MAX”变成“MAX=”;
每行(目标、约束和说明语句)后面均增加了一
个分号“;”; 约束的名字被放ngo中模型以“Model:”开始,以“END”结束。 对简单模型,这两个语句也可以省略。
LINDO/LINGO软件 使用简介
LinDo/LinGo简介
LINDO(Linear Interactive and Discrete Optimizer),即“交互式的线性和离散优化求解 器”,可以用来求解线性规划(LP)和二次规划 (QP); LINGO(Linear Interactive and General Optimizer),即“交互式的线性和通用优化求解 器”,除了用来求解线性规划(LP)、二次规划 (QP)和非线性规划,还可用于线性和非线性方程 组的求解。 最大的特色:允许决策变量是整数(即整数规划,包 括0-1规划)。
Lindo求解整数规划
Lindo求解整数规划程序
LP OPTIMUM FOUND AT STEP 2 OBJECTIVE VALUE = 998.811951
lingo数学模型
lingo数学模型
"lingo"是一种用于数学建模和优化的软件工具。
它提供了一个
直观的界面,用于建立和求解复杂的数学模型,包括线性规划、整
数规划、非线性规划、多目标规划等。
lingo的使用可以帮助分析
师和决策者在面临复杂的决策问题时进行优化决策。
在数学建模方面,lingo可以用来建立数学模型,包括定义决
策变量、约束条件和目标函数。
用户可以通过lingo的界面直观地
输入模型的各个部分,而无需深入了解数学建模的具体语法和规则。
这使得非专业的用户也能够快速地建立数学模型。
在优化方面,lingo提供了强大的求解算法,可以对各种类型
的数学模型进行求解,以找到最优的决策方案。
lingo支持对模型
进行灵敏度分析,帮助用户了解参数变化对最优解的影响,从而更
好地进行决策。
除了数学建模和优化外,lingo还具有数据可视化功能,可以
直观地展示模型的结果和决策方案。
这有助于用户向决策者传达模
型分析的结果,从而更好地支持决策过程。
总的来说,lingo作为数学建模和优化工具,为用户提供了一
个方便、强大的平台,帮助他们解决复杂的决策问题。
通过lingo,用户可以更好地理解问题、制定决策,并得到最优的解决方案。
利用LINGO软件解决数学建模问题
LINDO:
Max x1+x2+x3+x4 ST(大写或写subject to) x5+x6+x7+x8>=250000 x1+x5<=380000 x2+x6<=265200 x3+x7<=408100 x4+x8<=130100 2.85*x1-1.42*x2+4.27*x318.49*x4>=0; 2.85*x5-1.42*x6+4.27*x718.49*x8>=0; 16.5*x1+2.0*x2-4.0*x3+17*x4>=0; 7.5*x5-7.0*x6-13.0*x7+8.0*x8>=0; end
2) 0.000000 3) 0.000000 4) 0.000000 5) 0.000000 6) 0.000000 7) 0.000000 8) 43454.000000 9) 3239024.250000 10) 1890675.875000
-1.000000 1.000000 1.000000 1.000000 1.000000 0.000000 0.000000 0.000000 0.000000
表2
飞机汽油 1 2 辛烷数 >=91 >=100 蒸汽压力(g/cm^2) <=9.96*10^(-2) <=9.96*10^(-2) 产量需求(L) 越多越好 >=250000
建模过程略(详见《运筹学基础》P54—55) 目标函数:max z=x1+x2+x3+x4 约束条件:x5+x6+x7+x8>=250000 x1+x5<=380000 x2+x6<=265200 x3+x7<=408100 x4+x8<=130100 2.85x1-1.42x2+4.27x3-18.49x4>=0 2.85x5-1.42x6+4.27x7-18.49x8>=0 16.5x1+2.0x2-4.0x3+17x4>=0 7.5x5-7.0x6-13.0x7+8.0x8>=0 xj>=0(j=1,2...,8)
西南交大新秀杯数学建模
2015年西南交通大学新秀杯数学建模竞赛题目: B (填写A或B题)组别:大二组(填写大一组或大二题)西南交通大学教务处西南交通大学实验室及设备管理处西南交通大学数学建模创新实践基地五子棋部分阵法研究的数学模型摘要五子棋游戏是一种益智类的博弈游戏,其开局阵型对棋局结果往往起决定性作用。
本文通过构造博弈树,结合极大极小算法、运用机理分析与计算机模拟的方法,讨论了在五种开局阵型下黑子获胜的策略,及该策略实现的概率大小问题。
对于问题一,首先我们将棋盘抽象为方阵,将方阵中对于元素的描述方式引入棋盘,从而建立起各棋子位置与数组(,)i j之间的映射关系;其次,我们做出博弈树表示黑白双方对弈的过程,从图像上表现了这一过程中随着搜索深度增加,博弈树的子节点将成指数增长的特点,又从实际出发阐述了对弈双方在“与”和“或”节点上存在明显对立的利害关系时,两方将如何选择;在此基础上,引入极大极小化搜索思想,结合实际情况,用价值大小量化对弈过程,设计出在估值函数用来比较不同局面的对某方的价值大小;此外,考虑到在按照极大极小搜索原理,搜索理想的博弈条件下,黑棋取胜的路径时搜索空间巨大,我们又对这一算法进行了搜索空间限定及搜索方式的优化;最后利用VC6.0编程,输入四种初始界面后经过一步步回溯,最终都得到了黑棋获胜的结果。
可见将极大极小算法应用到这四种局面,可以寻找到取胜的路径。
对于问题二,首先我们在问题二中做出了合理的假设,将问题转化为,在无初始阵型的前提下,若白棋随机性的落子,黑棋按照问题一中极大极小算法这一策略,取胜概率应如何;其次,我们首先考虑运用概率论的相关知识,通过机理分析,结合古典概型建立了在假设条件下黑棋不败的概率解析模型,但由于求解复杂,我们考虑采用蒙特卡罗模拟的方法,利用机理分析过程中的一系列结论,得到计算机模拟所需要的概率分布及随机数列,但编程结果并不理想;此外我们认为策略的合理性可以由其成功率决定,即这个策略的合理性较为欠缺;最后我们通过搜集资料,在问题结果的讨论中引入了部分算法优化的方法,相信将这些方法加以应用后,能够更好的解决此类博弈问题。
第三部分Lingo软件实验_2_
第三部分Lingo软件实验《运筹学》是一门实践性很强的应用性课程,其理论方法已被广泛应用到工业、农业、商业、交通运输业、民政事故、军事决策、物流与供应链优化、经济与金融系统等各个领域,如:资源分配、最短路线、生产计划、运输方案等。
然而,对于实际应用问题,应用运筹学的理论方法通过数学建模思想建立数学模型之后,求解数学模型就成为广大决策者首先应该面对的问题。
这里我们将向读者介绍一款用于求解运筹优化模型的专业数学软件-Lingo。
Lingo软件是一款专业的用于求解线性规划与非线性规划的数学软件,是求解线性规划与非线性规划最直接、最简单、最快捷的计算工具。
另外,Lingo软件内置了一种独特的建模语言,可以用于解决大规模的优化问题。
这里我们将主要介绍Lingo软件在《运筹学》课程中的应用,并简单介绍其在经济与金融系统中的应用。
第一讲 Lingo 软件简介线性规划、整数规划以及非线性规划是运筹学课程的主体内容。
这一讲主要介绍Lingo 程序的编写以及应用Lingo 软件解决一些简单的问题,主要针对变量比较少且约束条件比较少的小规模优化问题,并以钢管下料问题为例。
1.1 预备知识简单优化问题的求解,包括线性规划、整数规划、非线性规划等。
1.2 相关函数命令及简介1. 简单Lingo 程序的编写:以“model :”开始,以“end ”结束;“max=”或“min=”表示目标函数;其它语句表示约束条件;2. 变量界定函数实现对变量取值范围的附加限制,共4种:@bin(x) 限制x 为0或1; @bnd(Lower,x,Upper) 限制L≤x≤U;@free(x) 取消对变量x 的默认下界为0的限制,即x 可以取任意实数;@gin(x) 限制x 为整数; 在默认情况下,LINGO 规定变量是非负的,也就是说下界为0,上界为+∞。
@free 取消了默认的下界为0的限制,使变量也可以取负值。
@bnd 用于设定一个变量的上下界,它也可以取消默认下界为0的约束。
数学建模中选址问题(Lingo程序)
P94,例3.4 选址问题目录题目 (1)第一步,旧址基础上只求运量的LP程序 (1)第二步,旧址基础上选择新址的NLP程序 (2)题目6个工地的地址(坐标表示,距离单位KM)及水泥用量(单位:吨)如下表,而在P(5,1)及Q(2,7)处有两个临时料场,日储量各有20t,如何安排运输,可使总的吨公里数最小?新料场应选何处?能节约多少吨公里数?第一步,旧址基础上只求运量的LP程序MODEL:Title Location Problem;sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:!locations for the demand(需求点的位置);a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;!quantities of the demand and supply(供需量);d=3,5,4,7,6,11; e=20,20;x,y=5,1,2,7;enddatainit:!initial locations for the supply(初始点);endinit!Objective function(目标);[OBJ] min=@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2) );!demand constraints(需求约束);@for(demand(i):[DEMAND_CON] @sum(supply(j):c(i,j)) =d(i););!supply constraints(供应约束);@for(supply(i):[SUPPL Y_CON] @sum(demand(j):c(j,i)) <=e(i); );!@for(supply: @free(x);!@free(Y);!);@for(supply: @bnd(0.5,X,8.75); @bnd(0.75,Y,7.75); );END运行可得到全局最优解Global optimal solution found.Objective value: 136.2275Total solver iterations: 1Model Title: Location ProblemVariable Value Reduced CostX( 1) 5.000000 0.000000X( 2) 2.000000 0.000000Y( 1) 1.000000 0.000000Y( 2) 7.000000 0.000000E( 1) 20.00000 0.000000E( 2) 20.00000 0.000000第二步,旧址基础上选择新址的NLP程序!选新址的NLP程序;MODEL:Title Location Problem;sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:!locations for the demand(需求点的位置);a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;!quantities of the demand and supply(供需量);d=3,5,4,7,6,11; e=20,20;enddatainit:!initial locations for the supply(初始点);!x,y=5,1,2,7;endinit!Objective function(目标);[OBJ] min=@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2) );!demand constraints(需求约束);@for(demand(i):[DEMAND_CON] @sum(supply(j):c(i,j)) =d(i););!supply constraints(供应约束);@for(supply(i):[SUPPL Y_CON] @sum(demand(j):c(j,i)) <=e(i); );!@for(supply: @free(x);!@free(Y);!);@for(supply: @bnd(0.5,X,8.75); @bnd(0.75,Y,7.75); );END求解结果只得到局部最优解Local optimal solution found.Objective value: 89.88347Total solver iterations: 67Model Title: Location ProblemVariable Value Reduced CostX( 1) 5.695966 0.000000X( 2) 7.250000 -0.3212138E-05Y( 1) 4.928558 0.000000Y( 2) 7.750000 -0.1009767E-05如果不要初始数据,可能计算时间更长,本例的结果更优:Local optimal solution found.Objective value: 85.26604Total solver iterations: 29Model Title: Location ProblemVariable Value Reduced CostX( 1) 3.254883 0.000000X( 2) 7.250000 -0.2958858E-05Y( 1) 5.652332 0.000000Y( 2) 7.750000 -0.1114154E-05如果想求全局最优解,结果将会出现如下错误版本限制,但会得到一个的局部最优解,结果与不要初始数据时算出的结果一样。
lingo解方程组
lingo解方程组Lingo是一种用于解决数学问题的优化软件,它可以用于解方程组。
在解方程组时,Lingo可以帮助我们找到满足所有方程的变量值。
本文将介绍如何使用Lingo解方程组,并通过一个具体的例子进行说明。
我们需要了解方程组的基本概念。
方程组是由多个方程组成的集合,每个方程包含多个未知数和一个等式。
解方程组就是找到满足所有方程的未知数的值。
在解方程组时,我们可以使用代数方法,也可以借助计算工具如Lingo进行求解。
接下来,我们以一个简单的线性方程组为例进行说明。
假设有以下方程组:2x + y = 5x + 3y = 8我们的目标是找到使得这两个方程同时成立的x和y的值。
我们可以使用Lingo来解决这个问题。
首先,我们需要将方程组转化为Lingo中的标准形式。
标准形式要求所有未知数的系数都为正数,并且等式右侧为常数。
为了将方程组转化为标准形式,我们可以对方程进行变换。
首先,我们可以将第一个方程变为2x + y - 5 = 0,第二个方程变为x + 3y - 8 = 0。
接下来,我们可以使用Lingo建立一个数学模型来求解这个方程组。
在Lingo中,我们可以使用变量来表示未知数,使用约束条件来表示方程。
我们可以定义两个变量x和y,并设置它们的取值范围。
然后,我们可以设置两个约束条件来表示方程组中的两个方程,将它们加入到模型中。
经过这些步骤,我们可以使用Lingo进行求解。
Lingo会自动寻找满足所有约束条件的变量值,并给出最优解。
在我们的例子中,Lingo可以得出x = 2,y = 1的解。
通过这个例子,我们可以看到Lingo解方程组的过程。
首先,我们需要将方程组转化为标准形式。
然后,我们可以使用Lingo建立数学模型,并设置变量和约束条件。
最后,Lingo会自动寻找满足约束条件的最优解。
除了线性方程组,Lingo还可以解决非线性方程组和混合整数方程组等更复杂的问题。
它提供了丰富的数学函数和优化算法,可以帮助我们更高效地解决各种数学问题。
Lingo-中各项的含义
Lingo solution report中各项的含义〔一〕优化模型的组成优化模型包括以下3部分:l Objective Function:目标函数是一个能准确表达所要优化问题的公式。
l Variables:Decision variables〔决策变量〕,在模型中所使用的变量。
l Constraints:约束条件。
〔二〕Lingo软件使用的注意事项〔1〕LINGO中不区分大小写字母,变量〔和行名〕可以使用不超过32个字符表示,且必须以字母开头。
〔2〕在命令方式下〔Command Window中〕,必须先输入MODEL:表示开始输入模型。
LINGO中模型以“MODEL:”开始,以“END”结束。
对简单的模型,这两个语句也可以省略。
〔3〕LINGO中的语句的顺序是不重要的,因为LINGO总是根据“MAX=”或“MIN=”语句寻找目标函数,而其它语句都是约束条件〔当然注释语句和TITLE 除外〕。
〔4〕LINGO模型是由一系列语句组成,每个语句以分号“;”结束。
〔5〕LINGO中以感慨号“!”开始的是说明语句〔说明语句也需要以分号“;”结束〕。
〔6〕LINGO中解优化模型时假定所有变量非负〔除非用限定变量函数@free 或@sub或slb另行说明〕。
〔三〕Solution Report各项的含义例1 将以下模型粘贴到Lingo中求解,其中第一行MODEL和最后一行END在Lingo Model 窗口下可以不要。
MODEL:min = 2*x1 + 3*x2;x1 + x2 >= 350;x1 >= 100;2*x1 + x2 <= 600;END得到如下的结果报告Global optimal solution found.Objective value: 800.0000Infeasibilities: 0.000000 !指矛盾约束的数目;Total solver iterations: 2Model Class: LPTotal variables: 2Nonlinear variables: 0Integer variables: 0Total constraints: 4Nonlinear constraints: 0Total nonzeros: 7Nonlinear nonzeros: 0Variable Value Reduced CostX1 250.0000 0.000000X2 100.0000 0.000000Row Slack or Surplus Dual Price1 800.0000 -1.0000002 0.000000 -4.000000 ! 模型第一行表示目标函数,第二行对应第一个约束;3 150.0000 0.0000004 0.000000 1.000000下面对Solution Report〔LINGO的结果报告窗口〕的各个部分进行说明:Global optimal solution found 表示全局最优解找到.Objective value: 800.0000 表示最优目标值为800.0000.Total solver iterations: 2 表示用单纯行法进行了两次迭代.Variable 表示变量, 此问题中有两个变量X1, X2.Value 给出最优解中各变量(Variable)的值: X1=250.0000, X2=100.0000.Reduced Cost 实际上是与最优单纯形表中的检验数相差一个负号的一个数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
扩展的求解器 (求解程序) 状态框
用LINGO 来解二次规划问题
MAXz = 98 x1 + 277 x2 x12 0.3 x1 x2 2 x2 2 s.t.x1 + x2 ≤ 100 x1 ≤ 2 x2 x1 , x2 ≥ 0为整数
注意事项:
max=98*x1+277*x2-x1^20.3*x1*x2-2*x2^2; x1+x2<100; x1<2*x2; @gin(x1);@gin(x2);
目标函数 : MIN
i =1,2,3,4
∑ {400 RP( I ) + 450OP( I ) + 20 INV ( I )}
约束条件1(能力限制): RP(I)<40,I=1,2,3,4; 约束条件2(产品数量的平衡方程): INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I),I=1,2,3,4; INV(0)=10; 约束条件3: 变量的非负约束 利用数组的概念
1) 变量和行名可以超过8 个 字符,但不能超过32 个字符, 且必须以字母开头 2) LINGO 已假定各变量非 负(除非用函数@free或 @sub 或@slb 另行说明) 3) 变量可以放在约束条件的 右端(同时数字也可放在约束 条件的左端)。但为了提高效 率,应尽可能采用线性表达式 定义目标和约束(如果可能)
模型的建立 从S到T的行驶过程分成4 个 阶段,即S→Ai(i=1,2 或3), Ai → Bj(j=1或2), Bj → Ck(k=1 或2), Ck → T 记d(Y,X)为城市Y与城市X之间 的直接距离(若这两个城市之 间没有道路直接相连,则可以 认为直接距离为无穷大),用 L(X)表示城市S到城市X的最 优行驶路线的路长, 则: 定义稀疏集合ROADS 方 法:元素枚举法
QUARTERS ={1,2,3, 4}称为集合, DEM,RP,O P,INV 称 为该集合的 属性
循环函数”@FOR(集合:约束关系式)”的方式定义的, 用求和函数”@SUM(集合:表达式)”的方式定义的,这 作用在于对集合的属性(数组)输入必要 意思是对冒号“:”前面的集 个函数的功能是对冒号“:”后面的表达式,按照冒号“:” 的常数数据。 合的每个元素(下标),冒号“:”后面的约束关系式都 前面的下标集合指定的下标进行求和。由于本例中目标 格式为:attribute = value_list MODEL: 要成立。由于下标i=1 时的约束关系式与i=2,3,4 函数对所有下标都要求和,所以我们连下标i 也省去了; SETS: 时有所区别,所以对下标集合的元素(下标)加了一个 如果不省略,目标函数也可以等价地写成 QUARTERS/1..4/:DEM,RP,OP,INV;! 定义集合及其属性; “i#GT#1”的限制条件,而把i=1 时的约束关系式单独 “@SUM(QUARTERS(i): 400*RP(i) +450*OP(i) ENDSETS 写出。限制条件“i#GT#1”是一个逻辑表达式,意思就 +20*INV(i) )” DATA: 是i>1
例1:SAILCO 公司需要决定下四个季度的帆船生产量。 下四个季度的帆船需求量分别是40 条,60 条,75 条, 25 条,这些需求必须按时满足。每个季度正常的生产能 力是40 条帆船,每条船的生产费用为400 美元。如果 加班生产,每条船的生产费用为450 美元。每个季度末, 每条船的库存费用为20 美元。 假定生产提前期为0,初始库存为10 条船。如何安排 生产可使总费用最小? 用DEM,RP,OP,INV 分别表示需求、正常生产的产量、 加班生产的产量、库存量,则DEM,RP,OP,INV 对每个 季度都应该有一个对应的值,也就说他们都应该是一个由 4 个元素组成的数组,其中DEM 是已知的,而 RP,OP,INV 是未知数。
DEM=40,60,75,25; ENDDATA !初始段省略; MIN=@SUM(QUARTERS:400*RP+450*OP+20*INV); !目标函数; @FOR(QUARTERS(I):RP(I)<40);!能力约束; @FOR(QUARTERS(I)|I#GT#1:!产品数量的平衡方程; INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I);); INV(1)=10+RP(1)+OP(1)-DEM(1); END
L(S)=0 MIN { L(Y ) + d (Y , X )} , X ≠ S
Y≠X
从S到T的最优行驶路线的路 长为20(进一步分析,可以 得到从S到T的最优行驶路线 为S→ A3→ B2→ C1 → T)
另一种定义稀疏集合的方法:“元素过滤”法 匹配(MATCHING)问题:8 名同学准备分成4 个调查队(每队两人) 前往4 个地区进行社会调查。设两两之间组队的效率如表 所示(由 于对称性只列出了上三角部分),问如何组队可以使总效率最高?
为保证能将LINDO 模型移植到LINGO 中去,在LINDO 模型输入时应尽量采 用“规范化”的格式
Lingo的不同保存类型
“LG4”表示LINGO 格式的 模型文件,是一种特殊的二 进制格式文件,保存了我们 在模型窗口中所能够看到的 所有文本和其他对象及其格 式信息,只有LINGO 能读 出它,用其他系统打开这种 文件时会出现乱码 “LNG”表示LINGO文本文 件,以这个格式保存模型时 系统 将给出警告,因为模 型中的格式信息(如字体、 颜色等)将会丢失 “LDT”表示数据文件 “LTF”表示 命令脚本文件 “LGR”表示 报告文件
Lingo的编程 LINGO模型的构成:4个段 优化问题的一种建模语言。使用者可以只用键 集合段(SETS ENDSETS) 入一行文字就可以建立起含有大规模变量的目 标函数和成千上万条约束
数据段(DATA ENDDATA)
初始段最重要的是理解“集合”(SET)及其“属性”(Attribute)的概念
Lingo: max=2*x+3*y; 4*x+3*y<10; 3*x+5*y<12;
这是LINGO 模型的最基本 特征
直接将lindo模型文件转化为lingo文件
Lindo: max 2x+3y st 4x+3y<10 3x+5y<12 end
Lingo: max=2*x+3*y; 4*x+3*y<10; 3*x+5*y<12;
BENEFIT为效率矩阵,MATCH(Si,Sj)=1 表示Si,Sj 组成一队, 0 表示不组队。由于对称性只需考虑i<j 共32 个0-1 变量。 目标函数为BENEFIT(Si,Sj)* MATCH(Si,Sj)之和;约束条 件是每个同学只能(而且必须在)某一组,即对于任意i 有:只要 MATCH 属性的某个下标为i 就加起来,此和=1。显然,这是一个01 线性规划
NLP中局部最优解不一定就是全局最优解,在 help中有这样的叙述: “Thus, when a nonlinear model is solved, we say the solution is merely a local optimum, and the user must be aware other local optimums may, or may not, exist with better objective values.” 第一步:利用LINGO|Options”菜单命令激活全局最优求解程序 第二步:为减少计算工作量,对X,Y 的取值再做一些限制。由于 最佳料场位置至少不应该超出现在6 个工地所决定的坐标的最大、 最小值决定的矩形之外,即:0.5<=x<=8.75, 0.75<=y<=7.75. 可以 加上@bnd 函数 最优解X(1)=3.2549,X(2)=7.2500, Y(1)=5.6526, Y(2)=7.7500,最小运量= 85.26(吨公里) 把料厂P(5, 1), Q (2, 7)的位置看成是已知并且固定的,这时是LP 模型。只需把初始段的“X Y =5,1,2,7;” 移到数据段就可。 此时,得到全局最优解,最小运量136.2275(吨公里)
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2007 For Evaluation Only.
(3):@free 函数取消了变量X、Y 非负限制 (2):LINGO对数据是按列赋值的,而不是 按行.其中“X Y =5,1,2,7;”语句的实 际赋值顺序是X=(5,2),Y=(1,7),
除“LG4”文件外,这里的另外几 种格式的文件其实都是普通的 文本文件,可以用任何文本编 辑器打开和编辑
状态窗口的参数解释 变量数量(其中包括变量总数、 非线性变量数、整数变量数)
约束数量 (约束总数、 非线性约束 个数)
非零系数数量 (总数、非线 性项的个数)
内存使用量、求 解花费的时间
状态窗口的参数解释(2) 求解器状态框
(1):LINK中的元素就是DEMAND 和 SUPPLY 的笛卡儿积,也就是 LINK={(S,T)|S∈DEMAND, T∈SUPPLY}.因此,其属性C 也就是一个 6*2 的矩阵(或数组)。正是由于这种表示 方式,LINGO 建模语言也称为矩阵生成器。 DEMAND 和SUPPLY 这种直接把元素列举 出来的集合,称为基本集合(primary set), 而把LINK 这种基于基本集合构造的集合称 为派生集合(derived set) 局部最优解 X(1)=7.249997, X(2)=5.695940, Y(1)=7.749998, Y(2)=4.928524, (略),最小运量 =89.8835(吨公里)
数学模型与lingo软件
西南交通大学数学系