一、Ortools使用
线性规划,默认使用GLOP
整数规划,默认使用CBC(Coin-or branch and cut),还包括SCIP、GLPK、Gurobi等
开源求解器,在计算性能和规模上弱于商业求解器,适用于中小企业及普通问题
ortools: 整数规划求解器,默认使用CBC(Coin-or branch and cut),还包括SCIP、GLPK、Gurobi等
Solver创建 solver = pywraplp.Solver.CreateSolver('SCIP')
变量设置
solver.NumVar:创建普通变量
solver.IntVar:创建整数变量
二、Project A:Santa服务调度
%%time 在jupyter中可以给出cell代码运行一次的时间
np.sort(a),对a按从小到大的顺序排序 np.argsort(a),返回数组从小到大的索引
@njit(fastmath=True) numba是python的即时编译器,当调用python函数时,代码会替换为机器码执行 numba可以加速计算负载比较大的python函数
@njit 表示全部使用加速 fastmath=True,启用函数的快速数学行为
三、旅行商问题(TSP):
Travelling Salesman Problem,一个旅行商想去拜访若干城市,然后回到他的出发地,给定各个城市之间所需的旅行时间后,怎样计划他的路线,使得他能对每个城市恰好进行一次访问,而且总时间最短
from sko.GA import GA_TSP
ga_tsp = GA_TSP(func=compute_distance, n_dim=num_points, size_pop=50, max_iter=500, prob_mut=0.2) 编写compute_distance函数,计算城市的距离
四、多辆车的路径规划 VRP
条件:经过中国33个城市,一共4辆车,每辆车最大行驶10000公里 目标:使得每辆车的行驶里程数更接近 数据预处理:
1)设置 num_vehicles,代表一共多少量车
2)设置 depot,代表所有车的起始出发点一样,都是从节点depot开始
3)添加距离约束,即每辆车的最大行驶距离
需要注意:
1)在VRP问题中,路径上给点赋的index和点实际的index不一样,需要使用IndexToNode方法进行转换才能得到实际的index