TOMLAB OPTIMIZATION ENVIRONMENT: DualSolve

   

DualSolve

Purpose

For solving linear programming problems when a dual feasible solution is available.

Syntax

   Result = DualSolve(Prob);

Description

Given LP on the standard form, but with general lower and upper bounds:

        min c' * x , A x = b_U, x_L <= x <= x_U

Solve dual LP:

        max  b'*y, subject to  A'*y <= c, y urs

Upper bounds (not Inf) are added as extra linear constraints in A.
Lower bounds (not zero) are added as extra linear constraints in A.
Fixed variables are treated explicitely.

Note that the TOMLAB routine cpTransf.m can be used to rewrite an LP problem on another form to this standard form

Implementation of algorithm Dual simplex method, Handbooks in Operations Research and Management Science, ChapterII: Goldfarb and Todd: Linear Programming, pages 105-106

Generalized with QR factorization, and numerical safeguarding

Input Parameters

In the Prob structure use:

 x_L  Lower bound on x. 
           Assumed to be 0, if not Prob.x_L(i) == Prob.x_U(i) (fixed vars)
 x_U  Upper bound on x. 

 b_L  Lower bound on linear constraints. Not used.
 b_U  Upper bounds, Assume equality constraints Ax == b_U

 A,b_U,c   A in R^(m x n). b_U in R^m. x in R^n.

 x_0  Starting value x_0

 QP.B Active set B at start. 
           1  = Include variable x(i) is in basic set.
           0  = Variable x(i) is set on its lower bound 0
           -1 = Variable x(i) is set on its upper bound (NOT ALLOWED)

 QP.y Dual variables y (Lagrange multipliers for linear constraints)

 Starting value set {x_0,B,y} is given in the following three ways:

 {x_0,B,y} All defined

 {x_0,B}   Estimate y from A(:,iB)'y=c(iB), where basis iB=find(B==1)

 {B}       x_0 is estimated from A(:,iB) x = b_U. y from A(:,iB)'y=c(iB)

 Prob.Solver.Alg  Rule to select new variables:
           = 0 Minimum Reduced Cost (DEFAULT), sort variables increasing. 
           = 1 Bland's Anti-cycling Rule     
           = 2 Minimum Reduced Cost, Dantzig's rule 

 PriLevOpt Printing level:
           =0 No output; >0 Convergence results; 
           >1 Output every iteration  >2 Output each step in the simplex alg

 Fields used in Prob.optParam
 
 MaxIter   Maximal number of iterations. max(10*dim(x),100) is DEFAULT.
 eps_f     Tolerance used to test convergence on the reduced costs
 eps_Rank  Rank tolerance 
 xTol      Tolerance to judge if x-values are close
 bTol      Tolerance for linear constraints
 wait      Wait flag, pause each iteration if set true

Output Parameters

Result structure with the following fields defined:

 Field Internal 
 name  name
 x_k    x     Primal solution x
 y_k    y     Dual solution y. Lagrangian multipliers for the linear constraints
 QP.B   B     Optimal set. See QP.B as INPUT.
 QP.DualLimit Limit value for b'*y. If b'y >= QP.DualLimit, Stop.
 ExitFlag     Exit flag 
              == 0  => OK
              == 1  => Maximal number of iterations reached. No bfs found. 
              == 2  => Infeasible dual problem
              == 5  => Too many active variables in initial point given.
              == 6  => No dual feasible starting point found.
              == 7  => Illegal step length due to numerical difficulties.
                       Should not occur.
              == 8  => Convergence when f_k >= QP.DualLimit. No further
                       progress is wanted. Used by MIP codes.
              == 9  => x_L(i) > x_U(i) + xTol for some i. No solution exists
 ExitTest     Text string giving ExitFlag and Inform information
             
              Some reduced cost is negative.
 f_k          f_hat=b'y at optimum y (or last iterate y if no convergence)
 A            Matrix A in standard LP formulation. 
 b            Vector b in standard LP formulation. 
 c            Vector c in standard LP formulation. 

  cutplane   expSolve