1

如何从 PyDrake 调整 SNOPT 迭代限制?

我努力了:

mp = MathematicalProgram()

mp.SetSolverOption(SolverType.kSnopt, "Iterations limit", 100000)

但这似乎没有做任何事情。

4

3 回答 3

0

顺便说一句,如果您确定您使用的是 Snopt,那么您可以

mp.SetSolverOption(SolverType.kSnopt, "Print file", PRINT_FILE_NAME)

您应该会看到一个名为 PRINT_FILE_NAME 的输出文件,它会显示每次迭代中的信息。

于 2018-09-06T04:35:55.863 回答
0

您可能想要“主要迭代限制”。请参考http://www.ccom.ucsd.edu/~peg/papers/sndoc7.pdf的 p63 中的 SNOPT 求解器选项。

于 2018-05-15T09:00:14.557 回答
0

这是一个对我有用的完整示例:

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 节以获取有关这些设置的更多详细信息。

于 2022-01-07T18:51:38.817 回答