<div dir="ltr">Hi John,<div><br></div><div>Just to follow up on this, for</div><div><div>Maximize  5x[1] + 3x[2] + 2x[3] + 7x[4] + 4x[5]</div><div>     s.t.     SOS1(x[1],x[2],x[3],x[4],x[5])</div><div>               All x binary</div>
</div><div>Cbc is returning an optimal objective 21. If SOS1 imposes that at most one is nonzero, then I would&#39;ve expected all x[i] = 0, except for x[4] =1 as the optimal solution. Am I doing something wrong?</div><div>
<br></div><div>You can see the test code here: <a href="https://projects.coin-or.org/Cbc/browser/trunk/Cbc/test/CInterfaceTest.c?rev=2039#L195">https://projects.coin-or.org/Cbc/browser/trunk/Cbc/test/CInterfaceTest.c?rev=2039#L195</a></div>
<div>and the SOS C wrapper here: <a href="https://projects.coin-or.org/Cbc/browser/trunk/Cbc/src/Cbc_C_Interface.cpp?rev=2039#L773">https://projects.coin-or.org/Cbc/browser/trunk/Cbc/src/Cbc_C_Interface.cpp?rev=2039#L773</a></div>
<div><br></div><div>Thanks,</div><div>Miles</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 9, 2014 at 12:56 PM, Miles Lubin <span dir="ltr">&lt;<a href="mailto:miles.lubin@gmail.com" target="_blank">miles.lubin@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi John,<br>
<br>
Thanks for the clarification. When I change the problem sense to<br>
maximize, however, the solution returned is all ones, so the SOS<br>
constraint doesn&#39;t seem to be enforced in the way that you described.<br>
It&#39;s possible that it&#39;s not being added correctly in the C interface,<br>
though.<br>
<br>
Best,<br>
Miles<br>
<div class="HOEnZb"><div class="h5"><br>
On Fri, May 9, 2014 at 2:54 AM, John Forrest<br>
&lt;<a href="mailto:john.forrest@fastercoin.com">john.forrest@fastercoin.com</a>&gt; wrote:<br>
&gt; Miles,<br>
&gt;<br>
&gt; Definition of SOS type 1 that is used is that at most one in set nonzero.<br>
&gt; If more than one then you create two branches around a point in set and one<br>
&gt; branch sets all one side to zero and the other branch sets the other side to<br>
&gt; zero.<br>
&gt;<br>
&gt; So in this case you do need the equality constraint.<br>
&gt;<br>
&gt; John Forrest<br>
&gt;<br>
&gt; On 08/05/14 18:50, Miles Lubin wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi all,<br>
&gt;&gt;<br>
&gt;&gt; I just tried to clean up and test SOS constraints in the new C<br>
&gt;&gt; interface. My test problem is:<br>
&gt;&gt;<br>
&gt;&gt; Minimize  5x[1] + 3x[2] + 2x[3] + 7x[4] + 4x[5]<br>
&gt;&gt;       s.t.       x[1] +  x[2] +  x[3] +  x[4] +  x[5] == 1<br>
&gt;&gt;                 All x binary<br>
&gt;&gt;<br>
&gt;&gt; I have not added the equality constraint explicitly to the model, but<br>
&gt;&gt; instead added an SOS 1 constraint. When I solve, the solution is zero,<br>
&gt;&gt; so the SOS 1 constraint doesn&#39;t seem to be enforced. Is adding the SOS<br>
&gt;&gt; object to the model sufficient to enforce the constraint, or is it<br>
&gt;&gt; purely for branching?<br>
&gt;&gt;<br>
&gt;&gt; Test code:<br>
&gt;&gt; <a href="https://projects.coin-or.org/Cbc/browser/trunk/Cbc/test/CInterfaceTest.c?rev=2033#L113" target="_blank">https://projects.coin-or.org/Cbc/browser/trunk/Cbc/test/CInterfaceTest.c?rev=2033#L113</a><br>
&gt;&gt; Implementation of Cbc_addSOS in the C interface:<br>
&gt;&gt;<br>
&gt;&gt; <a href="https://projects.coin-or.org/Cbc/browser/trunk/Cbc/src/Cbc_C_Interface.cpp#L827" target="_blank">https://projects.coin-or.org/Cbc/browser/trunk/Cbc/src/Cbc_C_Interface.cpp#L827</a><br>
&gt;&gt;<br>
&gt;&gt; Thanks,<br>
&gt;&gt; Miles<br>
</div></div></blockquote></div><br></div>