没有合适的资源?快使用搜索试试~ 我知道了~
首页LINGO是Linear INteractive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”,可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等。其特色在于可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。
LINGO是Linear INteractive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”,可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等。其特色在于可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。
资源详情
资源评论
资源推荐
LINGO 教程
使用教程
是用来求解线性和非线性优化问题的简易工具。 内置了一种建立最优化模型的语言,
可以简便地表达大规模问题,利用 高效的求解器可快速求解并分析结果。
快速入门
当你在 下开始运行 系统时,会得到类似下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主
窗口内的标题为 的窗口是 的默认模型窗口,建立的模型都都要在
该窗口内编码实现。下面举两个例子。
例 如何在 中求解如下的 问题:
0,
6002
100
350
..
32min
21
21
1
21
21
xx
xx
x
xx
ts
xx
在模型窗口中输入如下代码:
然后点击工具条上的按钮 即可。
例 使用 LINGO 软件计算 6 个发点 8 个收点的最小费用运输问题。产销单位运价如下表。
单
位 销地
运
价
产地
!
!
!
!
"
!
!
!
#
!
$
产量
%
# " &
%
" & $ $
%
& # "
1
LINGO 教程
%
"
# # & # "
%
& # "
%
$ "
销量
# " " $
使用 软件,编制程序如下:
'
( 发点 $ 收点运输问题
)'
*+,-.,//, .'0*1*0)2
3+.3//3$.'*
45*+,-63+7'0)63-
)
(目标函数
8-54'0)3-7
(需求约束
89+53+5:7'
8-5*+,-57'3-56:77*5:77
!产量约束;
@for(warehouses(I):
8-53+5:7'3-56:770*1*0)2577
!这里是数据;
*)*'
0*1*0)2 ""
*#""$
0) #"&
"&$$
&#"
# #&#
&#
$"
*)*
然后点击工具条上的按钮 即可。
为了能够使用 的强大功能,接着第二节的学习吧。
中的集
对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和
雇工等等。 允许把这些相联系的对象聚合成集())。一旦把对象聚合成集,就可以利用
集来最大限度的发挥 建模语言的优势。
现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术
的集如何引入模型会有一个基本的理解。
为什么使用集
集是 建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的 、
长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。
什么是集
集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。
每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,
也可以是未知的,有待于 求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中
的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日
属性等等。
有两种类型的集:原始集51+)3 )7和派生集5+3)7。
2
LINGO 教程
一个原始集是由一些最基本的对象组成的。
一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。
模型的集部分
集部分是 模型的一个可选部分。在 模型中使用集之前,必须在集部分事先定义。
集部分以关键字“)';开始,以“);结束。一个模型可以没有集部分,或有一个简单的集部
分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中
被引用之前必须定义了它们。
定义原始集
为了定义一个原始集,必须详细声明:
<集的名字
<可选,集的成员
<可选,集成员的属性
定义一个原始集,用下面的语法:
)*=.>+?).@='*))+>-)?)@
注意:用“
[]”
表示该部分内容可选。下同,不再赘述。
A)* 是你选择的来标记集的名字,最好具有较强的可读性。集名字必须严格符合标准命名
规则:以拉丁字母或下划线(?)为首字符,其后由拉丁字母(%BC)、下划线、阿拉伯数字
(,,…,&)组成的总长度不超过 个字符的字符串,且不区分大小写。
注意:该命名规则同样适用于集成员名和属性名等的命名。
是集成员列表。如果集成员放在集定义中,那么对它们可采取显式罗列和隐式
罗列两种方式。如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。
D当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混
合使用。
例 可以定义一个名为 )-) 的原始集,它具有成员 :,、:、E 和 4,属性有
和 *F:
)'
)-).:,:6E4.'6*F
endsets
G当隐式罗列成员时,不必罗列出每个集成员。可采用如下语法:
)*.>+//>+.='*))+>-)?)@
这里的 member1 是集的第一个成员名,memberN 是集的最末一个成员名。LINGO 将自动产生中间的
所有成员名。LINGO 也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。列表如下:
隐式成员列表格式 示例 所产生集成员
// // 666"6
A)+F//A)+F H*+//0*+" H*+6H*+6H*+"6I6H*+"
J*2//J*2 //K+ 6L-6M6L,-6K+
),//), 0)//:* 0)636J06:*
),N*+//),N
*+
0)//:*
0)636J06:*
O集成员不放在集定义中,而在随后的数据部分来定义。
例
(集部分
)'
)-)'6*F
)
(数据部分
*)*'
)-)66*F:,
:"
E#
4
*)*
3
LINGO 教程
注意:开头用感叹号(
!
),末尾用分号(
;
)表示注释,可跨多行。
在 集 部 分 只 定 义 了 一 个 集 )-) , 并 未 指 定 成 员 。 在 数 据 部 分 罗 列 了 集 成 员
:,、:、E 和 4,并对属性 和 *F 分别给出了值。
集成员无论用何种字符标记6它的索引都是从 开始连续计数。在 *))+>-)?) 可以指定一个
或多个集成员的属性,属性之间必须用逗号隔开。
可以把集、集成员和集属性同 H 语言中的结构体作个类比。如下图:
集 ←→ 结构体
集成员 ←→ 结构体的域
集属性 ←→ 结构体实例
内置的建模语言是一种描述性语言,用它可以描述现实世界中的一些问题,然后再借助
于 求解器求解。因此,集属性的值一旦在模型中被确定,就不可能再更改。在 中,
只有在初始部分中给出的集属性值在以后的求解中可更改。这与前面并不矛盾,初始部分是
求解器的需要,并不是描述问题所必须的。
定义派生集
为了定义一个派生集,必须详细声明:
<集的名字
<父集的名字
<可选,集成员
<可选,集成员的属性
可用下面的语法定义一个派生集:
)*51*+)?)?)7=.>+?).@='*))+>-)?)@
)* 是集的名字。1*+)?)?) 是已定义的集的列表,多个时必须用逗号隔开。如果
没有指定成员列表,那么 会自动创建父集成员的所有组合作为派生集的成员。派生集的父集
既可以是原始集,也可以是其它的派生集。
例
)'
1+-0).%!.
*0,..
4.//.
*51+-0)6*0,647'
)
生成了三个父集的所有组合共八组作为 * 集的成员。列表如下:
编号 成员
5%667
5%667
5%667
" "5%667
5!667
5!667
# #5!667
$ $5!667
成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为 稠密集。如果
限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为 稀疏集。
同原始集一样,派生集成员的声明也可以放在数据部分。一个派生集的成员列表有两种方式生成:
①显式罗列;②设置成员资格过滤器。当采用方式①时,必须显式罗列出所有要包含在派生集中的
成员,并且罗列的每个成员必须属于稠密集。使用前面的例子,显式罗列派生集的成员:
*51+-0)6*0,647.%6%6!.
如果需要生成一个大的、稀疏的集,那么显式罗列就很讨厌。幸运地是许多稀疏集的成员都满足一
些条件以和非成员相区分。我们可以把这些逻辑条件看作过滤器,在 生成派生集的成员时把
使逻辑条件为假的成员从稠密集中过滤掉。
例
sets:
!学生集:性别属性 sex,1 表示男性,0 表示女性;年龄属性 age. ;
)-).:,6:6E64.'6*F
4
LINGO 教程
!男学生和女学生的联系集:友好程度属性 friend,[0,1]之间的数。
495)-)6)-)7P5Q7RSRR*R5Q7RSR'9+
!男学生和女学生的友好程度大于 0.5 的集;
495497P9+5Q6Q7RFR/'
)
*)*'
6*F
0 14
0 17
0 13;
friend = 0.3 0.5 0.6;
enddata
用竖线(P)来标记一个成员资格过滤器的开始。RSR是逻辑运算符,用来判断是否“相等”,
可参考T"/Q 可看作派生集的第 个原始父集的索引,它取遍该原始父集的所有成员;Q 可看作
派生集的第 个原始父集的索引,它取遍该原始父集的所有成员;Q,Q",……,以此类推。注
意如果派生集 ! 的父集是另外的派生集 %,那么上面所说的原始父集是集 % 向前回溯到最终的原始
集,其顺序保持不变,并且派生集 % 的过滤器对派生集 ! 仍然有效。因此,派生集的索引个数是最
终原始父集的个数,索引的取值是从原始父集到当前派生集所作限制的总和。
总的来说, 可识别的集只有两种类型:原始集和派生集。
在一个模型中,原始集是基本的对象,不能再被拆分成更小的组分。原始集可以由显式罗列和
隐式罗列两种方式来定义。当用显式罗列方式时,需在集成员列表中逐个输入每个成员。当用隐式
罗列方式时,只需在集成员列表中输入首成员和末成员,而中间的成员由 产生。
另一方面,派生集是由其它的集来创建。这些集被称为该派生集的父集(原始集或其它的派生
集)。一个派生集既可以是稀疏的,也可以是稠密的。稠密集包含了父集成员的所有组合(有时也
称为父集的笛卡尔乘积)。稀疏集仅包含了父集的笛卡尔乘积的一个子集,可通过显式罗列和成员
资格过滤器这两种方式来定义。显式罗列方法就是逐个罗列稀疏集的成员。成员资格过滤器方法通
过使用稀疏集成员必须满足的逻辑条件从稠密集成员中过滤出稀疏集的成员。不同集类型的关系见
下图。
模型的数据部分和初始部分
在处理模型的数据时,需要为集指派一些成员并且在 求解模型之前为集的某些属性指定
值。为此, 为用户提供了两个可选部分:输入集成员和数据的数据部分(J*)*A0))
和为决策变量设置初始值的初始部分()A0))。
模型的数据部分
数据部分入门
数据部分提供了模型相对静止部分和数据分离的可能性。显然,这对模型的维护和维数的缩放
非常便利。
数据部分以关键字“*)*';开始,以关键字“*)*;结束。在这里,可以指定集成员、集的属
性。其语法如下:
>U0)?)3*-?)
5
集
稠密集
原始集
显式罗列
稀疏集
过滤器
派生集
集类
型
剩余47页未读,继续阅读
ncwsftww
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0