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).