2017-05-24 2 views
0

Je souhaite définir le nombre maximal d'évaluations de fonctions lors de l'utilisation de Pyomo (avec le solveur BARON). Mon code est:Pyomo - Définir le nombre maximum d'évaluations de fonctions à l'aide du solveur baron

from __future__ import division 
from pyomo.environ import * 
opt = SolverFactory('baron') 
m = ConcreteModel() 
m.x1 = Var(bounds=(-10.0, 10.0)) 
m.x2 = Var(bounds=(-10.0, 10.0)) 
m.o = Objective(expr=(2.0 * m.x2 + m.x1 - 7.0) ** 2.0 + (2.0 * m.x1 + m.x2 - 5.0) ** 2.0) 
results = opt.solve(m) # maxEvaluations=5 
print results 

où la expr correspond à la fonction « Booth. Je voudrais définir le nombre maximal d'évaluations de fonctions comme critères de terminaison. Comment puis-je atteindre cet objectif?

S'il est également possible d'obtenir une sortie plus verbeuse des résultats, en indiquant idéalement le meilleur résultat en cours avec le nombre d'évaluations de fonctions, alors ce serait un bonus.

Répondre

1

Vous pouvez envoyer des options aux solveurs en tant que dictionnaire en utilisant l'argument mot-clé options pour la méthode solve. Les options sont transmises au solveur verbatim. Vous aurez besoin de regarder la documentation du solveur individuel pour voir quelles options il supporte (pour BARON, voir here). Par exemple:

solver = SolverFactory('baron') 
solver.solve(model, options={'MaxIter': 5}) 

Si vous voulez regarder le processus de solveur en temps réel, vous pouvez dire Pyomo de ne pas supprimer le stdout solveur/stderr en utilisant l'option tee:

solver.solve(model, options={'MaxIter': 5}, tee=True) 

Comme presque tous les solveurs sont lancés en tant que sous-processus séparés, il n'y a (actuellement) aucun moyen pour Pyomo d'obtenir des informations intrusives (comme les valeurs des variables actuelles) pendant l'exécution du solveur.