GLPK/使用 GMPL (MathProg)
此頁面提供有關 GMPL (MathProg) 語法和用法的示例和提示。
首先要注意的是,MathProg 不是一種 過程式語言。例如,與大多數程式語言不同,MathProg 沒有賦值語句。相反,MathProg 是一種 函式式語言。MathProg 是根據 AMPL 語言構建的,並提供該語言的一個子集。與 AMPL 一樣,其語法專門用於表達數學最佳化問題。
在 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 年的 帖子 描述了一種特定的解決方法。