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)
Advertisement
Answer
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.