Solver npsol is an AMPL interface to NPSOL, a nonlinear solver by Philip
E. Gill, Walter Murray, Michael A. Saunders, and Margaret H. Wright that
uses a sequential quadratic programming algorithm.  NPSOL is described
in "User's Guide for NPSOL (Version 4.0):  A Fortran Package for
Nonlinear Programming", Tech. Rep. SOL 86-2, Systems Optimization
Laboratory, Department of Operations Research, Stanford University,
Jan. 1986.  Source for NPSOL is available from

	Stanford Business Software
	2680 Bayshore Parkway, Suite 304
	Mountain View, CA 94043
	Phone:	+1-415-962-8719
	Fax:	+1-415-962-1869

It is most convenient to invoke npsol with AMPL's solve command:

	ampl: option solver npsol;
	ampl: solve;

but npsol can also be run separately, with invocation syntax

	npsol stub [-AMPL] [keywd=[value] ...]

in which stub comes from AMPL's write command.  For example,

	> ampl -obfoo foo.mod foo.dat
	> npsol foo

demonstrates running npsol separately; the ampl invocation
writes file foo.nl (stub = "foo"), which npsol reads.

Command-line arguments to npsol either have the form
	keywd=
or
	keywd=value
where keywd is one of the key words described below.  Alternatively,
you can invoke npsol the way AMPL's solve command does, i.e.,

	npsol stub -AMPL [keywd=value ...]

where stub was specified in

	ampl -obstub ...
or
	ampl -ogstub...

Such an invocation causes npsol to read from stub.nl and to write stub.sol.

-----------------
Controlling npsol
-----------------

Npsol reads keywords and values from the environment (shell) variable
npsol_options and from the command line.  Execute

	npsol -=

for a summary of keywords that are synonyms for NPSOL keyword phrases.
You can also give NPSOL keyword phrases if you change blanks within
them to underscores and follow them with an = (equals sign).

------------------
Sample Invocations
------------------

  If you're using AMPL, just say

	option solver npsol;
	solve;

  If you've executed, say,

	ampl -objunk junk.model junk.data

then you could say

	npsol junk itera=300 linesearch=1e-6

to force npsol to run for at most 300 iterations and use linesearch
tolerance 1e-6.  With the Bourne shell, either of the invocations

	npsol_options='iterations=300 linesearch=1e-6' npsol junk
or
	npsol_options='iterations=300 linesearch=1e-6'
	export npsol_options
	npsol junk

would have the same effect; within AMPL, specifying

	option npsol_options 'iterations=300 linesearch=1e-6', solver npsol;
	solve;

would also have this effect.


NPSOL itself must be licensed from

	Stanford Business Software
	Phone:	+1 415-962-8719
	Fax:	+1 415-962-1869
	2680 Bayshore Parkway, Suite 304
	Mountain View, CA 94043

The makefiles assume that src/npsol.a or src/npsol.lib is a library
built from the NPSOL source.  See the comments in the makefiles.
makefile.u works on Unix systems; makefile.vc works with Microsoft's
Visual C/C++ 6.  Copy one of them to "makefile", and edit makefile if
necessary.

-----------------------
solve_result_num values
=======================

Here is a table of solve_result_num values that "fsqp" can return
to an AMPL session, along with the text that appears in the associated
solve_message.

	Value	Message

	0	optimal solution
	100	first-order optimal but not converged
	200	linear constraints infeasible
	201	nonlinear constraints infeasible
	400	major iteration limit
	501	Bug: INFORM = 5
	502	stuck (INFORM = 6)
	503	Bug: bad objective or constraints (INFORM = 7)
	504	Bug: INFORM = 8
	505	Bug: invalid input parameter (INFORM = 9)
	506	unexpected INFORM value
	507	solution aborted

-----------------------

Questions about this stuff?  Contact dmg@ampl.com (David M. Gay).
