20091104
  gurobi.c, README.gurobi: fix a glitch with iisfind=1 on infeasible
problems:  solve_result_num previously indicated a failure rather
than infeasible.

20091214
  gurobi.c: add "cutoff" keyword to possibilities for $gurobi_options.
  makefile.u: add rule for xsum.out.
  README.gurobi: add brief MacOSX discussion.

20100309
  gurobi.c: fix bugs in handling .ref and .sosno suffixes.

20100418
  gurobi.c:  extend for Gubobi 3.0; should continue to work with older
versions of Gurobi as well.  New facilities include keywords for
requesting .sol files of alternative MIP solutions; new synonym
lpmethod for simplex and a way to select the (new) barrier algorithm
(lpmethod=2); new tolerances and an iteration limit for the barrier
method; control of crossover from barrier solution to basic solution;
"mipfocus" to help direct the MIP solver; "predual" to present the
dual of an LP to the solver; "pumppasses" to control the feasibility
pump; and "symmetry" to control the MIP solver's detection of
symmetry.  See the output of "gurobi -=" for a summary of the
currently available keywords.  Complete list of new keywords for
Gurobi 3.0:  aggfill, ams_eps, ams_epsabs, ams_limit, ams_stub,
barconvtol, barcorrectors, bariterlim, barorder, crossover,
crossoverbasis, lpmethod, mipfocus, mipgapabs, networkcuts, param,
paramfile, predeprow, predual, prepases, pumppasses, resultfile,
rins, submipcuts, symmetry.

20100424
  gurobi.c:  fix a couple of typos in the "-=" output; correct
spelling of "prepasses" and for now make "prepases" a deprecated
synonym for "prepasses".

20100512
  gurobi.c: adjust for a gratuitous parameter name change
("LogfileName" to "LogFile") between versions 2 and 3.

20100523
  gurobi.c: adding keyword return_mipgap for returning suffixes
absmipgap and relmipgap on objectives and problems.  (These values
could already be computed from the bestbound suffix.)

20100720
  gurobi.c: distinguish explicitly zero initial guesses from those
that are zero by default.  This affects MIP starting guesses.

20100928
  gurobi.c: expand description of sos2 (shown with "gurobi -=").

20101021
   gurobi.c: fix some bugs in statmsg() with error messages not
normally seen.

20101105
  gurobi.c, README.gurobi: update for Gurobi 4.0.

20101115
  gurobi.c:  fix a bug (introduced in adjustments for Gurobi 4) that
sometimes caused the constant term in objectives to be treated as 0.
This affected the objective value reported.

20101207
  gurobi.c, README.gurobi:  set solve_result_num = 567 if the problem has
complementarity constraints.

20110322
  gurobi.c: fix a bug in handling problems with integer variables
(including binary variables) and piecewise-linear terms:  the wrong
variables were likely treated as integer.  Fix a bug with "writeprob"
that could occur in problems with piecewise-linear terms:  a call on
GRBupdatemodel() was missing, which could affect, e.g., a *.lp file
specified by writeprob.

20110426
  gurobi.c, README.gurobi: update to Gurobi 4.5.  The updated gurobi.c
should still work with earlier versions.  The new .unbdd and .dunbdd
suffixes (for primal and dual rays of unboundedness) are not yet
reliable.

20110728
  gurobi.c:  fix a glitch with sos=1 in $gurobi_options that prevented
.sosno and .ref from being used in problems with only continuous
variables.

20110920
  gurobi.c:  add "method"; move the "lpmethod" description to "method"
and list lpmethod as a synonym for method.  (Driver date 20110907.)
  README.gurobi, makefile.*: minor tweaks for less dependence on the
particular version of Gurobi.

20111109
  gurobi.c: fix a minor glitch in reporting the names of alternate
solution files generated when ams_stub is specified in $gurobi_options.
Update for use with Gurobi 4.6; new keywords:
	presparsify
	priorities
	sifting
	siftmethod
	zeroobjnodes
The priorities keyword controls whether variable.priority values, if
available, are passed to Gurobi.  (Default = yes.)

20120504
  gurobi.c, README.gurobi, makefile.u: update for Gurobi 5.0.  The
updated gurobi.c should still work with earlier versions of Gurobi.

20120511
  gurobi.c: fix a bug (fault) in supplying a warm start.

20120524
  gurobi.c: fix a typo in the "gurobi -=" output.

20120606
  gurobi.c: fix a glitch in providing a dual initial guess (when
available from a previous solve) in problems with quadratic constraints,
leading to the message "Index out of range for attribute 'DStart'."

20120828
  gurobi.c: on MIP problems, when basis >= 2 and method >= 2, change
method to 1 before trying to get the requested output basis.  Also
adjust the description of "method" and remove "rootmethod", which
went away in Gurobi 4.0.

20120927
  gurobi.c: adjust to return dual variables on quadratically constrained
problems with integer variables when qcpdual=1 is specified.
Also, for debugging, add ".fix_lp" and ".fix_mps" to the suffixes
accepted by the "writeprob" keyword.

20121006
  Add keyword "version", to report version details before solving
the problem.

20121101
  Fix a bug with problems involving both nonconvex piecewise-linear
terms and range constraints.  The adjustments for ranges were wrong,
resulting in the error message "Index is out of range" or other trouble.

20121116
  Minor tweaks to two error messages and other minor cleanups.

20130109
  Update for Gurobi 5.1: add keywords impstartnodes and seed.

20130204
  Fix an off-by-one error in the description of sos2 in the -= output.

20130206
  Fix a possible fault, introduced 20120504 (for Gurobi versions >= 5),
with problems having a dual initial guess but no incoming basis.

20130328
  Update for Gurobi 5.5: add keywords
	concurrentmip
	feasrelaxbigm
	impstartnodes
	numericfocus
	seed
	server
	server_password
	server_port
	server_priority
	server_timeout
	serverlic
	tunebase
	tuneoutput
	tuneresults
	tunetimelimit
	tunetrials

20130419
  Correct the descriptions of "aggfill" (default value) and "cutoff" in
the "-=" output.  When the objective is no better than cutoff, report
"objective cutoff" rather than "cutoff reached".

20131003
  Updates for Gurobi 5.6.  New keywords
	disconnected
	pool_mip
	pool_password
	pool_servers
	pool_tunejobs
	presos1bigm
	presos2bigm
See the output of "gurobi -=" for details.

20131101
  Add keyword "objrep" with description
objrep		 Whether to replace
				minimize obj: v;
			with
				minimize obj: f(x)
			when variable v appears linearly in exactly one
			constraint of the form
				s.t. c: v >= f(x);
			or
				s.t. c: v == f(x);
			Possible objrep values:
				0 = no
				1 = yes for v >= f(x)
				2 = yes for v == f(x) (default)
				3 = yes in both cases
			For maximization problems, ">= f(x)" is changed to
			"<= f(x)" in the description above.

20131113
  Fix a typo in the "gurobi -=" output:  change "tuneparbase" to "tunebase"
(twice, in the description of "tunebase").

20131114
  Fix a glitch, probably introduced in version 20131003, that kept "cuts"
from being recognized in $gurobi_options.

20140313
  Fix a glitch (possible fault) with objrep.

20140324
  Add ".rew" and ".rlp" to the possible suffixes used with "writeprob".

20141123
  Updates for Gurobi 6.0.  New keywords
	lazy
	pl_bigm
	pool_mip
	pool_password
	pool_servers
See the output of "gurobi -=" for details.
  On MIP problems, suppress returning a basis or solution sensitivities
unless a feasible solution has been found.  New option basisdebug:
specifying basisdebug=1 restores the old behavior of trying to return
a basis and/or solution sensitivities (if requested) even when the
problem is infeasible or unbounded.  Specifying basisdebug=2 causes
the "basis" and "solnsense" keywords to be honored only if an optimal
solution is found.

20141204
  gurobi.c: add possible call on mqpcheckv_free().  Should be invisible,
aside from using less memory on some problems.

20141209
  gurobi.c: add scale=2 to the description of scale.

20141223
  gurobi.c: minor tweak for efficiency:  do not check for a quadratic
objective if there are no nonlinear objectives.

20150102
  gurobi.c: when server=... is specified, replay other option settings
so they affect the new Gurobi environment.

20150209
  gurobi.c:  when writeprob=... is specified and variable or constraint
names are available (via option gurobi_auxfiles), pass them to Gurobi
so they appear in the file or files written for writeprob keywords.

20150226
  gurobi.c:  when suffixes absmipgap, bestbound, and/or relmipgap
are requested, return them (as the description of "return_mipgap"
in the "gurobi -=" output says they should be) with infinite values
if no integer feasible solution has yet been found.  Expand the
description of "bestbound" in the "gurobi -=" output.

20150228
  gurobi.c:  rework logic for suffixes absmipgap, bestbound, and
relmipgap so .bestbound can be returned in more cases.

20150304
  gurobi.c:  add keyword "pool_distmip" for specifying how many
machines from the server pool (if specified by pool_servers) should
be used for solving each MIP instance.

20150324
  gurobi.c:  correct description of keyword "threads", which applies
to the barrier algorithm as well as to MIP problems.

20150422
  gurobi.c:  arrange to return iis_table (for symbolic names of .iis
values) when returning an IIS that only involves constraints.
Hitherto, iis_table was only returned when returning an IIS that
involved some variables.

20150527
  gurobi.c:  fix glitches with compilation when DISALLOW_GUROBI_SERVER
is defined.

20151029
  gurobi.c:  update to Gurobi 6.5.  New possible values 2, 3, and 4
for keyword "warmstart".  See the "gurobi -=" output for details.

20151120
  gurobi.c:  adjust message about Gurobi not handling free rows.

20151125
  gurobi.c:  fix a glitch with "warmstart":  the default and upper
limit values were interchanged.

20151223
  gurobi.c:  tweak error messages about bad incoming .sstatus values:
e.g., instead of _cstat[n] or _rstat[n], mention var_name(n).sstatus
or con_name(n).sstatus.

20160118
  gurobi.c and README.gurobi:  replace solve_result_num value 600 with
405 or 415 (for interrupted with or without a feasible solution,
respectively) and add new solve_result_num value 411, 412, 413 for
iteration, node, and time limits without a feasible solution.

20160310
  gurobi.c: try to give a better error message (than "invalid license")
when the Gurobi compute server is used and no license is available.

20160607
  gurobi.c:  allow serverlic file to accept "computeserver" as a synonym
for "server" and "password" as a synonym for "server_password".

20161026
  gurobi.c, README.gurobi:  update for Gurobi 7.0.  New keywords:
ams_mode, bestbndstop, bestobjstop, cloudid, cloudkey, cloudpool,
degenmoves, infproofcuts, multiobj, multiobjmethod, poolsearchmode,
poolsolutions.  See the "gurobi -=" output for details.

20161028
  gurobi.c, README.gurobi:  fix a bug with indicator constraints
that affected some indicator constraints.  Add keywords round and
round_reptol; see the "gurobi -=" output for details.

20161108
  gurobi.c:  add keywords miqcpmethod and premiqcpform.  See the
"gurobi -=" output for details.

20170116
  gurobi.c:  fix a glitch with multiple objectives:  the objective
used was not transmitted (via the .sol file) to the AMPL session.

20170307
  gurobi.c:  fix bugs setting solve_result_num values 101, 102, 103,
502, 524.  Add possible solve_result_num values 104 and 570.  Fix a
fault that happened if bestbndstop or bestobjstop was reached and a
solution was not available.
  README.gurobi: add descriptions of solve_result_num values 103, 104,
and 570.

20170419
  gurobi.c:  fix glitches with "multiobj=1".

20170707
  gurobi.c:  add solve_result_num values 540, 541, 542 for trouble
with Gurobi Compute servers.

20170712
  gurobi.c:  update for Gurobi 7.5.  New keyword startnodelimit.
When multiobj=1, objective-specific convergence tolerances and method
values may be assigned via keywords of the form obj_n_name, such
as obj_1_method for assigning a method value for the first objective.

20171211
  gurobi.c, README.gurobi:  adjust treatment of multiobj=1 and its
description.  When asked to deal with multiple objectives, Gurobi
apparently ignores the originally supplied objective, requiring it to
be supplied a second time.  Moreover, all objectives must be linear.
An attempt to supply, say, a quadratic objective when multiobj=1 now
results in new solve_result_num value 543.

20171215
  gurobi.c:  When multiobj=1 and there are several objectives,
report the value of each objective in the solve_message.

20180425
  gurobi.c: update to Gurobi 8.0.  New keywords cloudpriority,
partitionplace, server_insecure; withdrawn keyword: server_port.
See the "gurobi -=" output for details.

20180601
  gurobi.c: for consistency with the cplex driver, add keywords
poolgap, poolgapabs, and poolstub as synonyms for ams_eps,
ams_epsabs, and ams_stub, respectively, and return in suffix
npool the number of alternative MIP solution files written.
These files have names obtained by appending "1.sol", "2.sol",
etc., to ams_stub.  Suffix npool is on the objective and problem.
When ams_stub (or poolstub) is specified but ams_mode (or
poolsearchmode) is not, assume ams_mode=2.

20181017
  gurobi.c:  update to Gurobi 8.1.  New possible value 2 for
"preqlinearize".  See the "gurobi -=" output for details.
Also fix possible trouble (e.g., a fault) when "objrep" causes
one or more constraints, other then the last, to be removed.

20181023
  gurobi.c:  Adjust copyright text in "gurobi -v" output.

20181204
  gurobi.c:  move possible #define of NO_MOkwf up before the first
"#ifndef NO_MOkwf".  This only matters for Gurobi versions prior
to 7.5.

20190315
  gurobi.c:  tweak for use with Gurobi versions prior to 7.0.

20190430
  gurobi.c:  allow alternate MIP solutions to be written (when
available) even if timelim is specified and is reached.

20191202
  gurobi.c:  update to Gurobi 9.0.0.  New keywords:  bqpcuts,
nonconvex, relaxliftcuts, rltcuts.  See the "gurobi -=" output
for details.

20191211
  gurobi.c:  allow quadratic equality constraints when
"nonconvex=2" is specified.

20191216
  gurobi.c:  when "ams_stub=..." and "ams_mode=2" are specified
and one solution is found, set npool = 1 (rather then 0).

20200131
  gurobi.c:  when a "quadratic" constraints has no quadratic terms,
treat it as linear.  Example:  var x; var y; s.t. c: x*(y-y) == 0.

20200411
  gurobi.c:  when all variables are continuous and ams_stub is
specified, set .npool := 1 and make the solution available as
(ams_stub & '1.sol').

20200917
  gurobi.c:  Update to Gurobi 9.0.3.  New keyword kappa to request
computation of a condition number of an optimal basis.  To bypass a
gurobi bug with nonlinear constraints, for now an irreducible set of
infeasible constraints (keyword iisfind) will only be sought among
linear constraints.

20201130
  gurobi.c:  Update to Gurobi 9.1, which contains performance
improvements and bug fixes.  Added new possible value (-1) to suffix
lazy to specify predefined user cuts.  Added keywords integrality,
norelheurtime, norelheurwork; see "gurobi -=" for details.
  No changes to gurobi.c for later GUROBI versions through 9.1.1.

20210929
  gurobi.c:  Fix a bug that caused an incoming basis to be ignored
when no constraints were in the basis.

20211001
  gurobi.c:  Fix a mistake in the changes of 20210929, and fix a
couple of glitches with #if lines.

20211008
  gurobi.c:  Fix a glitch with range constraints (only seen with AMPL's
option presolve 0).

20220124
  gurobi.c:  Update for Gurobi 9.5.  New keywords:  cloudhost,
concurrentwin, liftprojectcuts, lpwarmstart, memlimit, nlpheur,
presos1enc, presos2enc, work, worklimit; see "gurobi -=" for details.
New input suffixes (influencing Gurobi's behavior):  iisforce,
iisforcelb, iisforceub, poolignore.  New output suffixes (returned by
Gurobi on request):  concurrentwinmethod, maxvio, sensrhshi2,
sensrhslo2, work.

20230310
  gurobi.c:  adjust to account for the fact that suf_sos() may change
nranges (the number of range constraints).
