如何从 PyDrake 调整 SNOPT 迭代限制?
我努力了:
mp = MathematicalProgram()
mp.SetSolverOption(SolverType.kSnopt, "Iterations limit", 100000)
但这似乎没有做任何事情。
顺便说一句,如果您确定您使用的是 Snopt,那么您可以
mp.SetSolverOption(SolverType.kSnopt, "Print file", PRINT_FILE_NAME)
您应该会看到一个名为 PRINT_FILE_NAME 的输出文件,它会显示每次迭代中的信息。
您可能想要“主要迭代限制”。请参考http://www.ccom.ucsd.edu/~peg/papers/sndoc7.pdf的 p63 中的 SNOPT 求解器选项。
这是一个对我有用的完整示例:
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,则应输出最后的打印语句。
请注意,您还可以以相同的方式设置“次要迭代限制”,正如 Russ 建议的那样,请查看SNOPT 文档的第 7.7 节以获取有关这些设置的更多详细信息。