LINGO教程(数据输入输出)

合集下载

LINGO教程

LINGO教程

LINGO 是用来求解线性和非线性优化问题的简易工具。

LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。

§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。

在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。

下面举两个例子。

例1.1 如何在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;然后点击工具条上的按钮 即可。

设从第i 个产地(A i )运往第j 个销地(B j )的单位运价为cost (i,j );从第i 个产地(A i )运往第j 个销地(B j )的运送量为valume (i ,j );i=1,...,6;j=1, (8)第j 个销地(B j )的销量为demand (j ); 第i 个产地(A i )的产量为capacity (i );目标函数(object function ) 6811mincos ()()i j t ij volume ij ==∑∑需求约束 61()()i volume ij demand j =<=∑ j=1,…,8产量约束 81()()j volume ij capacity i =<=∑ i=1,…,6(注:14个约束条件,48个变量,采用集合的概念)使用LINGO 软件,编制程序如下:model :!6发点8收点运输问题; sets : !集合定义warehouses/wh1..wh6/: capacity; !capacity 为集合属性 vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;!由两个集合构成新的集合 endsets !集合定义结束!目标函数; min =@sum (links: cost*volume); !或min =@sum (links (i,j ): cost(i)*volume(j));在数组links 上去求和!需求约束; @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 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3 Enddata !不加分号 end然后点击工具条上的按钮 即可。

LINGO教程(数据输入输出)

LINGO教程(数据输入输出)

10
LINGO LINGO 教 程
通过文本文件输出数据
• @TEXT函数通常只在数据段使用 函数通常只在数据段使用 • 调用格式:@TEXT(['filename']) 调用格式: • 它用于数据段中将解答结果送到文本文件 filename中, 中 • 当省略 当省略filename时,结果送到标准的输出设备 时 通常就是屏幕) (通常就是屏幕) • Filename可以使用相对路径或绝对路径,若文件 可以使用相对路径或绝对路径, 可以使用相对路径或绝对路径 已经存在, 已经存在,则覆盖原文件
7
LINGO LINGO 教 程
2. 通过文本文件传递数据
• 通过文本文件输入数据 @FILE(filename) • 通过文本文件输出数据 @TEXT(['filename'])
8
LINGO LINGO 教 程
通过文本文件输入数据
• @FILE函数通常可以在集合段和数据段使用, 函数通常可以在集合段和数据段使用, 函数通常可以在集合段和数据段使用 但不允许嵌套使用。 但不允许嵌套使用。 • 调用格式:@FILE(filename) 调用格式: • filename为存放数据的文件名(可以包含完整的 为存放数据的文件名( 为存放数据的文件名 路径名,或表示在当前目录下寻找这个文件) 路径名,或表示在当前目录下寻找这个文件) • 数据文件中记录之间必须用“~”分开 数据文件中记录之间必须用“~”分开
函数@RANGED, @RANGEU输出敏感性分析信息 输出敏感性分析信息, LINGO的缺省设置是不进行敏感性分析的 因此, 的缺省设置是不进行敏感性分析的, 函数@RANGED, @RANGEU输出敏感性分析信息,但LINGO的缺省设置是不进行敏感性分析的,因此, 必须进行设置,这个选项在OPTIONS|General 必须进行设置,这个选项在OPTIONS|General Solver

lingo教程(完整版)

lingo教程(完整版)

LINGO 是用来求解线性和非线性优化问题的简易工具。

LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。

§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。

在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。

下面举两个例子。

例1.1 如何在LINGO 中求解如下的LP 问题:0,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;然后点击工具条上的按钮 即可。

例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。

产销单位运价如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然后点击工具条上的按钮即可。

lingo教程

lingo教程

LINGO 是用来求解线性和非线性优化问题的简易工具。

LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。

§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。

在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。

下面举两个例子。

例1.1 如何在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;然后点击工具条上的按钮 即可。

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然后点击工具条上的按钮即可。

Lingo的基本使用方法

Lingo的基本使用方法

除“LG4”文件外, 另外几种格式的文件 都是普通的文本文件,
.MPS:表示MPS(数学规划系统)格式的模可型以文用件任。何文本编辑
器打开和编辑。
2.在LINGO中使用集合
1. LINGO入门 2.在LINGO中使用集合 3. 运算符和函数 4. LINGO的主要菜单命令 5. LINGO命令窗口 6.习题
LINGO软件的基本使用方法
LINGO软件的功能与特点
LINGO模型的功能
集成了线性(非线性) / 连续(整数) 优化功能 具有多点搜索 / 全局优化功能 提供了灵活的编程语言(矩阵生成器),可方便地输入模型 提供与其他数据文件的接口 提供与其他编程语言的接口 LINDO API 可用于自主开发 运行速度较快
Generator Memory Used (K) (内存使用 量)
Elapsed Runtime (hh:mm:ss)(求 解花费的时间)
运行状态窗口
求解 器(求 解程 序)状 态框
当前模型的类型 :LP,QP,ILP,IQP,PILP, PIQP,NLP,INLP,PINLP (以I开头表示 IP,以PI开头表示PIP)
约束的定义方式
用DEM,RP,OP,INV分别表示需求量、正常生产的产量、加班生 产的产量、库存量,则DEM,RP,OP,INV对每个季度都应该有一 个对应的值,也就说他们都应该是一个由4个元素组成的数组, 其中DEM是已知的,而RP,OP,INV是未知数。
问题的模型(可以看出是LP模型 )
目标函数是所有费用的和
1、尽量使用实数优化,减少整数约束和整数变量 2、尽量使用光滑优化,减少非光滑约束的个数
如:尽量少使用绝对值、符号函数、多个变量求最大/最小 值、四舍五入、取整函数等 3、尽量使用线性模型,减少非线性约束和非线性变量的个数 (如x/y <5 改为x<5y) 4、合理设定变量上下界,尽可能给出变量初始值 5、模型中使用的参数数量级要适当 (如小于103)

lingo使用教程

lingo使用教程

注意:用“[]”表示该部分内容可选。下同,不再赘述。
Setname 是你选择的来标记集的名字,最好具有较强的可读性。集名字必须严格符合标 准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z) 、下划线、阿拉 伯数字(0,1,„,9)组成的总长度不超过 32 个字符的字符串,且不区分大小写。
min s.t.
2 x1 3 x 2 x1 x 2 350 x1 100
2 x1 x 2 600 x1 , x 2 0
在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例 1.2 使用 LINGO 软件计算 6 个发点 8 个收点的最小费用运输问题。产销单位运价如 下表。 单 位 销地 运 B1 B2 B3 B4 B5 B6 B7 B8 产量 价 产地
使用 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 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end

Lingo的基本使用方法

Lingo的基本使用方法

2021/10/10
5
1. LINGO入门
内容提要
2.在LINGO中使用集合
3. 运算符和函数
4. LINGO的主要菜单命令
5. LINGO命令窗口
6.习题
2021/10/10
6
1. LINGO入门
1. LINGO入门 2.在LINGO中使用集合 3. 运算符和函数 4. LINGO的主要菜单命令 5. LINGO命令窗口 6.习题
2021/10/10
18
一个简单的LINGO程序
LINGO的基本用法的几点注意事项
LINGO中不区分大小写字母;变量和行名可以超过8个字符,但 不能超过32个字符,且必须以字母开头。 用LINGO解优化模型时已假定所有变量非负(除非用限定变量取 值范围的函数@free或@sub或@slb另行说明)。 变量可以放在约束条件的右端(同时数字也可放在约束条件的左 端)。但为了提高LINGO求解时的效率,应尽可能采用线性表达 式定义目标和约束(如果可能的话)。 语句是组成LINGO模型的基本单位,每个语句都以分号结尾,编 写程序时应注意模型的可读性。例如:一行只写一个语句,按照 语句之间的嵌套关系对语句安排适当的缩进,增强层次感。 以感叹号开始的是说明语句(说明语句也需要以分号结束)。
2021/10/10
2
优化模型和算法的重要意义
最优化: 在一定条件下,寻求使目标最大(小)的决策
最优化是工程技术、经济管理、科学研究、社会生活中 经常遇到的问题, 如:
结构设计 资源分配
生产计划
运输方案
解决优化问题的手段
经验积累,主观判断
作试验,比优劣
2021/10/建10 立数学模型,求解最优策略

LINGO使用教程

LINGO使用教程
!学生集:性别属性 sex,1 表示男性,0 表示女性;年龄属性 age. ; students/John,Jill,Rose,Mike/:sex,age; !男学生和女学生的联系集:友好程度属性 friend,[0,1]之间的数。 ; linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0: friend; !男学生和女学生的友好程度大于 0.5 的集; linkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x; endsets data: sex,age = 1 16
§6 LINGO的命令行命令
§7 综合举例
作者 胡志兴
LINGO 教程
LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模 型的语言,可以简便地表达大规模问题,利用 LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门
当你在 windows 下开始运行 LINGO 系统时,会得到类似下面的一个窗口:
·集的名字 ·父集的名字 ·可选,集成员 ·可选,集成员的属性 可用下面的语法定义一个派生集:
setname(parent_set_list)[/member_list/][:attribute_list]; setname 是集的名字。parent_set_list 是已定义的集的列表,多个时必须用逗号隔开。如 果没有指定成员列表,那么 LINGO 会自动创建父集成员的所有组合作为派生集的成员。派 生集的父集既可以是原始集,也可以是其它的派生集。
data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

14
例:
LLIINNGGOO 教 程
首先,建立相应的EXCEL数据文件 mydata.xls ,并定义相应的数据单元
B4:B7单元 C4:C7单D元4:D7单元E4:E7单元 F4:F7单元 命名为 CITIES 命名为 CO命S名T 为 NEE命D 名为SUPP命LY名为SOLUTION
用于输出结果
已经存在,则覆盖原文件
11
例:
Lingo程序exam0403.LG4(部分) :
输出表头, 并换行
LLIINNGGOO 教 程
@TEXT('exam0403.txt')=@write(4*' ','Value',12*' ','Dual',13*' ', 输出变量Ordered
'Decrease',8*' ','Increase',@newline(2)); @TEXT('exam0403.txt')=@write('Variables:',@newline(2));
• 打开EXCEL文件 • 菜单命令“插入|对象” • 选择“新建|LINDO
Document”,建立一个空的 LINGO文件对象,且在EXCEL 中出现LINGO菜单 • 输入LINGO 程序内容,即可在 EXCEL中运行LINGO程序 •虽然在EXCEL文件中嵌入了LINGO对象,但需要人工干预才能运行这个对象。 •若希望在EXCEL中自动运行一个LINGO程序 ,则需要将LINGO程序用命令脚 本进行描述,并需要用EXCEL的宏命令进行调用。
数据单元定义方法:选择EXCEL的菜单命令“插入|名称|定义” ,才谈出对话框中输入单元名称
15
Lingo程序exam0404.LG4:
MODEL: SETS: MYSET / @OLE('mydata.xls','CITIES') / : COST,NEED,SUPPLY,ORDERED; ENDSETS MIN = @SUM( MYSET( I): ORDERED( I) * COST( I)); @FOR( MYSET( I):
12
LLIINNGGOO 教 程
3. 通过电子表格文件传递数据
• 在LINGO中使用电子表格文件的数据 • 将LINGO模型嵌入、链接到电子表格文件中
13
LLIINNGGOO 教 程
在LINGO中使用电子表格文件的数据
• 实际应用中,可能有大量数据是存放在各种电子表格中的 (如EXCEL表格)。
@TEXT('exam0403.txt')=CON2,@DUAL(CON2), @RANGED(CON2), 否全局最优
@RANGEU(CON2);
@TEXT('exam0403.txt')=@write(@newline(1),'Final status for exam0403: ',@status(),
• LINGO计算的结果需要以文件方式提供给其它 应用系统使用。
2
内容提要
LLIINNGGOO 教 程
1. 通过WINDOWS剪贴板传递数据
2. 通过文本文件传递数据
3. 通过电子表格文件传递数据
4. LINGO命令脚本文件
3
LLIINNGGOO 教 程
1. 通过WINDOWS剪贴板传递数据 • 粘贴命令 ( Edit|Paste ) • 特殊粘贴命令(Edit|Paste Special … )
通过文本文件输出数据
LLIINNGGOO 教 程
• @TEXT函数通常只在数据段使用 • 调用格式:@TEXT(['filename']) • 它用于数据段中将解答结果送到文本文件
filename中, • 当省略filename时,结果送到标准的输出设备
(通常就是屏幕) • Filename可以使用相对路径或绝对路径,若文件
@if(@status(),' (Maybe Not Global Optimal)',' (Global Optimal)'),@newline(1));
函数@RANGED, @RANGEU输出敏感性分析信息,但LINGO的缺省设置是不进行敏感性分析的,因此, 必须进行设置,这个选项在OPTIONS|General Solver
特殊粘贴命令(Edit|Paste Special …)
注意:
• 在这种粘贴方式中,只有选择 “多信息文本(RTF)”或 “未格式化文本” ,才能正确输入数据;
• 其他两种方式:WORD文档和图形,LINGO在运行时完 全将它们忽略掉;
• 选择“粘贴链接”建立链接关系后,可以随时用 “EDIT|LINKS…”命令修改这个连接的属性。
• 类似的方法也可以将LINGO程序中的数据复制到其他
5
外部文件中。
LLIINNGGOO 教 程
特殊粘贴命令(Edit|Paste Special …)
• 选择特殊粘贴命令,则会出现“选择性粘贴”对话框, 请你选择粘贴格式。
效果与直接使用“Ctrl+V”的效果是 一样的,粘贴的是格式化的文本
粘贴一个WORD对象, 双击时可以打开WORD 进行编辑
LLIINNGGOO 教 程
LINGO与数据库交换数据
• 不同的数据库有不同的数据库管理系统(DBMS: DataBase Management System)
• WINDOWS环境下可以用ODBC(Open DataBase Connectivity)进行连接
• LINGO中可以使用函数@ODBC,格式为 :
16
LLIINNGGOO 教 程
输出总结报告
• Export Summary Report

---------------------

Transfer Method:
OLE BASED

Workbook:Biblioteka mydata.xls•
Ranges Specified:
1

SOLUTION

Ranges Found:
@TEXT('exam0403.txt')=CON1,@DUAL(CON1), @RANGED(CON1), @RANGEU(CON1);
@TEXT('exam0403.txt')=@write(@newline(1),'SUPPLY @newline(2));
Constraints:'根, 据@status() 的值输出是
9
例:
LLIINNGGOO 教 程
数据文件myfile.ldt的内容: Seattle,Detroit,Chicago,Denver~
COST,NEED,SUPPLY,ORDERED~
12,28,15,20~ 1600,1800,1200,1000~ 1700,1900,1300,1100
每调用一次@FILE(myfile.ldt) 就输入一个数据记录
@ODBC(['data_source'[, 'table_name'[, 'col_1'[, 'col_2' ...]]]]) 其中data_source是数据库名,
table_name是数据表名, col_1, col_2,...是数据列名(数据域名)。
18
LLIINNGGOO 教 程
将LINGO模型嵌入、链接到电子表格文件中
ORDERED( I) * COST( I)); @FOR( MYSET( I):
ORDERED( I) > NEED( I); ORDERED( I) < SUPPLY( I)); DATA: COST = @FILE( myfile.ldt); NEED = @FILE( myfile.ldt); SUPPLY = @FILE( myfile.ldt); ENDDATA END
19
LLIINNGGOO 教 程
4. LINGO命令脚本文件
• LINGO命令脚本文件是一个普通的文本文件,但是文件中的内容是由 一系列LINGO命令构成的命令序列。
• 使用命令脚本文件,你可以同时运行一系列的LINGO批处理命令。 • 命令脚本文件可用任何文本编辑器生成,也可以用LINGO新建文件
将剪贴板中的内容以 图形格式插入到 LINGO模型中
选择“粘贴链接” 时会建立与原文件的 链接,当数据文件改 变时,LINGO中这部 分的内容也会随之改 变
6
粘贴纯文本文件,不保 留文本的格式信息
选择了“显示为图标” 选项,则只显示一个 “文档”图标而不显示 剪贴板中的具体内容;
LLIINNGGOO 教 程
[CON1] ORDERED( I) > NEED( I); [CON2] ORDERED( I) < SUPPLY( I)); DATA: COST,NEED,SUPPLY = @OLE('mydata.xls'); @OLE('mydata.xls','SOLUTION')=ORDERED; ENDDATA END
• LINGO系统与EXCEL文件传递数据的函数的一般用法是通过
@OLE函数。 • 调用格式:
电子表格文件名
数据的单元 范围
@OLE(spreadsheet_file [, range_name_list]) • 输入数据 :“属性(或变量)=@OLE(...)” • 输出数据 :“@OLE(...)=属性(或变量)”
4
相关文档
最新文档