<div dir="auto">HI, <div dir="auto"><br></div><div dir="auto">Handling hierarchical objectives using very large/very small coefficients is not recomended even if you use the best mip optimizers </div><div dir="auto"><br></div><div dir="auto">this gurobi webminar explain those issues:</div><div dir="auto"><a href="http://www.gurobi.com/resources/seminars-and-videos/numerical-issues-webinar">http://www.gurobi.com/resources/seminars-and-videos/numerical-issues-webinar</a><br></div><div dir="auto"><br></div><div dir="auto">one approach that will work well, but maybe slower is</div><div dir="auto"><br></div><div dir="auto">1. add only the first objective using normal coefficients in the objective function,  optimize and store the value  f   for this component in the objective function</div><div dir="auto">2.  fix this component of the objective function in the model,  add the secondary objective and optimize it</div><div dir="auto"><br></div><div dir="auto">Cheers</div></div><br><div class="gmail_quote"><div dir="ltr">Em Dom, 3 de jun de 2018 11:06,  <<a href="mailto:rhavar@protonmail.com">rhavar@protonmail.com</a>> escreveu:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>I'm more of a code-monkey than someone who understands how all this stuff works -- so if someone could sanity-check my idea and give feedback it would be greatly appreciated.<br></div><div><br></div><div><br></div><div>I'm running cbc against problems that have realllly big constants, and it tends to lead to a bunch of numerical instability problems (e.g. missing solutions and the like ). And one thing that I would like to do is start adding "tie-breaking"  but the naive way just causes the instability issues to blow up.<br></div><div><br></div><div><div>By "tie-breaking" I mean telling cbc that "Optimizing against obj1, but if multiple solutions have the same value ... then optimize against obj2".  The naive way to do this is compute the max-possible value that  obj2 can be, and then tell cbc to optimize for:<br></div><div><br></div><div>obj1 * (MAX_POSSIBLE_OBJ2+1) + obj2<br></div><div><br></div><div><div>Which of course would work if it wasn't for the numeric instability issues.  However, I have a "smarter" idea, which is to run cbc twice.   The first time I optimize for obj1  and figure out what the value is. (Let's say = <span class="m_-7150362132502105898s1">1099511627768 ), then this time run cbc a second time but this time with an additional constraint:<br></span></div><div><br></div><div>obj1 = 1099511627768</div><div><br></div><div><span class="m_-7150362132502105898s1">And now optimize for obj2 instead of obj1</span><br></div><div><br></div><div><span class="m_-7150362132502105898s1">--</span><br></div><div><br></div><div>So my question for the list is, "is this a good idea"? And secondly, could something like this be supported natively by cbc, which would save me a lottt of plumbing work.<br></div><div><br></div><div><br></div><div><br></div></div></div><div class="m_-7150362132502105898protonmail_signature_block"><div class="m_-7150362132502105898protonmail_signature_block-user"><div>-Ryan<br></div></div><div class="m_-7150362132502105898protonmail_signature_block-proton m_-7150362132502105898protonmail_signature_block-empty"><br></div></div><div><br></div>_______________________________________________<br>
Cbc mailing list<br>
<a href="mailto:Cbc@list.coin-or.org" target="_blank" rel="noreferrer">Cbc@list.coin-or.org</a><br>
<a href="https://list.coin-or.org/mailman/listinfo/cbc" rel="noreferrer noreferrer" target="_blank">https://list.coin-or.org/mailman/listinfo/cbc</a><br>
</blockquote></div>