I am trying to find the values that minimize a least squares function. The issue is that a solution may be valid or not in a way that cannot be given as a simple expression of the values. Instead, we can check the validity by calling a function.
What I tried to do was to set the sum of squares to infinity if the solution is not valid, but scipy.optimize.minimize
does not like that. What's a better way to solve this?
A simplified version of my code:
probs = constant
def sse(a_candidate):
validity = some_function(a_candidate)
if not validity:
sum_sq_err = np.inf
else:
ym = function_of(a_candidate)
sum_sq_err = np.sum((ym-probs)**2)
return sum_sq_err
a_solution = scipy.optimize.minimize(sse,a0)
You can pass a NonlinearConstraint object to scipy.optimize.minimize
.
a_solution = scipy.optimize.minimize(sse, a0, constraints=scipy.optimize.NonlinearConstraint(...))
I cannot provide further details because your question does not provide any detail, and by the same argument I cannot guarantee that imposing a NonLinearConstraint could actually help you.