GAMSPy 1.27.0 (2026-08-21)#
New features#
#676: Allow filtering assignments by comparing a set or alias to an element label with
==and!=. For example,a[i].where[i == "i1"] = 0is now equivalent toa[i].where[i.sameAs("i1")] = 0(andi != "i1"to~i.sameAs("i1")). Expose the universe sentinel asgamspy.UNIVERSE. Use it wherever a domain is expected to leave that position undomain-checked, e.g.gp.Parameter(m, "misc", domain=[gp.UNIVERSE, r]). It is now the recommended way of specifying the GAMS universal set in symbol constructors.#760: Enhance piecewise linear formulations with heterogeneous indexed data, broadcasting across omitted domains, rays, and overlapping-chain support in Interval and DLog, and add a container-independent curve API through
PWLCurveandpwlinearfor selecting Interval, Convexity, or DLog.#877: Add NVIDIA cuOpt solver as an addon solver.
Improvements in existing functionality#
#598: Improve the performance of the frozen solves with a new hibernate mode. Generate records without materializing the dense cartesian product of the domains to avoid out of memory issues.
Bug fixes#
#873: Quote the values of SCIP string options (e.g.
solver_options={"lp/solver": "highs"}) since SCIP’s option file parser requires them to be enclosed in double quotes. Char, and bool values as well as already quoted values are left untouched.
Deprecations#
#676: Using the bare string
"*"as a domain is soft-deprecated in favor of the newgamspy.UNIVERSEsentinel."*"is still accepted everywhere and behaves identically (no warnings yet) but it may start emitting aDeprecationWarningin a future release, so prefergamspy.UNIVERSEover"*".