2017-05-03 58 views
0

MathProg中有沒有一種方法讓字符串與可用於輸出標籤的整數相關聯?MathProg中的字符串查找表(即字符串/符號字典)?

例如,下面的代碼無法正常工作,但希望傳達我想要做的事:

# attempt via set results in error, "mylabels cannot be subscripted": 
set mylabels := "label1" "label2" "label3"; 
printf "first label: %s\n", mylabels[1]; 

# attempt via param results in error, "mylabels requires numeric data": 
param mylabels := 
    1 "label1" 
    2 "label2" 
    3 "label3"; 
printf "first label: %s\n", mylabels[1]; 

我還發現了一個discussion on the lack of ordered sets in MathProg,以及建議的黑客聽起來像它可以幫助我,但沒有工作:

# attempt via ordered-set hack results in error, "no value for mylabels_ref[1]": 
set mylabels := "label1" "label2" "label3"; 
param mylabels_ref{i in 1..card(mylabels)}, symbolic, in mylabels; 
printf "first label: %s\n", mylabels_ref[1]; 

這顯然不是一個巨大的問題,因爲我可以做查找MathProg(即手動或W /其他腳本語言)之外;但我主要只是好奇,如果語法支持我想要做的。

回答

1

最新回答,但這可能有助於某人想要類似的查詢。

什麼是實際工作(沒有黑客太多)是你的兩種方法的組合。你將需要一個包含你的標籤的集合(因爲參數只能包含數值),你還需要一個參數來查找。

set mylabels; 
param mylabels2{i in mylabels}; 

for {i in mylabels}{ 
    for{{0}: mylabels2[i] = 1} 
     printf "\n first label: %s\n\n", i; 
} 

data; 
set mylabels := label1 label2 label3; 
param mylabels2 := 
    label1 1 
    label2 2 
    label3 3; 
end; 

在第一個for循環中,我們只是遍歷所有標籤。第二個for-loop是一個正在執行查找的條件。只有當標籤索引的參數等於給定值時才執行print語句。