OR-Tools是Google开源的运筹优化的工具,旨在从大量可能的解决方案中寻找最佳的解决方案。能够用于解决车辆路径、排程、装箱、网络流以及整数和线性规划等棘手问题。OR-Tools是人工智能领域重要的开源工具。
OR-Tools是用C ++编写的,但是支持C++,Java,C#,Python语言进行编写。以下采用的是Python语言进行编写。
官方文档地址(需要翻墙):https://developers.google.com/optimization
开源代码地址:https://github.com/google/or-tools
OR-Tools在约束优化求解问题下使用的求解器是CP-SAT,以下对CP-SAT的建模语法cp_model进行介绍。
CpModel:用于创建模型,其中Cp的全称是constraint programing(约束规划),可以不设置目标,求出的解是可行解或者无解,也可以设置目标,求出的解是最优的、可行的或者无解。与约束规划相对的是good programing(目标规划)。
在OR-Tools中CpModel用于的是整数规划的问题,所以里面处理数必须是int类型,并且要求是线性的运算。如果处理的数是浮点数,可以将要处理的浮点数都乘上某个值使得它们都转化为整数进行处理,例如要处理的数为0.5,可以将0.5乘上10转化乘5进行处理,最后输出的时候将值除以10即可。
CpSolver:用于整数规划问题的约束满足问题(Constraint Satisfaction Problem)求解。
约束限制(constraint):一般用Add方法进行添加。
决策变量:一般用new的方法进行创建。
目标制定(objective):一般用max或者min进行目标的制定。
pip install ortools
from ortools.sat.python import cp_model
model = cp_model.CpModel()
#创建整数变量
x = model.NewIntVar(10, 100, 'makespan1')
y = model.NewIntVar(30, 70, 'makespan2')
#添加约束
model.Add(x + y < 50)
#制定目标
model.Maximize(x - y)
solver = cp_model.CpSolver()
solver.Solve(model)
print('x:'+str(solver.Value(x)))
print('y:'+str(solver.Value(y)))
x:19
y:30
列出一些具体常用的方法,具体使用的说明可查看官方文档。