




已阅读5页,还剩146页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
15.06.2020,.,LINGO,数学科学与技术学院杨云峰fyydqsxjmdqpi密码:654321,15.06.2020,.,一.优化模型与优化软件简介,二.LINGO软件的基本使用方法,Outline,三.LINGO程序流程控制和子模型,15.06.2020,.,一.优化模型与优化软件简介,15.06.2020,.,优化问题的一般形式,无约束优化:只有目标函数,没有约束条件有约束优化:目标函数和约束条件都有普通方程组:没有(1)(3),只有(2)不等式方程组:没有(1)(2),只有(3),15.06.2020,.,优化类型,连续优化:全部决策变量取值均为连续数值(实数)离散优化:部分或全部决策变量只取离散数值,15.06.2020,.,连续优化,线性规划(LP)目标和约束均为线性函数非线性规划(NLP)目标或约束中有非线性函数二次规划(QP)目标为二次函数、约束为线性,15.06.2020,.,离散优化,整数规划(IP)决策变量(全部或部分)为整数,整数线性规划(ILP),整数非线性规划(INLP)纯整数规划(PIP),混合整数规划(MIP)一般整数规划,0-1(整数)规划,15.06.2020,.,常用优化软件,LINDO/LINGO软件MATLAB优化工具箱/mathematica优化程序包EXCEL软件的优化功能SAS(统计分析)软件的优化功能,15.06.2020,.,建模时需要注意的几个基本问题,1、尽量使用实数优化,减少整数约束和整数变量2、尽量使用光滑优化,减少非光滑约束的个数如:尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等,15.06.2020,.,建模时需要注意的几个基本问题,3、尽量使用线性模型,减少非线性约束和非线性变量的个数(如x/y5改为x5y)4、合理设定变量上下界,尽可能给出变量初始值5、模型中使用的参数数量级要适当(如小于103),15.06.2020,.,二.LINGO软件的基本使用方法,15.06.2020,.,1LINGO入门,15.06.2020,.,max2x1+3x2St.4x1+3x2=103x1+5x2=12x10 x20,设有数学模型如下:,15.06.2020,.,第一步:启动Lingo,屏幕显示如下:标记LINGO的外窗口是主框架窗口,主框架窗口的上面包含所有的命令菜单和命令工具栏;标记LINGOMODEL-LINGO1的子窗口是一个新的、空白的模型窗口。,15.06.2020,.,第二步:在模型窗口中输入模型,model:max=2*x1+3*x2;4*x1+3*x210;3*x1+5*x212;end,Max2x1+3x2St.4x1+3x2=103x1+5x2=;,Lingo无严格小于,欲使ab,可以适当选取小的正常数e表示成a+eb,,15.06.2020,.,4)LINGO的每一语句以;结束;,5)注释以!开始,以;结束;,15.06.2020,.,变量名:.不区分大小写.由字母数字下划线组成.第一个字符必须是字母.变量名最长为32个字符,15.06.2020,.,LINGO编辑器用蓝色显示LINGO关键字绿色显示注释其他文本用黑色匹配的括号用红色高亮度显示,15.06.2020,.,8)变量和数字放在约束条件的左、右端均可;但最好变量在左,数字在右。,9)Lingo变量默认域为非负实数,可以改变默认域.,15.06.2020,.,10)行名name例:Objectivemax=2*x+3*y;Con14*x+3*y10;Con23*x+5*y12;线性规划(行名).lg4默认为1,2,3,15.06.2020,.,Globaloptimalsolutionfound.Objectivevalue:7.454545Totalsolveriterations:2VariableValueReducedCostX1.2727270.000000Y1.6363640.000000RowSlackorSurplusDualPriceOBJECTIVE7.4545451.000000CON10.0000000.9090909E-01CON20.0000000.5454545,15.06.2020,.,3LINGO的建模语言,15.06.2020,.,以运输实例逐步分析,6个仓库向8个小贩供应同一种货物,如何运,总运输费用最小?,注:每个仓库可以向每个小贩供货,一共48个可能运货路线。,仓库货存量、小贩需求量、每条路线的单位运输费用三个表如下:,15.06.2020,.,仓库货存量:capacity,15.06.2020,.,小贩需求量:demand,15.06.2020,.,每单位货物运输费用表:cost,15.06.2020,.,demand_j表示第j个小贩的需求量capacity_i表示第i个仓库的库存量cost_i_j表示从第i个仓库到第j个小贩的单位运输费用,volume_i_j表示从第i个仓库到第j个小贩的运输量,15.06.2020,.,数学模型可表示如下:,15.06.2020,.,当然目标函数可以如下输入:min=6*volume_1_1+2*volume_1_2+6*volume_1_3+.1*volume_6_6+4*volume_6_7+3*volume_6_8;,15.06.2020,.,但是较大模型如果像上面那样输入又费时,又容易出错!这就需要LINGO的建模语言,15.06.2020,.,LINGO的建模语言优点:,1)可以用类似于标准数学符号的方式表示你的模型;2)可以用一个紧凑的语句表示一系列约束。3)数据可独立于模型:LINGO可以从文本文件、电子数据表、数据库中读取数据。,15.06.2020,.,LINGO模型的构成:5个段,目标函数与约束条件段集合段(sets:endsets)数据段(data:enddata)初始段(init:endinit)计算段(calc:endcalc),Lingo建模语言的重点和难点是:对集合概念的理解和正确使用,15.06.2020,.,为什么使用集合,集合是LINGO建模语言的基础,是LINGO程序设计最强有力的基本构件。借助于集合,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。,15.06.2020,.,什么是集合,集合是一群相联系的对象,比如仓库、小贩、运输路线,这些对象也称为集合的成员。每个集合成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于LINGO求解。,15.06.2020,.,从我们的数学模型看需要三个集合:,(1)仓库-6个成员-货存量(2)小贩-8个成员-需求量(3)运输路线-48个成员-单位运费和运货量,15.06.2020,.,LINGO有两种类型的集合,原始集合(primitiveset):由一些最基本的对象组成的。派生集(derivedset):用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。,15.06.2020,.,*下面我们学习集合定义部分*,1.以sets:开始,以endsets结束;sets:endsets,15.06.2020,.,2.原始集合定义法:,setname/member_list/:attribute_list;。setname是集合的名字;。member_list是成员列表,各成员之间可用空格或逗号分隔;。attribute_list是集合成员所具有的属性列表,多个属性之间用逗号分隔;。原始集合的member_list,attribute_list是可选项;,15.06.2020,.,*仓库和小贩的集合可如下定义*,sets:warehouses/w1w2w3w4w5w6/:capacity;vendors/v1,v2,v3,v4,v5,v6,v7,v8/:demand;endsets,15.06.2020,.,*成员较多时,可使用隐式成员列表,setname/member1.memberN/:attribute_list;,15.06.2020,.,数字型字符数字型星期型月份型年份-月份型,*隐式成员列表类别*,15.06.2020,.,(1)数字型,1.n例:1.5(1,2,3,4,5),(2)字符数字型,stringM.stringN例:truck3.truck34,15.06.2020,.,(3)星期型,dayM.dayN例:mon.fri(Mon,Tue,Wed,Thu,Fri),(4)月份型,MonthM.MonthN例:OCT.JAN(Oct,Nov,Dec,Jan),15.06.2020,.,(5)年份-月份型,monthYearM.monthYearN例:OCT2001.JAN2002(2001.102001.112001.122002.1),15.06.2020,.,*仓库和小贩的集合也可如下定义*,sets:warehouses/w1.w6/:capacity;vendors/v1.v8/:demand;endsets,15.06.2020,.,3.派生集合定义法:,setname(parent_set_list)/member_list/:attribute_list;parent_set_list是父集合名列表,15.06.2020,.,*48条运输路线集合定义*,links(warehouses,vendors):cost,volume;,15.06.2020,.,*三个集合定义如下*,sets:warehouses/wh1.wh6/:capacity;vendors/v1.v8/:demand;links(warehouses,vendors):cost,volume;endsets,15.06.2020,.,运输问题的三个集合说明:,这段代码定义了4个属性值,在接下来的模型中就可以使用属性值capacity(1),capacity(2),capacity(6);demand(1),demand(2),demand(8);cost(1,1),cost(1,2),cost(1,8),cost(2,1),cost(2,2),cost(2,8),cost(6,1),cost(6,2),cost(6,8);volume的引用同cost。,15.06.2020,.,4.集合成员过滤:,trucks/1.100/:capacity;heavy_duty(trucks)|capacity(endsets,如果想赋值x(1)=1,x(2)=2,x(3)=3,y(1)=4,y(2)=5,y(3)=6,则数据段可以为,15.06.2020,.,data:x=1,2,3;y=456;enddata,data:x,y=142536;enddata,多个数据之间可用逗号或空格分隔,15.06.2020,.,若成员属性值相同,数据段定义如下:,data:x=3;!(所有成员的x=3);y=6;!(所有成员的y=6);enddata,15.06.2020,.,也可以在运行时输入属性值:,data:x=?;!(运行时输入所有成员的x值);y=6;enddata,15.06.2020,.,*运输问题的数据部分*,data:capacity=60,55,51,43,41,52;demand=3537223241324338;,15.06.2020,.,cost=626742594953858252197433767392712395726555228143;enddata,15.06.2020,.,sets:sett:x,y;endsetsdata:sett,x,y=a14b25c36;enddata,sets:sett/a,b,c/:x,y;endsetsdata:x=123;y=456;enddata,集合成员可以在数据段定义:,15.06.2020,.,运输实例:,sets:warehouses:capacity;endsetsdata:!可以写成warehouses=w1.w6;!也可以同时定义集合成员列表和属性值;warehouses,capacity=w160,w255,w351,w443,w541,w652;enddata,15.06.2020,.,*初始化定义*,只在非线性规划中使用,指定初始值。init:.endinit,15.06.2020,.,例:init:x=0.999;y=0.002;endinity=log(x);x2+y2=1;给了恰当的初始值,会减少运算时间。,15.06.2020,.,*计算段定义*,calc:.endcalc,计算段的作用:在模型输入后,LINGO开始正式求解模型之前对原始数据进行一定的计算,得到我们模型中要使用的部分数据。,15.06.2020,.,一个简单的计算段例子:,model:data:x,y,z=1,2,3;enddatacalc:avg=(x+y+z)/3;endcalcend,15.06.2020,.,*目标函数和约束条件段*,LINGO提供了集合循环函数和集合操作函数使得目标函数和约束条件的书写如同数学公式那样简单。,四个集合循环函数,FOR、SUM、MAX、MIN,15.06.2020,.,sum(setname(set_index_list)|condition:expression);,求和,15.06.2020,.,*运输问题的目标函数*,min=sum(links(i,j):cost(i,j)*volume(i,j);,min=sum(links:cost*volume);,15.06.2020,.,*运输问题实例中的求和*,!从6个仓库发到第j个小贩的货物量总和;sum(warehouses(i):volume(i,j);,15.06.2020,.,从第i个仓库发出到8个小贩的货物量总和;,sum(vendors(j):volume(i,j),15.06.2020,.,for(setname(set_index_list)|condition:expression_list);,生成约束for,对集合setname中的每个成员独立地生成约束,约束由约束表达式列表expression_list描述;多个表达式之间用分号相隔。,15.06.2020,.,*每个小贩的需求约束*,!(要求6个仓库发给每个小贩的货物总量=小贩的需求量);for(vendors(j):sum(warehouses(i):volume(i,j)=demand(j);,15.06.2020,.,*每个仓库的供货约束*,for(warehouses(i):sum(vendors(j):volume(i,j)capacity(i);,!(要求每个仓库发给8个小贩的货物总量=required(j);,15.06.2020,.,size(setname),返回集合setname中所包含的成员个数。,15.06.2020,.,第二章LINGO与其它软件交换数据,15.06.2020,.,拷贝、粘贴,FromExel,Pastefromexel.lg4,15.06.2020,.,输入输出函数,用来与外部数据源连接text()、ole()、file()、odbc()、dual(),15.06.2020,.,file(filename),在模型的集合和数据部分使用,从文本文件输入数据.,15.06.2020,.,sets:warehouses/file(1.txt)/:capacity;vendors/file(1.txt)/:demand;links(warehouses,vendors):cost,volume;endsets,运输实例的数据可以从文本文件输入:,15.06.2020,.,data:capacity=file(1.txt);demand=file(1.txt);cost=file(1.txt);enddata,1.txt文件内容1.txt,15.06.2020,.,text(filename),在模型的数据部分使用,向文本文件输出数据.,Outputtotext.lg4,15.06.2020,.,ole(spreadsheet_file,range_name_list),在模型的数据和集合部分使用,与excel交换数据,15.06.2020,.,运输实例的数据可以从Excel输入:,sets:warehouses:capacity;vendors:demand;links(warehouses,vendors):cost,volume;endsets,15.06.2020,.,data:warehouses,vendors,capacity,demand,cost=ole(2.xls,warehouses,vendors,capacity,demand,cost);enddata,15.06.2020,.,在Excel中定义单元格范围名称的方法:,按鼠标左键拖曳选择单元格范围,释放鼠标按钮,选择“插入|名称|定义”,输入希望的名字,点击“确定”按钮。,15.06.2020,.,2.xls从Excel输入数据.lg4,15.06.2020,.,odbc(data_source,table_name,col_1,col_2.),在模型的数据部分使用,与数据库进行数据传输,15.06.2020,.,运输实例的数据可以从数据库输入:,sets:warehouses:capacity;vendors:demand;links(warehouses,vendors):cost,volume;endsets,15.06.2020,.,data:warehouses,capacity=odbc();vendors,demand=odbc();links,cost=odbc();odbc()=volume;enddata,15.06.2020,.,trans.mdb与数据库的数据传递.lg4,15.06.2020,.,第三章LINGO的内部函数,15.06.2020,.,1.标准运算符,算术运算符:*/+-,逻辑运算符:#EQ#NE#GE#GT#LE#LT#NOT#AND#OR#,15.06.2020,.,关系运算符:=可以用表示=或,15.06.2020,.,运算符的优先级,15.06.2020,.,lingo变量默认域为非负实数free(variable)取消默认域,使变量可以取任意实数gin(variable)限制变量取整数值bin(variable)限制变量取值为0,1bnd(low,variable,up)限制变量于一个有限的范围,3.变量界定函数,15.06.2020,.,练习1,x1=2,x2=3,Z*17,练习1,15.06.2020,.,练习2,X1=1X2=0X3=1Z=8,练习2,15.06.2020,.,abs(x)、cos(x)、sin(x)、tan(x)、exp(x)、sign(x)floor(x)(返回x的整数部分)smax(x1,x2,xn)(返回x1,x2,xn的最大值)smin(x1,x2,xn),4.数学函数,15.06.2020,.,5.条件控制,if(logical_condition,true_result,false_result)计算logical_condition,若真返回true_result否则返回false_result.,15.06.2020,.,7个选项卡(可设置80-90个控制参数),15.06.2020,.,范例,15.06.2020,.,整数规划整数规划.lg4,15.06.2020,.,二次规划的例子(lingo).lg4,15.06.2020,.,递规调用.lg4,已知,求a7,15.06.2020,.,学习方法:(1)上课各位老师讲的每个有数据的规划模型上机用lingo语言实践;(2)LINGO的help下有一项AdditionalExamplesofLINGOModeling,可以仔细研究每个例子的模型。,15.06.2020,.,某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?,练习3,15.06.2020,.,练习3,15.06.2020,.,解1设在甲车床上加工工件1、2、3的数量为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:,15.06.2020,.,解2,设在甲车床上加工工件i的数量为x(i),单位工件所需加工台时数为timex(i),单位工件的加工费用为costx(i),在乙车床上加工工件i的数量为y(i),单位工件所需加工台时数为timey(i)单位工件的加工费用为costy(i)工件i的加工数量为demand(i),15.06.2020,.,数学模型,15.06.2020,.,Lingo建模,sets:Chechuang/1.3/:costx,costy,timex,timey,x,y,demand;endsets,15.06.2020,.,Lingo建模,min=sum(chechuang:costx*x+costy*y)sum(chechuang:timex*x)800;sum(chechuang:timey*y)900;for(chechuang:x+y=demand);for(chechuang:gin(x);gin(y);,15.06.2020,.,data:costx=13,9,10;costy=11,12,8;timex=0.4,1.1,1;timey=0.5,1.2,1.3;demand=400,600,500;enddata,练习3,15.06.2020,.,Lingo-Generate-Displaymodel,MODEL:_1MIN=13*X_1+11*Y_1+9*X_2+12*Y_2+10*X_3+8*Y_3;_20.4*X_1+1.1*X_2+X_3=800;_30.5*Y_1+1.2*Y_2+1.3*Y_3=900;_4X_1+Y_1=400;_5X_2+Y_2=600;_6X_3+Y_3=500;GIN(X_1);GIN(Y_1);GIN(X_2);GIN(Y_2);GIN(X_3);GIN(Y_3);END,15.06.2020,.,练习4-求S到T的最短路,15.06.2020,.,model:sets:cities/s,a1,a2,a3,b1,b2,c1,c2,t/:l;roads(cities,cities)/s,a1s,a2s,a3a1,b1a1,b2a2,b1a2,b2a3,b1a3,b2b1,c1b1,c2b2,c1b2,c2c1,tc2,t/:d;endsets,15.06.2020,.,data:d=633658674678956;enddata,15.06.2020,.,l(1)=0;for(cities(i)|i#gt#index(s):l(i)=min(roads(j,i):l(j)+d(j,i);end,最短路.lg4,15.06.2020,.,三.LINGO程序流程控制和子模型,15.06.2020,.,1、程序流程控制,条件分支控制条件循环控制,15.06.2020,.,条件分支控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中级花艺师实操技能考核试题集及解析
- 抢救课件结束语
- 2025年压力校验仪表项目发展计划
- 2025年液晶平面显示器及其配套部件和材料项目建议书
- 2025年合同研究组织合作协议书
- 2025年二元酸二甲酯合作协议书
- 2025年社会养老保障服务项目建议书
- 吉林省延边朝鲜族自治州延边州2025-2026学年高三上学期9月期初考试数学试题(含答案)
- 河南省周口市郸城县实验中学2025-2026学年七年级上学期开学考试英语试题(含答案)
- 校史知识竞赛题库及答案
- 老挝药品注册管理办法
- 建设工程项目协同作业方案
- 鹿寨县城南水厂寨沙分厂建设项目环评报告
- 森林火灾应急处置
- GB/T 45972-2025装配式建筑用混凝土板材生产成套装备技术要求
- 变频及伺服应用技术(郭艳萍 钟立)全套教案课件
- Inventor教案打印完整
- 秋冬季安全知识培训
- 2024新译林版英语八年级上单词汉译英默写表(开学版)
- 电力营销稽查培训课件
- 绿色金融培训课件
评论
0/150
提交评论