Nonlinear optimization with branching solution space

1 view (last 30 days)
Consider a nonlinear optimization problem with nonlinear constraints, in which the solution space branches, such that the relevant optimization parameters and their constraints depend upon the branch. In total the problem has many optimization parameters however not all parameters are possible together. The primary parameter is an integer 'x' = 0-10 (although it could be treated as continuous). The error function f(x) depends also upon other parameters as follows. If x < 10 the error function is f(x, c, d = 0) where 'c' is a vector of continuous parameters with constraints, elseif x = 10 the error function is f(x, c = 0, d) where 'd' is a different vector of continuous parameters with constraints.
It seems simplest to first solve for x assuming c = 0 and d = 0, then solve for 'c' and 'd' depending upon the branch, i.e., depending upon whether x < 10 or x = 10, but if 'c' or 'd' are nonzero, the data are affected and the solutions for x are incorrect.
Two questions please;
1) Is this problem even well-posed as stated?
2) Does optimization or global optimization have a tool that can solve this?

Accepted Answer

John D'Errico
John D'Errico on 15 May 2024
Edited: John D'Errico on 15 May 2024
Just solve 11 distinct problems, each of them continuous. Use a loop, setting x to each of the 11 possible values. Save each solution, then choosing the solution that makes you happy.
Is there a solver that can handle it with x as a variable? Maybe GA, as GA is pretty toleranct off all sorts of crap. But this is a pretty messy thing with x in there. Oncew you remove x as a variable however, solving the 11 distinct problems, then things become well-posed from what you have said. So make it easy, and remove x as a factor at all.

More Answers (0)

Categories

Find more on Problem-Based Optimization Setup in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!