NET 文件格式:网络流模型

CPLEX 支持 NET 文件格式。

NET 文件格式是网络流问题的特定于 CPLEX 的 ASCII 文件格式。 它是表示 CPLEX 中的纯网络问题的文件格式。 此格式受 Concert Technology、Callable Library 和 Interactive Optimizer 的支持。 需要特别说明的是,它适用于 CPXNETptr 对象(不适用于 CPXLPptr 对象)。

注释

这是自由格式文件;即,换行符或列位置与文件的解释无关。 此约定的唯一异常情况是注释:从反斜杠 (\) 字符到行尾的任何内容都是注释,并且不提供给文件所指定的网络。 在文件中的任何位置都允许注释。

关键字

NET 格式识别文件中的以下关键字:

  • MAXIMIZE

  • MINIMIZE

  • NETWORK

  • ENDNETWORK

  • SUPPLY

  • DEMAND

  • ARCS

  • BOUNDS

  • OBJECTIVE

  • INFINITY

  • FREE

关键字与字符大小写无关。 关键字必须以空格与文件中的其他符号分隔。

空白

空格由以下字符的一项或多项组成:

  • 空格字符

  • 跳进字符 (\t)

  • 换行字符 (\n)

  • 注释(即,跟在反斜杠后到行尾的所有字符)

关键字缩写

此外,NET 格式还能识别表 1 中概述的缩写。
表 1. 采用 NET 文件格式的关键字缩写
关键词 缩写
INFINITY INF
MINIMIZE MIN
MAXIMIZE MAX

NET 文件开头

NET 文件必须以下列关键字之一开头:

  • MAXIMIZE NETWORK

  • MINIMIZE NETWORK

两个关键字后面可以选择性跟以问题的名称。 如果未指定名称,那么将改用文件名。 NET 文件的此部分称为 NET 文件的开头

NET 文件中的名称

名称必须遵守与 CPLEX LP 格式文件相同的约定。 它们必须由一串字母数字字符(a-z、A-Z 或 0-9)或其中一个符号组成: ! " " # $ % & ( ) / , .# $ % & ( ) / , . ; @ _ ' '{ }| 但是,第一个字符不能是数字或句点(.)。不允许使用与关键字相对应的名称。 对于 NET 文件内名称中的字符数没有限制。

NET 文件结尾

NET 文件的网络规范必须以关键字 ENDNETWORK 结尾。 将忽略跟在关键字 ENDNETWORK 之后的任何内容。 此关键字称为 NET 文件的结尾。

NET 文件的节

在其开头和结尾之间,NET 文件分为多个节。 各节通过其关键字进行引入,并且继续直至下一节开始或 NET 文件结束。 引入节的关键字包括 SUPPLYDEMANDARCSBOUNDSOBJECTIVE。 各节关键字可在 NET 文件中多次出现。 它们无需按照任何顺序。

SUPPLY 节

在此节中,指定了节点的供应值。 按照以下顺序指定各供应值:

node-name : value

其中 node-name 指定要为其设置供应值的节点的名称,value 是将指定给节点 node-name 作为其供应值的值。 如果具有此名称的节点尚不存在,那么将创建具有此名称的新节点。 如果先前为节点指定了供应值,那么新值会覆盖先前值,并且将发出警告。

DEMAND 节

此节与 SUPPLY 节对应,不同在于它指定需求值而不是供应值。 即,您可以在 DEMAND 节中指定供应值 s 的负值,而不是在 SUPPLY 节中指定 s,反之亦然。 这样做的格式完全相同:' node-name: value. 不要求在指定模型中同时使用 SUPPLYDEMAND 节。 您可以通过正确使用正值和负值来完整指定单独使用任一节类型的任何模型。 任一节类型或两种节类型的可用性仅在模型组成中提供灵活性。

ARCS 节

在此节中,指定了标界线 from-node(或尾)和 to-node(或头)。 对于各标界线,格式为:

arc-name : from-node -> to-node

其中 arc-name 指定从 from-nodeto-node 的标界线的名称。 如果 arc-name 已存在,那么会发出警告,并且指定节点将覆盖先前节点。 节点以节点名指代。 如果节点尚不存在,那么将使用供应值 0(零)创建具有此名称的新节点。 否则,将使用具有指定名称的现有节点。

OBJECTIVE 节

此节用于按以下格式向标界线指定目标值:

arc-name : value

其中 arc-name 必须是先前已在 ARCS 节中指定的标界线的名称。 将为此标界线指定 value 所指示的目标值。 如果多次为标界线指定目标值,那么将发出警告消息,并且将使用文件中该标界线的最新指定的目标值。 如果没有为标界线指定目标值,那么缺省情况下将使用 0(零)。

BOUNDS 节

在此节中,通过各种方式指定经过标界线的流的界限,类似于指定 LP 格式的变量的界限。 一般格式为:

value1 <= arc-name <= value2

该一般语句向名为 arc-name 的标界线指定下限 value1 和上限 value2。 此标界线必须先前已在 ARCS 节中进行指定。

一次只能为标界线指定一个界限。 也就是说,以下输入项是有效的:"value <=arc-name将指定弧的下界设置为 "value,或 "arc-name <= value将指定弧的上界设置为 "value。 如果弧的上限和下限相同,可以写成 "arc-name = value

界限值可以是 INFINITY-INFINITY。 下界为 "-INFINITY、上界为 "INFINITY的弧可以输入 "FREE,如图所示: arc-name free

如果没有为标界线指定界限,那么将使用 0(零)作为缺省下限并使用无穷作为缺省上限。

NET 文件格式示例


\ Except for this comment, this is the example network file
\ created by netex1.c
\
MINIMIZE NETWORK netex1
SUPPLY
      n1 : 20
      n4 : -15
      n5 : 5
      n8 : -10
ARCS
      a1 :       n1 ->       n2
      a2 :       n2 ->       n3
      a3 :       n3 ->       n4
      a4 :       n4 ->       n7
      a5 :       n7 ->       n6
      a6 :       n6 ->       n8
      a7 :       n5 ->       n8
      a8 :       n5 ->       n2
      a9 :       n3 ->       n2
     a10 :       n4 ->       n5
     a11 :       n4 ->       n6
     a12 :       n6 ->       n4
     a13 :       n6 ->       n5
     a14 :       n2 ->       n6
OBJECTIVE
      a1 : 3
      a2 : 3
      a3 : 4
      a4 : 3
      a5 : 5
      a6 : 6
      a7 : 7
      a8 : 4
      a9 : 2
     a10 : 6
     a11 : 5
     a12 : 4
     a13 : 3
     a14 : 6
BOUNDS
18 <= a1  <= 24
 0 <= a2  <= 25
      a3   = 12
 0 <= a4  <= 10
 0 <= a5  <= 9
      a6     free
 0 <= a7  <= 20
 0 <= a8  <= 10
 0 <= a9  <= 5
 0 <= a10 <= 15
 0 <= a11 <= 10
 0 <= a12 <= 11
 0 <= a13 <= 6
ENDNETWORK