Skip to content

Commit

Permalink
add more details about bounds pushing
Browse files Browse the repository at this point in the history
  • Loading branch information
peterdsharpe committed Aug 15, 2023
1 parent 1f1badf commit 66e044d
Showing 1 changed file with 6 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -484,9 +484,13 @@
{
"cell_type": "markdown",
"source": [
"This solves - nice! However, note that posing the problem in this way is not guaranteed to work. This is because the underlying optimizer, IPOPT, does something it calls \"bounds pushing\". This is detailed in the excellent original IPOPT paper by Andreas Waechter, but the basic idea is that IPOPT solver performance seems to improve if the feasible space is extended by a small amount ($\\epsilon \\approx 10^{-8}$). In cases like this, that has the potential to allow a function like $x^{1.5}$ bounded by $x>0$ to go very slightly negative and NaN. IPOPT has lots of tools to help get the iterate back into the well-posed design space, but just be aware of this possibility.\n",
"This solves - nice! However, note that posing the problem in this way is not guaranteed to work. This is because the underlying optimizer, IPOPT, does something it calls \"bounds pushing\". This is detailed in the excellent original IPOPT paper by Andreas Waechter, but the basic idea is that IPOPT solver performance seems to improve if the feasible space is extended by a small amount ($\\epsilon \\approx 10^{-8}$). \n",
"\n",
"Better practice would be to set the lower bound to something small but positive and nonzero, like $x>10^{-6}$. This ensures the underlying model will not NaN, even when the optimizer pushes the bounds a bit."
"Because of this, this means that in our problem, $x$ is allowed to go very slightly negative (and violate our $x>0$ constraint), *even at the final optimized point*. For this problem where the objective function is $x^{1.5}$, a negative $x$ would return a NaN (AeroSandbox optimization variables do not support imaginary numbers); this could cause optimization difficulties.\n",
"\n",
"Thankfully, IPOPT has lots of tricks to help get the iterate back into the well-posed design space, so the optimization here succeeds anyway. However, on more complicated, real-world optimization problems, this may not be the case - so, it's good to be aware of this possibility.\n",
"\n",
"How could we pose our problem differently to eliminate this potential failure mode? Well, better practice would be to set the lower bound to something small but positive and nonzero, like $x>10^{-6}$. This ensures the underlying model will not NaN, even when the optimizer pushes the bounds a bit."
],
"metadata": {
"collapsed": false,
Expand Down

0 comments on commit 66e044d

Please sign in to comment.