From bfcca9b52142066f219f7dc6336ef16a3b845757 Mon Sep 17 00:00:00 2001 From: Tias Guns Date: Thu, 28 May 2026 01:05:11 +0200 Subject: [PATCH] addConsCumulative --- CHANGELOG.md | 1 + src/pyscipopt/scip.pxd | 20 + src/pyscipopt/scip.pxi | 103 ++++ src/pyscipopt/scip.pyi | 1217 +++++++--------------------------------- tests/test_cons.py | 33 ++ 5 files changed, 349 insertions(+), 1025 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7464e9a8f..2f7124710 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased ### Added +- Added `addConsCumulative()` for SCIP cumulative constraints (#1222) ### Fixed ### Changed - Speed up `Expr.__add__` and `Expr.__iadd__` via the C-level API diff --git a/src/pyscipopt/scip.pxd b/src/pyscipopt/scip.pxd index af933fe19..9ff2979e7 100644 --- a/src/pyscipopt/scip.pxd +++ b/src/pyscipopt/scip.pxd @@ -1636,6 +1636,26 @@ cdef extern from "scip/cons_knapsack.h": int SCIPgetNVarsKnapsack(SCIP* scip, SCIP_CONS* cons) SCIP_Longint* SCIPgetWeightsKnapsack(SCIP* scip, SCIP_CONS* cons) +cdef extern from "scip/cons_cumulative.h": + SCIP_RETCODE SCIPcreateConsCumulative(SCIP* scip, + SCIP_CONS** cons, + const char* name, + int nvars, + SCIP_VAR** vars, + int* durations, + int* demands, + int capacity, + SCIP_Bool initial, + SCIP_Bool separate, + SCIP_Bool enforce, + SCIP_Bool check, + SCIP_Bool propagate, + SCIP_Bool local, + SCIP_Bool modifiable, + SCIP_Bool dynamic, + SCIP_Bool removable, + SCIP_Bool stickingatnode) + cdef extern from "scip/cons_nonlinear.h": SCIP_EXPR* SCIPgetExprNonlinear(SCIP_CONS* cons) SCIP_RETCODE SCIPcreateConsNonlinear(SCIP* scip, diff --git a/src/pyscipopt/scip.pxi b/src/pyscipopt/scip.pxi index 15cf9812a..45f0ccf9e 100644 --- a/src/pyscipopt/scip.pxi +++ b/src/pyscipopt/scip.pxi @@ -2385,6 +2385,19 @@ cdef class Constraint: constype = bytes(SCIPconshdlrGetName(SCIPconsGetHdlr(self.scip_cons))).decode('UTF-8') return constype == 'knapsack' + def isCumulative(self): + """ + Returns True if constraint is a cumulative constraint. + Cumulative is typically used in scheduling applications. + + Returns + ------- + bool + + """ + constype = bytes(SCIPconshdlrGetName(SCIPconsGetHdlr(self.scip_cons))).decode('UTF-8') + return constype == 'cumulative' + def isLinearType(self): """ Returns True if constraint can be represented as a linear constraint. @@ -7206,6 +7219,96 @@ cdef class Model: return pyCons + def addConsCumulative(self, vars, durations, demands, capacity, name="", + initial=True, separate=True, enforce=True, check=True, + modifiable=False, propagate=True, local=False, dynamic=False, + removable=False, stickingatnode=False): + """ + Add a cumulative constraint. + + A cumulative constraint models resource-constrained scheduling: given jobs + with start times, durations, and demands on a shared resource of fixed + capacity, it ensures that at every time point t the total demand of all + jobs active at t does not exceed the capacity. Job j is active at t if + start[j] <= t < start[j] + duration[j]. + + The start times are given as integer variables in `vars`. The `durations`, + `demands`, and `capacity` arguments must be fixed integers. End times are + implicit (start + duration); post separate constraints if explicit end + variables are needed. + + If you simply want the jobs to not overlap, set all durations to '1'. + + Parameters + ---------- + vars : list of Variable + list of integer variables corresponding to job start times + durations : list of int + list of durations, one for each job + demands : list of int + list of demands, one for each job + capacity : int + available cumulative capacity at any time point + name : str, optional + name of the constraint (Default value = "") + initial : bool, optional + should the LP relaxation of constraint be in the initial LP? (Default value = True) + separate : bool, optional + should the constraint be separated during LP processing? (Default value = True) + enforce : bool, optional + should the constraint be enforced during node processing? (Default value = True) + check : bool, optional + should the constraint be checked for feasibility? (Default value = True) + propagate : bool, optional + should the constraint be propagated during node processing? (Default value = True) + local : bool, optional + is the constraint only valid locally? (Default value = False) + dynamic : bool, optional + is the constraint subject to aging? (Default value = False) + removable : bool, optional + should the relaxation be removed from the LP due to aging or cleanup? (Default value = False) + stickingatnode : bool, optional + should the constraint always be kept at the node where it was added, + even if it may be moved to a more global node? (Default value = False) + + Returns + ------- + Constraint + The newly created cumulative constraint + """ + + cdef int nvars = len(vars) + cdef int i + cdef int* durations_array = malloc(nvars * sizeof(int)) + cdef int* demands_array = malloc(nvars * sizeof(int)) + cdef SCIP_CONS* scip_cons + cdef _VarArray wrapper + + assert nvars == len(durations) == len(demands), "Number of variables, durations, and demands must be the same." + + if name == '': + name = 'c'+str(SCIPgetNConss(self._scip)+1) + + wrapper = _VarArray(vars) + for i in range(nvars): + durations_array[i] = durations[i] + demands_array[i] = demands[i] + + PY_SCIP_CALL(SCIPcreateConsCumulative( + self._scip, &scip_cons, str_conversion(name), nvars, wrapper.ptr, durations_array, + demands_array, capacity, initial, separate, enforce, check, propagate, local, modifiable, + dynamic, removable, stickingatnode)) + + free(durations_array) + free(demands_array) + + PY_SCIP_CALL(SCIPaddCons(self._scip, scip_cons)) + + pyCons = self._getOrCreateCons(scip_cons) + PY_SCIP_CALL(SCIPreleaseCons(self._scip, &scip_cons)) + + return pyCons + def addConsSOS1(self, vars, weights=None, name="", initial=True, separate=True, enforce=True, check=True, propagate=True, local=False, dynamic=False, diff --git a/src/pyscipopt/scip.pyi b/src/pyscipopt/scip.pyi index ee82c00d9..9c66ce59d 100644 --- a/src/pyscipopt/scip.pyi +++ b/src/pyscipopt/scip.pyi @@ -1,6 +1,6 @@ -from typing import ClassVar, Union, overload +from typing import ClassVar -import numpy as np +import numpy from _typeshed import Incomplete from typing_extensions import disjoint_base @@ -44,30 +44,14 @@ class Benders: def bendersexitsol(self) -> Incomplete: ... def bendersfree(self) -> Incomplete: ... def bendersfreesub(self, probnumber: Incomplete) -> Incomplete: ... - def bendersgetvar( - self, variable: Incomplete, probnumber: Incomplete - ) -> Incomplete: ... + def bendersgetvar(self, variable: Incomplete, probnumber: Incomplete) -> Incomplete: ... def bendersinit(self) -> Incomplete: ... def bendersinitpre(self) -> Incomplete: ... def bendersinitsol(self) -> Incomplete: ... - def benderspostsolve( - self, - solution: Incomplete, - enfotype: Incomplete, - mergecandidates: Incomplete, - npriomergecands: Incomplete, - checkint: Incomplete, - infeasible: Incomplete, - ) -> Incomplete: ... - def benderspresubsolve( - self, solution: Incomplete, enfotype: Incomplete, checkint: Incomplete - ) -> Incomplete: ... - def benderssolvesub( - self, solution: Incomplete, probnumber: Incomplete - ) -> Incomplete: ... - def benderssolvesubconvex( - self, solution: Incomplete, probnumber: Incomplete, onlyconvex: Incomplete - ) -> Incomplete: ... + def benderspostsolve(self, solution: Incomplete, enfotype: Incomplete, mergecandidates: Incomplete, npriomergecands: Incomplete, checkint: Incomplete, infeasible: Incomplete) -> Incomplete: ... + def benderspresubsolve(self, solution: Incomplete, enfotype: Incomplete, checkint: Incomplete) -> Incomplete: ... + def benderssolvesub(self, solution: Incomplete, probnumber: Incomplete) -> Incomplete: ... + def benderssolvesubconvex(self, solution: Incomplete, probnumber: Incomplete, onlyconvex: Incomplete) -> Incomplete: ... @disjoint_base class Benderscut: @@ -75,9 +59,7 @@ class Benderscut: model: Incomplete name: Incomplete def __init__(self) -> None: ... - def benderscutexec( - self, solution: Incomplete, probnumber: Incomplete, enfotype: Incomplete - ) -> Incomplete: ... + def benderscutexec(self, solution: Incomplete, probnumber: Incomplete, enfotype: Incomplete) -> Incomplete: ... def benderscutexit(self) -> Incomplete: ... def benderscutexitsol(self) -> Incomplete: ... def benderscutfree(self) -> Incomplete: ... @@ -138,46 +120,19 @@ class Conshdlr: name: Incomplete def __init__(self) -> None: ... def consactive(self, constraint: Incomplete) -> Incomplete: ... - def conscheck( - self, - constraints: Incomplete, - solution: Incomplete, - checkintegrality: Incomplete, - checklprows: Incomplete, - printreason: Incomplete, - completely: Incomplete, - ) -> Incomplete: ... + def conscheck(self, constraints: Incomplete, solution: Incomplete, checkintegrality: Incomplete, checklprows: Incomplete, printreason: Incomplete, completely: Incomplete) -> Incomplete: ... def conscopy(self) -> Incomplete: ... def consdeactive(self, constraint: Incomplete) -> Incomplete: ... def consdelete(self, constraint: Incomplete) -> Incomplete: ... def consdelvars(self, constraints: Incomplete) -> Incomplete: ... def consdisable(self, constraint: Incomplete) -> Incomplete: ... def consenable(self, constraint: Incomplete) -> Incomplete: ... - def consenfolp( - self, - constraints: Incomplete, - nusefulconss: Incomplete, - solinfeasible: Incomplete, - ) -> Incomplete: ... - def consenfops( - self, - constraints: Incomplete, - nusefulconss: Incomplete, - solinfeasible: Incomplete, - objinfeasible: Incomplete, - ) -> Incomplete: ... - def consenforelax( - self, - solution: Incomplete, - constraints: Incomplete, - nusefulconss: Incomplete, - solinfeasible: Incomplete, - ) -> Incomplete: ... + def consenfolp(self, constraints: Incomplete, nusefulconss: Incomplete, solinfeasible: Incomplete) -> Incomplete: ... + def consenfops(self, constraints: Incomplete, nusefulconss: Incomplete, solinfeasible: Incomplete, objinfeasible: Incomplete) -> Incomplete: ... + def consenforelax(self, solution: Incomplete, constraints: Incomplete, nusefulconss: Incomplete, solinfeasible: Incomplete) -> Incomplete: ... def consexit(self, constraints: Incomplete) -> Incomplete: ... def consexitpre(self, constraints: Incomplete) -> Incomplete: ... - def consexitsol( - self, constraints: Incomplete, restart: Incomplete - ) -> Incomplete: ... + def consexitsol(self, constraints: Incomplete, restart: Incomplete) -> Incomplete: ... def consfree(self) -> Incomplete: ... def consgetdivebdchgs(self) -> Incomplete: ... def consgetnvars(self, constraint: Incomplete) -> Incomplete: ... @@ -188,46 +143,14 @@ class Conshdlr: def consinitlp(self, constraints: Incomplete) -> Incomplete: ... def consinitpre(self, constraints: Incomplete) -> Incomplete: ... def consinitsol(self, constraints: Incomplete) -> Incomplete: ... - def conslock( - self, - constraint: Incomplete, - locktype: Incomplete, - nlockspos: Incomplete, - nlocksneg: Incomplete, - ) -> Incomplete: ... + def conslock(self, constraint: Incomplete, locktype: Incomplete, nlockspos: Incomplete, nlocksneg: Incomplete) -> Incomplete: ... def consparse(self) -> Incomplete: ... - def conspresol( - self, - constraints: Incomplete, - nrounds: Incomplete, - presoltiming: Incomplete, - nnewfixedvars: Incomplete, - nnewaggrvars: Incomplete, - nnewchgvartypes: Incomplete, - nnewchgbds: Incomplete, - nnewholes: Incomplete, - nnewdelconss: Incomplete, - nnewaddconss: Incomplete, - nnewupgdconss: Incomplete, - nnewchgcoefs: Incomplete, - nnewchgsides: Incomplete, - result_dict: Incomplete, - ) -> Incomplete: ... + def conspresol(self, constraints: Incomplete, nrounds: Incomplete, presoltiming: Incomplete, nnewfixedvars: Incomplete, nnewaggrvars: Incomplete, nnewchgvartypes: Incomplete, nnewchgbds: Incomplete, nnewholes: Incomplete, nnewdelconss: Incomplete, nnewaddconss: Incomplete, nnewupgdconss: Incomplete, nnewchgcoefs: Incomplete, nnewchgsides: Incomplete, result_dict: Incomplete) -> Incomplete: ... def consprint(self, constraint: Incomplete) -> Incomplete: ... - def consprop( - self, - constraints: Incomplete, - nusefulconss: Incomplete, - nmarkedconss: Incomplete, - proptiming: Incomplete, - ) -> Incomplete: ... + def consprop(self, constraints: Incomplete, nusefulconss: Incomplete, nmarkedconss: Incomplete, proptiming: Incomplete) -> Incomplete: ... def consresprop(self) -> Incomplete: ... - def conssepalp( - self, constraints: Incomplete, nusefulconss: Incomplete - ) -> Incomplete: ... - def conssepasol( - self, constraints: Incomplete, nusefulconss: Incomplete, solution: Incomplete - ) -> Incomplete: ... + def conssepalp(self, constraints: Incomplete, nusefulconss: Incomplete) -> Incomplete: ... + def conssepasol(self, constraints: Incomplete, nusefulconss: Incomplete, solution: Incomplete) -> Incomplete: ... def constrans(self, sourceconstraint: Incomplete) -> Incomplete: ... @disjoint_base @@ -243,6 +166,7 @@ class Constraint: def getConshdlrName(self) -> Incomplete: ... def isActive(self) -> Incomplete: ... def isChecked(self) -> Incomplete: ... + def isCumulative(self) -> Incomplete: ... def isDynamic(self) -> Incomplete: ... def isEnforced(self) -> Incomplete: ... def isInitial(self) -> Incomplete: ... @@ -275,13 +199,7 @@ class Cutsel: def cutselfree(self) -> Incomplete: ... def cutselinit(self) -> Incomplete: ... def cutselinitsol(self) -> Incomplete: ... - def cutselselect( - self, - cuts: Incomplete, - forcedcuts: Incomplete, - root: Incomplete, - maxnselectedcuts: Incomplete, - ) -> Incomplete: ... + def cutselselect(self, cuts: Incomplete, forcedcuts: Incomplete, root: Incomplete, maxnselectedcuts: Incomplete) -> Incomplete: ... @disjoint_base class DomainChanges: @@ -323,28 +241,12 @@ class Eventhdlr: def eventinit(self) -> Incomplete: ... def eventinitsol(self) -> Incomplete: ... -class ExprLike: - def __array_ufunc__( - self, - ufunc: np.ufunc, - method: str, - *args: Incomplete, - **kwargs: Incomplete, - ) -> Incomplete: ... - def __abs__(self) -> GenExpr: ... - def exp(self) -> GenExpr: ... - def log(self) -> GenExpr: ... - def sqrt(self) -> GenExpr: ... - def sin(self) -> GenExpr: ... - def cos(self) -> GenExpr: ... - @disjoint_base class Expr(ExprLike): terms: Incomplete def __init__(self, terms: Incomplete = ...) -> None: ... def degree(self) -> Incomplete: ... def normalize(self) -> Incomplete: ... - def __abs__(self) -> GenExpr: ... def __add__(self, other: Incomplete, /) -> Incomplete: ... def __eq__(self, other: object, /) -> bool: ... def __ge__(self, other: object, /) -> bool: ... @@ -371,9 +273,7 @@ class ExprCons: _lhs: Incomplete _rhs: Incomplete expr: Incomplete - def __init__( - self, expr: Incomplete, lhs: Incomplete = ..., rhs: Incomplete = ... - ) -> None: ... + def __init__(self, expr: Incomplete, lhs: Incomplete = ..., rhs: Incomplete = ...) -> None: ... def normalize(self) -> Incomplete: ... def __bool__(self) -> bool: ... def __eq__(self, other: object, /) -> bool: ... @@ -383,6 +283,16 @@ class ExprCons: def __lt__(self, other: object, /) -> bool: ... def __ne__(self, other: object, /) -> bool: ... +class ExprLike: + def __init__(self) -> None: ... + def cos(self) -> Incomplete: ... + def exp(self) -> Incomplete: ... + def log(self) -> Incomplete: ... + def sin(self) -> Incomplete: ... + def sqrt(self) -> Incomplete: ... + def __abs__(self) -> Incomplete: ... + def __array_ufunc__(self, ufunc: Incomplete, method: Incomplete, *args: Incomplete, **kwargs: Incomplete) -> Incomplete: ... + @disjoint_base class GenExpr(ExprLike): _op: Incomplete @@ -390,7 +300,6 @@ class GenExpr(ExprLike): def __init__(self) -> None: ... def degree(self) -> Incomplete: ... def getOp(self) -> Incomplete: ... - def __abs__(self) -> GenExpr: ... def __add__(self, other: Incomplete, /) -> Incomplete: ... def __eq__(self, other: object, /) -> bool: ... def __ge__(self, other: object, /) -> bool: ... @@ -414,9 +323,7 @@ class Heur: model: Incomplete name: Incomplete def __init__(self) -> None: ... - def heurexec( - self, heurtiming: Incomplete, nodeinfeasible: Incomplete - ) -> Incomplete: ... + def heurexec(self, heurtiming: Incomplete, nodeinfeasible: Incomplete) -> Incomplete: ... def heurexit(self) -> Incomplete: ... def heurexitsol(self) -> Incomplete: ... def heurfree(self) -> Incomplete: ... @@ -437,8 +344,8 @@ class IIS: @disjoint_base class IISfinder: - model: Incomplete iis: Incomplete + model: Incomplete def __init__(self) -> None: ... def iisfinderexec(self) -> Incomplete: ... def iisfinderfree(self) -> Incomplete: ... @@ -447,45 +354,21 @@ class IISfinder: class LP: name: Incomplete def __init__(self, name: Incomplete = ..., sense: Incomplete = ...) -> None: ... - def addCol( - self, - entries: Incomplete, - obj: Incomplete = ..., - lb: Incomplete = ..., - ub: Incomplete = ..., - ) -> Incomplete: ... - def addCols( - self, - entrieslist: Incomplete, - objs: Incomplete = ..., - lbs: Incomplete = ..., - ubs: Incomplete = ..., - ) -> Incomplete: ... - def addRow( - self, entries: Incomplete, lhs: Incomplete = ..., rhs: Incomplete = ... - ) -> Incomplete: ... - def addRows( - self, entrieslist: Incomplete, lhss: Incomplete = ..., rhss: Incomplete = ... - ) -> Incomplete: ... - def chgBound( - self, col: Incomplete, lb: Incomplete, ub: Incomplete - ) -> Incomplete: ... - def chgCoef( - self, row: Incomplete, col: Incomplete, newval: Incomplete - ) -> Incomplete: ... + def addCol(self, entries: Incomplete, obj: Incomplete = ..., lb: Incomplete = ..., ub: Incomplete = ...) -> Incomplete: ... + def addCols(self, entrieslist: Incomplete, objs: Incomplete = ..., lbs: Incomplete = ..., ubs: Incomplete = ...) -> Incomplete: ... + def addRow(self, entries: Incomplete, lhs: Incomplete = ..., rhs: Incomplete = ...) -> Incomplete: ... + def addRows(self, entrieslist: Incomplete, lhss: Incomplete = ..., rhss: Incomplete = ...) -> Incomplete: ... + def chgBound(self, col: Incomplete, lb: Incomplete, ub: Incomplete) -> Incomplete: ... + def chgCoef(self, row: Incomplete, col: Incomplete, newval: Incomplete) -> Incomplete: ... def chgObj(self, col: Incomplete, obj: Incomplete) -> Incomplete: ... - def chgSide( - self, row: Incomplete, lhs: Incomplete, rhs: Incomplete - ) -> Incomplete: ... + def chgSide(self, row: Incomplete, lhs: Incomplete, rhs: Incomplete) -> Incomplete: ... def clear(self) -> Incomplete: ... def delCols(self, firstcol: Incomplete, lastcol: Incomplete) -> Incomplete: ... def delRows(self, firstrow: Incomplete, lastrow: Incomplete) -> Incomplete: ... def getActivity(self) -> Incomplete: ... def getBase(self) -> Incomplete: ... def getBasisInds(self) -> Incomplete: ... - def getBounds( - self, firstcol: Incomplete = ..., lastcol: Incomplete = ... - ) -> Incomplete: ... + def getBounds(self, firstcol: Incomplete = ..., lastcol: Incomplete = ...) -> Incomplete: ... def getDual(self) -> Incomplete: ... def getDualRay(self) -> Incomplete: ... def getIntParam(self, param: Incomplete) -> Incomplete: ... @@ -495,9 +378,7 @@ class LP: def getPrimalRay(self) -> Incomplete: ... def getRealParam(self, param: Incomplete) -> Incomplete: ... def getRedcost(self) -> Incomplete: ... - def getSides( - self, firstrow: Incomplete = ..., lastrow: Incomplete = ... - ) -> Incomplete: ... + def getSides(self, firstrow: Incomplete = ..., lastrow: Incomplete = ...) -> Incomplete: ... def infinity(self) -> Incomplete: ... def isDualFeasible(self) -> Incomplete: ... def isInfinity(self, val: Incomplete) -> Incomplete: ... @@ -512,7 +393,7 @@ class LP: def solve(self, dual: Incomplete = ...) -> Incomplete: ... def writeLP(self, filename: Incomplete) -> Incomplete: ... -class MatrixConstraint(np.ndarray): +class MatrixConstraint(numpy.ndarray): def getConshdlrName(self) -> Incomplete: ... def isActive(self) -> Incomplete: ... def isChecked(self) -> Incomplete: ... @@ -528,27 +409,16 @@ class MatrixConstraint(np.ndarray): def isSeparated(self) -> Incomplete: ... def isStickingAtNode(self) -> Incomplete: ... -class MatrixExpr(np.ndarray): +class MatrixExpr(numpy.ndarray): def _evaluate(self, sol: Incomplete) -> Incomplete: ... - def __array_ufunc__( - self, - ufunc: np.ufunc, - method: str, - *args: Incomplete, - **kwargs: Incomplete, - ) -> Incomplete: ... - -class MatrixExprCons(np.ndarray): - def __array_ufunc__( - self, - ufunc: np.ufunc, - method: str, - *args: Incomplete, - **kwargs: Incomplete, - ) -> Incomplete: ... + def __array_ufunc__(self, ufunc: Incomplete, method: Incomplete, *args: Incomplete, **kwargs: Incomplete) -> Incomplete: ... + +class MatrixExprCons(numpy.ndarray): + def __array_ufunc__(self, ufunc: Incomplete, method: Incomplete, *args: Incomplete, **kwargs: Incomplete) -> Incomplete: ... def __eq__(self, other: object, /) -> bool: ... -class MatrixGenExpr(MatrixExpr): ... +class MatrixGenExpr(MatrixExpr): + ... class MatrixVariable(MatrixExpr): def getAvgSol(self) -> Incomplete: ... @@ -570,415 +440,84 @@ class MatrixVariable(MatrixExpr): class Model: _freescip: Incomplete data: Incomplete - def __init__( - self, - problemName: Incomplete = ..., - defaultPlugins: Incomplete = ..., - sourceModel: Incomplete = ..., - origcopy: Incomplete = ..., - globalcopy: Incomplete = ..., - enablepricing: Incomplete = ..., - createscip: Incomplete = ..., - threadsafe: Incomplete = ..., - ) -> None: ... + def __init__(self, problemName: Incomplete = ..., defaultPlugins: Incomplete = ..., sourceModel: Incomplete = ..., origcopy: Incomplete = ..., globalcopy: Incomplete = ..., enablepricing: Incomplete = ..., createscip: Incomplete = ..., threadsafe: Incomplete = ...) -> None: ... def _createConsGenNonlinear(self, cons: Incomplete) -> Incomplete: ... def _createConsLinear(self, lincons: Incomplete) -> Incomplete: ... def _createConsNonlinear(self, cons: Incomplete) -> Incomplete: ... def _createConsQuadratic(self, quadcons: Incomplete) -> Incomplete: ... def _getStageNames(self) -> Incomplete: ... - def activateBenders( - self, benders: Incomplete, nsubproblems: Incomplete - ) -> Incomplete: ... - def addBendersSubproblem( - self, benders: Incomplete, subproblem: Incomplete - ) -> Incomplete: ... - def addCoefKnapsack( - self, cons: Incomplete, var: Incomplete, weight: Incomplete - ) -> Incomplete: ... - def addCoefLinear( - self, cons: Incomplete, var: Incomplete, value: Incomplete - ) -> Incomplete: ... - def addCons( - self, - cons: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsAnd( - self, - vars: Incomplete, - resvar: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsCardinality( - self, - consvars: Incomplete, - cardval: Incomplete, - indvars: Incomplete = ..., - weights: Incomplete = ..., - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsCoeff( - self, cons: Incomplete, var: Incomplete, coeff: Incomplete - ) -> Incomplete: ... - def addConsDisjunction( - self, - conss: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - relaxcons: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - ) -> Incomplete: ... - def addConsElemDisjunction( - self, disj_cons: Incomplete, cons: Incomplete - ) -> Incomplete: ... - def addConsIndicator( - self, - cons: Incomplete, - binvar: Incomplete = ..., - activeone: Incomplete = ..., - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsKnapsack( - self, - vars: Incomplete, - weights: Incomplete, - capacity: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - modifiable: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsLocal( - self, - cons: Incomplete, - validnode: Incomplete = ..., - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsNode( - self, - node: Incomplete, - cons: Incomplete, - validnode: Incomplete = ..., - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsOr( - self, - vars: Incomplete, - resvar: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsSOS1( - self, - vars: Incomplete, - weights: Incomplete = ..., - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsSOS2( - self, - vars: Incomplete, - weights: Incomplete = ..., - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConsXor( - self, - vars: Incomplete, - rhsvar: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addConss( - self, - conss: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... + def activateBenders(self, benders: Incomplete, nsubproblems: Incomplete) -> Incomplete: ... + def addBendersSubproblem(self, benders: Incomplete, subproblem: Incomplete) -> Incomplete: ... + def addCoefKnapsack(self, cons: Incomplete, var: Incomplete, weight: Incomplete) -> Incomplete: ... + def addCoefLinear(self, cons: Incomplete, var: Incomplete, value: Incomplete) -> Incomplete: ... + def addCons(self, cons: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsAnd(self, vars: Incomplete, resvar: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsCardinality(self, consvars: Incomplete, cardval: Incomplete, indvars: Incomplete = ..., weights: Incomplete = ..., name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsCoeff(self, cons: Incomplete, var: Incomplete, coeff: Incomplete) -> Incomplete: ... + def addConsCumulative(self, vars: Incomplete, durations: Incomplete, demands: Incomplete, capacity: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., modifiable: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsDisjunction(self, conss: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., relaxcons: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ...) -> Incomplete: ... + def addConsElemDisjunction(self, disj_cons: Incomplete, cons: Incomplete) -> Incomplete: ... + def addConsIndicator(self, cons: Incomplete, binvar: Incomplete = ..., activeone: Incomplete = ..., name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsKnapsack(self, vars: Incomplete, weights: Incomplete, capacity: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., modifiable: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsLocal(self, cons: Incomplete, validnode: Incomplete = ..., name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsNode(self, node: Incomplete, cons: Incomplete, validnode: Incomplete = ..., name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsOr(self, vars: Incomplete, resvar: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsSOS1(self, vars: Incomplete, weights: Incomplete = ..., name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsSOS2(self, vars: Incomplete, weights: Incomplete = ..., name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConsXor(self, vars: Incomplete, rhsvar: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addConss(self, conss: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... def addCut(self, cut: Incomplete, forcecut: Incomplete = ...) -> Incomplete: ... - def addExprNonlinear( - self, cons: Incomplete, expr: Incomplete, coef: Incomplete - ) -> Incomplete: ... - def addMatrixCons( - self, - cons: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addMatrixConsDisjunction( - self, - conss: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - relaxcons: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - ) -> Incomplete: ... - def addMatrixConsIndicator( - self, - cons: Incomplete, - binvar: Incomplete = ..., - activeone: Incomplete = ..., - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def addMatrixVar( - self, - shape: Incomplete, - name: Incomplete = ..., - vtype: Incomplete = ..., - lb: Incomplete = ..., - ub: Incomplete = ..., - obj: Incomplete = ..., - pricedVar: Incomplete = ..., - pricedVarScore: Incomplete = ..., - ) -> Incomplete: ... - def addObjoffset( - self, offset: Incomplete, solutions: Incomplete = ... - ) -> Incomplete: ... + def addExprNonlinear(self, cons: Incomplete, expr: Incomplete, coef: Incomplete) -> Incomplete: ... + def addMatrixCons(self, cons: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addMatrixConsDisjunction(self, conss: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., relaxcons: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ...) -> Incomplete: ... + def addMatrixConsIndicator(self, cons: Incomplete, binvar: Incomplete = ..., activeone: Incomplete = ..., name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def addMatrixVar(self, shape: Incomplete, name: Incomplete = ..., vtype: Incomplete = ..., lb: Incomplete = ..., ub: Incomplete = ..., obj: Incomplete = ..., pricedVar: Incomplete = ..., pricedVarScore: Incomplete = ...) -> Incomplete: ... + def addObjoffset(self, offset: Incomplete, solutions: Incomplete = ...) -> Incomplete: ... def addPoolCut(self, row: Incomplete) -> Incomplete: ... def addPyCons(self, cons: Incomplete) -> Incomplete: ... def addRowDive(self, row: Incomplete) -> Incomplete: ... def addRowExact(self, rowexact: Incomplete) -> Incomplete: ... def addSol(self, solution: Incomplete, free: Incomplete = ...) -> Incomplete: ... - def addVar( - self, - name: Incomplete = ..., - vtype: Incomplete = ..., - lb: Incomplete = ..., - ub: Incomplete = ..., - obj: Incomplete = ..., - pricedVar: Incomplete = ..., - pricedVarScore: Incomplete = ..., - deletable: Incomplete = ..., - ) -> Incomplete: ... - def addVarLocks( - self, var: Incomplete, nlocksdown: Incomplete, nlocksup: Incomplete - ) -> Incomplete: ... - def addVarLocksType( - self, - var: Incomplete, - locktype: Incomplete, - nlocksdown: Incomplete, - nlocksup: Incomplete, - ) -> Incomplete: ... - def addVarSOS1( - self, cons: Incomplete, var: Incomplete, weight: Incomplete - ) -> Incomplete: ... - def addVarSOS2( - self, cons: Incomplete, var: Incomplete, weight: Incomplete - ) -> Incomplete: ... - def addVarToRow( - self, row: Incomplete, var: Incomplete, value: Incomplete - ) -> Incomplete: ... - def adjustedVarLb(self, var: Variable, lb: float) -> float: ... - def adjustedVarUb(self, var: Variable, ub: float) -> float: ... - def aggregateVars( - self, - varx: Variable, - vary: Variable, - coefx: float = ..., - coefy: float = ..., - rhs: float = ..., - ) -> tuple[bool, bool, bool]: ... + def addVar(self, name: Incomplete = ..., vtype: Incomplete = ..., lb: Incomplete = ..., ub: Incomplete = ..., obj: Incomplete = ..., pricedVar: Incomplete = ..., pricedVarScore: Incomplete = ..., deletable: Incomplete = ...) -> Incomplete: ... + def addVarLocks(self, var: Incomplete, nlocksdown: Incomplete, nlocksup: Incomplete) -> Incomplete: ... + def addVarLocksType(self, var: Incomplete, locktype: Incomplete, nlocksdown: Incomplete, nlocksup: Incomplete) -> Incomplete: ... + def addVarSOS1(self, cons: Incomplete, var: Incomplete, weight: Incomplete) -> Incomplete: ... + def addVarSOS2(self, cons: Incomplete, var: Incomplete, weight: Incomplete) -> Incomplete: ... + def addVarToRow(self, row: Incomplete, var: Incomplete, value: Incomplete) -> Incomplete: ... + def adjustedVarLb(self, var: Incomplete, lb: Incomplete) -> Incomplete: ... + def adjustedVarUb(self, var: Incomplete, ub: Incomplete) -> Incomplete: ... + def aggregateVars(self, varx: Incomplete, vary: Incomplete, coefx: Incomplete = ..., coefy: Incomplete = ..., rhs: Incomplete = ...) -> Incomplete: ... def allColsInLP(self) -> Incomplete: ... def allowNegSlackExact(self) -> Incomplete: ... def appendVarSOS1(self, cons: Incomplete, var: Incomplete) -> Incomplete: ... def appendVarSOS2(self, cons: Incomplete, var: Incomplete) -> Incomplete: ... def applyCutsProbing(self) -> Incomplete: ... - def attachEventHandlerCallback( - self, - callback: Incomplete, - events: Incomplete, - name: Incomplete = ..., - description: Incomplete = ..., - ) -> Incomplete: ... + def attachEventHandlerCallback(self, callback: Incomplete, events: Incomplete, name: Incomplete = ..., description: Incomplete = ...) -> Incomplete: ... def backtrackProbing(self, probingdepth: Incomplete) -> Incomplete: ... def branchLPExact(self) -> Incomplete: ... def branchVar(self, variable: Incomplete) -> Incomplete: ... def branchVarVal(self, variable: Incomplete, value: Incomplete) -> Incomplete: ... def cacheRowExtensions(self, row: Incomplete) -> Incomplete: ... - def calcChildEstimate( - self, variable: Incomplete, targetvalue: Incomplete - ) -> Incomplete: ... - def calcNodeselPriority( - self, variable: Incomplete, branchdir: Incomplete, targetvalue: Incomplete - ) -> Incomplete: ... - def catchEvent( - self, eventtype: Incomplete, eventhdlr: Incomplete - ) -> Incomplete: ... - def catchRowEvent( - self, row: Incomplete, eventtype: Incomplete, eventhdlr: Incomplete - ) -> Incomplete: ... - def catchVarEvent( - self, var: Incomplete, eventtype: Incomplete, eventhdlr: Incomplete - ) -> Incomplete: ... - def checkBendersSubproblemOptimality( - self, solution: Incomplete, probnumber: Incomplete, benders: Incomplete = ... - ) -> Incomplete: ... + def calcChildEstimate(self, variable: Incomplete, targetvalue: Incomplete) -> Incomplete: ... + def calcNodeselPriority(self, variable: Incomplete, branchdir: Incomplete, targetvalue: Incomplete) -> Incomplete: ... + def catchEvent(self, eventtype: Incomplete, eventhdlr: Incomplete) -> Incomplete: ... + def catchRowEvent(self, row: Incomplete, eventtype: Incomplete, eventhdlr: Incomplete) -> Incomplete: ... + def catchVarEvent(self, var: Incomplete, eventtype: Incomplete, eventhdlr: Incomplete) -> Incomplete: ... + def checkBendersSubproblemOptimality(self, solution: Incomplete, probnumber: Incomplete, benders: Incomplete = ...) -> Incomplete: ... def checkQuadraticNonlinear(self, cons: Incomplete) -> Incomplete: ... - def checkSol( - self, - solution: Incomplete, - printreason: Incomplete = ..., - completely: Incomplete = ..., - checkbounds: Incomplete = ..., - checkintegrality: Incomplete = ..., - checklprows: Incomplete = ..., - original: Incomplete = ..., - ) -> Incomplete: ... - def chgCapacityKnapsack( - self, cons: Incomplete, capacity: Incomplete - ) -> Incomplete: ... - def chgCoefLinear( - self, cons: Incomplete, var: Incomplete, value: Incomplete - ) -> Incomplete: ... + def checkSol(self, solution: Incomplete, printreason: Incomplete = ..., completely: Incomplete = ..., checkbounds: Incomplete = ..., checkintegrality: Incomplete = ..., checklprows: Incomplete = ..., original: Incomplete = ...) -> Incomplete: ... + def chgCapacityKnapsack(self, cons: Incomplete, capacity: Incomplete) -> Incomplete: ... + def chgCoefLinear(self, cons: Incomplete, var: Incomplete, value: Incomplete) -> Incomplete: ... def chgLhs(self, cons: Incomplete, lhs: Incomplete) -> Incomplete: ... - def chgReoptObjective( - self, coeffs: Incomplete, sense: Incomplete = ... - ) -> Incomplete: ... + def chgReoptObjective(self, coeffs: Incomplete, sense: Incomplete = ...) -> Incomplete: ... def chgRhs(self, cons: Incomplete, rhs: Incomplete) -> Incomplete: ... def chgRowLhsDive(self, row: Incomplete, newlhs: Incomplete) -> Incomplete: ... def chgRowRhsDive(self, row: Incomplete, newrhs: Incomplete) -> Incomplete: ... - def chgVarBranchPriority( - self, var: Incomplete, priority: Incomplete - ) -> Incomplete: ... + def chgVarBranchPriority(self, var: Incomplete, priority: Incomplete) -> Incomplete: ... def chgVarLb(self, var: Incomplete, lb: Incomplete) -> Incomplete: ... def chgVarLbDive(self, var: Incomplete, newbound: Incomplete) -> Incomplete: ... def chgVarLbGlobal(self, var: Incomplete, lb: Incomplete) -> Incomplete: ... - def chgVarLbNode( - self, node: Incomplete, var: Incomplete, lb: Incomplete - ) -> Incomplete: ... + def chgVarLbNode(self, node: Incomplete, var: Incomplete, lb: Incomplete) -> Incomplete: ... def chgVarLbProbing(self, var: Incomplete, lb: Incomplete) -> Incomplete: ... def chgVarObjDive(self, var: Incomplete, newobj: Incomplete) -> Incomplete: ... def chgVarObjProbing(self, var: Incomplete, newobj: Incomplete) -> Incomplete: ... @@ -986,74 +525,21 @@ class Model: def chgVarUb(self, var: Incomplete, ub: Incomplete) -> Incomplete: ... def chgVarUbDive(self, var: Incomplete, newbound: Incomplete) -> Incomplete: ... def chgVarUbGlobal(self, var: Incomplete, ub: Incomplete) -> Incomplete: ... - def chgVarUbNode( - self, node: Incomplete, var: Incomplete, ub: Incomplete - ) -> Incomplete: ... + def chgVarUbNode(self, node: Incomplete, var: Incomplete, ub: Incomplete) -> Incomplete: ... def chgVarUbProbing(self, var: Incomplete, ub: Incomplete) -> Incomplete: ... def computeBestSolSubproblems(self) -> Incomplete: ... def constructLP(self) -> Incomplete: ... - def copyLargeNeighborhoodSearch( - self, to_fix: Incomplete, fix_vals: Incomplete - ) -> Incomplete: ... + def copyLargeNeighborhoodSearch(self, to_fix: Incomplete, fix_vals: Incomplete) -> Incomplete: ... def count(self) -> Incomplete: ... - def createChild( - self, nodeselprio: Incomplete, estimate: Incomplete - ) -> Incomplete: ... - def createCons( - self, - conshdlr: Incomplete, - name: Incomplete, - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def createConsFromExpr( - self, - cons: Incomplete, - name: Incomplete = ..., - initial: Incomplete = ..., - separate: Incomplete = ..., - enforce: Incomplete = ..., - check: Incomplete = ..., - propagate: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - dynamic: Incomplete = ..., - removable: Incomplete = ..., - stickingatnode: Incomplete = ..., - ) -> Incomplete: ... - def createEmptyRowSepa( - self, - sepa: Incomplete, - name: Incomplete = ..., - lhs: Incomplete = ..., - rhs: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - removable: Incomplete = ..., - ) -> Incomplete: ... - def createEmptyRowUnspec( - self, - name: Incomplete = ..., - lhs: Incomplete = ..., - rhs: Incomplete = ..., - local: Incomplete = ..., - modifiable: Incomplete = ..., - removable: Incomplete = ..., - ) -> Incomplete: ... + def createChild(self, nodeselprio: Incomplete, estimate: Incomplete) -> Incomplete: ... + def createCons(self, conshdlr: Incomplete, name: Incomplete, initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def createConsFromExpr(self, cons: Incomplete, name: Incomplete = ..., initial: Incomplete = ..., separate: Incomplete = ..., enforce: Incomplete = ..., check: Incomplete = ..., propagate: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., dynamic: Incomplete = ..., removable: Incomplete = ..., stickingatnode: Incomplete = ...) -> Incomplete: ... + def createEmptyRowSepa(self, sepa: Incomplete, name: Incomplete = ..., lhs: Incomplete = ..., rhs: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., removable: Incomplete = ...) -> Incomplete: ... + def createEmptyRowUnspec(self, name: Incomplete = ..., lhs: Incomplete = ..., rhs: Incomplete = ..., local: Incomplete = ..., modifiable: Incomplete = ..., removable: Incomplete = ...) -> Incomplete: ... def createOrigSol(self, heur: Incomplete = ...) -> Incomplete: ... def createPartialSol(self, heur: Incomplete = ...) -> Incomplete: ... def createProbBasic(self, problemName: Incomplete = ...) -> Incomplete: ... - def createSol( - self, heur: Incomplete = ..., initlp: Incomplete = ... - ) -> Incomplete: ... + def createSol(self, heur: Incomplete = ..., initlp: Incomplete = ...) -> Incomplete: ... def cutoffNode(self, node: Incomplete) -> Incomplete: ... def deactivatePricer(self, pricer: Incomplete) -> Incomplete: ... def delCoefLinear(self, cons: Incomplete, var: Incomplete) -> Incomplete: ... @@ -1063,12 +549,8 @@ class Model: def disableDebugSol(self) -> Incomplete: ... def disablePropagation(self, onlyroot: Incomplete = ...) -> Incomplete: ... def dropEvent(self, eventtype: Incomplete, eventhdlr: Incomplete) -> Incomplete: ... - def dropRowEvent( - self, row: Incomplete, eventtype: Incomplete, eventhdlr: Incomplete - ) -> Incomplete: ... - def dropVarEvent( - self, var: Incomplete, eventtype: Incomplete, eventhdlr: Incomplete - ) -> Incomplete: ... + def dropRowEvent(self, row: Incomplete, eventtype: Incomplete, eventhdlr: Incomplete) -> Incomplete: ... + def dropVarEvent(self, var: Incomplete, eventtype: Incomplete, eventhdlr: Incomplete) -> Incomplete: ... def enableDebugSol(self) -> Incomplete: ... def enableExactSolving(self, enable: Incomplete) -> Incomplete: ... def enableReoptimization(self, enable: Incomplete = ...) -> Incomplete: ... @@ -1085,7 +567,7 @@ class Model: def fixVarProbing(self, var: Incomplete, fixedval: Incomplete) -> Incomplete: ... def flushRowExtensions(self, row: Incomplete) -> Incomplete: ... def frac(self, value: Incomplete) -> Incomplete: ... - def free(self) -> None: ... + def free(self) -> Incomplete: ... def freeBendersSubproblems(self) -> Incomplete: ... def freeProb(self) -> Incomplete: ... def freeReoptSolve(self) -> Incomplete: ... @@ -1095,32 +577,17 @@ class Model: def from_ptr(capsule: Incomplete, take_ownership: Incomplete) -> Incomplete: ... def generateIIS(self) -> Incomplete: ... def getActivity(self, cons: Incomplete, sol: Incomplete = ...) -> Incomplete: ... - def getBendersAuxiliaryVar( - self, probnumber: Incomplete, benders: Incomplete = ... - ) -> Incomplete: ... - def getBendersSubproblem( - self, probnumber: Incomplete, benders: Incomplete = ... - ) -> Incomplete: ... - def getBendersVar( - self, var: Incomplete, benders: Incomplete = ..., probnumber: Incomplete = ... - ) -> Incomplete: ... + def getBendersAuxiliaryVar(self, probnumber: Incomplete, benders: Incomplete = ...) -> Incomplete: ... + def getBendersSubproblem(self, probnumber: Incomplete, benders: Incomplete = ...) -> Incomplete: ... + def getBendersVar(self, var: Incomplete, benders: Incomplete = ..., probnumber: Incomplete = ...) -> Incomplete: ... def getBestChild(self) -> Incomplete: ... def getBestLeaf(self) -> Incomplete: ... def getBestNode(self) -> Incomplete: ... def getBestSibling(self) -> Incomplete: ... def getBestSol(self) -> Incomplete: ... def getBestboundNode(self) -> Incomplete: ... - def getBipartiteGraphRepresentation( - self, - prev_col_features: Incomplete = ..., - prev_edge_features: Incomplete = ..., - prev_row_features: Incomplete = ..., - static_only: Incomplete = ..., - suppress_warnings: Incomplete = ..., - ) -> Incomplete: ... - def getBranchScoreMultiple( - self, var: Incomplete, gains: Incomplete - ) -> Incomplete: ... + def getBipartiteGraphRepresentation(self, prev_col_features: Incomplete = ..., prev_edge_features: Incomplete = ..., prev_row_features: Incomplete = ..., static_only: Incomplete = ..., suppress_warnings: Incomplete = ...) -> Incomplete: ... + def getBranchScoreMultiple(self, var: Incomplete, gains: Incomplete) -> Incomplete: ... def getCapacityKnapsack(self, cons: Incomplete) -> Incomplete: ... def getChildren(self) -> Incomplete: ... def getColRedCost(self, col: Incomplete) -> Incomplete: ... @@ -1131,15 +598,11 @@ class Model: def getConss(self, transformed: Incomplete = ...) -> Incomplete: ... def getCurrentNode(self) -> Incomplete: ... def getCutEfficacy(self, cut: Incomplete, sol: Incomplete = ...) -> Incomplete: ... - def getCutLPSolCutoffDistance( - self, cut: Incomplete, sol: Incomplete - ) -> Incomplete: ... + def getCutLPSolCutoffDistance(self, cut: Incomplete, sol: Incomplete) -> Incomplete: ... def getCutoffbound(self) -> Incomplete: ... def getDepth(self) -> Incomplete: ... def getDualMultiplier(self, cons: Incomplete) -> Incomplete: ... - def getDualSolVal( - self, cons: Incomplete, boundconstraint: Incomplete = ... - ) -> Incomplete: ... + def getDualSolVal(self, cons: Incomplete, boundconstraint: Incomplete = ...) -> Incomplete: ... def getDualbound(self) -> Incomplete: ... def getDualboundRoot(self) -> Incomplete: ... def getDualfarkasKnapsack(self, cons: Incomplete) -> Incomplete: ... @@ -1164,6 +627,9 @@ class Model: def getLowerbound(self) -> Incomplete: ... def getMajorVersion(self) -> Incomplete: ... def getMaxDepth(self) -> Incomplete: ... + def getMemExternEstim(self) -> Incomplete: ... + def getMemTotal(self) -> Incomplete: ... + def getMemUsed(self) -> Incomplete: ... def getMinorVersion(self) -> Incomplete: ... def getNBestSolsFound(self) -> Incomplete: ... def getNBinVars(self) -> Incomplete: ... @@ -1182,9 +648,6 @@ class Model: def getNLPIterations(self) -> Incomplete: ... def getNLPRows(self) -> Incomplete: ... def getNLPs(self) -> Incomplete: ... - def getMemUsed(self) -> int: ... - def getMemTotal(self) -> int: ... - def getMemExternEstim(self) -> int: ... def getNLeaves(self) -> Incomplete: ... def getNLimSolsFound(self) -> Incomplete: ... def getNNlRows(self) -> Incomplete: ... @@ -1196,17 +659,12 @@ class Model: def getNSols(self) -> Incomplete: ... def getNSolsFound(self) -> Incomplete: ... def getNStrongbranchLPIterations(self) -> Incomplete: ... - def getPrimalDualIntegral(self) -> Incomplete: ... def getNTotalNodes(self) -> Incomplete: ... def getNVars(self, transformed: Incomplete = ...) -> Incomplete: ... def getNVarsAnd(self, and_cons: Incomplete) -> Incomplete: ... def getNlRowActivityBounds(self, nlrow: Incomplete) -> Incomplete: ... - def getNlRowSolActivity( - self, nlrow: Incomplete, sol: Incomplete = ... - ) -> Incomplete: ... - def getNlRowSolFeasibility( - self, nlrow: Incomplete, sol: Incomplete = ... - ) -> Incomplete: ... + def getNlRowSolActivity(self, nlrow: Incomplete, sol: Incomplete = ...) -> Incomplete: ... + def getNlRowSolFeasibility(self, nlrow: Incomplete, sol: Incomplete = ...) -> Incomplete: ... def getNlRows(self) -> Incomplete: ... def getObjVal(self, original: Incomplete = ...) -> Incomplete: ... def getObjective(self) -> Incomplete: ... @@ -1218,6 +676,7 @@ class Model: def getParams(self) -> Incomplete: ... def getPlungeDepth(self) -> Incomplete: ... def getPresolvingTime(self) -> Incomplete: ... + def getPrimalDualIntegral(self) -> Incomplete: ... def getPrimalRay(self) -> Incomplete: ... def getPrimalRayVal(self, var: Incomplete) -> Incomplete: ... def getPrimalbound(self) -> Incomplete: ... @@ -1235,22 +694,13 @@ class Model: def getRowLinear(self, cons: Incomplete) -> Incomplete: ... def getRowNumIntCols(self, row: Incomplete) -> Incomplete: ... def getRowObjParallelism(self, row: Incomplete) -> Incomplete: ... - def getRowParallelism( - self, row1: Incomplete, row2: Incomplete, orthofunc: Incomplete = ... - ) -> Incomplete: ... + def getRowParallelism(self, row1: Incomplete, row2: Incomplete, orthofunc: Incomplete = ...) -> Incomplete: ... def getSiblings(self) -> Incomplete: ... - def getSlack( - self, cons: Incomplete, sol: Incomplete = ..., side: Incomplete = ... - ) -> Incomplete: ... + def getSlack(self, cons: Incomplete, sol: Incomplete = ..., side: Incomplete = ...) -> Incomplete: ... def getSlackVarIndicator(self, cons: Incomplete) -> Incomplete: ... - def getSolObjVal( - self, sol: Incomplete, original: Incomplete = ... - ) -> Incomplete: ... + def getSolObjVal(self, sol: Incomplete, original: Incomplete = ...) -> Incomplete: ... def getSolTime(self, sol: Incomplete) -> Incomplete: ... - @overload - def getSolVal(self, sol: Solution, expr: Union[Expr, GenExpr]) -> float: ... - @overload - def getSolVal(self, sol: Solution, expr: MatrixExpr) -> np.ndarray: ... + def getSolVal(self, sol: Incomplete, expr: Incomplete) -> Incomplete: ... def getSols(self) -> Incomplete: ... def getSolvingTime(self) -> Incomplete: ... def getStage(self) -> Incomplete: ... @@ -1262,27 +712,14 @@ class Model: def getTransformedCons(self, cons: Incomplete) -> Incomplete: ... def getTransformedVar(self, var: Incomplete) -> Incomplete: ... def getTreesizeEstimation(self) -> Incomplete: ... - @overload - def getVal(self, expr: Union[Expr, GenExpr]) -> float: ... - @overload - def getVal(self, expr: MatrixExpr) -> np.ndarray: ... + def getVal(self, expr: Incomplete) -> Incomplete: ... def getValsLinear(self, cons: Incomplete) -> Incomplete: ... def getVarDict(self, transformed: Incomplete = ...) -> Incomplete: ... def getVarLbDive(self, var: Incomplete) -> Incomplete: ... - def getVarPseudocost( - self, var: Incomplete, branchdir: Incomplete - ) -> Incomplete: ... - def getVarPseudocostScore( - self, var: Incomplete, solVal: Incomplete - ) -> Incomplete: ... + def getVarPseudocost(self, var: Incomplete, branchdir: Incomplete) -> Incomplete: ... + def getVarPseudocostScore(self, var: Incomplete, solVal: Incomplete) -> Incomplete: ... def getVarRedcost(self, var: Incomplete) -> Incomplete: ... - def getVarStrongbranch( - self, - var: Incomplete, - itlim: Incomplete, - idempotent: Incomplete = ..., - integral: Incomplete = ..., - ) -> Incomplete: ... + def getVarStrongbranch(self, var: Incomplete, itlim: Incomplete, idempotent: Incomplete = ..., integral: Incomplete = ...) -> Incomplete: ... def getVarStrongbranchLast(self, var: Incomplete) -> Incomplete: ... def getVarStrongbranchNode(self, var: Incomplete) -> Incomplete: ... def getVarUbDive(self, var: Incomplete) -> Incomplete: ... @@ -1293,153 +730,28 @@ class Model: def hideOutput(self, quiet: Incomplete = ...) -> Incomplete: ... def inProbing(self) -> Incomplete: ... def inRepropagation(self) -> Incomplete: ... - def includeBenders( - self, - benders: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete = ..., - cutlp: Incomplete = ..., - cutpseudo: Incomplete = ..., - cutrelax: Incomplete = ..., - shareaux: Incomplete = ..., - ) -> Incomplete: ... + def includeBenders(self, benders: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete = ..., cutlp: Incomplete = ..., cutpseudo: Incomplete = ..., cutrelax: Incomplete = ..., shareaux: Incomplete = ...) -> Incomplete: ... def includeBendersDefaultCuts(self, benders: Incomplete) -> Incomplete: ... - def includeBenderscut( - self, - benders: Incomplete, - benderscut: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete = ..., - islpcut: Incomplete = ..., - ) -> Incomplete: ... - def includeBranchrule( - self, - branchrule: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete, - maxdepth: Incomplete, - maxbounddist: Incomplete, - ) -> Incomplete: ... - def includeConshdlr( - self, - conshdlr: Incomplete, - name: Incomplete, - desc: Incomplete, - sepapriority: Incomplete = ..., - enfopriority: Incomplete = ..., - chckpriority: Incomplete = ..., - sepafreq: Incomplete = ..., - propfreq: Incomplete = ..., - eagerfreq: Incomplete = ..., - maxprerounds: Incomplete = ..., - delaysepa: Incomplete = ..., - delayprop: Incomplete = ..., - needscons: Incomplete = ..., - proptiming: Incomplete = ..., - presoltiming: Incomplete = ..., - ) -> Incomplete: ... - def includeCutsel( - self, - cutsel: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete, - ) -> Incomplete: ... + def includeBenderscut(self, benders: Incomplete, benderscut: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete = ..., islpcut: Incomplete = ...) -> Incomplete: ... + def includeBranchrule(self, branchrule: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete, maxdepth: Incomplete, maxbounddist: Incomplete) -> Incomplete: ... + def includeConshdlr(self, conshdlr: Incomplete, name: Incomplete, desc: Incomplete, sepapriority: Incomplete = ..., enfopriority: Incomplete = ..., chckpriority: Incomplete = ..., sepafreq: Incomplete = ..., propfreq: Incomplete = ..., eagerfreq: Incomplete = ..., maxprerounds: Incomplete = ..., delaysepa: Incomplete = ..., delayprop: Incomplete = ..., needscons: Incomplete = ..., proptiming: Incomplete = ..., presoltiming: Incomplete = ...) -> Incomplete: ... + def includeCutsel(self, cutsel: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete) -> Incomplete: ... def includeDefaultPlugins(self) -> Incomplete: ... - def includeEventhdlr( - self, eventhdlr: Incomplete, name: Incomplete, desc: Incomplete - ) -> Incomplete: ... - def includeHeur( - self, - heur: Incomplete, - name: Incomplete, - desc: Incomplete, - dispchar: Incomplete, - priority: Incomplete = ..., - freq: Incomplete = ..., - freqofs: Incomplete = ..., - maxdepth: Incomplete = ..., - timingmask: Incomplete = ..., - usessubscip: Incomplete = ..., - ) -> Incomplete: ... - def includeIISfinder( - self, - iisfinder: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete = ..., - freq: Incomplete = ..., - ) -> Incomplete: ... - def includeNodesel( - self, - nodesel: Incomplete, - name: Incomplete, - desc: Incomplete, - stdpriority: Incomplete, - memsavepriority: Incomplete, - ) -> Incomplete: ... - def includePresol( - self, - presol: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete, - maxrounds: Incomplete, - timing: Incomplete = ..., - ) -> Incomplete: ... - def includePricer( - self, - pricer: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete = ..., - delay: Incomplete = ..., - ) -> Incomplete: ... - def includeProp( - self, - prop: Incomplete, - name: Incomplete, - desc: Incomplete, - presolpriority: Incomplete, - presolmaxrounds: Incomplete, - proptiming: Incomplete, - presoltiming: Incomplete = ..., - priority: Incomplete = ..., - freq: Incomplete = ..., - delay: Incomplete = ..., - ) -> Incomplete: ... - def includeReader( - self, reader: Incomplete, name: Incomplete, desc: Incomplete, ext: Incomplete - ) -> Incomplete: ... - def includeRelax( - self, - relax: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete = ..., - freq: Incomplete = ..., - ) -> Incomplete: ... - def includeSepa( - self, - sepa: Incomplete, - name: Incomplete, - desc: Incomplete, - priority: Incomplete = ..., - freq: Incomplete = ..., - maxbounddist: Incomplete = ..., - usessubscip: Incomplete = ..., - delay: Incomplete = ..., - ) -> Incomplete: ... + def includeEventhdlr(self, eventhdlr: Incomplete, name: Incomplete, desc: Incomplete) -> Incomplete: ... + def includeHeur(self, heur: Incomplete, name: Incomplete, desc: Incomplete, dispchar: Incomplete, priority: Incomplete = ..., freq: Incomplete = ..., freqofs: Incomplete = ..., maxdepth: Incomplete = ..., timingmask: Incomplete = ..., usessubscip: Incomplete = ...) -> Incomplete: ... + def includeIISfinder(self, iisfinder: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete = ..., freq: Incomplete = ...) -> Incomplete: ... + def includeNodesel(self, nodesel: Incomplete, name: Incomplete, desc: Incomplete, stdpriority: Incomplete, memsavepriority: Incomplete) -> Incomplete: ... + def includePresol(self, presol: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete, maxrounds: Incomplete, timing: Incomplete = ...) -> Incomplete: ... + def includePricer(self, pricer: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete = ..., delay: Incomplete = ...) -> Incomplete: ... + def includeProp(self, prop: Incomplete, name: Incomplete, desc: Incomplete, presolpriority: Incomplete, presolmaxrounds: Incomplete, proptiming: Incomplete, presoltiming: Incomplete = ..., priority: Incomplete = ..., freq: Incomplete = ..., delay: Incomplete = ...) -> Incomplete: ... + def includeReader(self, reader: Incomplete, name: Incomplete, desc: Incomplete, ext: Incomplete) -> Incomplete: ... + def includeRelax(self, relax: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete = ..., freq: Incomplete = ...) -> Incomplete: ... + def includeSepa(self, sepa: Incomplete, name: Incomplete, desc: Incomplete, priority: Incomplete = ..., freq: Incomplete = ..., maxbounddist: Incomplete = ..., usessubscip: Incomplete = ..., delay: Incomplete = ...) -> Incomplete: ... def infinity(self) -> Incomplete: ... def initBendersDefault(self, subproblems: Incomplete) -> Incomplete: ... def interruptSolve(self) -> Incomplete: ... def isAndConsSorted(self, and_cons: Incomplete) -> Incomplete: ... - def isCutEfficacious( - self, cut: Incomplete, sol: Incomplete = ... - ) -> Incomplete: ... + def isCutEfficacious(self, cut: Incomplete, sol: Incomplete = ...) -> Incomplete: ... def isEQ(self, val1: Incomplete, val2: Incomplete) -> Incomplete: ... def isExact(self) -> Incomplete: ... def isFeasEQ(self, val1: Incomplete, val2: Incomplete) -> Incomplete: ... @@ -1455,7 +767,7 @@ class Model: def isGT(self, val1: Incomplete, val2: Incomplete) -> Incomplete: ... def isHugeValue(self, val: Incomplete) -> Incomplete: ... def isInfinity(self, value: Incomplete) -> Incomplete: ... - def isIntegral(self, value: float) -> bool: ... + def isIntegral(self, value: Incomplete) -> Incomplete: ... def isLE(self, val1: Incomplete, val2: Incomplete) -> Incomplete: ... def isLPSolBasic(self) -> Incomplete: ... def isLT(self, val1: Incomplete, val2: Incomplete) -> Incomplete: ... @@ -1464,7 +776,7 @@ class Model: def isObjChangedProbing(self) -> Incomplete: ... def isObjIntegral(self) -> Incomplete: ... def isPositive(self, val: Incomplete) -> Incomplete: ... - def isReoptEnabled(self) -> bool: ... + def isReoptEnabled(self) -> Incomplete: ... def isZero(self, value: Incomplete) -> Incomplete: ... def lpiGetIterations(self) -> Incomplete: ... def markDoNotAggrVar(self, var: Incomplete) -> Incomplete: ... @@ -1477,24 +789,15 @@ class Model: def printCons(self, constraint: Incomplete) -> Incomplete: ... def printExternalCodeVersions(self) -> Incomplete: ... def printNlRow(self, nlrow: Incomplete) -> Incomplete: ... - def printProblem( - self, - ext: Incomplete = ..., - trans: Incomplete = ..., - genericnames: Incomplete = ..., - ) -> Incomplete: ... + def printProblem(self, ext: Incomplete = ..., trans: Incomplete = ..., genericnames: Incomplete = ...) -> Incomplete: ... def printRow(self, row: Incomplete) -> Incomplete: ... - def printSol( - self, solution: Incomplete = ..., write_zeros: Incomplete = ... - ) -> Incomplete: ... + def printSol(self, solution: Incomplete = ..., write_zeros: Incomplete = ...) -> Incomplete: ... def printStatistics(self, filename: Incomplete = ...) -> Incomplete: ... def printStatisticsJson(self) -> Incomplete: ... def printVersion(self) -> Incomplete: ... def propagateProbing(self, maxproprounds: Incomplete) -> Incomplete: ... def readParams(self, file: Incomplete) -> Incomplete: ... - def readProblem( - self, filename: Incomplete, extension: Incomplete = ... - ) -> Incomplete: ... + def readProblem(self, filename: Incomplete, extension: Incomplete = ...) -> Incomplete: ... def readSol(self, filename: Incomplete) -> Incomplete: ... def readSolFile(self, filename: Incomplete) -> Incomplete: ... def redirectOutput(self) -> Incomplete: ... @@ -1504,26 +807,14 @@ class Model: def resetParam(self, name: Incomplete) -> Incomplete: ... def resetParams(self) -> Incomplete: ... def restartSolve(self) -> Incomplete: ... - def separateSol( - self, - sol: Incomplete = ..., - pretendroot: Incomplete = ..., - allowlocal: Incomplete = ..., - onlydelayed: Incomplete = ..., - ) -> Incomplete: ... - def setBendersSubproblemIsConvex( - self, benders: Incomplete, probnumber: Incomplete, isconvex: Incomplete = ... - ) -> Incomplete: ... + def separateSol(self, sol: Incomplete = ..., pretendroot: Incomplete = ..., allowlocal: Incomplete = ..., onlydelayed: Incomplete = ...) -> Incomplete: ... + def setBendersSubproblemIsConvex(self, benders: Incomplete, probnumber: Incomplete, isconvex: Incomplete = ...) -> Incomplete: ... def setBoolParam(self, name: Incomplete, value: Incomplete) -> Incomplete: ... def setCharParam(self, name: Incomplete, value: Incomplete) -> Incomplete: ... def setCheck(self, cons: Incomplete, newCheck: Incomplete) -> Incomplete: ... - def setEmphasis( - self, paraemphasis: Incomplete, quiet: Incomplete = ... - ) -> Incomplete: ... + def setEmphasis(self, paraemphasis: Incomplete, quiet: Incomplete = ...) -> Incomplete: ... def setEnforced(self, cons: Incomplete, newEnf: Incomplete) -> Incomplete: ... - def setHeurTiming( - self, heurname: Incomplete, heurtiming: Incomplete - ) -> Incomplete: ... + def setHeurTiming(self, heurname: Incomplete, heurtiming: Incomplete) -> Incomplete: ... def setHeuristics(self, setting: Incomplete) -> Incomplete: ... def setInitial(self, cons: Incomplete, newInit: Incomplete) -> Incomplete: ... def setIntParam(self, name: Incomplete, value: Incomplete) -> Incomplete: ... @@ -1533,9 +824,7 @@ class Model: def setMinimize(self) -> Incomplete: ... def setModifiable(self, cons: Incomplete, newMod: Incomplete) -> Incomplete: ... def setObjIntegral(self) -> Incomplete: ... - def setObjective( - self, expr: Incomplete, sense: Incomplete = ..., clear: Incomplete = ... - ) -> Incomplete: ... + def setObjective(self, expr: Incomplete, sense: Incomplete = ..., clear: Incomplete = ...) -> Incomplete: ... def setObjlimit(self, objlimit: Incomplete) -> Incomplete: ... def setParam(self, name: Incomplete, value: Incomplete) -> Incomplete: ... def setParams(self, params: Incomplete) -> Incomplete: ... @@ -1546,118 +835,41 @@ class Model: def setRelaxSolVal(self, var: Incomplete, val: Incomplete) -> Incomplete: ... def setRemovable(self, cons: Incomplete, newRem: Incomplete) -> Incomplete: ... def setSeparating(self, setting: Incomplete) -> Incomplete: ... - def setSolVal( - self, solution: Incomplete, var: Incomplete, val: Incomplete - ) -> Incomplete: ... + def setSolVal(self, solution: Incomplete, var: Incomplete, val: Incomplete) -> Incomplete: ... def setStringParam(self, name: Incomplete, value: Incomplete) -> Incomplete: ... - def setupBendersSubproblem( - self, - probnumber: Incomplete, - benders: Incomplete = ..., - solution: Incomplete = ..., - checktype: Incomplete = ..., - ) -> Incomplete: ... - def solveBendersSubproblem( - self, - probnumber: Incomplete, - solvecip: Incomplete, - benders: Incomplete = ..., - solution: Incomplete = ..., - ) -> Incomplete: ... + def setupBendersSubproblem(self, probnumber: Incomplete, benders: Incomplete = ..., solution: Incomplete = ..., checktype: Incomplete = ...) -> Incomplete: ... + def solveBendersSubproblem(self, probnumber: Incomplete, solvecip: Incomplete, benders: Incomplete = ..., solution: Incomplete = ...) -> Incomplete: ... def solveConcurrent(self) -> Incomplete: ... def solveDiveLP(self, itlim: Incomplete = ...) -> Incomplete: ... def solveProbingLP(self, itlim: Incomplete = ...) -> Incomplete: ... - def solveProbingLPWithPricing( - self, - pretendroot: Incomplete = ..., - displayinfo: Incomplete = ..., - maxpricerounds: Incomplete = ..., - ) -> Incomplete: ... + def solveProbingLPWithPricing(self, pretendroot: Incomplete = ..., displayinfo: Incomplete = ..., maxpricerounds: Incomplete = ...) -> Incomplete: ... def sortAndCons(self, and_cons: Incomplete) -> Incomplete: ... def startDive(self) -> Incomplete: ... def startProbing(self) -> Incomplete: ... def startStrongbranch(self) -> Incomplete: ... - def tightenVarLb( - self, var: Incomplete, lb: Incomplete, force: Incomplete = ... - ) -> Incomplete: ... - def tightenVarLbGlobal( - self, var: Incomplete, lb: Incomplete, force: Incomplete = ... - ) -> Incomplete: ... - def tightenVarUb( - self, var: Incomplete, ub: Incomplete, force: Incomplete = ... - ) -> Incomplete: ... - def tightenVarUbGlobal( - self, var: Incomplete, ub: Incomplete, force: Incomplete = ... - ) -> Incomplete: ... + def tightenVarLb(self, var: Incomplete, lb: Incomplete, force: Incomplete = ...) -> Incomplete: ... + def tightenVarLbGlobal(self, var: Incomplete, lb: Incomplete, force: Incomplete = ...) -> Incomplete: ... + def tightenVarUb(self, var: Incomplete, ub: Incomplete, force: Incomplete = ...) -> Incomplete: ... + def tightenVarUbGlobal(self, var: Incomplete, ub: Incomplete, force: Incomplete = ...) -> Incomplete: ... def to_ptr(self, give_ownership: Incomplete) -> Incomplete: ... - def translateSubSol( - self, sub_model: Incomplete, sol: Incomplete, heur: Incomplete - ) -> Incomplete: ... - def trySol( - self, - solution: Incomplete, - printreason: Incomplete = ..., - completely: Incomplete = ..., - checkbounds: Incomplete = ..., - checkintegrality: Incomplete = ..., - checklprows: Incomplete = ..., - free: Incomplete = ..., - ) -> Incomplete: ... - def updateBendersLowerbounds( - self, lowerbounds: Incomplete, benders: Incomplete = ... - ) -> Incomplete: ... + def translateSubSol(self, sub_model: Incomplete, sol: Incomplete, heur: Incomplete) -> Incomplete: ... + def trySol(self, solution: Incomplete, printreason: Incomplete = ..., completely: Incomplete = ..., checkbounds: Incomplete = ..., checkintegrality: Incomplete = ..., checklprows: Incomplete = ..., free: Incomplete = ...) -> Incomplete: ... + def updateBendersLowerbounds(self, lowerbounds: Incomplete, benders: Incomplete = ...) -> Incomplete: ... def updateNodeLowerbound(self, node: Incomplete, lb: Incomplete) -> Incomplete: ... - def updateVarPseudocost( - self, - var: Incomplete, - valdelta: Incomplete, - objdelta: Incomplete, - weight: Incomplete, - ) -> Incomplete: ... + def updateVarPseudocost(self, var: Incomplete, valdelta: Incomplete, objdelta: Incomplete, weight: Incomplete) -> Incomplete: ... def version(self) -> Incomplete: ... - def writeBestSol( - self, filename: Incomplete = ..., write_zeros: Incomplete = ... - ) -> Incomplete: ... - def writeBestTransSol( - self, filename: Incomplete = ..., write_zeros: Incomplete = ... - ) -> Incomplete: ... + def writeBestSol(self, filename: Incomplete = ..., write_zeros: Incomplete = ...) -> Incomplete: ... + def writeBestTransSol(self, filename: Incomplete = ..., write_zeros: Incomplete = ...) -> Incomplete: ... def writeLP(self, filename: Incomplete = ...) -> Incomplete: ... - def writeMIP( - self, - filename: Incomplete, - genericnames: Incomplete = ..., - origobj: Incomplete = ..., - lazyconss: Incomplete = ..., - ) -> Incomplete: ... + def writeMIP(self, filename: Incomplete, genericnames: Incomplete = ..., origobj: Incomplete = ..., lazyconss: Incomplete = ...) -> Incomplete: ... def writeName(self, var: Incomplete) -> Incomplete: ... - def writeParams( - self, - filename: Incomplete = ..., - comments: Incomplete = ..., - onlychanged: Incomplete = ..., - verbose: Incomplete = ..., - ) -> Incomplete: ... - def writeProblem( - self, - filename: Incomplete = ..., - trans: Incomplete = ..., - genericnames: Incomplete = ..., - verbose: Incomplete = ..., - ) -> Incomplete: ... - def writeSol( - self, - solution: Incomplete, - filename: Incomplete = ..., - write_zeros: Incomplete = ..., - ) -> Incomplete: ... + def writeParams(self, filename: Incomplete = ..., comments: Incomplete = ..., onlychanged: Incomplete = ..., verbose: Incomplete = ...) -> Incomplete: ... + def writeProblem(self, filename: Incomplete = ..., trans: Incomplete = ..., genericnames: Incomplete = ..., verbose: Incomplete = ...) -> Incomplete: ... + def writeSol(self, solution: Incomplete, filename: Incomplete = ..., write_zeros: Incomplete = ...) -> Incomplete: ... def writeStatistics(self, filename: Incomplete = ...) -> Incomplete: ... def writeStatisticsJson(self, filename: Incomplete = ...) -> Incomplete: ... - def writeTransSol( - self, - solution: Incomplete, - filename: Incomplete = ..., - write_zeros: Incomplete = ..., - ) -> Incomplete: ... + def writeTransSol(self, solution: Incomplete, filename: Incomplete = ..., write_zeros: Incomplete = ...) -> Incomplete: ... + def __del__(self) -> Incomplete: ... def __eq__(self, other: object, /) -> bool: ... def __ge__(self, other: object, /) -> bool: ... def __gt__(self, other: object, /) -> bool: ... @@ -1739,6 +951,13 @@ class Op: sqrt: ClassVar[str] = ... varidx: ClassVar[str] = ... +class PY_SCIP_BASESTAT: + BASIC: ClassVar[int] = ... + LOWER: ClassVar[int] = ... + UPPER: ClassVar[int] = ... + ZERO: ClassVar[int] = ... + def __init__(self) -> None: ... + class PY_SCIP_BENDERSENFOTYPE: CHECK: ClassVar[int] = ... LP: ClassVar[int] = ... @@ -1837,13 +1056,6 @@ class PY_SCIP_LOCKTYPE: MODEL: ClassVar[int] = ... def __init__(self) -> None: ... -class PY_SCIP_BASESTAT: - LOWER: ClassVar[int] = ... - BASIC: ClassVar[int] = ... - UPPER: ClassVar[int] = ... - ZERO: ClassVar[int] = ... - def __init__(self) -> None: ... - class PY_SCIP_LPPARAM: BARRIERCONVTOL: ClassVar[int] = ... CONDITIONLIMIT: ClassVar[int] = ... @@ -2012,9 +1224,7 @@ class PowExpr(GenExpr): class Presol: model: Incomplete def __init__(self) -> None: ... - def presolexec( - self, nrounds: Incomplete, presoltiming: Incomplete - ) -> Incomplete: ... + def presolexec(self, nrounds: Incomplete, presoltiming: Incomplete) -> Incomplete: ... def presolexit(self) -> Incomplete: ... def presolexitpre(self) -> Incomplete: ... def presolfree(self) -> Incomplete: ... @@ -2050,16 +1260,8 @@ class Prop: def propinit(self) -> Incomplete: ... def propinitpre(self) -> Incomplete: ... def propinitsol(self) -> Incomplete: ... - def proppresol( - self, nrounds: Incomplete, presoltiming: Incomplete, result_dict: Incomplete - ) -> Incomplete: ... - def propresprop( - self, - confvar: Incomplete, - inferinfo: Incomplete, - bdtype: Incomplete, - relaxedbd: Incomplete, - ) -> Incomplete: ... + def proppresol(self, nrounds: Incomplete, presoltiming: Incomplete, result_dict: Incomplete) -> Incomplete: ... + def propresprop(self, confvar: Incomplete, inferinfo: Incomplete, bdtype: Incomplete, relaxedbd: Incomplete) -> Incomplete: ... @disjoint_base class Reader: @@ -2068,25 +1270,7 @@ class Reader: def __init__(self) -> None: ... def readerfree(self) -> Incomplete: ... def readerread(self, filename: Incomplete) -> Incomplete: ... - def readerwrite( - self, - file: Incomplete, - name: Incomplete, - transformed: Incomplete, - objsense: Incomplete, - objoffset: Incomplete, - objscale: Incomplete, - binvars: Incomplete, - intvars: Incomplete, - implvars: Incomplete, - contvars: Incomplete, - fixedvars: Incomplete, - startnvars: Incomplete, - conss: Incomplete, - maxnconss: Incomplete, - startnconss: Incomplete, - genericnames: Incomplete, - ) -> Incomplete: ... + def readerwrite(self, file: Incomplete, name: Incomplete, transformed: Incomplete, objsense: Incomplete, objoffset: Incomplete, objscale: Incomplete, binvars: Incomplete, intvars: Incomplete, implvars: Incomplete, contvars: Incomplete, fixedvars: Incomplete, startnvars: Incomplete, conss: Incomplete, maxnconss: Incomplete, startnconss: Incomplete, genericnames: Incomplete) -> Incomplete: ... @disjoint_base class Relax: @@ -2179,25 +1363,7 @@ class Statistics: dual_bound: float | None gap: float | None primal_dual_integral: float | None - def __init__( - self, - status: str, - total_time: float, - solving_time: float, - presolving_time: float, - reading_time: float, - copying_time: float, - problem_name: str, - presolved_problem_name: str, - n_runs: int | None, - n_nodes: int | None, - n_solutions_found: int, - first_solution: float | None, - primal_bound: float | None, - dual_bound: float | None, - gap: float | None, - primal_dual_integral: float | None, - ) -> None: ... + def __init__(self, status: str, total_time: float, solving_time: float, presolving_time: float, reading_time: float, copying_time: float, problem_name: str, presolved_problem_name: str, n_runs: int | None, n_nodes: int | None, n_solutions_found: int, first_solution: float | None, primal_bound: float | None, dual_bound: float | None, gap: float | None, primal_dual_integral: float | None) -> None: ... @property def n_binary_vars(self) -> int: ... @property @@ -2238,7 +1404,6 @@ class SumExpr(GenExpr): class Term: vartuple: Incomplete def __init__(self, *vartuple: Incomplete) -> None: ... - def __mul__(self, other: Term, /) -> Term: ... def __eq__(self, other: object, /) -> bool: ... def __ge__(self, other: object, /) -> bool: ... def __getitem__(self, index: Incomplete, /) -> Incomplete: ... @@ -2247,11 +1412,13 @@ class Term: def __le__(self, other: object, /) -> bool: ... def __len__(self) -> int: ... def __lt__(self, other: object, /) -> bool: ... + def __mul__(self, other: Incomplete, /) -> Incomplete: ... def __ne__(self, other: object, /) -> bool: ... +@disjoint_base class UnaryExpr(GenExpr): def __init__(self, *args: Incomplete, **kwargs: Incomplete) -> None: ... - def __abs__(self) -> GenExpr: ... + def __abs__(self) -> Incomplete: ... @disjoint_base class VarExpr(GenExpr): diff --git a/tests/test_cons.py b/tests/test_cons.py index 623adf0d9..243014427 100644 --- a/tests/test_cons.py +++ b/tests/test_cons.py @@ -351,6 +351,39 @@ def test_cons_knapsack(): assert m.getDualsolKnapsack(knapsack_cons) == 0 assert m.getDualfarkasKnapsack(knapsack_cons) == 0 +def test_cons_cumulative(): + """Three jobs on a resource with capacity 3 must not overlap in demand. + + Job 1: duration 3, demand 2 + Job 2: duration 2, demand 3 + Job 3: duration 2, demand 1 + + Jobs 2 and 3 cannot run together (demand 3+1 > 3). Minimizing the sum of + start times yields start1=0, start2=3, start3=0. + """ + m = Model() + start1 = m.addVar("start1", vtype="I", lb=0, ub=10, obj=1) + start2 = m.addVar("start2", vtype="I", lb=0, ub=10, obj=1) + start3 = m.addVar("start3", vtype="I", lb=0, ub=10, obj=1) + durations = [3, 2, 2] + demands = [2, 3, 1] + capacity = 3 + + cumulative_cons = m.addConsCumulative([start1, start2, start3], durations, demands, capacity) + assert cumulative_cons.getConshdlrName() == "cumulative" + assert cumulative_cons.isCumulative() + + assert m.getConsNVars(cumulative_cons) == 3 + assert m.getConsVars(cumulative_cons) == [start1, start2, start3] + + m.setObjective(start1 + start2 + start3, "minimize") + m.optimize() + + assert m.isEQ(m.getVal(start1), 0) + assert m.isEQ(m.getVal(start2), 3) + assert m.isEQ(m.getVal(start3), 0) + assert m.isEQ(m.getObjVal(), 3) + def test_getValsLinear(): m = Model() x = m.addVar("x", lb=0, ub=2, obj=-1)