[Clp] Necessary preconditions for manuallycalling OsiSolverInterface::pivot(int, int, int)

Sebastian Theophil stheophil at think-cell.com
Thu Feb 26 06:36:58 EST 2009


John,


thanks for your reply. I'd hoped there was a simple answer like that. I wondered though what happens to the temporary variables initialized up to that point. I guess directionIn_, sequenceIn_ etc are overwritten anyway by the caller each time. But rowArray_[0] and rowArray_[1]? Usually they are cleared apparently at the end of pivot().

Regards,
Sebastian

From: clp-bounces at list.coin-or.org [mailto:clp-bounces at list.coin-or.org] On Behalf Of John J Forrest
Sent: Wednesday, February 25, 2009 10:30 PM
Cc: clp at list.coin-or.org
Subject: Re: [Clp] Necessary preconditions for manuallycalling OsiSolverInterface::pivot(int, int, int)


Sebastian, 

Not sure it will solve your problem, but it will do no harm to replace asserts by return -1 (to signal that basis would be singular). 

In trunk pivot now returns -1 on small pivot. 

John Forrest 

[Clp] Necessary preconditions for manually calling        OsiSolverInterface::pivot(int, int, int)

Sebastian Theophil 
to: 
clp 
02/25/2009 12:42 PM

Sent by: 
clp-bounces at list.coin-or.org




________________________________________



Dear CLP users, 
  
I have a problem using the pivot method correctly. Basically, I try to find out how I can decide a priori if a pivot step is possible or not instead of stumbling over the assert that fabs(alpha_)>1e-12. 
  
Given the outgoing variable in sequenceOut_, ClpSimplex::pivot seems to use the pivotVariable_ array to to find the pivot element. Apparently I could check pivotVariable_ before calling pivot() to find the pivot element. Additionally, I'd have to check the value of the pivot element alpha_. It seems to me that the value of alpha_ is the result of the factorization done in 
  
factorization_->updateColumnFT(rowArray_[2],rowArray_[1]) 
  
Without doing this factorization I cannot decide if the pivot can be done or not. Am I correct? Should I do this calculation beforehand to implement a test? Since the pivot() function already exists, I thought there must be a way to do what I am trying to do that is conformant with the OSI interface, am I right? 
  
I'd appreciate any help in this matter. 
  
Thanks in advance, 
Sebastian 
  
Some more background information on what I am trying to achieve: 
  
I'm trying to solve LP problems that are highly degenerate. Thus, my optimal primal basis contains slack variables with value 0. As far as I understand, this basic slack variable can be made non-basic and another slack variable can be made basic in its place without changing the values of basic non-slack variables. 
  
I'd like to pivot out each basic slack variable with value 0. I would like to pivot in a non-basic slack variable instead. For now, any non-basic slack variable would do. In the end, I would prefer to pivot in a non-basic slack variable that leads to a different dual solution. The goal is to enumerate (possibly all) dual solutions that belong to the same primal solution. 
  
--
Sebastian Theophil (stheophil at think-cell.com)
Software Engineer 
think-cell Software GmbH 
http://www.think-cell.com 
Invalidenstr. 34 
phone 
+49-30-666473-10 
10115 Berlin, Germany 
toll-free (US) 
+1-800-891-8091 
Directors: Dr. Markus Hannebauer, Dr. Arno Schoedl 
Amtsgericht Charlottenburg, HRB 85229

_______________________________________________
Clp mailing list
Clp at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/clp

--
Sebastian Theophil · stheophil at think-cell.com
Software Engineer
 
think-cell Software GmbH · Invalidenstr. 34 · 10115 Berlin, Germany 
http://www.think-cell.com · phone +49-30-666473-10 · toll-free (US) +1-800-891-8091
Directors: Dr. Markus Hannebauer, Dr. Arno Schoedl · Amtsgericht Charlottenburg, HRB 85229





More information about the Clp mailing list