SolversΒΆ
This script runs several solvers on several test problems, displaying their performance.
[ ]:
import optsam as op
import numpy as np
import matplotlib.pylab as plt
import time
[ ]:
def run(nlp: op.NLP, method: op.OptMethod, fixed_x0: np.array):
sol = op.NLP_Solver()
sol.setProblem(nlp)
sol.setOptions(method=method, stopTolerance=1e-4, damping=1e-3)
sol.setInitialization(fixed_x0)
ret = sol.solve()
print(f'== method {method}: {ret}')
errs = sol.getTrace_errs()
return errs
[ ]:
def plot(errs, title):
fig, ax = plt.subplots()
# ax.contour(X,Y,Z, 200)
if np.sum(errs[-1,:])<1e-3:
ax.set_yscale('log')
ax.plot(errs, label=['f', 'sos', 'eq', 'ineq'])
ax.legend(loc="upper right")
ax.set_title(title)
plt.show()
[ ]:
def main():
problems = op.get_NLP_Problem_names()
print(problems)
methods = [op.OptMethod.Rprop, op.OptMethod.LBFGS, op.OptMethod.Newton]
probs = problems[:3]
seeds = 1
for p in probs:
nlp = op.make_NLP_Problem(p)
print('===\n', p, nlp.report(1), '===')
for s in range(seeds):
x0 = nlp.getInitializationSample()
for m in methods:
errs = run(nlp, m, x0)
plot(errs, f'{p} ({nlp.dimension}D) {m}')
[ ]:
if __name__ == "__main__":
main()
[ ]: