<div dir="ltr">Hi,<div><br></div><div>I have been trying to solve an optimization with Ipopt.</div><div><br></div><div>I'm using the MATLAB interface of Ipopt, and my optimization problem is a not so complicated quadratic problem satisfying a number of distance inequalities for some points.</div>
<div><br></div><div>I have noticed that in different cases of my problem, whether it is solved (status 0), detected infeasible (status 2) or exceeded maximum iterations (status -2), even if I run the code with the exact same initial point and exact same options, I get results that are different.</div>
<div>Now, I know that my problem does not have a unique solution, e.g. in case of instances that are solved completely I get different results while all satisfy the constraints. But still, I expect ipopt to give me similar results when I run it with similar conditions.</div>
<div><br></div><div>Is there any option in Ipopt that accounts to randomness. Or is it a behavior of MATLAB?</div><div><br></div><div>I have noticed that building Ipopt with various versions of BLAS and LAPACK does not affect this in my case (I tried third party versions provided, and also ATLAS implementations of libraries in Liunx), but forcing MALTAB to use different BLAS and LAPACK versions (through environment variables BLAS_VERSION and LAPACK_VERSION) has an effect (although in no case, I get exactly similar results) .</div>
<div><br></div><div>Has anybody else had such an experience with IpOpt? Should I change a setting in Ipopt ot MATLAB?</div><div><br></div><div>Thanks</div><div>ALireza</div><div><br></div><div><br></div><div>PS: If it helps, here is a summary of Ipopt options I have changed:</div>
<div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">ipopt.hessian_approximation = 'limited-memory';<br>
ipopt.mu_strategy = 'adaptive';<br>tols = [1e-6; Options.MaxR; Options.MaxR];<br>ipopt.tol = sum(tols);<br>ipopt.constr_viol_tol = tols(1);<br>ipopt.compl_inf_tol = tols(2);<br>
ipopt.dual_inf_tol = tols(3);<br>hessian_constant = 'yes';<br>ipopt.warm_start_init_point = 'yes';</blockquote></div></div>