[Cgl] cgl, cpx, mir, error

fmargot at andrew.cmu.edu fmargot at andrew.cmu.edu
Fri Apr 13 02:13:51 EDT 2007



On Thu, 12 Apr 2007, Matthew Saltzman wrote:

> On Thu, 12 Apr 2007 fmargot at andrew.cmu.edu wrote:
>
>> 
>> The comment was about the workaround. Instead of fiddling with OsiCpx, it
>> is simpler to create the empty solver interface and let the user
>> set whatever he wants. He will have to do the work to set all fields
>> appropriately.
>
> The problem with top-posting is, it's hard to tell what responses go with 
> what comments.  But somewhere along the thread, there was a comment about 
> sacrificing efficiency in the computation of Ax^*.  If you can't ask the 
> solver directly, you are stuck with that problem in any solution.

I was answering to Matt.

If the user wants to set the solution and the cut generator uses the
row activity, the latter has to be computed. The user must be willing
to invest the time for doing that and there is no loss of efficiency.
>From what I unserstood, Matt now recomputes the row activity even when
it is already available, and that is a waste of time. This
would not happen if the "empty" solver interface was available.

Francois

>
>> 
>> If I am not mistaken, you were the main supporter of the "empty" solver
>> interface instead of CglData.
>
> I'm not disavowing that position...
>
> My thought is that such an SI would be able to do everything any other SI can 
> except actually call a solver.  It would instead work with solutions that 
> were set directly through SI calls.
>
>> 
>> Francois
>> 
>> 
>> On Thu, 12 Apr 2007, Matthew Saltzman wrote:
>> 
>>> On Thu, 12 Apr 2007 fmargot at andrew.cmu.edu wrote:
>>> 
>>>> 
>>>> Matt:
>>>> 
>>>> The simplest fix is to have the gentle and kind people at Osi to 
>>>> implement
>>>> an "empty" solver interface class. That would get cheaply the solver 
>>>> independence we discussed a while back. This is only a temporary fix,
>>>> as I was told that Osi2 has a concept identical to CglData. It seems
>>>> thus a waste of time to convert Cgl to have CglData and then to convert 
>>>> it again when Osi2 comes out.
>>>> 
>>>> I know that you would like to have Cgl independent of Osi, but I am still 
>>>> not convinced that it is worth the work.
>>> 
>>> In this particular case, it's not clear to me how independence helps. 
>>> Wouldn't you then be stuck with computing the matrix-vector product, 
>>> rather than being able to query the SI for the current value?
>>> 
>>> 
>>>> 
>>>> Francois
>>>> 
>>>> 
>>>> 
>>>> On Wed, 11 Apr 2007, Matthew Galati wrote:
>>>> 
>>>>> Any suggestions on a workaround? I don't see any OSI functions for 
>>>>> setRowActivity.
>>>>> 
>>>>> And, it doesn't look like the idea of making CGL independent of OSI 
>>>>> worked out. Although I do see Francois added CglData - which looks like 
>>>>> what I wanted. But, most of the CGLs are still using OSI.
>>>>> 
>>>>> 
>>>>> 
>>>>> -----Original Message-----
>>>>> From: Ted Ralphs [mailto:tkralphs at Lehigh.EDU]
>>>>> Sent: Wednesday, April 11, 2007 5:07 PM
>>>>> To: cgl at list.coin-or.org
>>>>> Cc: Matthew Galati
>>>>> Subject: Re: [Cgl] cgl, cpx, mir, error
>>>>> 
>>>>> There is a call to getRowActivity() in CglMixedIntegerRounding2. In 
>>>>> OsiCpx, this call is implemented through a call to CPLEX, which 
>>>>> complains that there is no solution whenever you have not just finished 
>>>>> solving the loaded instance (which it looks like you have not. The other 
>>>>> cut generators seem only to use calls that require returning information 
>>>>> cached in the interface layer, so you don't get the error.
>>>>> 
>>>>> Cheers,
>>>>> 
>>>>> Ted
>>>>> 
>>>>> Matthew Galati wrote:
>>>>>> Hi.
>>>>>> 
>>>>>> I am creating an OsiCpx object, populating a model, setting the primal 
>>>>>> solution, and then calling the MIR cut generator.
>>>>>> 
>>>>>> OsiSolverInterface * siCgl = new OsiLpSolverInterface();
>>>>>>
>>>>>>   siCgl->loadProblem(*m_modelCore->M,
>>>>>>                        &m_modelCore->colLB[0],
>>>>>>                        &m_modelCore->colUB[0],
>>>>>>                        m_app->m_model.objCoeff,
>>>>>>                        &m_modelCore->rowLB[0],
>>>>>>                        &m_modelCore->rowUB[0]);
>>>>>>
>>>>>>    siCgl->setInteger(&m_modelRelax->integerVars[0],
>>>>>>                       static_cast<int>(m_modelRelax->integerVars.size()));
>>>>>>    siCgl->setColSolution(m_xhat);
>>>>>>
>>>>>>    CglMixedIntegerRounding2 cglMirs;
>>>>>>    cglMirs.generateCuts(*siCgl, cs);
>>>>>> 
>>>>>> And, I get the error from Cplex:
>>>>>>   CPLEX Error  1217: No solution exists.
>>>>>> 
>>>>>> Note: I don't get that error with Cliques/Knap/Flow CGLs.
>>>>>> 
>>>>>> Any ideas?
>>>>>> 
>>>>>> Thanks,
>>>>>> Matt
>>>>>> 
>>>>>> _______________________________________________
>>>>>> Cgl mailing list
>>>>>> Cgl at list.coin-or.org
>>>>>> http://list.coin-or.org/mailman/listinfo/cgl
>>>>> 
>>>>> 
>>>>> --
>>>>> Dr. Ted Ralphs
>>>>> Associate Professor
>>>>> Industrial and Systems Engineering
>>>>> Lehigh University
>>>>> (610)758-4784
>>>>> tkralphs at lehigh.edu
>>>>> www.lehigh.edu/~tkr2
>>>>> 
>>>>> 
>>>>> 
>>>> _______________________________________________
>>>> Cgl mailing list
>>>> Cgl at list.coin-or.org
>>>> http://list.coin-or.org/mailman/listinfo/cgl
>>>> 
>>> 
>>> 
>> 
>
>


More information about the Cgl mailing list