stevengj / nlopt

library for nonlinear optimization, wrapping many algorithms for global and local, constrained or unconstrained, optimization

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

COBYLA freezes (though maxeval and maxtime are given)

tueda opened this issue · comments

I guess setting maxeval or maxtime must guarantee that optimization algorithms finish anyway (or possibly raise an exception). With the following settings, opt.optimize() never returns (though I can make a workaround, for example, by changing the algorithm or putting other stopping criteria).

import nlopt
import numpy as np

def f(x, _grad):
    return (2 - np.cos(x[0]) + x[1] ** 2) ** 2

opt = nlopt.opt(nlopt.LN_COBYLA, 2)
opt.set_min_objective(f)
opt.set_maxeval(668)  # doesn't seems to work
opt.set_maxtime(1.0)  # doesn't seems to work
opt.optimize([0, 0])  # never returns

If I use opt.set_maxeval(667) in the above code, then somehow it returns with the correct answer [0, 0].

Just in case, I am testing with the following versions (on Google Colab):

Python: 3.6.9
nlopt: 2.6.1

(I'm not sure why pip doesn't pick up 2.6.2).

i also have stalling problem with COBYLA. in my case it seems to get stuck in the trstlp-function (https://github.com/stevengj/nlopt/blob/master/src/algs/cobyla/cobyla.c#L1247-L1250). this function does not take the stop-criteria into account. have problem both on 2.4.2 and master.

reproducer of it stalling is here:

https://github.com/jehelset/nlopt/blob/cobyla_trstlp_stalling/test/cobyla_trstlp_stalling.cpp

@jehelset @stevengj This problem seems to be happening quite often in problems I am trying to solve using cobyla. Is there a simple workaround to the infinite looping that happens in the trustlp routine? I am not too familiar with the algorithm so don't want to break it with my changes, some advice on what can be done safely would be much appreciated.