Отрегулируйте ограничение итерации SNOPT из PyDrake
Как я могу настроить ограничение итераций SNOPT из PyDrake?
Я пытался:
mp = MathematicalProgram()
mp.SetSolverOption(SolverType.kSnopt, "Iterations limit", 100000)
но это, похоже, ничего не сделало.
3 ответа
Вы, вероятно, хотите "Предел основных итераций". Пожалуйста, обратитесь к опциям решателя SNOPT из стр. 63 http://www.ccom.ucsd.edu/~peg/papers/sndoc7.pdf.
Кстати, если вы уверены, что используете Snopt, то вы делаете
mp.SetSolverOption(SolverType.kSnopt, "Print file", PRINT_FILE_NAME)
вы должны увидеть выходной файл с именем PRINT_FILE_NAME, и он показывает информацию в каждой итерации.
Вот полный пример, который работал у меня:
import pydrake.solvers.mathematicalprogram as mp
from pydrake.solvers.snopt import SnoptSolver
prog = mp.MathematicalProgram()
# Add your problem-specific stuff to prog...
solver_options = mp.SolverOptions()
solver_options.SetOption(SnoptSolver.id(), "Major iterations limit", 10)
result = mp.Solve(prog, solver_options=solver_options)
print(f"Solver: {result.get_solver_id().name()}\n")
Оператор печати в конце должен вывести
Solver: SNOPT/fortran
если вы действительно используете SNOPT.
Обратите внимание, что существует также «Ограничение малых итераций», которое вы можете установить таким же образом, как предложил Расс, посмотрите раздел 7.7 документации SNOPT для получения более подробной информации об этих настройках.