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

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 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代码示例)
328 0
【求解器】调用Gurobi求解LP问题(Java代码示例)
优化求解器之Pyomo建模工具简介
在使用优化求解器解决实际问题的过程中,通过程序接口输入优化模型往往会耗费大量时间和精力,且容易出错。为了简化这一步骤,建模语言应运而生。建模语言最初的概念是在1976年提出的,后经过不断的发展,形成了如今蓬勃的技术、产品和应用市场。建模语言往往并不对实际问题进行求解,而专注在模型建立本身,其目的是将复杂的优化问题简化为抽象的代数表达形式;让用户在开发上只需要专注于代数模型的建立,模型完成后再将数据分别引入。如此不但加快开发流程,更有效减少模型输入错误的可能性。接下来我们将发布一系列文章,对常见的AMPL, Pyomo, PuLP等建模语言进行简要的介绍。
优化求解器之Pyomo建模工具简介
|
编译器 Linux Windows
优化求解器之AMPL建模工具简介
在使用优化求解器解决实际问题的过程中,通过程序接口输入优化模型往往会耗费大量时间和精力,且容易出错。为了简化这一步骤,建模语言应运而生。建模语言最初的概念是在1976年提出的,后经过不断的发展,形成了如今蓬勃的技术、产品和应用市场。建模语言往往并不对实际问题进行求解,而专注在模型建立本身,其目的是将复杂的优化问题简化为抽象的代数表达形式;让用户在开发上只需要专注于代数模型的建立,模型完成后再将数据分别引入。如此不但加快开发流程,更有效减少模型输入错误的可能性。接下来我们将发布一系列文章,对常见的AMPL, Pyomo, PuLP等建模语言进行简要的介绍。
优化求解器之AMPL建模工具简介
|
7月前
|
达摩院 Linux 决策智能
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
### MindOpt 优化求解器月刊(2024年3月) - 发布亮点:MAPL建模语言升级至V2.4,支持云上无安装使用和向量化建模语法。 - 新增功能:Linux用户可本地安装`maplpy`,并支持Python与MAPL混编。 - 实例分享:介绍背包问题的组合优化,展示如何在限定容量下最大化收益。 - 用户投稿:探讨机票超售时的最优调派策略,以最小化赔付成本。 - 加入互动:官方钉钉群32451444,更多资源及。 [查看详细内容](https://opt.aliyun.com/)
132 0
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
|
7月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
245 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
7月前
|
机器学习/深度学习 达摩院
阿里达摩院MindOpt优化求解器-月刊(2024年4月)
【摘要】2024.04.30,阿里云发布了MindOpt优化求解器的新商品和功能。MindOpt现在已上架,提供超低价零售求解器,支持按需购买,可在阿里云平台上直接购买联网或不联网License。新版本V1.2发布,提升MILP性能,并增加PostScaling参数。此外,MindOpt Studio推出租户定制版,正处于邀测阶段。同时分享了使用MindOpt解决二分类SVM问题的案例。更多内容,可访问相关链接。
150 0
|
4月前
|
达摩院 供应链 安全
光储荷经济性调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍使用MindOpt工具优化光储荷经济性调度的数学规划问题。光储荷经济性调度技术旨在最大化能源利用率和经济效益,应用场景包括分布式光伏微网、家庭能源管理系统、商业及工业用电、电力市场参与者等。文章详细阐述了如何通过数学规划方法解决虚拟电厂中的不确定性与多目标优化难题,并借助MindOpt云建模平台、MindOpt APL建模语言及MindOpt优化求解器实现问题建模与求解。最终案例展示了如何通过合理充放电策略减少37%的电费支出,实现经济与环保双重效益。读者可通过提供的链接获取完整源代码。
|
4月前
|
达摩院 BI 索引
切割问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文主要讲述了使用MindOpt工具对切割问题进行优化的过程与实践。切割问题是指从一维原材料(如木材、钢材等)中切割出特定长度的零件以满足不同需求,同时尽可能减少浪费的成本。文章通过实例详细介绍了如何使用MindOpt云上建模求解平台及其配套的MindOpt APL建模语言来解决此类问题,包括数学建模、代码实现、求解过程及结果分析等内容。此外,还讨论了一维切割问题的应用场景,并对其进行了扩展,探讨了更复杂的二维和三维切割问题。通过本文的学习,读者能够掌握利用MindOpt工具解决实际切割问题的方法和技术。
|
4月前
|
达摩院 算法 安全
智慧楼宇多目标调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文探讨了使用MindOpt工具优化智慧楼宇的多目标调度问题,特别是在虚拟电厂场景下的应用。智慧楼宇通过智能化技术综合考虑能耗、舒适度等多目标,实现楼宇设备的有效管理和调度。虚拟电厂作为多能源聚合体,能够参与电力市场,提供调峰、调频等辅助服务。文章介绍了如何使用MindOpt云上建模求解平台及MindOpt APL建模语言对楼宇多目标调度问题进行数学建模和求解,旨在通过优化储能设备的充放电操作来最小化用电成本、碳排放成本和功率变化成本,从而实现经济、环保和电网稳定的综合目标。最终结果显示,在使用储能设备的情况下,相比不使用储能设备的情形,成本节约达到了约48%。