***************************************************************************
  * All the software  contained in this library  is protected by copyright. *
  * Permission  to use, copy, modify, and  distribute this software for any *
  * purpose without fee is hereby granted, provided that this entire notice *
  * is included  in all copies  of any software which is or includes a copy *
  * or modification  of this software  and in all copies  of the supporting *
  * documentation for such software.                                        *
  ***************************************************************************
  * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED *
  * WARRANTY. IN NO EVENT, NEITHER  THE AUTHORS, NOR THE PUBLISHER, NOR ANY *
  * MEMBER  OF THE EDITORIAL BOARD OF  THE JOURNAL  "NUMERICAL ALGORITHMS", *
  * NOR ITS EDITOR-IN-CHIEF, BE  LIABLE FOR ANY ERROR  IN THE SOFTWARE, ANY *
  * MISUSE  OF IT  OR ANY DAMAGE ARISING OUT OF ITS USE. THE ENTIRE RISK OF *
  * USING THE SOFTWARE LIES WITH THE PARTY DOING SO.                        *
  ***************************************************************************
  * ANY USE  OF THE SOFTWARE  CONSTITUTES  ACCEPTANCE  OF THE TERMS  OF THE *
  * ABOVE STATEMENT.                                                        *
  ***************************************************************************

   AUTHORS:

       Yaguang Yang
       Office of Research
       US NRC
       yaguang.yang@verizon.net


   REFERENCE:

    -  CurveLP-A MATLAB Implementation of An Infeasible Interior-Point 
       Algorithm for Linear Programming
       NUMERICAL ALGORITHMS, 74 (2017), 967-996

   SOFTWARE REVISION DATE:

       V1.0, June 2016

   SOFTWARE LANGUAGE:

       MATLAB

=====================================================================
PACKAGE
=====================================================================

The directory contains the following files

README              :  this file
curvelp.m           :  MATLAB program using arc-search to solve linear 
                    :  programming problems  
mehrotra.m          :  MATLAB program using Mehrotra's algorithm to solve 
                    :  linear programming problems
extract.m           :  MATLAB program used to extract (A,b,c) from Netlib
                    :  test problems
infeasibleexample.m :  MATLAB code which generates Figure 2 of the paper
infeasible_method.m :  MATLAB program which calls either curvelp.m or 
                    :  mehrotra.m and returns iter, obj, and infe
lp_*.mat            :  Netlib test problems which contain detailed 
                    :  information about the problems, including (A,b,c)


=====================================================================
HOW TO INSTALL
=====================================================================

Download and unpack the zip archive. A folder containing the package 
files will be created.

================
RUN THE PROGRAMS
================

1. Open MATLAB and change to the package folder
2. Load a standard LP problem listed in the paper, for example,
	>> load lp_adlittle
3. Extract matrix A, and vectors b and c by calling the MATLAB function 
   extract.m
	>> extract
4. Run curveLP.m as follows, assuming degeneracy is not a problem
	>> [x,obj,kk,infe,m1,n1]=curvelp(A,b,c);
   or run
        >> infeasible_method('curvelp',A,b,c)
   to run the program and see the results reproduced in Table 2 of the paper
5. Run mehrotra.m as follows, assuming degeneracy is not a problem
	>> [x,obj,kk,infe]=mehrotra(A,b,c);
   or run
        >> infeasible_method('merhotra',A,b,c)

If degeneracy is a problem, Steps 4 and 5 are replaced by the following 
4'. Run curveLP.m as follows 
	>> [x,obj,kk,infe,m1,n1]=curvelp(A,b,c,1);
5'. Run mehrotra.m as follows 
	>> [x,obj,kk,infe]=mehrotra(A,b,c,1);

====================
A degeneracy example
====================
>> load lp_degen3.mat
>> extract
>> [x,obj,kk,infe,m1,n1]=curvelp(A,b,c);
>> [x,obj,kk,infe,m1,n1]=curvelp(A,b,c,1);
The call curvelp(A,b,c) finds the solution in 66 iterations
with the infeasibility measure infe = 3.7475e-04. When
curvelp(A,b,c,1) is called, it finds the solution in 22 
iterations with the infeasibility measure infe = 6.7502e-08.
  
