lingo基本教程_lingohut自学网站[通俗易懂]

lingo基本教程_lingohut自学网站[通俗易懂]初始LINGO程序、介绍LINGO建模语言的基本组成_lingo编程

目录

一、初识LINGO程序

 状态窗口的参数解释

 求解报告

二、LINGO建模语言

1、集合段

2、数据段

3、初始段

4、目标与约束段


一、初识LINGO程序

一个简单的例子引入,想要求解如下优化模型

lingo基本教程_lingohut自学网站[通俗易懂]

 打开LINGO

lingo基本教程_lingohut自学网站[通俗易懂]

输入模型并solve

 lingo基本教程_lingohut自学网站[通俗易懂]lingo基本教程_lingohut自学网站[通俗易懂]

 状态窗口的参数解释

lingo基本教程_lingohut自学网站[通俗易懂]

 求解报告

lingo基本教程_lingohut自学网站[通俗易懂]

 再来一个例子:

lingo基本教程_lingohut自学网站[通俗易懂]

 lingo基本教程_lingohut自学网站[通俗易懂]

二、LINGO建模语言

以上两个例子只是非常简单的示例程序,但是实际应用中会面对较大规模的数据,不再是简单几句话就能描述。

LINGO 包含了内置的建模语言,允许以简练、直观的方式描述较大规模的优化问题,模型中所需的数据可以以一定格式保存在独立的文件中

LINGO模型的构成:

集合段(SETS    ENDSETS)

数据段(DATA   ENDDATA)

初始段(INIT  ENDINIT)

目标与约束段

1、集合段

集是LINGO建模语言的基础,是程序设计最强有力的基本构件。 借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。

集是一群相联系的对象,这些对象也称为集的成员

         一个集可能是一系列产品、卡车或雇员

每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。 属性值可以预先给定,也可以是未知的,有待于LINGO求解。

        例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属  性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。

LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。 一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。

模型的集部分:

集部分是LINGO模型的一个可选部分。 在LINGO模型中使用集之前,必须在集部分事先定义集部分以关键字“sets:”开始,以“endsets”结束。 一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。 一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须定义了它们。

定义一个原始集,用下面的语法: setname[/member_list/][:attribute_list]; Setname是你选择的来标记集的名字,最好具有较强的可读性。集名字必须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉伯数字(0,1,…,9)组成的总长度不超过32个字符的字符串,且不区分大小写。 Member_list是集成员列表。如果集成员放在集定义中,那么对它们可采取显式罗列和隐式罗列两种方式。如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。

显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混合使用。 定义一个名为students的原始集,它具有成员John、Jill、Rose和Mike,属性有sex和age:

lingo基本教程_lingohut自学网站[通俗易懂]

隐式罗列成员时,不必罗列出每个集成员。可采用如下语法: setname/member1..memberN/[: attribute_list]; 

lingo基本教程_lingohut自学网站[通俗易懂]

集成员不放在集定义中,而在随后的数据部分来定义。

lingo基本教程_lingohut自学网站[通俗易懂] 

 派生集定义

setname(parent_set_list)[/member_list/][:attribute_list];

lingo基本教程_lingohut自学网站[通俗易懂]

在处理模型的数据时,需要为集指派一些成员并且在LINGO求解模型之前为集的某些属性指定值。 为此,LINGO为用户提供了两个可选部分: 输入集成员和数据的数据部分(Data Section) 为决策变量设置初始值的初始部分(Init Section)。

2、数据段

数据部分以关键字“data:”开始,以关键字“enddata”结束。

可以指定集成员、集的属性。

其语法如下: object_list = value_list;

        对象列(object_list)包含要指定值的属性名、要设置集成员的集名,用逗号或空格隔开。 一个对象列中至多有一个集名,而属性名可以有任意多。如果对象列中有多个属性名,那么它们的类型必须一致。

        数值列(value_list)包含要分配给对象列中的对象的值,用逗号或空格隔开。

有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让LINGO去求出它们的最优值。 

lingo基本教程_lingohut自学网站[通俗易懂] 

3、初始段

一个初始部分以“init:”开始,以“endinit”结束。 初始部分的初始声明规则和数据部分的数据声明规则相同。 好的初始点会减少模型的求解时间。

lingo基本教程_lingohut自学网站[通俗易懂]

4、目标与约束段

模型约束条件在该部分体现,最复杂也是最精华的部分,具体问题具体分析,涉及大量函数的调用。这里我们不详述,再下一篇博文中,带着例子给大家分析。

 

今天的文章lingo基本教程_lingohut自学网站[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85268.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注