2017-05-03 9 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

遅くとも回答がありますが、これはおそらく同様の検索が必要な人に役立つことがあります。

実際に働いていること(多くの場合ハッキングなし)は、両方のアプローチを組み合わせたものです。ラベルを含むセットが必要になります(paramsは数値のみを保持できるため)、ルックアップのためのパラメータも必要になります。

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ループでは、単にすべてのラベルをループします。 2番目のfor-loopはルックアップを実行している条件です。 printステートメントは、ラベルで指定されたパラメータが指定された値と等しい場合にのみ実行されます。

関連する問題