<div dir="ltr"><div><div><div><div>Hello Ricardo -<br><br></div>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.<br><br></div>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.<br><br>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).<br><br></div><div>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.<br></div><div><br></div>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.<br><br></div>- Seth<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 13, 2016 at 8:05 AM, RICARDO PUENTE RICO <span dir="ltr"><<a href="mailto:ricardo.puente@upm.es" target="_blank">ricardo.puente@upm.es</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Hello all,<br>
<br>
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.<br>
<br>
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.<br>
<br>
<br>
Regards,<span class="HOEnZb"><font color="#888888"><br>
<br>
<br>
-- <br>
RICARDO PUENTE RICO<br>
Universidad Politécnica de Madrid<br>
<br>
_______________________________________________<br>
Ipopt mailing list<br>
<a href="mailto:Ipopt@list.coin-or.org" target="_blank">Ipopt@list.coin-or.org</a><br>
<a href="http://list.coin-or.org/mailman/listinfo/ipopt" rel="noreferrer" target="_blank">http://list.coin-or.org/mailman/listinfo/ipopt</a><br>
</font></span></blockquote></div><br></div>