7from sys
import version_info
as _swig_python_version_info
9if __package__
or "." in __name__:
10 from .
import _pywraplp
15 import builtins
as __builtin__
21 strthis =
"proxy of " + self.this.__repr__()
22 except __builtin__.Exception:
24 return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
28 def set_instance_attr(self, name, value):
30 set(self, name, value)
31 elif name ==
"thisown":
33 elif hasattr(self, name)
and isinstance(getattr(type(self), name), property):
34 set(self, name, value)
36 raise AttributeError(
"You cannot add instance attributes to %s" % self)
37 return set_instance_attr
41 def set_class_attr(cls, name, value):
42 if hasattr(cls, name)
and not isinstance(getattr(cls, name), property):
45 raise AttributeError(
"You cannot add class attributes to %s" % cls)
50 """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""
52 return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())
57 """Meta class to enforce nondynamic attributes (no new attributes) for a class"""
75 This mathematical programming (MP) solver class is the main class
76 though which users build and solve problems.
79 thisown = property(
lambda x: x.this.own(),
lambda x, v: x.this.own(v), doc=
"The membership flag")
81 CLP_LINEAR_PROGRAMMING = _pywraplp.Solver_CLP_LINEAR_PROGRAMMING
82 GLPK_LINEAR_PROGRAMMING = _pywraplp.Solver_GLPK_LINEAR_PROGRAMMING
83 GLOP_LINEAR_PROGRAMMING = _pywraplp.Solver_GLOP_LINEAR_PROGRAMMING
84 PDLP_LINEAR_PROGRAMMING = _pywraplp.Solver_PDLP_LINEAR_PROGRAMMING
85 SCIP_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_SCIP_MIXED_INTEGER_PROGRAMMING
86 GLPK_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_GLPK_MIXED_INTEGER_PROGRAMMING
87 CBC_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_CBC_MIXED_INTEGER_PROGRAMMING
88 BOP_INTEGER_PROGRAMMING = _pywraplp.Solver_BOP_INTEGER_PROGRAMMING
89 SAT_INTEGER_PROGRAMMING = _pywraplp.Solver_SAT_INTEGER_PROGRAMMING
90 GUROBI_LINEAR_PROGRAMMING = _pywraplp.Solver_GUROBI_LINEAR_PROGRAMMING
91 GUROBI_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_GUROBI_MIXED_INTEGER_PROGRAMMING
92 CPLEX_LINEAR_PROGRAMMING = _pywraplp.Solver_CPLEX_LINEAR_PROGRAMMING
93 CPLEX_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_CPLEX_MIXED_INTEGER_PROGRAMMING
94 XPRESS_LINEAR_PROGRAMMING = _pywraplp.Solver_XPRESS_LINEAR_PROGRAMMING
95 XPRESS_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_XPRESS_MIXED_INTEGER_PROGRAMMING
98 r""" Create a solver with the given name and underlying solver backend."""
99 _pywraplp.Solver_swiginit(self, _pywraplp.new_Solver(name, problem_type))
100 __swig_destroy__ = _pywraplp.delete_Solver
105 Recommended factory method to create a MPSolver instance, especially in
108 It returns a newly created solver instance if successful, or a nullptr
109 otherwise. This can occur if the relevant interface is not linked in, or if
110 a needed license is not accessible for commercial solvers.
112 Ownership of the solver is passed on to the caller of this method.
113 It will accept both string names of the OptimizationProblemType enum, as
114 well as a short version (i.e. "SCIP_MIXED_INTEGER_PROGRAMMING" or "SCIP").
116 solver_id is case insensitive, and the following names are supported:
117 - CLP_LINEAR_PROGRAMMING or CLP
118 - CBC_MIXED_INTEGER_PROGRAMMING or CBC
119 - GLOP_LINEAR_PROGRAMMING or GLOP
120 - BOP_INTEGER_PROGRAMMING or BOP
121 - SAT_INTEGER_PROGRAMMING or SAT or CP_SAT
122 - SCIP_MIXED_INTEGER_PROGRAMMING or SCIP
123 - GUROBI_LINEAR_PROGRAMMING or GUROBI_LP
124 - GUROBI_MIXED_INTEGER_PROGRAMMING or GUROBI or GUROBI_MIP
125 - CPLEX_LINEAR_PROGRAMMING or CPLEX_LP
126 - CPLEX_MIXED_INTEGER_PROGRAMMING or CPLEX or CPLEX_MIP
127 - XPRESS_LINEAR_PROGRAMMING or XPRESS_LP
128 - XPRESS_MIXED_INTEGER_PROGRAMMING or XPRESS or XPRESS_MIP
129 - GLPK_LINEAR_PROGRAMMING or GLPK_LP
130 - GLPK_MIXED_INTEGER_PROGRAMMING or GLPK or GLPK_MIP
132 return _pywraplp.Solver_CreateSolver(solver_id)
137 Whether the given problem type is supported (this will depend on the
138 targets that you linked).
140 return _pywraplp.Solver_SupportsProblemType(problem_type)
143 return _pywraplp.Solver_IsMip(self)
147 Clears the objective (including the optimization direction), all variables
148 and constraints. All the other properties of the MPSolver (like the time
149 limit) are kept untouched.
151 return _pywraplp.Solver_Clear(self)
154 r""" Returns the number of variables."""
155 return _pywraplp.Solver_NumVariables(self)
159 Returns the array of variables handled by the MPSolver. (They are listed in
160 the order in which they were created.)
162 return _pywraplp.Solver_variables(self)
165 r"""Returns the variable at position index."""
166 return _pywraplp.Solver_variable(self, index)
170 Looks up a variable by name, and returns nullptr if it does not exist. The
171 first call has a O(n) complexity, as the variable name index is lazily
172 created upon first use. Will crash if variable names are not unique.
174 return _pywraplp.Solver_LookupVariable(self, var_name)
176 def Var(self, lb, ub, integer, name):
178 Creates a variable with the given bounds, integrality requirement and
179 name. Bounds can be finite or +/- MPSolver::infinity(). The MPSolver owns
180 the variable (i.e. the returned pointer is borrowed). Variable names are
181 optional. If you give an empty name, name() will auto-generate one for you
184 return _pywraplp.Solver_Var(self, lb, ub, integer, name)
187 r""" Creates a continuous variable."""
188 return _pywraplp.Solver_NumVar(self, lb, ub, name)
191 r""" Creates an integer variable."""
192 return _pywraplp.Solver_IntVar(self, lb, ub, name)
195 r""" Creates a boolean variable."""
196 return _pywraplp.Solver_BoolVar(self, name)
199 r""" Returns the number of constraints."""
200 return _pywraplp.Solver_NumConstraints(self)
204 Returns the array of constraints handled by the MPSolver.
206 They are listed in the order in which they were created.
208 return _pywraplp.Solver_constraints(self)
211 r""" Returns the constraint at the given index."""
212 return _pywraplp.Solver_constraint(self, index)
216 Looks up a constraint by name, and returns nullptr if it does not exist.
218 The first call has a O(n) complexity, as the constraint name index is
219 lazily created upon first use. Will crash if constraint names are not
222 return _pywraplp.Solver_LookupConstraint(self, constraint_name)
228 Creates a linear constraint with given bounds.
230 Bounds can be finite or +/- MPSolver::infinity(). The MPSolver class
231 assumes ownership of the constraint.
233 :rtype: :py:class:`MPConstraint`
234 :return: a pointer to the newly created constraint.
239 Creates a constraint with -infinity and +infinity bounds.
244 Creates a named constraint with given bounds.
249 Creates a named constraint with -infinity and +infinity bounds.
251 return _pywraplp.Solver_Constraint(self, *args)
254 r""" Returns the mutable objective object."""
255 return _pywraplp.Solver_Objective(self)
256 OPTIMAL = _pywraplp.Solver_OPTIMAL
258 FEASIBLE = _pywraplp.Solver_FEASIBLE
259 r""" feasible, or stopped by limit."""
260 INFEASIBLE = _pywraplp.Solver_INFEASIBLE
261 r""" proven infeasible."""
262 UNBOUNDED = _pywraplp.Solver_UNBOUNDED
263 r""" proven unbounded."""
264 ABNORMAL = _pywraplp.Solver_ABNORMAL
265 r""" abnormal, i.e., error of some kind."""
266 MODEL_INVALID = _pywraplp.Solver_MODEL_INVALID
267 r""" the model is trivially invalid (NaN coefficients, etc)."""
268 NOT_SOLVED = _pywraplp.Solver_NOT_SOLVED
269 r""" not been solved yet."""
274 Solves the problem using the default parameter values.
279 Solves the problem using the specified parameter values.
281 return _pywraplp.Solver_Solve(self, *args)
285 Writes the model using the solver internal write function. Currently only
286 available for Gurobi.
288 return _pywraplp.Solver_Write(self, file_name)
292 Advanced usage: compute the "activities" of all constraints, which are the
293 sums of their linear terms. The activities are returned in the same order
294 as constraints(), which is the order in which constraints were added; but
295 you can also use MPConstraint::index() to get a constraint's index.
297 return _pywraplp.Solver_ComputeConstraintActivities(self)
301 Advanced usage: Verifies the *correctness* of the solution.
303 It verifies that all variables must be within their domains, all
304 constraints must be satisfied, and the reported objective value must be
308 - This can only be called after Solve() was called.
309 - "tolerance" is interpreted as an absolute error threshold.
310 - For the objective value only, if the absolute error is too large,
311 the tolerance is interpreted as a relative error threshold instead.
312 - If "log_errors" is true, every single violation will be logged.
313 - If "tolerance" is negative, it will be set to infinity().
315 Most users should just set the --verify_solution flag and not bother using
316 this method directly.
318 return _pywraplp.Solver_VerifySolution(self, tolerance, log_errors)
322 Interrupts the Solve() execution to terminate processing if possible.
324 If the underlying interface supports interruption; it does that and returns
325 true regardless of whether there's an ongoing Solve() or not. The Solve()
326 call may still linger for a while depending on the conditions. If
327 interruption is not supported; returns false and does nothing.
328 MPSolver::SolverTypeSupportsInterruption can be used to check if
329 interruption is supported for a given solver type.
331 return _pywraplp.Solver_InterruptSolve(self)
334 r""" Encodes the current solution in a solution response protocol buffer."""
335 return _pywraplp.Solver_FillSolutionResponseProto(self, response)
340 Solves the model encoded by a MPModelRequest protocol buffer and fills the
341 solution encoded as a MPSolutionResponse. The solve is stopped prematurely
342 if interrupt is non-null at set to true during (or before) solving.
343 Interruption is only supported if SolverTypeSupportsInterruption() returns
344 true for the requested solver. Passing a non-null interruption with any
345 other solver type immediately returns an MPSOLVER_INCOMPATIBLE_OPTIONS
348 `interrupt` is non-const because the internal solver may set it to true
349 itself, in some cases.
351 Note(user): This attempts to first use `DirectlySolveProto()` (if
352 implemented). Consequently, this most likely does *not* override any of
353 the default parameters of the underlying solver. This behavior *differs*
354 from `MPSolver::Solve()` which by default sets the feasibility tolerance
355 and the gap limit (as of 2020/02/11, to 1e-7 and 0.0001, respectively).
357 return _pywraplp.Solver_SolveWithProto(model_request, response, interrupt)
360 r""" Exports model to protocol buffer."""
361 return _pywraplp.Solver_ExportModelToProto(self, output_model)
365 Advanced usage: pass solver specific parameters in text format.
367 The format is solver-specific and is the same as the corresponding solver
368 configuration file format. Returns true if the operation was successful.
370 return _pywraplp.Solver_SetSolverSpecificParametersAsString(self, parameters)
371 FREE = _pywraplp.Solver_FREE
372 AT_LOWER_BOUND = _pywraplp.Solver_AT_LOWER_BOUND
373 AT_UPPER_BOUND = _pywraplp.Solver_AT_UPPER_BOUND
374 FIXED_VALUE = _pywraplp.Solver_FIXED_VALUE
375 BASIC = _pywraplp.Solver_BASIC
382 You can use -MPSolver::infinity() for negative infinity.
384 return _pywraplp.Solver_infinity()
387 r""" Enables solver logging."""
388 return _pywraplp.Solver_EnableOutput(self)
391 r""" Suppresses solver logging."""
392 return _pywraplp.Solver_SuppressOutput(self)
395 r""" Returns the number of simplex iterations."""
396 return _pywraplp.Solver_iterations(self)
400 Returns the number of branch-and-bound nodes evaluated during the solve.
402 Only available for discrete problems.
404 return _pywraplp.Solver_nodes(self)
407 r""" Returns a string describing the underlying solver and its version."""
408 return _pywraplp.Solver_SolverVersion(self)
412 Advanced usage: computes the exact condition number of the current scaled
413 basis: L1norm(B) * L1norm(inverse(B)), where B is the scaled basis.
415 This method requires that a basis exists: it should be called after Solve.
416 It is only available for continuous problems. It is implemented for GLPK
417 but not CLP because CLP does not provide the API for doing it.
419 The condition number measures how well the constraint matrix is conditioned
420 and can be used to predict whether numerical issues will arise during the
421 solve: the model is declared infeasible whereas it is feasible (or
422 vice-versa), the solution obtained is not optimal or violates some
423 constraints, the resolution is slow because of repeated singularities.
425 The rule of thumb to interpret the condition number kappa is:
426 - o kappa <= 1e7: virtually no chance of numerical issues
427 - o 1e7 < kappa <= 1e10: small chance of numerical issues
428 - o 1e10 < kappa <= 1e13: medium chance of numerical issues
429 - o kappa > 1e13: high chance of numerical issues
431 The computation of the condition number depends on the quality of the LU
432 decomposition, so it is not very accurate when the matrix is ill
435 return _pywraplp.Solver_ComputeExactConditionNumber(self)
439 Some solvers (MIP only, not LP) can produce multiple solutions to the
440 problem. Returns true when another solution is available, and updates the
441 MPVariable* objects to make the new solution queryable. Call only after
444 The optimality properties of the additional solutions found, and whether or
445 not the solver computes them ahead of time or when NextSolution() is called
448 As of 2020-02-10, only Gurobi and SCIP support NextSolution(), see
449 linear_solver_interfaces_test for an example of how to configure these
450 solvers for multiple solutions. Other solvers return false unconditionally.
452 return _pywraplp.Solver_NextSolution(self)
455 return _pywraplp.Solver_set_time_limit(self, time_limit_milliseconds)
458 return _pywraplp.Solver_wall_time(self)
461 return _pywraplp.Solver_LoadModelFromProto(self, input_model)
464 return _pywraplp.Solver_LoadModelFromProtoKeepNames(self, input_model)
467 return _pywraplp.Solver_LoadModelFromProtoWithUniqueNamesOrDie(self, input_model)
470 return _pywraplp.Solver_LoadSolutionFromProto(self, *args)
473 return _pywraplp.Solver_ExportModelAsLpFormat(self, obfuscated)
476 return _pywraplp.Solver_ExportModelAsMpsFormat(self, fixed_format, obfuscated)
480 Set a hint for solution.
482 If a feasible or almost-feasible solution to the problem is already known,
483 it may be helpful to pass it to the solver so that it can be used. A
484 solver that supports this feature will try to use this information to
485 create its initial feasible solution.
487 Note that it may not always be faster to give a hint like this to the
488 solver. There is also no guarantee that the solver will use this hint or
489 try to return a solution "close" to this assignment in case of multiple
492 return _pywraplp.Solver_SetHint(self, variables, values)
495 r""" Sets the number of threads to be used by the solver."""
496 return _pywraplp.Solver_SetNumThreads(self, num_theads)
498 def Add(self, constraint, name=''):
499 if isinstance(constraint, bool):
505 return constraint.Extract(self, name)
507 def Sum(self, expr_array):
517 objective.SetMinimization()
518 if isinstance(expr, numbers.Number):
519 objective.SetOffset(expr)
521 coeffs = expr.GetCoeffs()
522 objective.SetOffset(coeffs.pop(OFFSET_KEY, 0.0))
523 for v, c,
in list(coeffs.items()):
524 objective.SetCoefficient(v, float(c))
529 objective.SetMaximization()
530 if isinstance(expr, numbers.Number):
531 objective.SetOffset(expr)
533 coeffs = expr.GetCoeffs()
534 objective.SetOffset(coeffs.pop(OFFSET_KEY, 0.0))
535 for v, c,
in list(coeffs.items()):
536 objective.SetCoefficient(v, float(c))
541 return _pywraplp.Solver_Infinity()
544 return _pywraplp.Solver_SetTimeLimit(self, x)
547 return _pywraplp.Solver_WallTime(self)
550 return _pywraplp.Solver_Iterations(self)
553_pywraplp.Solver_swigregister(Solver)
556 return _pywraplp.__lshift__(*args)
558 r""" A class to express a linear objective."""
560 thisown = property(
lambda x: x.this.own(),
lambda x, v: x.this.own(v), doc=
"The membership flag")
563 raise AttributeError(
"No constructor defined")
564 __repr__ = _swig_repr
568 Clears the offset, all variables and coefficients, and the optimization
571 return _pywraplp.Objective_Clear(self)
575 Sets the coefficient of the variable in the objective.
577 If the variable does not belong to the solver, the function just returns,
578 or crashes in non-opt mode.
580 return _pywraplp.Objective_SetCoefficient(self, var, coeff)
584 Gets the coefficient of a given variable in the objective
586 It returns 0 if the variable does not appear in the objective).
588 return _pywraplp.Objective_GetCoefficient(self, var)
591 r""" Sets the constant term in the objective."""
592 return _pywraplp.Objective_SetOffset(self, value)
595 r""" Gets the constant term in the objective."""
596 return _pywraplp.Objective_offset(self)
599 r""" Sets the optimization direction (maximize: true or minimize: false)."""
600 return _pywraplp.Objective_SetOptimizationDirection(self, maximize)
603 r""" Sets the optimization direction to minimize."""
604 return _pywraplp.Objective_SetMinimization(self)
607 r""" Sets the optimization direction to maximize."""
608 return _pywraplp.Objective_SetMaximization(self)
611 r""" Is the optimization direction set to maximize?"""
612 return _pywraplp.Objective_maximization(self)
615 r""" Is the optimization direction set to minimize?"""
616 return _pywraplp.Objective_minimization(self)
620 Returns the objective value of the best solution found so far.
622 It is the optimal objective value if the problem has been solved to
625 Note: the objective value may be slightly different than what you could
626 compute yourself using ``MPVariable::solution_value();`` please use the
627 --verify_solution flag to gain confidence about the numerical stability of
630 return _pywraplp.Objective_Value(self)
634 Returns the best objective bound.
636 In case of minimization, it is a lower bound on the objective value of the
637 optimal integer solution. Only available for discrete problems.
639 return _pywraplp.Objective_BestBound(self)
642 return _pywraplp.Objective_Offset(self)
643 __swig_destroy__ = _pywraplp.delete_Objective
646_pywraplp.Objective_swigregister(Objective)
648 r""" The class for variables of a Mathematical Programming (MP) model."""
650 thisown = property(
lambda x: x.this.own(),
lambda x, v: x.this.own(v), doc=
"The membership flag")
653 raise AttributeError(
"No constructor defined")
656 r""" Returns the name of the variable."""
657 return _pywraplp.Variable_name(self)
660 r""" Sets the integrality requirement of the variable."""
661 return _pywraplp.Variable_SetInteger(self, integer)
664 r""" Returns the integrality requirement of the variable."""
665 return _pywraplp.Variable_integer(self)
669 Returns the value of the variable in the current solution.
671 If the variable is integer, then the value will always be an integer (the
672 underlying solver handles floating-point values only, but this function
673 automatically rounds it to the nearest integer; see: man 3 round).
675 return _pywraplp.Variable_solution_value(self)
678 r""" Returns the index of the variable in the MPSolver::variables_."""
679 return _pywraplp.Variable_index(self)
682 r""" Returns the lower bound."""
683 return _pywraplp.Variable_lb(self)
686 r""" Returns the upper bound."""
687 return _pywraplp.Variable_ub(self)
690 r""" Sets both the lower and upper bounds."""
691 return _pywraplp.Variable_SetBounds(self, lb, ub)
695 Advanced usage: returns the reduced cost of the variable in the current
696 solution (only available for continuous problems).
698 return _pywraplp.Variable_reduced_cost(self)
702 Advanced usage: returns the basis status of the variable in the current
703 solution (only available for continuous problems).
705 See also: MPSolver::BasisStatus.
707 return _pywraplp.Variable_basis_status(self)
711 Advanced usage: Certain MIP solvers (e.g. Gurobi or SCIP) allow you to set
712 a per-variable priority for determining which variable to branch on.
714 A value of 0 is treated as default, and is equivalent to not setting the
715 branching priority. The solver looks first to branch on fractional
716 variables in higher priority levels. As of 2019-05, only Gurobi and SCIP
717 support setting branching priority; all other solvers will simply ignore
720 return _pywraplp.Variable_branching_priority(self)
723 return _pywraplp.Variable_SetBranchingPriority(self, priority)
726 return _pywraplp.Variable___str__(self)
729 return _pywraplp.Variable___repr__(self)
736 return _pywraplp.Variable_SolutionValue(self)
739 return _pywraplp.Variable_Integer(self)
742 return _pywraplp.Variable_Lb(self)
745 return _pywraplp.Variable_Ub(self)
748 return _pywraplp.Variable_SetLb(self, x)
751 return _pywraplp.Variable_SetUb(self, x)
754 return _pywraplp.Variable_ReducedCost(self)
755 __swig_destroy__ = _pywraplp.delete_Variable
758_pywraplp.Variable_swigregister(Variable)
761 The class for constraints of a Mathematical Programming (MP) model.
763 A constraint is represented as a linear equation or inequality.
766 thisown = property(
lambda x: x.this.own(),
lambda x, v: x.this.own(v), doc=
"The membership flag")
769 raise AttributeError(
"No constructor defined")
770 __repr__ = _swig_repr
773 r""" Returns the name of the constraint."""
774 return _pywraplp.Constraint_name(self)
777 r""" Clears all variables and coefficients. Does not clear the bounds."""
778 return _pywraplp.Constraint_Clear(self)
782 Sets the coefficient of the variable on the constraint.
784 If the variable does not belong to the solver, the function just returns,
785 or crashes in non-opt mode.
787 return _pywraplp.Constraint_SetCoefficient(self, var, coeff)
791 Gets the coefficient of a given variable on the constraint (which is 0 if
792 the variable does not appear in the constraint).
794 return _pywraplp.Constraint_GetCoefficient(self, var)
797 r""" Returns the lower bound."""
798 return _pywraplp.Constraint_lb(self)
801 r""" Returns the upper bound."""
802 return _pywraplp.Constraint_ub(self)
805 r""" Sets both the lower and upper bounds."""
806 return _pywraplp.Constraint_SetBounds(self, lb, ub)
810 Advanced usage: sets the constraint "laziness".
812 **This is only supported for SCIP and has no effect on other
815 When **laziness** is true, the constraint is only considered by the Linear
816 Programming solver if its current solution violates the constraint. In this
817 case, the constraint is definitively added to the problem. This may be
818 useful in some MIP problems, and may have a dramatic impact on performance.
820 For more info see: http://tinyurl.com/lazy-constraints.
822 return _pywraplp.Constraint_set_is_lazy(self, laziness)
825 r""" Returns the index of the constraint in the MPSolver::constraints_."""
826 return _pywraplp.Constraint_index(self)
830 Advanced usage: returns the dual value of the constraint in the current
831 solution (only available for continuous problems).
833 return _pywraplp.Constraint_dual_value(self)
837 Advanced usage: returns the basis status of the constraint.
839 It is only available for continuous problems).
841 Note that if a constraint "linear_expression in [lb, ub]" is transformed
842 into "linear_expression + slack = 0" with slack in [-ub, -lb], then this
843 status is the same as the status of the slack variable with AT_UPPER_BOUND
844 and AT_LOWER_BOUND swapped.
846 See also: MPSolver::BasisStatus.
848 return _pywraplp.Constraint_basis_status(self)
851 return _pywraplp.Constraint_Lb(self)
854 return _pywraplp.Constraint_Ub(self)
857 return _pywraplp.Constraint_SetLb(self, x)
860 return _pywraplp.Constraint_SetUb(self, x)
863 return _pywraplp.Constraint_DualValue(self)
864 __swig_destroy__ = _pywraplp.delete_Constraint
867_pywraplp.Constraint_swigregister(Constraint)
870 This class stores parameter settings for LP and MIP solvers. Some parameters
871 are marked as advanced: do not change their values unless you know what you
874 For developers: how to add a new parameter:
875 - Add the new Foo parameter in the DoubleParam or IntegerParam enum.
876 - If it is a categorical param, add a FooValues enum.
877 - Decide if the wrapper should define a default value for it: yes
878 if it controls the properties of the solution (example:
879 tolerances) or if it consistently improves performance, no
880 otherwise. If yes, define kDefaultFoo.
881 - Add a foo_value_ member and, if no default value is defined, a
882 foo_is_default_ member.
883 - Add code to handle Foo in Set...Param, Reset...Param,
884 Get...Param, Reset and the constructor.
885 - In class MPSolverInterface, add a virtual method SetFoo, add it
886 to SetCommonParameters or SetMIPParameters, and implement it for
887 each solver. Sometimes, parameters need to be implemented
888 differently, see for example the INCREMENTALITY implementation.
889 - Add a test in linear_solver_test.cc.
891 TODO(user): store the parameter values in a protocol buffer
892 instead. We need to figure out how to deal with the subtleties of
896 thisown = property(
lambda x: x.this.own(),
lambda x, v: x.this.own(v), doc=
"The membership flag")
897 __repr__ = _swig_repr
898 RELATIVE_MIP_GAP = _pywraplp.MPSolverParameters_RELATIVE_MIP_GAP
899 r""" Limit for relative MIP gap."""
900 PRIMAL_TOLERANCE = _pywraplp.MPSolverParameters_PRIMAL_TOLERANCE
902 Advanced usage: tolerance for primal feasibility of basic solutions.
904 This does not control the integer feasibility tolerance of integer
905 solutions for MIP or the tolerance used during presolve.
907 DUAL_TOLERANCE = _pywraplp.MPSolverParameters_DUAL_TOLERANCE
908 r""" Advanced usage: tolerance for dual feasibility of basic solutions."""
909 PRESOLVE = _pywraplp.MPSolverParameters_PRESOLVE
910 r""" Advanced usage: presolve mode."""
911 LP_ALGORITHM = _pywraplp.MPSolverParameters_LP_ALGORITHM
912 r""" Algorithm to solve linear programs."""
913 INCREMENTALITY = _pywraplp.MPSolverParameters_INCREMENTALITY
914 r""" Advanced usage: incrementality from one solve to the next."""
915 SCALING = _pywraplp.MPSolverParameters_SCALING
916 r""" Advanced usage: enable or disable matrix scaling."""
917 PRESOLVE_OFF = _pywraplp.MPSolverParameters_PRESOLVE_OFF
918 r""" Presolve is off."""
919 PRESOLVE_ON = _pywraplp.MPSolverParameters_PRESOLVE_ON
920 r""" Presolve is on."""
921 DUAL = _pywraplp.MPSolverParameters_DUAL
922 r""" Dual simplex."""
923 PRIMAL = _pywraplp.MPSolverParameters_PRIMAL
924 r""" Primal simplex."""
925 BARRIER = _pywraplp.MPSolverParameters_BARRIER
926 r""" Barrier algorithm."""
927 INCREMENTALITY_OFF = _pywraplp.MPSolverParameters_INCREMENTALITY_OFF
928 r""" Start solve from scratch."""
929 INCREMENTALITY_ON = _pywraplp.MPSolverParameters_INCREMENTALITY_ON
931 Reuse results from previous solve as much as the underlying solver
934 SCALING_OFF = _pywraplp.MPSolverParameters_SCALING_OFF
935 r""" Scaling is off."""
936 SCALING_ON = _pywraplp.MPSolverParameters_SCALING_ON
937 r""" Scaling is on."""
940 r""" The constructor sets all parameters to their default value."""
941 _pywraplp.MPSolverParameters_swiginit(self, _pywraplp.new_MPSolverParameters())
944 r""" Sets a double parameter to a specific value."""
945 return _pywraplp.MPSolverParameters_SetDoubleParam(self, param, value)
948 r""" Sets a integer parameter to a specific value."""
949 return _pywraplp.MPSolverParameters_SetIntegerParam(self, param, value)
952 r""" Returns the value of a double parameter."""
953 return _pywraplp.MPSolverParameters_GetDoubleParam(self, param)
956 r""" Returns the value of an integer parameter."""
957 return _pywraplp.MPSolverParameters_GetIntegerParam(self, param)
958 __swig_destroy__ = _pywraplp.delete_MPSolverParameters
961_pywraplp.MPSolverParameters_swigregister(MPSolverParameters)
963MPSolverParameters.kDefaultRelativeMipGap = _pywraplp.cvar.MPSolverParameters_kDefaultRelativeMipGap
964MPSolverParameters.kDefaultPrimalTolerance = _pywraplp.cvar.MPSolverParameters_kDefaultPrimalTolerance
965MPSolverParameters.kDefaultDualTolerance = _pywraplp.cvar.MPSolverParameters_kDefaultDualTolerance
966MPSolverParameters.kDefaultPresolve = _pywraplp.cvar.MPSolverParameters_kDefaultPresolve
967MPSolverParameters.kDefaultIncrementality = _pywraplp.cvar.MPSolverParameters_kDefaultIncrementality
970 r""" Export options."""
972 thisown = property(
lambda x: x.this.own(),
lambda x, v: x.this.own(v), doc=
"The membership flag")
973 __repr__ = _swig_repr
976 _pywraplp.ModelExportOptions_swiginit(self, _pywraplp.new_ModelExportOptions())
977 __swig_destroy__ = _pywraplp.delete_ModelExportOptions
980_pywraplp.ModelExportOptions_swigregister(ModelExportOptions)
983 return _pywraplp.ExportModelAsLpFormat(*args)
986 return _pywraplp.ExportModelAsMpsFormat(*args)
989 return _pywraplp.FindErrorInModelProto(input_model)
992 setattr(Variable, opname,
993 lambda self, *args: getattr(
VariableExpr(self), opname)(*args))
994for opname
in LinearExpr.OVERRIDDEN_OPERATOR_METHODS: