数学建模软件lingo示例
MODEL: location Title Location Problem; sets: 集合段 demand/1..6/:a,b,d; 需求 supply/1..2/:x,y,e; 供应 link(demand,supply):c; 连接 endsets data: 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 初始点 init: 初始段 endinit 目标 min=@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
数学建模课件
主讲人:孙云龙 主讲人:
3、Lingo集合循环函数 、 集合循环函数
难点!重点! 循环操作函数——集合上的元素——下标: 集合名 集合索引列表 过滤条件 表达式
@function(setname [(set_index_list)[|condition]]:expression_list); 集合函数名 FOR MAX MIN SUM PROD
元素列表法 元素过滤法
SETS: CITIES /A1,A2,A3,B1,B2/; ROADS(CITIES, CITIES)/ A1,B1 A1,B2 A2,B1 A3,B2/:D; ENDSETS
SETS: STUDENTS /S1..S8/; PAIRS( STUDENTS, STUDENTS) | &2 #GT# &1: BENEFIT, MATCH; ENDSETS
m in st .
cij [(xj −ai )2 +( yj −b )2 ]1/2 ∑∑ i
j = i= 1 1 2
2
6
∑c
j= 1 6 i= 1
ij
= di , i =1 ,...,6 ≤ ej , j =1 ,2
∑c
ij
cij ≥ 0, i =1 ,...,6, j =1 ,2
决策变量:料场j到工地i的运量—— cij ——12维 线性规划模型 lingo——表达式? location
数学建模课件
主讲人:孙云龙 主讲人:
例1
sets: demand/1..6/:a,b,d; 需求 建立 supply/1..2/:x,y,e; 供应 下标集合 link(demand,supply):c; 连接 endsets a1 , a 2 , a 3 , a 4 , a 5 , a 6
b1 , b 2 , b 3 , b 4 , b 5 , b 6 d1 , d 2 , d 3 , d 4 , d 5 , d 6 x1 , x 2 , y1 , y 2 , e1 , e 2
数学建模课件
主讲人:孙云龙 主讲人:
2、Lingo的集合 、 的集合Set及其属性 及其属性Attribute 的集合 及其属性
例1 Lingo的集合Set——下标集合 建筑工地位置坐标 (ai,bi) 、水泥日用量di : 对每个建筑工地(6个)都有一个对应的值 都是一个由6个元素组成的数组——是已知的 料场位置坐标 (xj,yj) 、日储量ej 对每个料场(2个)都有一个对应的值 都是一个由2个元素组成的数组——目前是已知的 料场到建筑工地的供应计划 c i j 对每个料场与建筑工地之间(6×2)都有一个对应的 值 是一个6×2 个元素组成的矩阵——是未知数 ——100个工地? LINDO无数组,每个变量输入——麻烦
数学建模课件
主讲人:孙云龙 主讲人:
二、Lingo集合 集合
例1 选址问题
某公司有6个建筑工地,位置坐标为(ai,bi) (单位:公里), 水泥日用量di (单位:吨)
i a b d 1 2 3 1.25 2 8.75 0.75 5 3 0.5 4.75 4 4 5.75 5 7 5 3 6.5 6 6 7.25 7.75 11
st .
∑c
j=1 6 1 i=
2ijຫໍສະໝຸດ = di , i =1 ,...,6 ≤ ej , j =1 ,2
∑c
ij
@for(demand(i):@sum(supply(j):c(i,j))=d(i);); @for(supply(i):@sum(demand(j):c(j,i))<=e(i););
数学建模课件
数学建模课件
主讲人:孙云龙 主讲人:
集合Set及其属性Attribute 1到6的整数 定义数组下标集合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 ———表示每个料场与建筑工地之间供应计划c i j
数学建模课件
主讲人:孙云龙 主讲人:
三、Lingo运算符和函数 运算符和函数
1、运算符及其优先级 、
算术运算符 + - * / ^ 逻辑运算符 #NOT# #EQ# #AND# #GT# #LT# 关系运算符 <(=) = >(=)
否定 相等 并且 大于 小于
#NE# #OR# #GE# #LE#
数学建模课件
主讲人:孙云龙 主讲人:
派生集合derived set 派生集合
基于其它集合而派生出来的二维或多维集合 定义格式 ——集合名 元素列表缺省 ——稠密集合、或数据段列表赋值 所有组合——稠密集合 稠密集合 元素列表——稀疏集合 稀疏集合 元素列表法——枚举 元素过滤法——利用过滤条件 setname(parent_set_list) [|filtrate_condition] [:attribute_list]; 父集合列表 元素列表 属性列表 setname(parent_set_list) [/member_list/] [: attribute_list];
数学建模课件
主讲人:孙云龙 主讲人:
集合的类型
setname(parent_set_list) [/member_list/] [: attribute_list];
集合
setname [/member_list/] [: attribute_list];
派生集合 稀疏集合
基本集合
稠密集合 直接列举法 隐式列举法
假设:料场和工地之间有直线道路 (1)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2, 日储量ej各有20吨。 目标:制定每天的供应计划,即从A, B两料场分别向各 工地运送多少吨水泥,使总的吨公里数最小。
数学建模课件
主讲人:孙云龙 主讲人:
解:
目标:吨公里 约束:需求 供应
数学建模课件
主讲人:孙云龙 主讲人:
1、Lingo建模语言 、 建模语言 构成: 个段 构成:4个段
目标与约束段 集合段(SETS ENDSETS) 数据段(DATA ENDDATA) 初始段(INIT ENDINIT) (计算段 (CALC ENDCALC)) 基本使用
数学建模课件
主讲人:孙云龙 主讲人:
数学建模课件
主讲人:孙云龙 主讲人:
一、Lingo基本语法 基本语法
1、定义了目标函数为MIN=.. 2、以一个分号“;”结尾 ——除SETS, ENDSETS, DATA , ENDDATA, END之外 3、可以放在约束条件的右端,同时数字也可放在约束条件的 左端。 4、假定各变量非负。 5、注释:“!” 6、<、>为≤、≥
不等 或者 大于等于 小于等于
过滤条件使用——结果:0 1
数学建模课件
主讲人:孙云龙 主讲人:
运算符的优先级 最高——————————————最低 #NOT# —(负号) * / + —(减法) #EQ# #NE# #GT# #GE# #LT# #LE# #AND# #OR# < = >
^
先左后右 先括号内,后括号外
主讲人:孙云龙 主讲人:
4、Lingo变量定界函数 、 变量定界函数
默认:? @BND(L, X,N) @BIN( X) 例1 约束:非负 [L,U] 0-1变量 @FREE( X) @GIN( X) 自由变量 整数变量
st .
cij ≥ 0, i =1 ,...,6, j =1 ,2
@for(supply: @free(X); @free(Y); );
数学建模课件
主讲人:孙云龙 主讲人:
例1 目标:吨公里
m in
cij [(xj −ai )2 +(yj −b )2 ]1/2 ∑∑ i
1 1 j = i=
2
6
min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)b(i))^2)^(1/2)); 约束:需求 供应
数学建模课件
主讲人:孙云龙 主讲人:
3、定义集合Set 、定义集合
基本集合primary set 基本集合
直接把元素列举出来 定义格式 ——集合名 元素列表 属性列表 setname [/member_list/] [: attribute_list]; [ …… ] —— 可选项 元素列表 显式列举法——列出全部元素, 用逗号或空格分开 隐式列举法—— 1..n 属性列表缺省——集合可在程序中作为一循环变量使用, 构造更复杂的派生集合 元素列表缺省——必须在数据段给出元素列表赋值