优化求解器之LP文件的格式简介

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 在使用MindOpt优化求解器解决实际问题时,其中重要的一环在于如何建立优化模型,以及存储优化模型以便于作为求解器的输入文件。存储优化模型的文件,其关键在于定义一种清晰的格式,用来说明优化模型的数学结构和相关的数据。接下来我们将发布一系列文章,对常见的MPS/LP等格式的模型文件和命名规范进行简要的介绍。

这篇文章是系列的第二篇,MindOpt支持带有一些扩展名的 LP 文件格式。LP 格式不是一个明确定义的标准,不同的优化包解释同一个LP 文件的方式可能会略有不同。下列通过一个案例来详细讲述LP文件的命名规范。


线性规划模型:

max     x1 + 2 x2 + 3 x3 +  x4

s.t.       − x1 + x2 + x3 + 10 x4 ≤ 20

           x1 − 3 x2 + x3 ≤ 30

           x2 - 3.5 x4 = 0

           0 ≤ x1 ≤ 40,x2 ≥ 0,x3 ≥ 0,2 ≤ x4 ≤ 3


如果写成LP文件,展示如下:

Maximize

obj: x1 + 2 x2 + 3 x3 + x4     #目标函数

Subject To      #约束条件

c1: - x1 + x2 + x3 + 10 x4 <= 20

c2: x1 - 3 x2 + x3 <= 30

c3: x2 - 3.5 x4 = 0

Bounds      #表示变量的边界,里面若有 free 则表示该变量无上下界

0 <= x1 <= 40

2 <= x4 <= 3

General     #定义变量类型,General表示整数变量

x4

End      #结束


结合上述优化模型来说明LP文件的命名规范:


1,LP文件内容

LP文件包含了多个指定目标,约束条件,变量类型和变量边界。LP文件中部分关键字的组合可以为任意大小写字母。


2,目标函数

目标函数通常以max、maximum、maximize、min、minimum、minimize关键字开头。这类关键字定义了目标函数的求解目标,即: x1 + 2 x2 + 3 x3 + 4 x4

目标函数可以自己命名。如果没有命名,则默认为obj

目标函数包含线性项和二次项(MindOpt优化求解器暂不支持对二次规划问题的求解,这一功能将在后续版本中发布)。线性项如: 3x1 + x2 - 0.3 x3

二次项如:

minimize

myobj: 3 x1 + 2x2 - 0.5 x3 + [ x1^2 + 3 x1 * x2 ]/2

其实等同于 minimize 3 x1 + 2 x2 − 0.5⋅ x3 + 1/2(x12 + 3⋅ x1⋅ x2)


3,约束条件

约束条件部分应该以subj to、subject to、s.t.、st之一开头。约束条件包含名称(可不填)、相应的表达式和边界。

Subject To

c1: - x1 + x2 + x3 + 10 x4 <= 20

c2: x1 - 3 x2 + x3 <= 30

c3: x2 - 3.5 x4 = 0


4,变量边界

可以指定变量的边界。

bound

bounds

bounds部分可不填,但如果填写了,则要遵从边界约束条件。

请注意,在变量边界中列出的所有变量,必须出现在目标函数或约束条件中。

变量边界默认的下限为0,上限为+∞。

如果变量用关键字free,则表示变量的区间为(−∞ ,+∞)

常见的变量边界表示:

UP - 上界

LO - 下界

MI - 下界为负无穷

PL - 上界为正无穷

FX - 固定值

FR - ( − ∞ , ∞ )

例如:

bounds

x1 < 2

0.5 <= x1

x2 free

x3 = 5

1 <= x4 < +inf


5,变量类型

变量类型这部分可以用以下两种方式之一来表达

bin

binaries  

binary

gen

general

另外,还需要在general下面列出所有的整数变量,在binary下面列出所有的二进制(也就是变量边界为0和1的整数变量)。

general

x1 x2

binary

x3 x4

请注意,同变量边界一样,在generalbinary中列出的所有变量必须出现在目标函数或约束条件中。


6,结束部分

结尾,LP 格式的文件必须以关键字end结束。

end


此外,请注意LP文件格式对于命名有严格的要求。


目标函数、约束条件和变量的名称可以由小写字母a-z、大写字母A-Z、数字0-9以及如下的字符组成:

aB6`*!(),/~

注意:数字、句号、字母e和字母E不能用作名称的开头。关键字也不得用于命名。

另外,当使用如\0等在 LP 文件中不被允许的名称,那么求解器将自动更改该名称,并且还会返回 Warning 信息。

LP文件中生成有效命名的工作原理如下:

首先名称被表示为 utf-8编码的字符串,对于其中的任意一个Unicode 字符c分为以下几种情况:

  • 如果c==_下划线),则输出为__两个下划线)。
  • 如果c是有效的 LP 名称字符,则输出仅为c.
  • 如果c是 ASCII 范围内的另一个字符,则输出为_XX,其中XX是该字符的十六进制代码。
  • 如果c是127-65535范围内的字符,则输出为_uXXXX,其中XXXX是该字符的十六进制代码
  • 如果c是大于 65535 的字符,则输出为_UXXXXXXXX,其XXXXXXXX是该字符的十六进制代码。

无效的utf-8子字符串转义为_XX'如果名称以句点e或开头E,则该字符转义为_XX



联系我们:

邮箱:solver.damo@list.alibaba-inc.com

钉钉群:32451444

更多更新通知:https://solver.damo.alibaba.com

钉钉答疑群.png

相关文章
|
C语言 Perl 存储
优化求解器之MPS文件的格式简介
在使用MindOpt优化求解器解决实际问题时,其中重要的一环在于如何建立优化模型,以及存储优化模型以便于作为求解器的输入文件。存储优化模型的文件,其关键在于定义一种清晰的格式,用来说明优化模型的数学结构和相关的数据。接下来我们将发布一系列文章,对常见的MPS/LP等格式的模型文件和命名规范进行简要的介绍。
优化求解器之MPS文件的格式简介
|
Java
【求解器】调用Gurobi求解LP问题(Java代码示例)
【求解器】调用Gurobi求解LP问题(Java代码示例)
231 0
【求解器】调用Gurobi求解LP问题(Java代码示例)
优化求解器之Pyomo建模工具简介
在使用优化求解器解决实际问题的过程中,通过程序接口输入优化模型往往会耗费大量时间和精力,且容易出错。为了简化这一步骤,建模语言应运而生。建模语言最初的概念是在1976年提出的,后经过不断的发展,形成了如今蓬勃的技术、产品和应用市场。建模语言往往并不对实际问题进行求解,而专注在模型建立本身,其目的是将复杂的优化问题简化为抽象的代数表达形式;让用户在开发上只需要专注于代数模型的建立,模型完成后再将数据分别引入。如此不但加快开发流程,更有效减少模型输入错误的可能性。接下来我们将发布一系列文章,对常见的AMPL, Pyomo, PuLP等建模语言进行简要的介绍。
优化求解器之Pyomo建模工具简介
|
编译器 Linux Windows
优化求解器之AMPL建模工具简介
在使用优化求解器解决实际问题的过程中,通过程序接口输入优化模型往往会耗费大量时间和精力,且容易出错。为了简化这一步骤,建模语言应运而生。建模语言最初的概念是在1976年提出的,后经过不断的发展,形成了如今蓬勃的技术、产品和应用市场。建模语言往往并不对实际问题进行求解,而专注在模型建立本身,其目的是将复杂的优化问题简化为抽象的代数表达形式;让用户在开发上只需要专注于代数模型的建立,模型完成后再将数据分别引入。如此不但加快开发流程,更有效减少模型输入错误的可能性。接下来我们将发布一系列文章,对常见的AMPL, Pyomo, PuLP等建模语言进行简要的介绍。
优化求解器之AMPL建模工具简介
|
4月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
5月前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
4月前
|
存储 达摩院 调度
「达摩院MindOpt」优化FlowShop流水线作业排班问题
在企业在面临大量多样化的生产任务时,如何合理地安排流水线作业以提高生产效率及确保交货期成为了一个重要的问题。
「达摩院MindOpt」优化FlowShop流水线作业排班问题
|
10月前
|
达摩院 调度
使用达摩院MindOpt优化交通调度_最大化通行量—线性规划问题
在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。
|
6月前
|
API Python
MindOpt V1.0优化种植计划问题,新的建模方法
种植计划是指农业生产中针对不同农作物的种植时间、面积和种植方式等方面的规划安排。根据具体情况进行合理的规划和安排,以实现农作物的高产、优质和可持续发展。
MindOpt V1.0优化种植计划问题,新的建模方法
|
10月前
|
达摩院 供应链 JavaScript
网络流:优化仓储物流调度问题-达摩院MindOpt
仓储物流调度是指在物流供应链中,对仓储和运输(运输路线、成本)进行协调和安排的过程。主要包含物流计划、运输调度、运发管理、库存管理等重要环节。随着网络、电商行业的迅速发展,仓储物流调度对于企业来说也非常重要,优秀的调度方案可以帮助降低库存成本、物流配送的效率、成本等等等,从而给企业带来降本增效。
网络流:优化仓储物流调度问题-达摩院MindOpt