SUN主讲人:孙云龙数学建模课件Email:sunyl@swufe.edu.cnLingo模型语言数学软件教程主讲:孙云龙主讲人:孙云龙数学建模课件LINDO/LINGO软件LINGO:LinearINteractiveGeneralOptimizer(V10.0)求解数学规划问题MinZ=f(x)s.txA(Rn)需要掌握的几个重要方面基本语法结构掌握集合(SETS)的应用正确阅读求解报告正确理解求解状态窗口学会设置基本的求解选项(OPTIONS)主讲人:孙云龙数学建模课件一、Lingo基本语法1、定义了目标函数为MIN=..2、以一个分号“;”结尾——除SETS,ENDSETS,DATA,ENDDATA,END之外3、可以放在约束条件的右端,同时数字也可放在约束条件的左端。4、假定各变量非负。5、注释:“!”6、、为≤、≥主讲人:孙云龙数学建模课件建模时需要注意的几个基本问题尽量使用实数优化,减少整数约束和整数变量尽量使用光滑优化,减少非光滑约束的个数尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等尽量使用线性模型,减少非线性约束和非线性变量的个数如x/y5改为x5y合理设定变量上下界,尽可能给出变量初始值模型中使用的参数数量级要适当如小于103主讲人:孙云龙数学建模课件二、Lingo集合某公司有6个建筑工地,位置坐标为(ai,bi)(单位:公里),水泥日用量di(单位:吨)例1选址问题假设:料场和工地之间有直线道路(1)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2,日储量ej各有20吨。目标:制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。i123456a28.750.55.7537.25b30.754.7556.57.75d1.25547611主讲人:孙云龙数学建模课件解:决策变量:料场j到工地i的运量——cij——12维线性规划模型lingo——表达式?26221/2112161min[()()].,1,...,6,1,20,1,...,6,1,2ijjijijiijijijjiijcxaybstcdicejcijlocation目标:吨公里约束:需求供应主讲人:孙云龙数学建模课件基本使用1、Lingo建模语言构成:4个段目标与约束段集合段(SETSENDSETS)数据段(DATAENDDATA)初始段(INITENDINIT)(计算段(CALCENDCALC))主讲人:孙云龙数学建模课件目标与约束段MODEL:TitleLocationProblem;sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;x,y=5,1,2,7;enddatainit:endinitmin=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));@for(demand(i):@sum(supply(j):c(i,j))=d(i););@for(supply(i):@sum(demand(j):c(j,i))=e(i););@for(supply:@free(X);@free(Y););END集合段数据段初始段location供应约束需求需求点的位置供需量供应初始点目标需求约束连接主讲人:孙云龙数学建模课件2、Lingo的集合Set及其属性Attribute例1建筑工地位置坐标(ai,bi)、水泥日用量di:对每个建筑工地(6个)都有一个对应的值都是一个由6个元素组成的数组——是已知的料场位置坐标(xj,yj)、日储量ej对每个料场(2个)都有一个对应的值都是一个由2个元素组成的数组——目前是已知的料场到建筑工地的供应计划cij对每个料场与建筑工地之间(6×2)都有一个对应的值是一个6×2个元素组成的矩阵——是未知数LINDO无数组,每个变量输入——麻烦Lingo的集合Set——下标集合——100个工地?主讲人:孙云龙数学建模课件集合Set及其属性Attribute定义数组下标集合demand/1..6/———表示6个建筑工地a,b,d称为该集合的属性———表示坐标(ai,bi)、水泥日用量di定义数组下标集合supply/1..2/———表示6个建筑工地该集合的属性x,y,e———表示坐标(xj,yj)、日储量ej定义数组下标集合link(demand,supply)———表示6×2个料场到建筑工地的连接该集合的属性c———表示每个料场与建筑工地之间供应计划cij1到6的整数主讲人:孙云龙数学建模课件建立下标集合Lingo建模语言——集合段数据段需求点的位置供需量sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;x,y=5,1,2,7;enddata赋值需求供应连接主讲人:孙云龙数学建模课件3、定义集合Set直接把元素列举出来定义格式——集合名元素列表属性列表setname[/member_list/][:attribute_list];[……]——可选项元素列表显式列举法——列出全部元素,用逗号或空格分开隐式列举法——1..n属性列表缺省——集合可在程序中作为一循环变量使用,构造更复杂的派生集合元素列表缺省——必须在数据段给出元素列表赋值基本集合primaryset主讲人:孙云龙数学建模课件派生集合derivedset基于其它集合而派生出来的二维或多维集合定义格式——集合名父集合列表元素列表属性列表setname(parent_set_list)[/member_list/][:attribute_list];元素列表缺省所有组合——稠密集合、或数据段列表赋值元素列表——稀疏集合元素列表法——枚举元素过滤法——利用过滤条件setname(parent_set_list)[|filtrate_condition][:attribute_list];主讲人:孙云龙数学建模课件建立下标集合例1需求点的位置供需量sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;x,y=5,1,2,7;enddata赋值需求供应连接基本集合派生集合626152514241323122211211212121654321654321654321,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,cccccccccccceeyyxxddddddbbbbbbaaaaaa主讲人:孙云龙数学建模课件集合的类型集合派生集合基本集合稀疏集合稠密集合元素列表法元素过滤法直接列举法隐式列举法setname[/member_list/][:attribute_list];setname(parent_set_list)[/member_list/][:attribute_list];SETS:CITIES/A1,A2,A3,B1,B2/;ROADS(CITIES,CITIES)/A1,B1A1,B2A2,B1A3,B2/:D;ENDSETSSETS:STUDENTS/S1..S8/;PAIRS(STUDENTS,STUDENTS)|&2#GT#&1:BENEFIT,MATCH;ENDSETS主讲人:孙云龙数学建模课件三、Lingo运算符和函数过滤条件使用——结果:011、运算符及其优先级逻辑运算符#NOT#否定#EQ#相等#NE#不等#AND#并且#OR#或者#GT#大于#GE#大于等于#LT#小于#LE#小于等于算术运算符+-*/^关系运算符(=)=(=)主讲人:孙云龙数学建模课件运算符的优先级最高——————————————最低#NOT#—(负号)^*/+—(减法)#EQ##NE##GT##GE##LT##LE##AND##OR#=先左后右先括号内,后括号外主讲人:孙云龙数学建模课件Lingo内部函数——”@”2、Lingo基本数学函数@ABS(X)@SIN(X)@COS(X)@TAN(X)@LOG(X)@EXP(X)@SMAX(list)@SMIN(list)@SIGN(X)@FLOOR(X)主讲人:孙云龙数学建模课件3、Lingo集合循环函数难点!重点!循环操作函数——集合上的元素——下标:集合函数名@function(setname[(set_index_list)[|condition]]:expression_list);集合名集合索引列表过滤条件表达式FORMAXMINSUMPROD主讲人:孙云龙数学建模课件目标:吨公里@for(demand(i):@sum(supply(j):c(i,j))=d(i););@for(supply(i):@sum(demand(j):c(j,i))=e(i););例126221/211min[()()]ijjijijicxayb约束:需求供应2161.,1,...,6,1,2ijijijjistcdicejmin=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));主讲人:孙云龙数学建模课件默认:?4、Lingo变量定界函数@BND(L,X,N)[L,U]@FREE(X)自由变量@BIN(X)0-1变量@GIN(X)整数变量例1约束:非负@for(supply:@free(X);@free(Y););.0,1,...,6,1,2ijstcij主讲人:孙云龙数学建模课件4、Lingo条件判断函数分段函数@IF(logical_condition,true_result,false_result)OK——例1主讲人:孙云龙数学建模课件目标与约束段MODEL:TitleLocationProblem;sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;x,y=5,1,2,7;enddatainit:endinitmin=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));@for(demand(i):@sum(supply(j):c(i,j))=d(i););@for(supply(i):@sum(demand(j):c(j,i))=e(i););@for(supply:@free(X);@free(Y););END集合段数据段初始段location供应约束需求需求点的位置供需量供应初始点目标需求约束连接结果:总吨公里数为136.2主讲人:孙云龙数学建模课件2)改建两个新料场,需要确定新料场位置(xj,yj)和运量cij,在其它条件不变下使总吨公里数最小。决策变量:cij,(xj,yj)~16维非线性