LINGO8.0 使用教程

合集下载

LINGO教程(基本语法)

LINGO教程(基本语法)

H
20
输出结果: 运行菜单命令“LINGO|Solve”
最大利润=11077.5
最优整数解 X=(35,65)
H
21
输出结果备注: LINGO是将它作为PINLP(纯整数非线性规划)来求解,因此找到的是局部最优解。
通过菜单 “WINDOW| Status Window”看到状态窗口,可 看到最佳目标值“Best Obj” 与问题的上界“Obj Bound”已 经是一样的,当前解的最大 利润与这两个值非常接近, 是计算误差引起的。如果采 用全局最优求解程序(后面介 绍),可以验证它就是全局最 优解。
•限定变量取整数值的语句为“@GIN(X1)”和“@GIN(X2)”,不可以写成“@GIN(2)”,否 则LINGO将把这个模型看成没有整数变量。
•LINGO中函数一律需要以“@”开头,其中整型变量函数(@BIN、@GIN)和上下界 限定函数(@FREE、@SUB、@SLB)与LINDO中的命令类似。而且0/1变量函数 是@BIN函数。
H
18
一个简单的LINGO程序
例 直接用LINGO来解如下二次规划问题:
Max98x127x72x120.3x1x22x22 1
s.t. x1x2100
2
x12x2
3
x1,x2 0 为整数
4
输入窗口如下:
H
19
程序语句输入的备注:
•LINGO总是根据“MAX=”或“MIN=”寻找目标函数,而除注释语句和TITLE语句外的其 他语句都是约束条件,因此语句的顺序并不重要 。
H
27
集合及其属性
• QUARTERS集合的属性
• DEM
• RP
• OP
• INV

lingo入门教程(共55张)

lingo入门教程(共55张)

3 3
A2
8 67
A3 4
7
B2
8 9
5 C2 6
T
第18页,共55页。
分析
(fēnxī)
6 A1 5 6
B1 6 C1
S
3 3
A2
8 67
A3 4
7
B2
8 9
5 C2 6
T
假设从S到T的最优行驶路线 P 经过城市C1, 则P中从S到C1的子路也一定 是从S到C1的最优行驶路线; 假设 P 经过城市C2, 则P中从S到C2的子路也一定是从S到C2的最优行驶路线. 因此, 为得到从S到T的最优行驶路线, 只需要先求出从S到Ck(k=1,2)的最 优行驶路线, 就可以方便地得到从S到T的最优行驶路线.
第19页,共55页。
分析
(fēnxī)
6 A1 5 6
B1 6 C1
S
3 3
A2
8 67
A3 4
7
B2
8 9
5 C2 6
T
此例中可把从S到T的行驶过程分成4个阶段,即 S→Ai (i=1,2 或3), Ai → Bj(j=1或2), Bj → Ck(k=1或2), Ck → T. 记d(Y,X)为城 市Y与城市X之间的直接距离(若这两个城市之间没有道路直 接相连,则可以认为直接距离为∞),用L(X)表示城市S到城市
L B2 minL A1 5, L A2 6, L A3 4 7 L A3 4; L C1 minL B1 6, L B2 8 15 L B2 8;
略2去),最小运量136.2275(吨公里)。
1
3
5
0
0
1
2
3
4
5
6

lingo-教程资料汇总-LINGO8.0编程介绍

lingo-教程资料汇总-LINGO8.0编程介绍

•LINDO和LINGO软件能求解的优化模型
连续优化
优化模型
整数规划(IP)
线性规划 (LP)
LINDO
二次规划 (QP)
非线性规划 (NLP)
LINGO
LINDO应用实例
牛奶问题(1)程序
max 72x1+64x2 st 2)x1+x2<50 3)12x1+8x2<480 4)3x1<100 end
大型 5 400 4
现有量 600 60000
LINGO程序 max 2x1+3x2+4x3 st 1.5x1+3x2+5x3<600 280x1+250x2+400x3<60000 end gin 3
LINGO程序简单实例
牛奶问题(2)程序 model: max=24*(3*x1-x3)+16*(4*x2-x4)+
LINGO: Linear INteractive General Optimizer (V8.0) LINDO API: LINDO Application Programming
Interface (V2.0) What’s Best!: (SpreadSheet e.g. EXCEL) (V7.0) 目前的产品有:演示(试用)版、学生版、高级版、超 级版、工业版、扩展版… (求解问题规模和选件不同)
4.666667
X22
30.00000
0.000000
X13
45.00000
0.000000
X23
0.000000
3.333333
TT(1)
486.0000
0.000000

Origin 8.0 在科研写作的应用

Origin 8.0 在科研写作的应用

Company Logo
将“Crack”文件夹中的ok80.dll复制到 Origin8的安装目录中,覆盖替换掉原文件;并 将文件orglab.lic复制到Origin8安装目录的 FLEXlm文件夹内。 完成上述工作后,启动OriginPro 8,会弹出下 述对话框,点击“Continue”继续。
Company Logo
Company Logo
Columns/Bars(柱状/条状)型模板
Columns(柱状)图: 绘出的柱状图里,Y 值以柱体的高度表示,柱体的宽度是 固定的,柱体的中心为相应的X 值。选中数据列A(X)和 B(Y),然后在菜单栏Plot | Columns/Bars| Column,设 置坐标轴属性、Copy Page 后图形如图所示
Company Logo
Y Error(Y 误差)图: 选中数据列A(X),接着按顺序选中B(Y) 和D(Y),然后Plot | Symbol | Y Error,就会将 B(Y)数据点用D(Y)数据作为误差表示出来。注意在 图5.43 中选择Y 列的顺序,如果先选中E1(Y)再选中 C1(Y),那么Plot | Symbol | Y Error 后就会E1(Y) 数据点用C1(Y)数据作为误差表示出来。
Company Logo
在下图中选择“I‘m already registered.” ,并填入 注册号KRK-RYR-JR3,点击OK按钮即可。至此安装 破解结束。
Company Logo
2 Origin 8.0 界面
图(Graph): 单层图包括一组 XY 坐标轴(3D 图是XYZ坐标轴),一个或更多的 数据图以及相应的文字和图形元素,一个图可包含许多层。 页面(Page): 每个Graph窗口包含一个编辑页面,页面是作图的背景,包括一些 必要的图形元素,如图层、数轴、文本和数据图等。Graph窗口的 每个页面最少包含一个图层,如果该页所有的图层都被删除,则该 Graph窗口的页面将被删除页面将不存在。 图层或层(Layer): 一个典型的图层一般包括三个元素:坐标轴、数据图和相应的文字 或图标。Origin将这三个元素组成一个可移动、可改变大小的单位 ,叫做图层(Layer),一页可最多放50个图层。层与层之间可以建 立链接关系,以便于管理。用户可以移动坐标轴、层或改变层的大小 。

Origin8简明教程

Origin8简明教程
四. 后记
最后提醒同学们几点: 1 ○.拟合中因图而产生的数据是非常有用的,里面有拟合所产生线的斜率、截距、数据、标 准差、运算的公式等等。大家就要多多注意这些信息。 2 ○.origin 里的图并不是用“copy”或“Ctrl+c”就可以插入其他软件(如 word)中的,想要 插入就得按 中选择“copy page”进行复制(也可以用“Ctrl+J”快捷键) 。
图 23 在“Pattern”选项中就可以设置线和柱子的颜色之类的,切换到“Spacing” ,对其中的参数
进行如下修改(图 24) :
图 24 将“Gap Between Bars(in %)”中的值改为“0” ,按“ok”就行了!!!! !!!(图 25)
图 25 需要注意的是, 能不能将间隙除掉和你输入的数据也有关系!! ! 如果经过上面的设置还是不 能将间隙除掉,那就是你输入数据的方法问题了!! ! 到这里,origin8 的一级实验应用已经基本可以了,其他的函数同学们可以自己去“参透” , 这个还是一个很简单、很强大的软件,相信同学们一定会学好运用好这个软件!! !
第一步 输入数据
输入数据,建议先在 excel 里输入,excel 里进行基本的数据处理还是比在 origin 里方便的。 输入好后直接粘贴就行了(如图 3~4)
图3 接着选中所要的列,这里我们要第 A 列与第 D 列,注意,origin8 里面的表格前三行是标题 行,下面的行才是数据行,粘贴时要选好初始的单元格(如图 4)
pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
这里我们就开始 origin8.0 的教程。 首先我们得讲一下 origin 的版本, 现在用的一般有三个版本: origin7.0, origin7.5, origin8.0. 其中 7.0 与 7.5 的差别不大,网上教程多的是。但 8.0 相对之前的版本就有了比较大的改变, 网上的教程就显得不那么适合了,况且现在大家都在用 8.0,所以我们就专门针对 8.0 来做 一个教程。 本教程主要针对一级实验中所涉及的相关操作,也就是说这是针对大一学生来说的。

Origin8.0基本用法经验

Origin8.0基本用法经验

Txt数据
粘贴到excel中,选择数据、分列选项,得到下 图
下一步把分号的框框打钩
2.excel表格B1,像 Excel一样选中Y列数据。点击下方的一排 按钮的第5个。
还需要调整一下 选择第一个直线按钮调整曲线

二、坐标轴的设置
坐标轴分度设置 双击坐标轴弹出选项框

Frorr和to表示坐标轴起点和终点值 Increment表示一大格刻度值 Minor ticks表示把坐标轴划分几次,两等分就填1,五等分就填4,十等分填9
2.双击坐标轴按下图设置可使坐标轴闭合成矩 形且上方和右边的坐标轴无刻度。
2.坐标轴加单位

2.1添加文本框 通常会坐标轴会有文本框(上图的A、C、D) 出现,不小心删掉可以点击左侧的T按钮,然 后在坐标轴附近点一下就会出现新文本框
Origin8.0基本用 法经验
2015.4.13
主要内容
一、常用数据导入方法 1.Txt-关于分列 2.excel-双Y轴曲线快捷方法 二、坐标轴的设置 1.坐标轴分度设置 2.使坐标轴闭合成矩形且上方和右边的坐标轴无 刻度 3.坐标轴加单位
一、常用数据导入方法

1.txt-关于分列 txt上的数据有多列并用分号隔开时要粘贴到 excel中进行分列

2.2单位上的平方等指数添加方法

origin8使用指南

本人非技术宅,所以写的东西也就是大物实验要用到的,面向对象为数院大一同学们,所以内容肯定不多。

外加已经快一年没用过了,写的肯定不全,请大神轻喷。

有问题就留言,我能解决就解决,解决不了的还请看到这篇文章的大牛解决一下~---------------------------------------------------1、安装安装程序什么的我记得大物主页上貌似有,下载安装就好,应该不用教了。

2、界面A是整个工程,一级实验应该是用不到的;B是窗口的列表,你所有的数据、图标窗口全都在这里;C就是窗口了。

其他工具栏什么先不用去管他,用到再说。

3、数据录入基本与excel类似,并且和excel兼容,从excel中复制过来的数据可以直接粘贴。

至于上面的“Long Name”(名称)、“Units”(单位)、“Comme nts”(注释),会在画图的时候用到。

如果有多组数据,比如光电效应那个实验,也可把数据放在一个表里。

如图右键图表空白区域,点击“Add New Column”,就会多出一栏。

数据都填好以后,就可以绘图了。

4、绘图一级大物实验用到Origin的基本都是绘图,所以这里主要讲一下绘图。

最简单的,绘制散点图,也就是把原始数据画出来。

用拖选或按住ctrl的方法选中两列(注意:要选标题,就是A(x)那个位置),右键->Plot->Symbol->Sc atter。

这样,就画出了散点图(右边那个东西点ok无视掉就好)。

但是一般来说大物作业不可能让你画完散点图就没事了,有分一下两种情况a)曲线连接曲线连接的话刚才就不能点Scatter了,应该点右键-> Plot->Linel->Spline。

可以很清楚的画出曲线的走势。

默认使用Spline来画,还可以用B-spline,Bezier曲线等。

如果要改变,双击图像,把右边折叠的全展开,点最后一个,在Line选项卡Connect选项中选择。

Origin8.0_使用说明中文翻译

Translated by 20091996 吴琼第三章,在version7.5中创新在哪里介绍Origin 7.5是建立在科学图和分析能力和全新的工具, 简化了共同行动。

一个新引进的视觉协助您的ASCII和二进制数据导入的文件。

Origin的自动更新功能的新公式计算使每次更新的源数据被修改。

使用全新的情节设置对话框来创造新的图表或添加、删除、修改或更换情节,在现有的图形。

立即改变外观的图形应用内置或用户自定义的主题。

在编程领域,有一种新的方法,支持动态创建的对话框输入表单各式各样的界面控制。

现在支持用户定义,允许程序员来用Origin C去定义他们自己的方法和数据成员。

Origin 和OriginPro 7.5包括自动化服务功能(OriginPro支持多个客户),OriginPro ActiveX控件嵌入开发者可以控制他们的DDK工具。

下面的章节7.5来介绍Origin 7.5的新功能。

更多信息请在使用这些特点的基础上,回顾相关主题的Origin 7.5的帮助文件(帮助:Origin 7.5的帮助:程序)。

同时,一定要看看在你的网上辅导手册中的课程介绍。

数据交换Import WizardImport Wizard允许你定制不同数据的数据和来源不同类型的文件。

Import Wizard可以用来创建自定义设置,这些设置就可以得保存为过滤文件以供将来使用相同或相似的文件。

如何使用向导指定数据输入时:打开数据文件使用的文件打开对话框:。

采用输入数据文件的文件:输入的菜单。

Dragging-and-dropping数据文件被输入进original工作空间。

文件类型的支持Import Wizard 支持以下的文件类型。

ASCII的文件。

简单的二进制文件(紧随其后的是简单的二元结构)。

用户自定义的文件类型。

对于ASCII和二进制文件类型,你通过选择导入选项。

然后使用这些选项,随后导入文件。

然后阅读对导入的定义文件类型,你能供应导入代码的形式origin C函数。

Lingo的基本使用方法


优化模型和算法的重要意义
最优化: 在一定条件下,寻求使目标最大(小)的决策
最优化是工程技术、经济管理、科学研究、社会生活中 经常遇到的问题, 如:
结构设计 资源分配
生产计划
运输方案
解决优化问题的手段
经验积累,主观判断 作试验,比优劣 建立数学模型,求解最优策略
1. 确定常数 2. 识别类型
LINGO软件的求解过程
LINGO的文件类型
.LG4:LINGO格式的模型文件,保存了模型窗口中所能够看到
的所有文本和其他对象及其格式信息;
.LNG:文本格式的模型文件,不保存模型中的格式信息(如字
体、颜色、嵌入对象等);
.LDT:LINGO数据文件;
.LTF:LINGO命令脚本文件; .LGR:LINGO报告文件; .LTX: LINDO格式的模型文件;
用DEM,RP,OP,INV分别表示需求量、正常生产的产量、加班生 产的产量、库存量,则DEM,RP,OP,INV对每个季度都应该有一 个对应的值,也就说他们都应该是一个由4个元素组成的数组, 其中DEM是已知的,而RP,OP,INV是未知数。
问题的模型(可以看出是LP模型 )
目标函数是所有费用的和
集合的基本用法和LINGO模型的基本要素
例度理(2的解ASt帆LtArI船IiNbLu需GCteOO求)建公量的模司分概语需别念言要是。最决40重定条要下,的四60是个条理季,解度75集的条合帆,(船25生S条et产),量及这。其些下属需四性求个必季须 按时满足。每个季度正常的生产能力是40条帆船,每条船的生产 费用为400美元。如果加班生产,每条船的生产费用为450美元。 每个季度末,每条船的库存费用为20美元。假定生产提前期为0, 初始库存为10条船。如何安排生产可使总费用最小?

lingo8.0中文快速入门手册

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

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

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

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

下面举两个例子。

例如何在LINGO中求解如下的LP问题:在模型窗口中输入如下代码:min=2*x1+3*x2;x1+x2>=350;x1>=100;2*x1+x2<=600;然后点击工具条上的按钮即可。

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LINGO8.0 使用教程LINGO是用来求解线性和非线性优化问题的简易工具。

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

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

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

下面举两个例子。

例1.1如何在LINGO中求解如下的LP问题:在模型窗口中输入如下代码: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的强大功能,接着第二节的学习吧。

§2 LINGO中的集对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。

LINGO允许把这些相联系的对象聚合成集(sets)。

一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。

现在我们将深入介绍如何创建集,并用数据初始化集的属性。

学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。

2.1 为什么使用集集是LINGO建模语言的基础,是程序设计最强有力的基本构件。

借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。

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

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

每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。

属性值可以预先给定,也可以是未知的,有待于LINGO求解。

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

LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。

一个原始集是由一些最基本的对象组成的。

一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。

2.3 模型的集部分集部分是LINGO模型的一个可选部分。

在LINGO模型中使用集之前,必须在集部分事先定义。

集部分以关键字“sets:”开始,以“endsets”结束。

一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。

一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须定义了它们。

2.3.1 定义原始集为了定义一个原始集,必须详细声明:·集的名字·可选,集的成员·可选,集成员的属性定义一个原始集,用下面的语法:setname[/member_list/][:attribute_list];注意:用“[ ]”表示该部分内容可选。

下同,不再赘述。

Setname是你选择的来标记集的名字,最好具有较强的可读性。

集名字必须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉伯数字(0,1,…,9)组成的总长度不超过32个字符的字符串,且不区分大小写。

注意:该命名规则同样适用于集成员名和属性名等的命名。

Member_list是集成员列表。

如果集成员放在集定义中,那么对它们可采取显式罗列和隐式罗列两种方式。

如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。

①当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混合使用。

例2.1可以定义一个名为students的原始集,它具有成员John、Jill、Rose和Mike,属性有sex和age:sets:students/John Jill, Rose Mike/: sex, age;endsets②当隐式罗列成员时,不必罗列出每个集成员。

可采用如下语法:setname/member1..memberN/[: attribute_list];这里的member1是集的第一个成员名,memberN是集的最末一个成员名。

LINGO将自动产生中间的所有成员名。

LINGO也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。

列表如下:例2.2!集部分;sets:students:sex,age;endsets!数据部分;data:students,sex,age= John 1 16Jill 0 14Rose 0 17Mike 1 13;enddata注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行。

在集部分只定义了一个集students,并未指定成员。

在数据部分罗列了集成员John、Jil l、Rose和Mike,并对属性sex和age分别给出了值。

集成员无论用何种字符标记,它的索引都是从1开始连续计数。

在attribute_ list可以指定一个或多个集成员的属性,属性之间必须用逗号隔开。

可以把集、集成员和集属性同C语言中的结构体作个类比。

如下图:集←→结构体集成员←→结构体的域集属性←→结构体实例LINGO内置的建模语言是一种描述性语言,用它可以描述现实世界中的一些问题,然后再借助于LINGO求解器求解。

因此,集属性的值一旦在模型中被确定,就不可能再更改。

在LINGO中,只有在初始部分中给出的集属性值在以后的求解中可更改。

这与前面并不矛盾,初始部分是LINGO求解器的需要,并不是描述问题所必须的。

2.3.2 定义派生集为了定义一个派生集,必须详细声明:·集的名字·父集的名字·可选,集成员·可选,集成员的属性可用下面的语法定义一个派生集:setname(parent_set_list)[/member_list/][:attribute_list];setname是集的名字。

parent_set_list是已定义的集的列表,多个时必须用逗号隔开。

如果没有指定成员列表,那么LINGO会自动创建父集成员的所有组合作为派生集的成员。

派生集的父集既可以是原始集,也可以是其它的派生集。

例2.3sets:product/A B/;machine/M N/;week/1..2/;allowed(product,machine,week):x;endsetsLINGO生成了三个父集的所有组合共八组作为allowed集的成员。

列表如下:编号成员1 (A,M,1)2 2 (A,M,2)3 3 (A,N,1)4 4 (A,N,2)5 5 (B,M,1)6 6 (B,M,2)77 (B,N,1)88 (B,N,2)成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为稠密集。

如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集。

同原始集一样,派生集成员的声明也可以放在数据部分。

一个派生集的成员列表有两种方式生成:①显式罗列;②设置成员资格过滤器。

当采用方式①时,必须显式罗列出所有要包含在派生集中的成员,并且罗列的每个成员必须属于稠密集。

使用前面的例子,显式罗列派生集的成员:allowed(product,machine,week)/A M 1,A N 2,B N 1/;如果需要生成一个大的、稀疏的集,那么显式罗列就很讨厌。

幸运地是许多稀疏集的成员都满足一些条件以和非成员相区分。

我们可以把这些逻辑条件看作过滤器,在LINGO生成派生集的成员时把使逻辑条件为假的成员从稠密集中过滤掉。

例2.4sets:!学生集:性别属性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: fr iend;!男学生和女学生的友好程度大于0.5的集;linkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x;endsetsdata:sex,age = 1 160 140 170 13;friend = 0.3 0.5 0.6;enddata用竖线(|)来标记一个成员资格过滤器的开始。

#eq#是逻辑运算符,用来判断是否“相等”,可参考§4. &1可看作派生集的第1个原始父集的索引,它取遍该原始父集的所有成员;&2可看作派生集的第2 个原始父集的索引,它取遍该原始父集的所有成员;&3,& 4,……,以此类推。

注意如果派生集B的父集是另外的派生集A,那么上面所说的原始父集是集A向前回溯到最终的原始集,其顺序保持不变,并且派生集A的过滤器对派生集B 仍然有效。

因此,派生集的索引个数是最终原始父集的个数,索引的取值是从原始父集到当前派生集所作限制的总和。

总的来说,LINGO可识别的集只有两种类型:原始集和派生集。

在一个模型中,原始集是基本的对象,不能再被拆分成更小的组分。

原始集可以由显式罗列和隐式罗列两种方式来定义。

相关文档
最新文档