私はPython(私の最初のPythonコード)を使って線形計画最適化モデルを書くことを試みているAMPLユーザーです。私は複合セットよりもインデックス付きのパラメータを宣言する方法を見つけようとしています。例えば、AMPLに、私は言う: は セットC PARAM X {A、B、C} のparam Y {A、B、C} のparam Z {A、B、C} セットBを設定します上記のセットとパラメータは、AMPLを介してデータベースから簡単に読み取ることができます。AMPLとPython - テーブル(多次元辞書)のインポート
データベースから読み込んだテーブルには、A、B、C、x、y、zの6つのフィールドがあります。そのうち3つは主キー(A、B、C)で、残り(x、y、z)は主キーで索引付けされた値です。
PYTHON PART: PYODBCモジュールを使用してSQL Serverに接続しています。私は "dict"を試しましたが、1つのキーだけにインデックスを付けることができます。 最初の3つのフィールドを複合セットとして宣言するためにどのPythonフィーチャーを使用すべきか、そして複合セットを介してインデックス付けされた値としてx、y、zを使用するかどうかはわかりません。
import pyodbc
con = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server Native Client 10.0}', server = 'Server', database='db')
cur = con.cursor()
cur.execute("execute dbo.SP @Param =%d" %Param)
result = cur.fetchall()
Comp_Key, x, y, z= dict((A, B, C, [x,y,z]) for A, B, C, x, y, z in result)
もちろん、正しくありません。私はこれを行う方法について考えることができません。
私を助けてください: 事前に感謝!これに代えて
おかげデブ!とても有難い!!私が疑問に思っているのは、テーブルを読む前にこれらのセットとパラメータを宣言すればいいのですか?はいの場合、どうですか?それとも、私はこれをするべきですか? 'A、B、C、x、y、z = final_result'?私がここで得ているのは、それらを読み込んだ後、どのようにセットとパラメータを分けることができるのですか? –
Pythonで何も宣言することはできません(動的に型指定されています)。テーブルに '((A、B、C、x、y、z)、(D、E、F、u、v、w)... 'のような行がある場合、final_resultは値' { A、B、C):[x、y、z]、(D、E、F):[u、v、w] ...} ' –
まず例を挙げておきます。テーブルから私は、A =ソース、B =デスティネーション、C =プロダクト、d =コスト、e =ボリューム、f =量からデータを読み込んでいます。私は辞書としてデータを読み込んだ後、フィールド名を持つことができるようにして、セット(A、B、C)にインデックスを付け、パラメータ値(x、y、z)を検索して計算を行うことができます。 –