# [Ipopt] Altering parameter vector in IpOpt

Seth Watts watts2 at illinois.edu
Fri Jun 24 09:19:04 EDT 2016

```Hello Ricardo -

I use Ipopt mostly for topology optimization problems in solid mechanics,
but I have done some shape optimization work as well (admittedly not
involving aerodynamics). I understand that you have nonlinear constraints
that specify what combinations of your parameters (the shape modes) are
feasible and which are not, e.g. the shape you are designing might have a
minimum surface area.

If there are parameter states which satisfy your geometric constraints, but
which are not states you want, I think that your best bets are to either
(1) remove the offending mode shapes from the parameter space altogether,
so that Ipopt cannot choose them, or (2) introduce another constraint
function that, when satisfied, precludes the states you don't want, or (3)
modify your objective function so that these states are non-optimal and
thus not chosen.

As a notional example, if you are designing an airfoil that must have a
given surface area, but Ipopt chooses shapes that are too thick for your
taste, you could (1) remove such thick shapes from the design space, (2)
introduce an upper bound on the airfoil thickness, or (3) add the airfoil
thickness to the objective function so that thinner airfoils are better
(though this will likely lead to trade-offs with other terms in your
objective, say the drag coefficient).

Another possibility in nonlinear programming is that starting your
optimization from a different initial design will result in different
(perhaps better) solutions which may exhibit the mode shapes you want. Have
you tried different starting points? I typically begin my designs from a
randomly-chosen initial design, unless there is a compelling reason to
always begin them from the same point.

In my opinion, any of these approaches is far superior to attempting to
circumvent Ipopt's algorithms by modifying the parameter state x in eval_f
from "outside" Ipopt. If you can explicitly state what it is you don't want
x to look like, then you should be able to remove it from the design space
and/or write a constraint to eliminate it. That way you are working with
Ipopt rather than against it.

- Seth

On Fri, May 13, 2016 at 8:05 AM, RICARDO PUENTE RICO <ricardo.puente at upm.es>
wrote:

>
> Hello all,
>
> I am using IpOpt to solve an aerodynamic shape design problem using the
> adjoint method. One problem I am facing is relative to imposing geometrical
> constraints. The issue is that some geometrical aspect (let it be thickness
> or area) is a nonlinear function of the design parameters, but there are a
> lot of different, lets say, mode shapes that achieve the constraint but
> that I know which are the ones I want. What I want to do is actually impose
> the correct mode shapes for fulfilling the constraint from outside the
> optimizer, not letting the optimizer choose the first one it finds, but for
> this I would need to be able to communicate to IpOpt the desired change in
> the design parameter vector. This would be possible if in the eval_f
> function the second argument "const Number* x" was not declared as const.
>
> After all this, the question is whether there is a way to modify "x"
> within the step computation stage or if there is a way to achieve a similar
> effect. I have also thought of providing with an alternate gradient that
> should reflect those desired mode shapes, but without good results.
>
>
> Regards,
>
>
> --
> RICARDO PUENTE RICO