[Coin-lpsolver] Parametric Analysis using CLP + OSI

Paulo J. S. Silva pjssilva at ime.usp.br
Sun Mar 6 17:16:24 EST 2005


Hello,

I am trying to implement parametric analysis using CLP. I have a problem
in the form:

min c'x
s.t. Ax =  b
      x >= 0

I want to study what happens if I change the objective function in a
direction deltac, i.e. I want to study the solutions of

min (c + alpha*deltac)'x
s.t. Ax =  b
      x >= 0

for alpha > 0.

This is a "simple" problem, studied in textbooks for linear programming
like Bazaraa, Jarvis and Sheralli's or Bertsimas' books. 

A very high-level view of the code is this:

1) Find the first critical alpha and a variable to enter the basis
2) call CLP's primalPivotResult to move the desired variable into the
basis and find the leaving variable
3) Update the objective using the critical alpha using CLP's
setObjectiveAndRefresh
4) goto 1

For quite long time I had 3 coming before 2 above. This is rather
natural, as once we have the critical alpha you can already change to
the new objective. This is what Bazaraa book does. It is easy to see
that the reduced cost is the same for both basis (before and after
pivoting). However if I update the objective and then pivot the pivot
code computes I wrong reduced cost.

As far as I understand, If I call setObjectiveAndRefresh before pivoting
I'll have a valid tableau. Then why is primalPivotResult "messing up"
with the reduced costs?

Paulo

Obs: A side note. I am calling OSI+CLP from Python. It is rather
pleasing to avoid the compilations when writing the code. :-) 

-- 
Paulo José da Silva e Silva
Professor Assistente do Dep. de Ciência da Computação
(Assistant Professor of the Computer Science Dept.)
Universidade de São Paulo - Brazil

e-mail: rsilva at ime.usp.br           Web: http://www.ime.usp.br/~rsilva

Teoria é o que não entendemos o     (Theory is something we don't)
suficiente para chamar de prática.  (understand well enough to call
practice)




More information about the Clp mailing list