Hi Pietro,<div><br></div><div>I notice that there might be a bug in the way Couenne adds new branching objects in main/BonCouenneSetup.cpp. Here, an object associated with an exprVar is added: </div><div><br></div><div>continuousSolver_ -> addObjects (nobj, objects)</div>
<div><br></div><div>if 1) it is an integer variable, or 2) it has at least another variable which is dependent on it. I think the problem lies with the way the dependency determined in problem/fillDependence.cpp as it does not consider a linear variable as a dependent. For example:</div>
<div><br></div><div>w_3 = x_1 ^ 2</div><div>w_4 = w_3 + w_2</div><div><br></div><div>w_4 is clearly dependent on w_3, but the dependency graph does not include this relationship as w_4 is linear. This is seen in the code in problem/fillDependence.cpp:</div>
<div><br></div><div>for (std::vector <exprVar *>::iterator i = variables_.begin (); </div><div><div> i != variables_.end (); ++i) {</div><div><br></div><div> if (((*i) -> Type () == AUX) // consider aux's only</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>&& ((*i) -> Image () -> Linearity () > LINEAR)) { // and nonlinear</div><div> }</div><div><br></div><div>This affects how the number of infeasibilities are counted, as checkInfeasibilities() is only called on branching variables. This means that some solution calculated by CLP may be accepted as a solution to the primal problem, when they are actually infeasible. I am using an old modified version of Couenne, but I have checked the latest source code. I am not sure why I didn't notice this problem before.</div>
<div><br></div><div>Regards,</div><div><br></div><div>Pete</div></div>