J'essaie de convertir mon modèle OPL en Python en utilisant l'API Gurobi Python. Je voulais savoir s'il y avait un équivalent de structure de tuple OPL en Python. Meilleur pour montrer un exemple:ILOG OPL vs. Python
tuple tup_Leg
{
key string Route;
key string Leg;
int Curr_Time;
int Max_Time;
int Min_Time;
float Cube;
}
{tup_Leg} set_Leg = DBRead(db,"Exec SPROC ?")(Param);'
Route et Leg sont des ensembles dans mon modèle d'optimisation; Curr_Time, Min_Time, Max_Time et Cube sont des paramètres indexés sur les ensembles Route et Leg.
Dans OPL, étant donné que je définis les routes et les branches comme des clés, elles peuvent être traitées comme des ensembles et les paramètres peuvent être indexés par-dessus. Par exemple, pour répondre à Curr_Time, je peux faire:
i.Curr_Time : i in set_Leg
J'ai essayé difficile de trouver un équivalent de ce en Python. Jusqu'à présent, je donne les résultats suivants en Python:
import pyodbc
Param = 123
con = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server Native Client 10.0}', server = 'Server', database='db')
cur = con.cursor()
cur.execute("execute SPROC @Param =%d" %Param)
result = cur.fetchall()
tup_Leg = dict(((Route, Leg), [Curr_Time, Min_Time, Max_Time, Cube]) for Route, Leg, Curr_Time, Min_Time, Max_Time, Cube in result)
Je ne sais pas comment je peux répondre Curr_Time ou Min_Time? Jusqu'à présent, j'ai:
for i,j in tup_Leg:
Curr_Time, Min_Time, Max_Time, Cube = tup_Leg[(i,j)]
Existe-t-il une meilleure façon de le faire autre qu'un dict? Je me demande s'il existe d'autres options qui me permettent d'aborder les champs de la table comme le permet la BPO.
Réponse parfaite! –