- optimagic version used, if any:
- Python version, if any: 3.10
- Operating System: Linux
What would you like to enhance and why? Is it related to an issue/problem?
A user-provided nonlinear constraint a <= g(x) <= b is transformed to h(x) >= 0, where h(x) is
- h(x) = g(x), if a == 0 and b == inf
- h(x) = g(x) - a, if a != 0 and b == inf
- h(x) = (g(x) - a, -g(x) + b) >= 0, if a != 0 and b != inf.
Issue:
For example
om.NonlinearConstraint(
selector=lambda params: params[2:4],
func=lambda x: np.prod(x),
upper_bound=-12,
),
when only upper_bound is mentioned, it is transformed with _transformation_type = "stack"
the internal representation is
{"type":"ineq", ...
"n_constr" : 2} and lower_bound is implicity set to zero.
Describe the solution you'd like
Improve this by handling the -inf case,
Then a <= g(x) <= b is transformed to h(x) >= 0 where h(x) is
- h(x) = g(x), if a == -inf and b == inf
- h(x) = g(x) - a, if a != 0 and b == inf
- h(x) = -g(x) + b, if a == -inf and b != inf
- h(x) = (g(x) - a, -g(x) + b) >= 0, if a != -inf and b != inf.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've
considered and why you have discarded them.
What would you like to enhance and why? Is it related to an issue/problem?
A user-provided nonlinear constraint a <= g(x) <= b is transformed to h(x) >= 0, where h(x) is
- h(x) = g(x), if a == 0 and b == inf
- h(x) = g(x) - a, if a != 0 and b == inf
- h(x) = (g(x) - a, -g(x) + b) >= 0, if a != 0 and b != inf.
Issue:
For example
when only upper_bound is mentioned, it is transformed with _transformation_type = "stack"
the internal representation is
{"type":"ineq", ...
"n_constr" : 2} and lower_bound is implicity set to zero.
Describe the solution you'd like
Improve this by handling the -inf case,
Then a <= g(x) <= b is transformed to h(x) >= 0 where h(x) is
- h(x) = g(x), if a == -inf and b == inf
- h(x) = g(x) - a, if a != 0 and b == inf
- h(x) = -g(x) + b, if a == -inf and b != inf
- h(x) = (g(x) - a, -g(x) + b) >= 0, if a != -inf and b != inf.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've
considered and why you have discarded them.