使用 CP 优化器进行约束规划的路由和调度

问题描述

我正在研究路由和调度问题,这是一个可行性问题,使用约束规划和 CP 优化器作为求解器。这是一种多周期的可行性研究,因为我们每天都有一个 TSP 问题,并且天数是独立的。我们的目标是找到有时间窗口的客户的访问时间。

为了对问题建模,我为每一天定义了一个序列变量,并为任何客户端定义了一个区间变量。此外,我使用无重叠约束来观察 TSP 模型中的旅行时间约束。因此,我有这个决策变量和约束:

sub=CpoModel()

tasks=interval_var_list(nb_points[d],name="tasks_{}_{}".format(aide_id+1,d+1))
seq=sequence_var(tasks,types=[i for i in range(nb_points[d])],name="sequence_{}_{}".format(self.aide_id+1,d+1))
sub.add(no_overlap(seq,distance_matrix,1))

但是,我有一个应该递归计算的约束,我不知道如何使用CP来做到这一点。以第 d 天的路线为例。

route=(start,v1,v2,...,vq,end)

其中 startend 代表仓库,vi 是客户的位置。让 r(vi)=(start,vi)route 的子路径,从起点开始到节点 vi 结束。对此,我想写下这个约束:

Pr{route is successful}>=alpha

如果所有客户端都在指定的访问时间之前访问过并且车辆在其时间窗口的截止日期之前返回其终点位置,则一条路线是成功的。因此,我需要递归地得到这个概率,我的意思是:

Pr{route is successful}=Pr{end_arrival_time<=end_deadline_time_window} & {r(vq) is successful}

我的问题是如何在建模期间访问访问顺序?我的意思是除了预先知道的 startend 节点之外,我如何才能访问建模中客户端的访问顺序?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)