[Cbc] Failure to satisfy an SOS2 constraint

John Forrest john.forrest at fastercoin.com
Sun Mar 10 14:03:31 EDT 2013


Alexis,

SOS seems to be a bit of a mess at present.  It looks as if writeLP 
can't write SOS.  writeMps can but only if they were added as part of an 
Osi object not directly into CbcModel!

Was your code compiled optimized?  It should work using CbcMain0 but
a) there was a bug so you couldn't pass in options properly.  I have 
fixed in stable.  CbcMain1 does work.
b) In debug mode SOS triggers an assert in preprocessing. Optimized 
there would not have been an assert but it probably failed - hence your 
result.

As I said - a mess.

I will look at preprocess assert.  Can you try using CbcMain1 or fixed 
CbcMain0 and pass in
-preprocess off -solve

and see if that works.

John Forrest


On 08/03/13 22:18, Alexis Guigue wrote:
> Hi,
>
> This is kind of a follow-up of my previous email <<Problem writing 
> SOS2 constraint in the Lp file>>.
> Here is the code again!
>
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
>
> // Create an OsiClpSolverInterface object
> OsiClpSolverInterface    m_osiClpSolver;
>
> // Populate the solver
> m_osiClpSolver.loadProblem(matrix, &m_vColLower[0], &m_vColUpper[0], 
> &m_vObjCoef[0], &m_vSign[0], &m_vRHS[0], 0);
>
> // Set continuous variables
> m_osiClpSolver.setContinuous(&m_vContVarIndex[0], 
> (int)m_vContVarIndex.size());
>
> // Set column and row names
> m_osiClpSolver.setIntParam(OsiNameDiscipline,2);
> for(int i=0;i<(int)m_vRowName.size();i++) 
> m_osiClpSolver.setRowName(i,m_vRowName[i]);
> for(int i=0;i<(int)m_vColName.size();i++) 
> m_osiClpSolver.setColName(i,m_vColName[i]);
>
> // Create the CbcModel object
> CbcModel cbcModel(m_osiClpSolver);
>
> // Add sos2 constraint to CbcModel
>  cbcModel.addObjects(...,...);
>
> // Optimize
> cbcModel.branchAndBound();
>
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
>
>
> This was my first version. I have a function after the optimization is 
> completed that checks
> that my SOS2 constraints are satisfied. It passes the test when I use 
> cbcModel.branchAndBound();
>
> Now, I replace cbcModel.branchAndBound() with (standalone version)
>
>         CbcMain0(cbcModel);
>         callCbc1("-solve -quit", cbcModel);
>
> One of my SOS2 constraint is not satisfied now. I have the impression 
> that the SOS2 constraints
> were not part of the optimization problem in the first place, this 
> would explain why I am getting
> at least not satisfied.
>
> Is my standalone code incorrect?
>
> Thanks in advance.
>
> Cheers
>
> Alexis
>



More information about the Cbc mailing list