function math_prog()
% this function just displays the information for mathematical programming
% solvers within MATLAB.  created 20 September 1996 by Paul Bradley

%clc
%disp('Information is available for the following mathematical programming')
%disp('solvers and solving GAMS/MCP complementarity problmes.  Information for')
%disp('each solver will be displayed separately.  PRESS ANY KEY for the')
%disp('next description.  Information available on:')
%disp(blanks(2)')
choice = menu('Choose from the following information:','lp............... Linear programming (using MINOS)','milp............. Solve mixed integer linear programs','qp_lcp........... Quadratic programming (via PATH)','lssol............ Convex quadratic programming and linear least-square code','nlp.............. Nonlinear Programming using MINOS','npsol............ Sequential quadratic programming code','smooth_lcp....... Solve an LCP by SMOOTH','path............. mixed complementarity problems by the PATH method','accessing GAMS/MCP complementarity problems from within MATLAB')
%disp('lp............... Linear programming (using MINOS)')
%disp('milp............. Solve mixed integer linear programs')
%disp('nlp.............. Nonlinear Programming using MINOS')
%disp('npsol............ Sequential quadratic programming code NPSOL by')
%disp('			Gill et. al.')
%disp('qp_lcp........... Quadratic programming (via PATH)')
%disp('lssol............ Convex quadratic programming and linear least-square')
%disp('			code by Gill et. al.')
%disp('smooth_lcp....... Solve an LCP by SMOOTH')
%disp('path............. mixed complementarity problems by the PATH method')
%disp('accessing GAMS/MCP complementarity problems from within MATLAB')
%disp(blanks(2)')
if (choice == 1)
clc
disp(blanks(2)')
disp(' lp     Linear programming (using MINOS).                   ')
disp('        x=lp(c,A,b) solves the linear programming problem:')
disp('         ')
disp('             min c''x    subject to:   Ax <= b ')
disp('              x')
disp('    ')
disp('        [x,lambda]=lp(c,A,b) returns the set of Lagrangian multipliers,')
disp('        lambda, at the solution. ')
disp(' ')
disp('        x=lp(c,A,b,vlb,vub) defines a set of lower and upper')
disp('        bounds on the design variables, x, so that the solution is always in')
disp('        the range vlb <= x <= vub.')
disp(' ')
disp('        x=lp(c,A,b,vlb,vub,x0) sets the initial starting point to x0.')
disp(' ')
disp('        x=lp(c,A,b,vlb,vub,x0,numeq) indicates that the first ')
disp('        numeq constraints defined by A and b are equality constraints.')
disp(' ')
disp('        x=lp(c,A,b,vlb,vub,x0,numeq,itermx) sets the maximum number of ')
disp('        iterations to itermx')
disp(blanks(2)')
disp('Location of m-file:	/p/ferris/matlab-utils/lp.m')
disp(blanks(2)')
%disp('Please HIT ANY KEY to continue')
%pause
end % if
if (choice==2)
clc
disp(blanks(2)')
disp('  MILP   Solve mixed integer linear programs.')
disp(' ')
disp('         [V,X] = MILP(F,A,B,E) solves a linear programming problem')
disp('         given by')
disp('                         max V = F''*X')
disp(' ')
disp('         Subject to constraints')
disp(' ')
disp('                           A*X <> B')
disp('                             X >= 0')
disp(' ')
disp('         The sense of the inequality constraints is determined by e:')
disp(' ')
disp('                  E(I) < 0   implies   A(I,:)*X <= B(I)')
disp('                  E(I) = 0   implies   A(I,:)*X == B(I)')
disp('                  E(I) > 0   implies   A(I,:)*X >= B(I)')
disp(' ')
disp('         A may be a sparse or full matrix. F,A,B and E must be ')
disp('         conformable as defined by the relations above.')
disp(' ')
disp('         V,X are the optimal values of the objective function, decision')
disp('         variables, respectively.')
disp(' ')
disp('         [V,X] = MILP(F,A,B,E,VLB,VUB,XINT,VERBOSE,DEBUG) is the ')
disp('         full call syntax for MILP.')
disp(' ')
disp('         VLB, VUB are optional arguments that establish nonnegative')
disp('         lower and upper bounds on corresponding elements of x.')
disp('         are ignored if omitted or empty.')
disp(' ')
disp('         XINT is an optional list of components of x which are to be')
disp('         solved as integers. This list may be empty.')
disp(' ')
disp('         VERBOSE and DEBUG are optional flags for obtaining diagnostic')
disp('         output.')
disp(' ')
disp('         MILP calls the MEX function LP_SOLVE to obtain solutions.')
disp(blanks(2)')
disp('Location of m-file: 	/p/ferris/matlab-utils/lp_solve/milp.m')
disp(blanks(2)')
%disp('Please HIT ANY KEY to continue')
%pause
end %if
if (choice==3)
clc
disp(blanks(2)')
disp(' QP_LCP     Quadratic programming (via PATH)')
disp('        X=QP_LCP(H,f,A,b) solves the quadratic programming problem:')
disp(' ')
disp('             min 0.5*x''Hx + f''x   subject to:  Ax <= b ')
disp('              x    ')
disp(' ')
disp('        [x,LAMBDA]=QP_LCP(H,f,A,b) returns the set of Lagrangian multipliers,')
disp('        LAMBDA, at the solution.')
disp(' ')
disp('        X=QP_LCP(H,f,A,b,VLB,VUB) defines a set of lower and upper')
disp('        bounds on the design variables, X, so that the solution  ')
disp('        is always in the range VLB < X < VUB.')
disp(' ')
disp('        X=QP_LCP(H,f,A,b,VLB,VUB,X0) sets the initial starting point to X0.')
disp(' ')
disp('        X=QP_LCP(H,f,A,b,VLB,VUB,X0,N) indicates that the first N constraints ')
disp('        defined by A and b are equality constraints.')
disp(blanks(2)')
disp('Location of m-file:	/afs/cs.wisc.edu/p/ferris/matlab-utils/qp_lcp.m')
disp(blanks(2)')
%disp('Please HIT ANY KEY to continue')
%pause
end % if
if (choice == 4)
clc
disp(blanks(2)')
disp(' LSSOL   Convex quadratic programming and linear least-square code LSSOL by')
disp('         Gill et. al.')
disp('         [x,obj,lambda,istate,iter,inform,R,b,kx] = ...')
disp('            lssol(R,b,c,A,x,l,u,tp,msglvl,kx)')
disp('         solves the problem ')
disp('                         minimize     f(x)')
disp('                         subject to   ( )     ( x )    ( )')
disp('                                      (l) =<  (   ) =< (u)')
disp('                                      ( )     ( Ax)    ( )')
disp('         where f(x) is one of the following objective functions:')
disp('          tp = ''fp''   f(x) = none                       ')
disp('          tp = ''lp''   f(x) = c''*x                       ')
disp('          tp = ''qp1''  f(x) = 0.5*x''*R*x                     R symmetric and psd')
disp('          tp = ''qp2''  f(x) = c''*x + 0.5*x''*R*x              R symmetric and psd')
disp('          tp = ''qp3''  f(x) = 0.5*norm(R(:,kx)*x)^2          R upper-trapezoidal')
disp('          tp = ''qp4''  f(x) = c''*x + 0.5*norm(R(:,kx)*x)^2   R upper-trapezoidal')
disp('          tp = ''ls''  f(x) = 0.5*norm(b-R*x)^2          ')
disp('          tp = ''ls2''  f(x) = c''*x + 0.5*norm(b-R*x)^2   ')
disp('          tp = ''ls3''  f(x) = 0.5*norm(b-R(:,kx)*x)^2        R upper-trapezoidal')
disp('          tp = ''ls4''  f(x) = c''*x + 0.5*norm(b-R(:,kx)*x)^2 R upper-trapezoidal')
disp('         ')
disp('         On successful termination, x contains the optimal solution, and')
disp('         obj contains the final objective function value. Lambda contains')
disp('         the Lagrange multiplier vector, istate denotes the status of the')
disp('         constraints and iter denotes the number of iterations. Inform')
disp('         contains information about the exit status of LSSOL. Msglvl ')
disp('         determines the amount of output. Msglvl=1 (default) gives one line')
disp('         of output per iteration, msglvl=0 gives no output. Kx determines the')
disp('         column ordering of R for the cases where R is upper-trapezoidal. On')
disp('         exit, R and b are transformed according to the user''s guide.')
disp('   ')
disp('         This version for Matlab 4.0 dated 19-Apr-1993.')
disp(blanks(2)')
disp('Location of m-file:	/p/ferris/matlab-utils/npsol.m')
disp(blanks(2)')
end % if
if (choice == 5)
clc
disp(blanks(2)')
disp('  NLP   Nonlinear Programming using MINOS.')
disp(' ')
disp('  -----------------------------------------------------------------------')
disp(' ')
disp('        x = nlp(x0) solves the nonlinear programming problem:')
disp(' ')
disp('        minimize f(x)   subject to:     g(x) <= 0 ')
disp('           x')
disp(' ')
disp('        where x0 is an n x 1 vector, initial starting point.  NOTE: x0')
disp('        MUST be provided.')
disp('        ')
disp('        And the file ''funobj.m'' is defined and contains:')
disp('                function [f,gradf]=funobj(x) that computes the objective')
disp('                function f and the gradient gradf at the point x.')
disp(' ')
disp('        And, the file ''funcon.m'' is defined and contains:')
disp('                function [g,gJac]=funcon(x) which computes the nonlinear')
disp('                constraint value g and the constraint Jacobian gJac for')
disp('                the nonlinear constraints at the point x.')
disp('                NOTE: The matrix gJac MUST be a SPARSE MATLAB matrix.  This')
disp('                      can be done by including the line: ')
disp('                                gJac = sparse(gJac);')
disp('                      after gJac has been computed.')
disp(' ')
disp('For more information please type ''help nlp'' at the MATLAB prompt')
disp(blanks(2)')
disp('Location of m-file:	/p/ferris/matlab-utils/nlp.m')
disp(blanks(2)')
end % if
if (choice == 6)
clc
disp(blanks(2)')
disp(' NPSOL   Sequential quadratic programming code NPSOL by Gill et. al.')
disp('         [x,f,g,c,cJac,inform,lambda,iter,istate]= ...')
disp('            npsol(A,l,u,x,''funobj'',''funcon'',msglvl,derlvl,verlvl)')
disp('         solves the problem ')
disp('                         minimize     f(x)')
disp('                         subject to   ( )     (   x  )    ( )')
disp('                                      (l) =<  (  Ax  ) =< (u)')
disp('                                      ( )     ( c(x) )    ( )')
disp('         On successful termination, x contains the optimal solution, and')
disp('         f and g contain the final objective function value and gradient.')
disp('         c and cJac contains the constraint and the constraint Jacobian.')
disp('         Lambda contains the Lagrange multiplier vector of the final QP,')
disp('         istate denotes the status of the constraints and iter denotes')
disp('         the number of iterations. Inform contains information about the')
disp('         exit status of NPSOL. Funobj is the name of the m-file for ')
disp('         evaluating the objective function and funcon is the name of the')
disp('         m-file for evaluating the constraint functions (without .m-extension).')
disp(' ')
disp('         The following two m-files must be supplied (where default names are')
disp('         ''funobj.m'' and ''funcon.m'' unless stated otherwise in the variables')
disp('         funobj and funcon).')
disp(' ')
disp('         ''funobj.m'' containing function [f,gradf]=funobj(x) that')
disp('                               computes the objective function f and the')
disp('                               gradient gradf at the point x.')
disp(' ')
disp('         ''funcon.m'' containing function [c,cJac]=funcon(x) that')
disp('                               computes the constraint value c and the')
disp('                               constraint Jacobian cJac for the')
disp('                               nonlinear constraints at the point x.')
disp(' ')
disp('         Msglvl determines the amount of output. Msglvl=1 (default) gives one')
disp('         line of output per major iteration, msglvl=0 gives no output.')
disp(' ')
disp('         Derlvl controls which derivatives are given. (Default=0)')
disp('         Verlvl controls the level of checking of gradients. (Default=0)')
disp(' ')
disp('         This version for Matlab 4.0 dated 19-Apr-1992.')
disp(blanks(2)')
disp('Location of m-file:	/p/ferris/matlab-utils/npsol.m')
disp(blanks(2)')
end % if
if (choice == 7)
clc
disp(blanks(2)')
disp('SMOOTH_LCP	Solve an LCP by SMOOTH. Input M,q. Usage: x = smooth_lcp(M,q)')
disp(blanks(2)')
disp('Location of m-file:	/u/o/l/olvi/public/matlab_addit/chunhui/smooth_lcp.m')
disp(blanks(2)')
end % if
if (choice == 8)
clc
disp(blanks(2)')
disp('  PATH - mixed complementarity problems by the PATH method.')
disp('  Package written in C-language.  Sparsity is preserved.')
disp(' ')
disp('  PATH solves an MCP of the form')
disp(' ')
disp('        l <= z <= u')
disp('        where l_i < z_i < u_i  => F_i(z) = 0')
disp('              l_i = z          => F(z) >= 0')
disp('              u_i = z          => F(z) <= 0')
disp(' ')
disp('  Calling syntax: [z,status] = pathsol(z,l,u,cpfunjac)')
disp(' ')
disp('         cpfunjac is the name of the m-file for ')
disp('         evaluating the function F and its Jacobian J (without .m-extension).')
disp(' ')
disp('         The following m-file must be supplied (where default name is')
disp('         ''cpfunjac.m'' unless stated otherwise in the variable cpfunjac).')
disp(' ')
disp('         ''cpfunjac.m'' contains function [f,J,domerr]=cpfunjac(z,jacflag) ')
disp('                      that computes the function F ')
disp('                      and if jacflag=1 the sparse Jacobian J at the point z.')
disp('                      domerr returns the number of domain violations.')
disp(' ')
disp('  If ''l'',''u'' are omitted, z is assumed non-negative.')
disp(' ')
disp('  On exit ''status'' has the following interpretation:')
disp(' ')
disp('                  0 complementary solution found')
disp(blanks(2)')
disp(blanks(2)')
disp('Location of m-file: /afs/cs.wisc.edu/p/ferris/matlab-utils/pathsol.m')
disp(blanks(2)')
end % if
if (choice == 9)
clc
disp(blanks(2)')
disp('GAMS/MCP complementarity problems accessible with the MATLAB environment:')
disp('	')
disp('	Files include: cpfun, cpjac, cpfunjac, cpsetup, cpstart, cptype')
disp(blanks(2)')
disp('	For a description, please see:')
disp('	')
disp('	M. C. Ferris and T. F. Rutherford.  Accessing Realistic Mixed')
disp('	Complemetarity Problems with MATLAB.  In G. Di Pillo and F. Giannessi,')
disp('	editors, Proceedings of Nonlinear Optimization Applications Workshop,')
disp('	Erice June 1995.  Plenum Publishing Corporation, forthcoming, 1996.')
disp('	Mathematical Programming Techical Report 95-10, Computer Sciences')
disp('	Department, University of Wisconsin, Madison, Wisconsin, June 1995.')
disp(blanks(2)')
disp('	Location of techical report:')
disp('		ftp://ftp.cs.wisc.edu/math-prog/tech-reports/95-10.ps')
disp(blanks(2)')
disp('	Location of necessary files: /afs/cs.wisc.edu/p/ferris/matlab-utils/')
disp('	or by annonymous ftp:	     ftp://ftp.cs.wisc.edu/math-prog/matlab/')
disp(blanks(2)')
end % if
return



