跳轉到內容

GLPK/使用 GMPL (MathProg)

來自華夏公益教科書,開放的書籍,開放的世界

此頁面提供有關 GMPL (MathProg) 語法和用法的示例和提示。


首先要注意的是,MathProg 不是一種 過程式語言。例如,與大多數程式語言不同,MathProg 沒有賦值語句。相反,MathProg 是一種 函式式語言。MathProg 是根據 AMPL 語言構建的,並提供該語言的一個子集。與 AMPL 一樣,其語法專門用於表達數學最佳化問題。

MathProg 物件

[編輯 | 編輯原始碼]

在 MathProg 中,集合是元素的無序集合(與程式語言中的陣列不同),因此元素位置是不確定的。

MathProg 語法

[編輯 | 編輯原始碼]

MathProg 字尾

[編輯 | 編輯原始碼]

從 2010 年 6 月 3 日釋出的 GLPK 4.44 開始,MathProg 支援約束和變數的字尾。字尾的使用在 官方文件 的附錄 A 中有介紹doc/gmpl.pdf。下表提供了摘要

字尾 目的
.lb 下限
.ub 上限
.status  解決方案中的狀態 
.val 原始值
.dual 對偶值

MathProgprintf語句可用於建立自定義輸出。在以下情況下,約束的對偶值c1將列印到終端

...
solve;
printf "dual value of constraint c1: %g\n", c1.dual;

終端輸出也可以使用 GLPSOL 命令列選項複製到文字檔案--log filename.log.

集合語句

[編輯 | 編輯原始碼]

data引數set語句(截至 2011 年 5 月)沒有記錄,但其思想非常簡單。假設您宣告一個普通集合S由 5 元組組成(i,j,k,l,m):

set S, dimen 5;

將在資料部分提供資料。但您實際上想要的是一個集合陣列T{j,m},其中T[j,m]是一個三元組集合(l,i,k)來自S。使用data屬性,另外宣告一個集合T如下

set T{j,m}, data S[2,5,4,1,3];

此語句與從資料部分提供對應資料的效果相同T本身,其中[2,5,4,1,3]是元件索引的排列:每個 5 元組中第 2 和第 5 個元件S給出一個對(j,m)用於索引T的元素,並且 5 元組的第 4、第 1 和第 3 個元件用於構建(l,i,k)三元組,然後包含在集合T[j,m]中。最後,只有普通集合受data屬性支援。

有序集合

[編輯 | 編輯原始碼]

MathProg 不支援有序集合。討論 這裡這裡 提供了一些關於為什麼不使用有序集合的背景資訊。這 2006 年的 帖子 描述了一種特定的解決方法。

華夏公益教科書