ortools官方文档–cp_sat求解器函数接口文件
注:CP-SAT 求解器仅限于整数变量
方法 | 描述 |
---|---|
Add(self, ct) | ct为线性约束表达式,添加线性约束如:model.Add(x + 2 * y -1 >= z) |
OnlyEnforceIf(self, boolvar) | boolvar决定了约束是否有效,boolvar为一个值或一个bool列表 |
AddAbsEquality(self, target, var) | target == Abs(var) |
AddAllDifferent(self, variables) | 此约束强制所有变量具有不同的值 |
AddAllowedAssignments(self, variables, tuples_list) | 此处变量为一组列表,该约束为指定该组变量的值来源于tuple_lists |
AddDivisionEquality(self, target, num, denom) | target == num // denom |
AddElement(self, index, variables, target) | variables[index] == target |
AddLinearConstraint(self, linear_expr, lb, ub) | 添加约束:lb <= linear_expr <= ub |
AddMaxEquality(self, target, variables) | target == Max(variables) |
AddMinEquality(self, target, variables) | target == Min(variables) |
AddModuloEquality(self, target, var, mod) | target = var % mod |
AddMultiplicationEquality(self, target, variables) | target == variables[0] * … * variables[n] |
AddNoOverlap2D(self, x_intervals, y_intervals) | NoOverlap2D 约束确保所有当前矩形不会在平面上重叠。每个矩形都与 X 和 Y 轴对齐,并由两个间隔定义,代表其在 X 和 Y 轴上的投影。 |
Maximize(self, obj) | 将模型的目标设置为最大化(obj) |
Minimize(self, obj) | 将模型的目标设置为最小化(obj) |
NewIntervalVar(self, start, size, end, name) | 从开始、大小和结束创建一个区间变量 |
ObjectiveValue(self) | 求解后返回目标值。 |
from ortools.sat.python import cp_model
def SimpleSatProgram():
"""Minimal CP-SAT example to showcase calling the solver."""
# Creates the model.
model = cp_model.CpModel()
# Creates the variables.
num_vals = 3
x = model.NewIntVar(0, num_vals - 1, 'x')
y = model.NewIntVar(0, num_vals - 1, 'y')
z = model.NewIntVar(0, num_vals - 1, 'z')
# Creates the constraints.
model.Add(x != y)
# Creates a solver and solves the model.
solver = cp_model.CpSolver()
status = solver.Solve(model)
if status == cp_model.OPTIMAL:
print('x = %i' % solver.Value(x))
print('y = %i' % solver.Value(y))
print('z = %i' % solver.Value(z))
SimpleSatProgram()