ortools 中CP_SAT求解器部分函数

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()
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值