OR-tools中常见函数说明
#导入OR-Tools中的CP-SAT求解器中的cp_model模块
from ortools.sat.python import cp_model
ortools.sat.python:导入or-tools CP-SAT求解器 CP-SAT求解器:使用SAT (satisfiability)方法的约束规划求解器,是原始约束规划求解器 (CP Solver)的高级版。 SAT (satisfiability)方法:在计算机科学中,布尔可满足性问题(有时称为命题可满足性问题,缩写为SATISFIABILITY或SAT)是确定是否存在满足给定布尔公式的解释的问题。它询问给定布尔公式的变量是否可以一致地用值TRUE或FALSE替换,公式计算结果为TRUE。如果是这种情况,公式称*为可满足。
拓展
约束规划
-
约束优化或约束规划(Constraint programming, CP)是指从一组非常大的候选集合中找出可行的解决方案。 CP是基于可行性(寻找一个可行的解决方案)而不是最优化(寻找一个最优的解决方案),关注点是约束和变量而不是目标函数。甚至CP问题可能没有目标函数(典型的CP问题如员工调度) -
OR-Tools为约束编程提供了两个求解器: CP-SAT:SAT (satisfiability)方法的约束规划求解器是原始约束规划求解器 (CP Solver)的高级版。 original-CP:原始约束规划求解器
#定义CP约束规划模型类
model = cp_model.CpModel()
cp_model:约束规划,主要使用整型变量对优化问题进行建模
#定义变量
x1 = model.NewIntVar(0, 4, 'x1')
x2 = model.NewIntVar(0, 3, 'x2')
#这里的model为上文定义的model
- model.NewIntVar(lb, ub, name)
整数变量(下限,上线,变量名) - model.NewIntervalVar(start, size, end, name)
区间变量(开始,步长,结束,变量名) - model.NewBoolVar(name):
0-1整数变量(变量名)
#添加约束
model.Add(x1+ 3*x2 <=8)
#添加目标函数
model.Maximize(2*x1 + 3* x2)
#创建求解器并求解
solver = cp_model.CpSolver()
solver.Solve(model)
#用solver解模型model
#打印结果
print("目标值为:",solver.ObjectiveValue())
print("x1=",solver.Value(x1))
print("x1=",solver.Value(x2))
完整代码
#导入OR-Tools中的CP-SAT求解器中的cp_model模块
from ortools.sat.python import cp_model
# 定义CP约束规划模型类
model = cp_model.CpModel()
#定义变量
x1 = model.NewIntVar(0, 4, 'x1')#这里的model为上文定义的model
x2 = model.NewIntVar(0, 3, 'x2')
#添加约束
model.Add(x1+ 3*x2 <=8)
#添加目标函数
model.Maximize(2*x1 + 3* x2)
#创建求解器并求解
solver = cp_model.CpSolver()
solver.Solve(model) #用solver解模型model
#打印结果
print("目标值为:",solver.ObjectiveValue())
print("x1=",solver.Value(x1))
print("x1=",solver.Value(x2))
|