2017-06-11 5 views
2

Je construis de nombreux modèles en utilisant pyomo, et d'après ce que je comprends, pyomo reformule les modèles avant de les résoudre.Comment obtenir le fichier `nl` de` pyomo` depuis l'intérieur du solveur de script `pyomo`?

Je veux savoir exactement à quoi ressemble le modèle lorsqu'il est transmis aux fichiers de résolution ipopt et couenne. De ce que je vois here je ne sais pas comment obtenir le fichier nl à partir d'un script (mais je vois comment l'obtenir à partir de la ligne de commande).

Voici comment je résous les modèles pyomo:

ipopt_solver = SolverFactory('ipopt') 
ipopt_results_solver = ipopt_solver.solve(my_model, tee=True) 
print ipopt_results_solver 

couenne_solver = SolverFactory('couenne') 
couenne_results_solver = couenne_solver.solve(my_model, tee=True) 
print couenne_results_solver 

Comment puis-je obtenir le fichier nl juste avant la résolution? (et je suppose qu'il est tout aussi facile de cracher un autre format autre que nl).

Répondre

2

Si vous voulez juste le fichier NL, vous pouvez appeler la méthode write sur le modèle avec un nom de fichier qui se termine par .nl (par exemple, my_model.write('junk.nl').

Si vous voulez dire l'objet solveur de ne pas supprimer le temporaire résoudre les problèmes, vous devez ajouter keepfiles=True à l'appel de résolution.Ceci permettra d'imprimer l'emplacement des fichiers de résolution temporaire.Si vous devez y accéder à partir du script, je crois que le fichier NL peut être trouvé en tant que l'une des entrées de l'attribut de liste _problem_files sur l'objet du solveur Le nom du fichier journal est stocké sur l'attribut _log_file