- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是 Capacitated Vehicle Routing Problem (CVRP) 的修改最终也将包括时间窗口。
由于时间窗口已经内置在示例中,所以对我来说弄清楚它们应该不会太难。但是,我需要更改 CVRP 示例的核心约束之一,但我不知道如何做到这一点。
在我尝试建模的系统中,车辆
可以离开其仓库
,前往多个不同的客户
,然后加载在 Material 上。然而,我的模型与示例的不同之处在于,Vehicle
可以访问任何Depot
中链来存放其当前负载。
我一直在查看 documentation试图找出如何做到这一点,到目前为止我的基本理解是我必须更改 Depot
的定义(也许通过实现 Standstill
)才能成为车辆访问地点链的一部分,和/或可能只是将 Depot
集成到 Customer
中,并具有某种特殊规则,即访问 Depot
清空车辆而不是增加需求。
我也一直在研究影子变量和变量监听器,但我不知道这是否是正确的方法。这一切都有点令人困惑。
任何人都可以提供一些提示或建议,或者在我把自己挖得太深之前指出正确的方向,从哪里开始?
最佳答案
根据 Geoffrey 的建议,将您的 Vehicle
重命名为类(class) VehicleTrip
并通过给它一个值 previousVehicleTrip
让它指向上一个和下一个行程和nextVehicleTrip
,并为其指定一个变量开始时间和结束时间(Kotlin 中的代码示例):
class VehicleTrip(
...,
var startTime: LocalDateTime? = null,
var endTime: LocalDateTime? = null,
val previousVehicleTrip?: VehicleTrip = null,
val nextVehicleTrip?: VehicleTrip = null
) : Standstill {
...
}
您可以在启动 VehicleTrips
时设置这些值。当你得到 StackOverFlowError
基于VehicleTrip.hashCode()
,只需覆盖 hashCode()
VehicleTrip
的功能类(class)。 (也许有人有更好的建议来处理这个问题?)
在您的 Customer
中类,你应该有一个变量 arrivalTime
(就像在 CVRPTW 示例中一样)这是一个自定义影子变量。在此变量的监听器类中,您通常只更新车辆到达客户的时间,以及此行程中下一个客户的到达时间。现在,您还需要更新当前客户所在行程之后的所有行程时间。
例如,您可能有两次行程 VT1
和VT2
,和三个客户C1
, C2
,和C3
。当更改为
VT1 - C1 - VT2 - C2 - C3
到
VT1 - C2 - C1 - VT2 - C3
您想要更新的内容是(按顺序)
C2.arrivalTime
C1.arrivalTime
VT1.endTime
VT2.startTime
C3.arrivalTime
VT2.endTime
请注意,在 TimeWindowedCustomer
中例如,变量监听器只执行步骤 1. 和 2.,因此我们必须添加步骤 3. 到 6.
为此,请首先添加 @CustomShadowVariable
VehicleTrip
的开始和结束时间的注释(并且不要忘记将 VehicleTrip
标记为计划实体),它使用与时间窗口客户相同的变量监听器类:
class VehicleTrip(
...,
@CustomShadowVariable(
variableListenerRef = PlanningVariableReference(
entityClass = TimeWindowedCustomer::class,
variableName = "arrivalTime"
))
var startTime: LocalDateTime? = null,
...
) : Standstill {
...
}
现在在ArrivalTimeUpdatingVariableListener
类中,您可以添加步骤 3. 到 6.,类似于步骤 1. 和 2. 的实现方式。确保保持更新这些变量的顺序,并通知 ScoreDirector
使用 beforeVariableChanged()
更改变量时和afterVariableChanged()
方法。
关于java - Optaplanner - CVRP - 中途返回仓库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307761/
我想解决一个看起来像具有容量的车辆路径问题 (CVRP) 的问题,但可以多次拜访客户以满足他们的需求。 我有: 包含供应商和押金的完整图表 G(V,A) cost_matrix M 4 辆车,载客量为
我的问题是 Capacitated Vehicle Routing Problem (CVRP) 的修改最终也将包括时间窗口。 由于时间窗口已经内置在示例中,所以对我来说弄清楚它们应该不会太难。但是,
在 ortools 中,我知道您可以为每辆车运行不同容量的 CVRP。但是,您可以根据车辆传递不同的距离矩阵吗?例如,两个城市可能相距 1000 英里,但乘飞机到达那里可能比乘汽车快得多,因此在进行
我是 OptaPlanner 的新手,所以这个问题可能很微不足道。以 CVRP 为例,我添加了一些使车辆容量重载的客户,显然这个问题变得不可行。我的目标是获得仅涉及一部分客户的路线,以免车辆容量重载,
在 ortools 中,我知道您可以为每辆车运行不同容量的 CVRP。但是,您可以根据车辆传递不同的距离矩阵吗?例如,两个城市可能相距 1000 英里,但乘飞机到达那里可能比乘汽车快得多,因此在进行
我想使用我自己的 xml 文件在 java 中的 optaplanner 中运行 CVRP 示例。我的问题是我不知道如何提供 xml 文件以及使用哪种方法。如果我实例化一个解决方案并提供 xml 配置
我正在实现用于解决 CVRP 的谷歌或工具,其中每辆车从一个仓库 (0) 开始并返回到仓库 (0),来自此链接:https://developers.google.com/optimization/r
我是一名优秀的程序员,十分优秀!