天天看點

優化求解器之MPS檔案的格式簡介

這篇文章是系列文章的開篇,将對MPS格式的檔案進行簡要的介紹。顧名思義,MPS檔案是以 .mps 字尾結尾的一種檔案格式,是用于表達線性和整數規劃問題的一種标準格式,現在許多的優化求解器都支援這種格式。MPS檔案是一種舊格式檔案類型,格式是固定的列格式。下列通過一個具體的優化模型來講述MPS檔案的命名規範。

線性規劃模型:

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

其對應的MPS檔案内容為(綠色部分是小編加的解釋說明,原檔案中沒有):

NAME MindOptExample #NAME表示這個優化模型的名字,可不寫内容

ROWS #ROWS定義各行名字,包括目标函數與限制條件

N obj #N表示自由行,obj是對目标函數的命名,可任意取名

L c1 #L表示該行小于等于, c1是對該行的命名,可任意取名

L c2

E c3 #E表示該行等于

COLUMNS #COLUMS定義各列名字

x1 obj -1 c1 -1

x1 c2 1

x2 obj -2 c1 1

x2 c2 -3 c3 1

x3 obj -3 c1 1

x3 c2 1

MARK0000 'MARKER' 'INTORG'

x4 obj -1 c1 10

x4 c3 -3.5

MARK0001 'MARKER' 'INTEND'

RHS #RHS定義限制條件等号右邊的值

rhs c1 20 c2 30

BOUNDS #BOUNDS定義決策變量的上界或下界

UP bnd x1 40 #UP 表示上界

LO bnd x4 2 #LO 表示下界

UP bnd x4 3

ENDATA #ENDATA表示MPS檔案結束

結合上述優化模型來說明MPS檔案的命名規範:

  1. MPS檔案的内容固定從每行的第 2、5、15、25、40 和 50 列開始寫,并且區分大小寫。
  1. MPS檔案中每行(包括目标函數和限制)和每列(變量)都有一個名字。
  1. 第一行為NAME區域,表示這個優化模型的名字,後面可以不寫内容,寫在第15列。
  1. ROWS用來定義每個行的名字,包括目标函數與限制條件。在 ROWS 部分,限制矩陣的每一行必須有一個行類型和指定的行名稱。第2列或第3列為限制,其中
  • E 表示該行等于
  • L 表示該行小于等于, c1是對改行的命名,可以任意取名
  • G 表示該行大于等于
  • N 表示自由行, obj是對目标函數的命名,可以任意取名
  1. COLUMNS用來定義各列(變量)名字。在 COLUMNS 部分,變量名稱與目标系數和所有非零限制矩陣元素一起定義。從第5列開始寫,表示所在行的名字。如果變量系數為0,則不寫入。
  • 第一列要空
  • 第二清單示列的名字,也就是求解變量
  • 第三清單示所在行的名字
  • 第四清單示所在行與列對應的系數
  • 其中 MARK0000‘MARKER’‘INTORG’與 MARK0001‘MARKER’ ‘INTEND’分别表示整數變量的起止
  • 第五列、第六列分别與第三列、第四列的含義相同
  1. RHS定義限制條件等号右邊的值。從第5列開始寫,第5清單示所在行的名字
  • 第二清單示 rhs 名字,可以任取
  • 第四清單示所在行對應的 RHS 值
  1. BOUNDS用來定義決策變量的上界或下界,第2列寫限制條件,其中
  • UP表示小于等于
  • LO表示大于等于
  • FX表示該變量為固定值
  • FR表示該變量的範圍為 ( − ∞ , ∞ )
  • MI 表示下界為負無窮
  • PL 表示上界為正無窮

另外,MPS 變量預設的範圍為 [ 0 , ∞ )

  1. 以ENDATA表示MPS檔案結束。

FREE MPS

此外,MindOpt 支援 Free MPS 格式。Free MPS 格式與 fixed MPS 格式類似,相對來說限制更少。

例如,Free MPS 格式允許定義更長的名稱,或是支援指定超過12位的值。其中字段沒有 fixed MPS 中嚴格的固定的列位置的限制,它們可以寫在除第一列之外的任何地方,每個字段與下一個字段之間用一個或多個空格隔開,但是它們必須按照相同的固定格式出現。在rows和bounds的代碼部分,可以是小寫或大寫,并且可以從任意位置開始。重複的列名有時會被跳過,并在其中放置系統自定義的名稱。

但是,與MPS格式相比,Free MPS 格式有一個重要的限制:名稱中不能包含空格。需要注意的是,Free MPS 解析器不能讀取所有的 fixed MPS 格式,名稱中的空格或以空格開頭的名稱在讀取時可能會産生問題。

OBJSENSE

和許多其他求解器一樣,MindOpt 也在 free MPS 格式中增加了一個“規則” OBJSENSE,用來指明優化方向。這是一個可選的部分,在 OBJSENSE 下方的一行将通過MAXIMIZE, MAX, MINIMIZE, MIN 關鍵字來指明優化方向。若未指定,則預設使用極小化方向(類似 fixed MPS 格式)。

格式如下:

MAX

此外,這個 OBJSENSE 的部分應寫在 ROWS 之前。

更細節的MPS格式說明見:

http://web.mit.edu/lpsolve_v5520/doc/mps-format.htm

聯系我們:

郵箱:[email protected]

釘釘群:32451444

更多更新通知:

https://solver.damo.alibaba.com
優化求解器之MPS檔案的格式簡介

繼續閱讀