<div dir="ltr"><div>Dear Abbas,</div><div><br></div><div>Not exactly, SOS1 on variables SOS1(x1, x2, x3) means that at most one of them can take a non-zero value.</div><div>You can see the corresponding doc page: <a href="https://www.scipopt.org/doc/html/cons__sos1_8c.php">https://www.scipopt.org/doc/html/cons__sos1_8c.php</a></div><div><br></div><div>For the separation method, from a user perspective you do not need to worry about it. If you are interested in the method used for separation, starting from the paper linked in my previous response could be a good start.</div><div><br></div><div>Best,<br></div><div>Mathieu<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 21, 2023 at 1:30 PM Abbas Omidi <<a href="mailto:abb.omidi@gmail.com">abb.omidi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Dear Mathieu,<div><br></div><div>Thank you so much for your reply and also the provided information. I actually saw the link corresponds to the indicator constraints, but I am not sure to fully understand how this separation works on the slack variable. Also, as the constraint that should be used in an indicator constraint is of the form (Ax <= b), the slack variable might be a violation on the constraint. Now, I have some questions and I was wondering if you can give some points to that:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="color:rgb(44,62,80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:15.6px">This constraint is equivalent to a linear constraint </span><span id="m_29872409211157400gmail-MathJax-Element-12-Frame" style="box-sizing:border-box;display:inline;line-height:normal;font-size:15.6px;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;padding:0px;margin:0px;color:rgb(44,62,80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif"><span style="box-sizing:border-box;border:0px;padding:0px;margin:0px;max-width:none;max-height:none;min-width:0px;min-height:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-61" style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:5.363em"><span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:4.589em;height:0px;font-size:18.096px"><span style="box-sizing:border-box;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-62" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-63" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Math-italic">a</span><span id="m_29872409211157400gmail-MathJax-Span-64" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Math-italic">x</span><span id="m_29872409211157400gmail-MathJax-Span-65" style="box-sizing:border-box;display:inline;border:0px;padding:0px 0px 0px 0.224em;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Main">−</span><span id="m_29872409211157400gmail-MathJax-Span-66" style="box-sizing:border-box;display:inline;border:0px;padding:0px 0px 0px 0.224em;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Math-italic">s</span><span id="m_29872409211157400gmail-MathJax-Span-67" style="box-sizing:border-box;display:inline;border:0px;padding:0px 0px 0px 0.279em;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Main">≤</span><span id="m_29872409211157400gmail-MathJax-Span-68" style="box-sizing:border-box;display:inline;border:0px;padding:0px 0px 0px 0.279em;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Math-italic">b</span></span><span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0px;height:2.324em"></span></span></span><span style="box-sizing:border-box;display:inline-block;border-width:0px;border-top-style:initial;border-right-style:initial;border-bottom-style:initial;border-left-style:solid;border-color:initial;padding:0px;margin:0px;vertical-align:-0.189em;line-height:normal;overflow:hidden;width:0px;height:1.093em"></span></span></span></span><span style="color:rgb(44,62,80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:15.6px"> and an SOS1 constraint on </span><span id="m_29872409211157400gmail-MathJax-Element-13-Frame" style="box-sizing:border-box;display:inline;line-height:normal;font-size:15.6px;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;padding:0px;margin:0px;color:rgb(44,62,80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif"><span style="box-sizing:border-box;border:0px;padding:0px;margin:0px;max-width:none;max-height:none;min-width:0px;min-height:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-69" style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0.611em"><span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0.5em;height:0px;font-size:18.096px"><span style="box-sizing:border-box;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-70" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-71" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Math-italic">y<span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;overflow:hidden;height:1px;width:0.003em"></span></span></span><span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0px;height:2.324em"></span></span></span><span style="box-sizing:border-box;display:inline-block;border-width:0px;border-top-style:initial;border-right-style:initial;border-bottom-style:initial;border-left-style:solid;border-color:initial;padding:0px;margin:0px;vertical-align:-0.317em;line-height:normal;overflow:hidden;width:0px;height:0.901em"></span></span></span></span><span style="color:rgb(44,62,80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:15.6px"> and </span><span id="m_29872409211157400gmail-MathJax-Element-14-Frame" style="box-sizing:border-box;display:inline;line-height:normal;font-size:15.6px;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;padding:0px;margin:0px;color:rgb(44,62,80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif"><span style="box-sizing:border-box;border:0px;padding:0px;margin:0px;max-width:none;max-height:none;min-width:0px;min-height:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-72" style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0.555em"><span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0.445em;height:0px;font-size:18.096px"><span style="box-sizing:border-box;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-73" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-74" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Math-italic">s</span></span><span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0px;height:2.324em"></span></span></span><span style="box-sizing:border-box;display:inline-block;border-width:0px;border-top-style:initial;border-right-style:initial;border-bottom-style:initial;border-left-style:solid;border-color:initial;padding:0px;margin:0px;vertical-align:-0.061em;line-height:normal;overflow:hidden;width:0px;height:0.644em"></span></span></span></span><span style="color:rgb(44,62,80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:15.6px"> (at most one should be nonzero)</span></blockquote><div><br></div><div>1) What is it meaning of SOS1 on "y" and "s"? I mean, AFAIK, the SOS1 is the form (\sum_{i} x_{i} = 1), how we can interpret the relation between "y" and "s" as a SOS1?</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="color:rgb(141,116,0);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:15.6px;background-color:rgba(255,229,100,0.3)">In the implementation, we assume that bounds on the original variables </span><span id="m_29872409211157400gmail-MathJax-Element-19-Frame" style="box-sizing:border-box;display:inline;line-height:normal;font-size:15.6px;float:none;direction:ltr;max-width:none;max-height:none;min-width:0px;min-height:0px;border:0px;padding:0px;margin:0px;color:rgb(141,116,0);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;background-color:rgba(255,229,100,0.3)"><span style="box-sizing:border-box;border:0px;padding:0px;margin:0px;max-width:none;max-height:none;min-width:0px;min-height:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-92" style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0.666em"><span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0.555em;height:0px;font-size:18.096px"><span style="box-sizing:border-box;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-93" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal"><span id="m_29872409211157400gmail-MathJax-Span-94" style="box-sizing:border-box;display:inline;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;font-family:MathJax_Math-italic">x</span></span><span style="box-sizing:border-box;display:inline-block;border:0px;padding:0px;margin:0px;vertical-align:0px;line-height:normal;width:0px;height:2.324em"></span></span></span><span style="box-sizing:border-box;display:inline-block;border-width:0px;border-top-style:initial;border-right-style:initial;border-bottom-style:initial;border-left-style:solid;border-color:initial;padding:0px;margin:0px;vertical-align:-0.061em;line-height:normal;overflow:hidden;width:0px;height:0.644em"></span></span></span></span><span style="color:rgb(141,116,0);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:15.6px;background-color:rgba(255,229,100,0.3)"> cannot be influenced by the indicator constraint. If it should be possible to relax these constraints as well, then these constraints have to be added as indicator constraints.</span></blockquote><div><br></div><div>2) Does it mean we cannot use the bounded variables as an input into the indicator constraint? If so, How can we deal with such a case?</div><div>3) Unfortunately, I cannot understand of how the SCIP can deal with the slack variable in the separation via the alternative polyhedron. It seems just to be as the SOS1. Would you please, explain a bit more only about the slack variable?</div><div><br></div><div><br></div><div>All the best </div><div>regards</div><div>Abbas</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 21, 2023 at 10:25 AM Mathieu Besançon <<a href="mailto:mathieu.besancon@gmail.com" target="_blank">mathieu.besancon@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Dear Abbas,</div><div><br></div><div>The top-level description of the indicator constraint handler of SCIP should be a good start:<br></div><div><a href="https://www.scipopt.org/doc/html/cons__indicator_8c.php" target="_blank">https://www.scipopt.org/doc/html/cons__indicator_8c.php</a></div><div><br></div><div>There are three ways indicator constraints are handled, separation, preprocessing, and a heuristic. Separation is based on this paper in particular: <a href="https://doi.org/10.1137/050645828" target="_blank">https://doi.org/10.1137/050645828</a></div><div><br></div><div>Performance with a big M approach will typically differ. In my experience, if you have a good bound M, a big M approach won't perform too bad, but may be numerically more unstable.</div><div><br></div><div>SCIP only supports <br></div><div><div style="text-align:center"><span style="color:rgb(35,38,41)"><b><font face="arial, sans-serif">LHS - slack <= RHS</font></b></span></div></div></div><div class="gmail_quote"><div class="gmail_attr">At least for now.</div><div class="gmail_attr"><br></div><div class="gmail_attr">Hope this helps,<br></div>Mathieu<div class="gmail_attr"><br></div><div dir="ltr" class="gmail_attr">On Mon, Aug 21, 2023 at 8:34 AM Abbas Omidi <<a href="mailto:abb.omidi@gmail.com" target="_blank">abb.omidi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><font face="arial, sans-serif">Dear support team,<br></font><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="color:rgb(35,38,41)">In the SCIP the indicator constraint can be written as </span><code style="margin:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-variant-alternates:inherit;font-stretch:inherit;line-height:inherit;font-kerning:inherit;font-feature-settings:inherit;vertical-align:baseline;box-sizing:inherit;color:rgb(35,38,41)">indcons(expression, binary_var)</code><span style="color:rgb(35,38,41)">. Then it is interpreted as follows: (based on ".cip" format)</span><br></font></div><div><span style="color:rgb(35,38,41)"><font face="arial, sans-serif"><br></font></span></div><div style="text-align:center"><span style="color:rgb(35,38,41)"><b><font face="arial, sans-serif">LHS - slack (<=/=/>=) RHS</font></b></span></div><div style="text-align:center"><span style="color:rgb(35,38,41)"><b><font face="arial, sans-serif">If: (binary_var = 1) -> (slack = 0)</font></b></span></div><div><span style="color:rgb(35,38,41)"><font face="arial, sans-serif"><br></font></span></div><div><font face="arial, sans-serif"><span style="color:rgb(35,38,41)">As far as I know, CPLEX and maybe Gurobi have used binary variables and whose linking to linearize the logical constraints. I am actually not aware of their internal mechanism. Now, I would like to know how the SCIP can deal with indicator constraint internally, and also the rule of the slack variable in this form, and if </span><span style="color:rgb(35,38,41)">is it necessary to use that instead of using e.g. a <b><i>BigM</i></b> approach. </span></font></div><div><span style="color:rgb(35,38,41)"><font face="arial, sans-serif"><br></font></span></div><div><span style="color:rgb(35,38,41)"><font face="arial, sans-serif"><br></font></span></div><div><span style="color:rgb(35,38,41)"><font face="arial, sans-serif">Best regards</font></span></div><div><span style="color:rgb(35,38,41)"><font face="arial, sans-serif">Abbas</font></span><br></div></div>
_______________________________________________<br>
Scip mailing list<br>
<a href="mailto:Scip@zib.de" target="_blank">Scip@zib.de</a><br>
<a href="https://listserv.zib.de/mailman/listinfo/scip" rel="noreferrer" target="_blank">https://listserv.zib.de/mailman/listinfo/scip</a><br>
</blockquote></div><br clear="all"><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Mathieu Besançon</div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Mathieu Besançon</div></div>