[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