Tue Nov 24 13:04:58 EST 1992
Add #ifdef Student_Edition lines
to osl.c (they affect the version string),
and adjust makefile to know about Student_Edition .

Tue Dec 15 21:22:04 EST 1992
Drop erroneous requirement of integral bounds on
variables to invoke network solver.

Sun Jan  3 02:24:50 EST 1993
  Kludge around OSL bug to get correct signs for
dual variables with OSL's network solver (EKKNSLV);
add logic to invoke OSL's network solver if flipping
row signs gives a pure network problem.
  Change maxiter keyword so it sets both Imaxiter and Imaxiterb.
  Add Ilinelen keyword.

Fri Jan  8 13:28:04 EST 1993
  Tweak to invoke edagread rather than edag_read.

Sat Jan  9 19:12:57 EST 1993
  Fix a glitch in passing the solution back to ampl when the iteration
limit is reached during solution of a problem with integer variables,
and osl tries to restore a best-found solution.

Tue Jan 12 23:57:02 EST 1993
  For "simplify" >= 0, if there are integer variables, add the kludge
OSL requires to correctly recover the solution.
  Fix bug that sometimes caused the solution not to be passed back to
ampl when the return message is "best MIP solution so far restored".
  Fix bug in feeding OSL the problem when there are general integer
variables and Special Ordered Sets of Type 2 (added for nonconvex or
nonconcave piecewise-linear terms): cost coefficients for the
general integer variables were wrong, and the wrong solution
components were passed back for these variables.
  Add text to return message "iteration limit in mpre" to point out
that this is sometimes a bogus return message (due to an OSL bug).
[Recanted 21 Jan. 1993].
  Temporary new keyword for $osl_options: netbug.  Try 'netbug 1'
if osl reports network simplex iterations and the dual variables
seem wrong (reduced costs are botched).
  Avoid invoking EKKMPRE after adding Special Ordered Sets of Type 2
-- to avoid another OSL bug.

Wed Jan 13 16:27:44 EST 1993
  Fix with network problems: if a row had to be added to make OSL
happy, its elements sometimes had wrong signs.

Thu Jan 21 13:12:03 EST 1993
  Recant tweak of 9 days ago to return message for "iteration limit
in mpre".  The tweak was prompted by behavior still not fully
explained: it's either a Sun 4 bug in cc -O or some other bug.
  Add recognition of Ipricetype and Rnetsamp.

Tue Jan 26 23:27:34 EST 1993
  Allow 'pricing 3'.
  Pass the primal initial guess to OSL.
  New keyword: 'passx0 0' suppresses the primal initial guess.
  Fix bug in 'startbasis=foo' that (if it bit) could cause a
memory fault.
  Fix bug in termination message after the network solver ran with
barrier >= 0.  In this case, barrier = -1 is assumed, but the
termination message was reporting 0 barrier iterations.

Tue Mar 16 00:06:18 EST 1993
  Adjust return messages for MIP problems to indicate when no
feasible solution is returned.

Mon Mar 22 17:31:26 EST 1993
Tweaks to osl.c:
1. Omit decl of xectim_() (now in ../nlp1.h).
2. New keywords mipdisplay (default 0) and mipdispfreq (default 20):
	mipdisplay = 1 ==> report each new feasible integer solution found
	mipdisplay = 2 ==> print best integer solution value every
			   mipdispfreq iterations (or whenever improved).
3. Kludge around osl bug in the first time reported by Rprintcpu.
4. Suppress msg about logical variables added during factorization.
5. For outlev >= 3, suppress all page headings after the first.

Thu Mar 25 16:27:23 EST 1993
  Fix glitch in error msg for integer keywords assigned an
out-of-bounds value (in $osl_options).
  New keyword simplexinit (default 0).  If neither startbasis nor crash
is set, simplexinit adjusts passx0 and pricing as follows:

	0: passx0 = 0; pricing left alone (should be 1 or 2).
	1: passx0 = 1; pricing left alone.
	2: passx0 = 1; pricing = 3.

  New keyword bdisplay (default 0): interval at which to report
barrier iterations.
  New keyword relax to ignore integer variables.
  Change in priority: if barrier >= 0, a barrier algorithm is run,
even for network problems.  (If there are discrete variables,
the barrier algorithm is still suppressed in favor of the MIP solver.)

Wed Apr  7 16:40:51 EDT 1993
  Tentative new logic to invoke OSL's QP solver (for convex quadratic
minimization problems, subject to linear constraints).  New keyword
majorits bounds the number of "decomposition crash" iterations at
the start of the QP algorithm.
  Changes to keywords follow; the OSL names are still recognized,
but README.osl and the forthcoming AMPL/OSL booklet use the osl
keyword names on the left:

   osl             OSL
adjactype       Iadjactype
bbimprove       Rimprove
bcutoff         Rbcutoff
changeweight    Rchangeweight
cholabstol      Rcholabstol
choltinytol     Rcholtinytol
degscale        Rdegscale
densecol        Idensecol
densethr        Rdensethr
devexmode       Idevexmode
droprowct       Idroprowct
dweight         Rdweight
fastits         Ifastits
fixvar1         Rfixvar1
fixvar2         Rfixvar2
formntype       Iformntype
fracweight      Riweight
linelen         Ilinelen
maxfactor       Imaxfactor
maxiterb        Imaxiterb
maxmin          Rmaxmin
maxnodes        Imaxnodes
maxprojns       Imaxprojns
maxsols         Imaxsols
mufactor        Rmufactor
muinit          Rmuinit
mulimit         Rmulimit
mulinfac        Rmulinfac
netprice        Ipricetype
netsamp         Rnetsamp
nullcheck       Inullcheck
objweight       Robjweight
pdgaptol        Rpdgaptol
pdstepmult      Rpdstepmult
pertdiag        Rpertdiag
possbasis       Ipossbasis
prepassbranch   Isupertol
prepassfix      Ithreshold
prepassimprove  Rthreshold
prepassmax      Iheurpass
prestrat        Istrategy
printcpu        Rprintcpu
projtol         Rprojtol
pweight         Rpweight
rgfactor        Rrgfactor
rglimit         Rrglimit
stepmult        Rstepmult
target          Rtarget
toldinf         Rtoldinf
tolint          Rtolint
tolpinf         Rtolpinf

  Other tweaks:

1.  Maxiter now just controls the number of simplex iterations;
    it no longer sets maxiterb.

2.  New keyword simplexinit (default 0), applicable only if startbasis
    is not specified and crash has its default value of 0:
	0: passx0 = 0; pricing left alone (should be 1 or 2).
	1: passx0 = 1; pricing left alone.
	2: passx0 = 1; pricing = 3.

3.  Istrategy split into two keywords: prestrat and branch;
    The old Istrategy = prestrat + 4*branch.

4.  Other minor things, too numerous to list.

Sat Apr 10 15:11:19 EDT 1993
  File solvers/osl/qpcheck.c moved to solvers/qpcheck.c (for use
by other solvers, e.g. korbx).

Mon Apr 12 00:18:44 EDT 1993
  Minor tweak for QPs (omit unused derp structs); needs revised
solvers/nlp1.h and solvers/edagread.c.

Wed Apr 28 12:05:44 EDT 1993
  Omit messages 33-35 ("The problem has been perturbed", "Perturbation
has ended", "Variable nnn will cause instability and has been rejected")
when outlev < 3.

Wed May  5 16:44:30 EDT 1993
  Don't bail out if OSL complains about a nonsymmetric quadratic matrix.

Thu May  6 19:45:45 EDT 1993
  Don't bail out if OSL complains about an infeasible problem
during branch-and-bound.

Fri Jun 11 08:17:34 EDT 1993
  Change last arg to qpcheck() (in osl.c) from 0 to 1 to avoid
osl message EKK3014W about changing Q to 1/2(Q + Q').

Wed Jun 16 14:48:15 EDT 1993
  osl.c: change long to fint (in accord with changes to solvers/*.h).

Fri Jun 18 14:07:47 EDT 1993
  Tweak comments in makefile and $S/makefile.

Thu Jul  1 08:51:43 EDT 1993
  Report ignoring integrality of nonlinear integer variables when
$osl_options says "relax" (and, as before, decline to handle nonlinear
integer variables otherwise).
  Write temporary files (when solving integer programming problems)
in directory $TMPDIR.
  Refuse to "maximize" quadratic programming problems: OSL only
minimizes them and would botch the sign of the objective in
intermediate printing if we reversed the signs of the objective
components.
  Bail out (exit 4) upon OSL error message 3051, 7060, and 7068
for nonconvex QPs.

Thu Jul  1 12:07:22 EDT 1993
  Purge an apparently spurious error message, EKK3035W.
  Tweak msgs 3051, 7060.

Tue Jul  6 14:12:07 EDT 1993
  More modifications to printing for QPs; allow maximizing
a QP (by minimizing its negative; objective values that OSL
prints will have the wrong sign).

Sat Jul 10 02:45:52 EDT 1993
  More tweaks to QP error messages.

Tue Jul 13 22:16:35 EDT 1993
  Still more minor error message tweaks.  (Expect more in August.)

Tue Aug  3 14:50:07 EDT 1993
  When a dual initial guess is available and osl_options says "dual",
pass the (true) dual initial guess to osl (as primal initial guess).
This matters in, e.g.,
	option solver osl;
	solve;
	option osl_options dual;
	solve;
in which OSL sometimes computed a wrong solution for the second solve.
  New keyword for osl_options: dccutoff (tolerance for stopping OSL's
decomposition crash for quadratic programming, described in
forthcoming osl booklet).

Thu Aug 19 11:27:55 EDT 1993
  Patch around OSL bug in the signs of dual variables for QPs.

Fri Aug 27 13:23:33 EDT 1993
  Tweak for change in callinq sequence of qpcheck -- connected with
a bug fix to qpcheck: ask netlib@netlib.bell-labs.com to
	send nlp1.h qpcheck.c xsum0.out from ampl/solvers

Fri Sep 10 16:24:16 EDT 1993
  Fix bug in osl_options phrase "netbug=1".

Sat Jan 15 11:55:17 EST 1994
  Fix bug that sometimes caused "Node limit (maxnodes 0)" or
"Mingap (nnnnnn) reached" to be reported erroneously on integer
programming problems.  This trouble was possible if heuristics
found an integer solution (positive if maximizing, negative if
minimizing) before a continuous solution was computed.
  Fix bug with bbdisplay > 0: numbers in the Bound column sometimes
had the wrong sign.
  Patch around OSL bug with maxsols > 1 (maximum feasible integer
solutions to compute): OSL behaves as though maxsols were one less
than the specified value.
  Abort execution after OSL message 3011 ("duplicate elements in the
matrix"): this message can be caused by an OSL bug, and OSL tries
to solve the wrong problem after this message appears.

Sat Feb 26 14:51:27 EST 1994
  osl.c: omit some unnecessary #includes; version remains 19940115.
  Omit makefile from xsum.out.

Mon Mar 28 18:47:25 EST 1994
  osl.c: just show version when invoked "osl -v".

Sun May 15 20:25:56 EDT 1994
  Allow optional spaces around '=' in keyword phrases (in single
command-line arguments or $osl_options).  This relies on a new
function, pr_unknown, just added to amplsolver.a.

Mon Jun 13 11:57:02 EDT 1994
  Fix bug in handling intial guesses with "dual".

Thu Aug  4 12:14:05 EDT 1994
  osl.c, line 1395: change "%Allocating" to "Allocating";
		change "ftncls" to "ftncls_".
  osl.c, osl.h: add #ifdef WATCOM stuff.

Fri Aug 12 02:20:18 EDT 1994
  Fix bugs in handling nonconvex piecewise-linear terms when there
are integers present or a constant term in the (presolved) objective.
Example:
	var x{1..2} >= 0;
	convex: sum{i in 1..2} x[i] = 1;
	var y integer >= 0 <= 10;
	minimize zot: sum{i in 1..2}i*x[i]
		+ <<1,2,4,7,8;-1,1, -1,1, -1,1>>y + 4;
	option solver osl;
	# works right without +4 and integer

Fri Aug 12 08:56:32 EDT 1994
  Tweak code for removing files to work on HP systems (with -DHPUX).

Wed Sep 21 15:30:45 EDT 1994
  Give nonzero return code after message 7003 (more dspace needed).

Sat Sep 24 01:33:20 EDT 1994
  Allow command-line options that do not involve a value to appear
without a trailing =, so the invocations
	osl foo relax=
and
	osl foo relax
behave the same.  Previously "relax" in the latter invocation was
quietly ignored.

Sat Oct  1 13:51:49 EDT 1994
  Do not suppress the barrier algorithm when integer variables are
present; instead force bs_switch=2.
  Catch another case where OSL fails to restore the best MIP solution.

Mon Oct  3 11:50:11 EDT 1994
  Return solution when OSL claims not to have restored the best MIP
solution, and warn about it; sometimes it might be right.

Wed Oct 19 12:07:21 EDT 1994
  Update version.c to reflect bug fix to solvers/qpcheck.c.

Fri Oct 28 11:36:32 EDT 1994
  Fix bugs in handling problems with both general integer variables
and general piecewise-linear terms, and with general piecewise-linear
terms when "relax" is specified.

Mon Dec 12 16:52:16 EST 1994
  Fix bug in handling nonconvex (resp. nonconcave) piecewise-linear
terms (those that require integer programming): an incorrect weight
was supplied for the first breakpoint if the term appeared in a
constraint and its value at the breakpoint was nonzero.

Tue Jun  6 18:00:10 EDT 1995
  README.osl: update description of pretype (to accord with the
description in the OSL booklet and in "osl").

Tue Nov 28 19:08:36 EST 1995
  Fix memory fault with infeasible problems on which ekknslv (OSL's
network solver) is invoked.
  Diagnose MIPS whose LP relaxation is infeasible (rather than
giving a nonzero exit code).

Wed Aug  7 18:42:11 EDT 1996
  Echo startbasis=... and endbasis=...

Mon Apr 21 22:48:43 EDT 1997
  Update for revised amplsolver.a and "Hooking Your Solver to AMPL".

Fri May  2 02:17:55 EDT 1997
  Set need_nl = 0 (as in the old osl.c).

Tue Jun 22 00:43:48 EDT 1999
  Updated for OSL 2.  Not everything works right -- OSL 2 still has
some bugs.
  Source for OSL 1.2 driver moved to subdirectory osl1.2.
  For OSL 2, keyword "netbug" removed; new keywords iisfind,
mipstartstatus, sensitivity, sos: see the updated README.osl.
Statuses are now received from and returned to AMPL.
  Merge bb_bfile, mb_bfile, mslv_bfile, and mslv_mfile into
bb_file (or equivalently mslv_file).  Both bfile and mfile must
be toggled simultaneously, so it's best to merge them.

Thu Jul 22 13:09:35 EDT 1999
  osl.c, osl.h: minor tweaks for non-SGI systems -- #include "osl.h"
had somehow been lost.

Thu Aug 12 21:01:38 EDT 1999
  osl.c: adjust to account for OSL 2's idiotic handling of bounds,
which is worse than was OSL 1.2's: bounds > 1e28 are mishandled;
OSL 1.2 was good for bounds up to 1e31.

Thu Aug 19 02:04:35 EDT 1999
  osl.c, osl.h: minor tweaks; the calling sequences of ekkfopn and
ekkfcls might finally be consistent across machines.
  New makefile variants (makefile.vc, makefile.wat) for MS VC++
and WATCOM.

Thu Aug 19 16:01:21 EDT 1999
  More tweaks.  Now this stuff works on all 5 platforms on which IBM
currently offers a "try/buy" version of OSL.

Thu Feb  3 23:11:32 EST 2000
  makefile.vc: adjusted reflecting changes to ../makefile.vc.

Fri Feb 25 17:42:22 EST 2000
  osl.c: fix miscount in allocations in priorities().  This bug
caused a fault in one example.

Fri Jun  8 18:46:25 EDT 2001
  osl.c: fix a botch in the ordering of keywds (which must be
strictly sorted for binary search to work) -- mpsout and mipstartstatus
were interchanged -- and fix glitches under -DKR_headers in the header
for function priorities().

Tue Apr 30 18:28:49 EDT 2002
  osl.c: udpate to a form that works with OSL v3 or v2.  (In particular,
circumvent a bug in OSL v3 whereby ekkmset erroneously complains the
first time it is called.)

Tue May  7 16:43:29 EDT 2002
  makefile.*, osl.c: omit version.c0, which is now automatically
incorporated into osl.c and the solver interface library.
  osl.c: on problems with integer variables and very vew rows,
add slightly more rows to allow for cuts.