三篇文章带你快速入门LINGO—(2/3)LINGO程序

目录

一、初识LINGO程序

 状态窗口的参数解释

 求解报告

二、LINGO建模语言

1、集合段

2、数据段

3、初始段

4、目标与约束段


一、初识LINGO程序

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

 打开LINGO

输入模型并solve

 

 状态窗口的参数解释

 求解报告

 再来一个例子:

 

二、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:

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

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

 

 派生集定义

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

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

2、数据段

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

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

其语法如下: object_list = value_list;

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

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

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

 

3、初始段

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

4、目标与约束段

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

 

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LINGO(LINear General Optimization)是一个用于线性和非线性优化的软件包,可用于解决各种数学建模和最优化问题。在LINGO中,要进行叶片排序的程序可以通过以下步骤实现: 1. 定义问题: - 首先,我们需要明确问题的目标和约束条件。叶片排序的目标是通过调整叶片的位置,使得风扇的性能最佳化。约束条件可以包括叶片之间的距离限制、叶片的尺寸限制等。 2. 建立数学模型: - 接下来,我们将问题转化为一个数学模型。可以使用变量、目标函数和约束条件来描述问题。 - 变量:每个叶片的位置、角度等。 - 目标函数:例如最大化风扇的效率、最小化风扇的噪音等。 - 约束条件:例如叶片之间的距离限制、叶片的尺寸限制等。 3. 编写LINGO程序: - 在LINGO中,可以使用LINGO语言编写程序来求解叶片排序问题。 - 首先,定义变量、目标函数和约束条件。 - 然后,使用LINGO提供的优化命令,如MIN、MAX等,来定义目标函数是最小化还是最大化。 - 最后,使用LINGO提供的约束命令,如S.T.等,来定义约束条件。 4. 运行LINGO程序: - 确保已安装LINGO软件,并加载编写好的LINGO程序。 - 运行LINGO程序,并等待LINGO求解器计算出最优解。 - 检查结果,并根据需要进行进一步优化或调整。 通过上述步骤,可以使用LINGO解决叶片排序问题。LINGO提供了强大的求解算法和优化工具,可以帮助我们找到最佳的叶片排序方案,以使风扇的性能达到最优化。 ### 回答2: 叶片排序是一种基于Lingo程序的排序算法,用于对叶片进行排序,使其按照某个规则或条件进行排列。 该算法的基本思想是根据叶片的某个特征或属性,对叶片进行评分,并将评分高的叶片排在前面,评分低的叶片排在后面。 具体实现时,可以首先定义一个评分函数,该函数根据叶片的某个属性(例如叶片的大小、颜色、形状等)计算叶片的得分。然后使用Lingo程序,结合评分函数,对叶片进行排序。 在Lingo程序中,可以定义一个叶片对象,包含叶片的属性信息和评分函数。然后通过Lingo程序的排序算法,按照评分函数的结果对叶片进行排序。 例如,假设我们要对一组叶片按照大小进行排序,可以定义一个叶片对象,包含叶片的大小属性和一个评分函数。评分函数可以根据叶片的大小,给出一个得分。 然后使用Lingo程序,通过调用排序算法,将这组叶片按照得分从高到低进行排序,得到排好序的叶片序列。 总之,叶片排序是一种基于Lingo程序的排序算法,通过定义叶片对象、评分函数和调用Lingo程序的排序算法,对叶片进行排序。这种算法可以根据叶片的特征或属性,按照一定规则对叶片进行排列,从而实现对叶片的排序。 ### 回答3: 叶片排序是一种常见的数据处理算法,也是Lingo程序的一部分。它通过按照指定的条件对一组叶子进行排序,以便更好地满足特定的需求。 叶片排序的Lingo程序主要包括以下几个步骤: 1. 定义排序的条件:首先,需要确定叶片排序的条件。例如,可以按照叶片的大小、形状、颜色或其他特征进行排序。 2. 导入叶片数据:将叶片的数据导入Lingo程序中进行处理。这些数据可以是从图像中提取的叶片特征,也可以是其他来源的数据。 3. 运行Lingo程序:根据排序条件,编写Lingo程序来进行叶片排序。Lingo是一种用于高级数学建模和优化的语言,可以方便地编写各种数据处理算法。 4. 运算和比较:在Lingo程序中,可以使用各种运算符和函数来对叶片数据进行运算和比较。通过这些运算和比较,可以获得叶片的排序结果。 5. 输出排序结果:将排序结果导出,以便进一步的分析或应用。可以将排序结果保存为一个新的数据文件或直接在程序中进行展示。 叶片排序的结果可以有多种用途。例如,在植物学研究中,叶片排序可以帮助识别特定类型的植物,或者提取叶片的形态特征。在农业生产中,叶片排序可以用于优化农作物的品种选择或检测病虫害。此外,在教育领域,叶片排序可以用于植物分类教学或科学探索活动中。 总之,叶片排序是一种利用Lingo程序来处理叶片数据的方法。通过定义排序条件、导入数据、运行Lingo程序、进行运算和比较,并输出排序结果,可以实现对叶片的排序和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值