我试图组成一个基于任何逻辑的模拟多仓库车辆路径问题与异构车队(9种类型)。我已经找到了一个关于车队交付优化(https://www.anylogic.com/resources/educational-videos/delivery-fleet-optimization-with-gis/)的例子,但是这个例子只使用了一种类型的卡车。有谁能用动态的车辆代理建立资源池吗?
另一种办法是建立9个资源库,并确定每辆车使用的车辆数量。我想使模型更广泛地适用,但是,通过包括一个数据集与车辆规格。
发布于 2021-12-10 18:52:10
在这里,您不需要在概念上做任何不同的事情(比如多个代理类型、多个资源池或使用代理继承),并且不需要资源池是“动态的”(无论是动态地向它添加资源和/或它包含多个代理类型)。在这里,所有这些事情都是可能的,但不是必要的,如果您使用这些路径,那么资源池的工作方式会增加一些复杂性。
只需有一个Vehicle代理类型,其属性(通过参数)覆盖不同车辆类型之间的相关差异(这可能归结为某个选项列表类型的单个参数,该参数说明这是哪种类型的车辆,或者可能与诸如燃料容量/类型、承载能力等其他负载相关)。
然后,您的模型输入(例如,通过模型参数或导入数据库的Excel )将指定每个“子类型”所需的车辆数量。初始化大小等于这些资源池之和的资源池(并确保该池将它们添加到Vehicle类型的自定义填充中,以便您可以显式地访问/循环它们)。然后,作为模型初始化的一部分(例如,在Main的启动操作中),用适当的子类型特定的属性值来设置它们。[还有其他方法来完成初始化;参见这个问题,其中我的答案在其他答案上扩展了相当大的一部分。]
您是如何做到这一点的,这取决于您的车辆参数是什么以及如何定义控制它们的输入数据。说你定义
VehicleType,其值为TYPE_A、TYPE_B和TYPE_CnumTypeA、numTypeB和numTypeC,它们分别定义了所需的数量Vehicle代理类型,它仅具有数据类型为VehicleType的单个参数type然后,一些初始化逻辑(必须为自定义人口allVehicles中的所有车辆设置allVehicles)可能如下所示。(这可以写得更优雅,但下面的内容更容易理解。)
// Set up type A vehicles in population (using relevant indices)
for (int i = 0; i < numTypeA; i++) {
allVehicles.get(i).type = VehicleType.TYPE_A;
}
// Set up type B vehicles in population (using relevant indices)
for (int i = numTypeA; i < numTypeA + numTypeB; i++) {
allVehicles.get(i).type = VehicleType.TYPE_B;
}
// Set up type C vehicles in population (using relevant indices)
for (int i = numTypeA + numTypeB; i < numTypeA + numTypeB + numTypeC; i++) {
allVehicles.get(i).type = VehicleType.TYPE_C;
}在模型逻辑中,您需要根据要获取的资源来区分它们,使用所讨论的检取/服务块的“资源选择条件”选项。这是通过依次评估每个可用资源的资源选择条件(通过unit关键字可访问的当前资源)来实现的:如果它返回true,则将捕获该资源。显然,该条件将取决于您的模型需要如何工作(并且可能取决于代理执行捕获的属性,通过agent关键字访问),所以可能是这样的
agent.weight > 40 ? unit.type == VehicleType.TYPE_A : unit.type == VehicleType.B(如果执行抓取的代理具有重量,并且您希望对重量> 40的代理使用A类车辆,而在此特定的抓取操作中使用B类型的车辆。)通常,这将是一个返回boolean的函数,该函数接受执行抓取的代理和当前单元(车辆)作为参数,并执行确定是否选择该车辆所需的任何逻辑。也许你的选择逻辑很难在每个人的资源基础上说--是的,或者不是的;例如,如果你的标准是“选择自最后一次携带某物以来时间最长的车辆”,这意味着所有车辆都知道这一点,让所有的车辆都做出选择。这样的逻辑仍然可以发挥作用,但这要复杂得多。
如果您希望车辆类型本身是数据驱动的(也就是说,您不希望将“硬代码”输入到模型中--例如,通过选项列表--哪些车辆类型可以存在),这要复杂得多(因为您还必须使泛型时使用的所有类型的逻辑都是可实现的)。
NB:您可能真正需要的是在某些方面(例如,不同的装载能力)区分车队中的车辆,而不必明确指定或关心车辆的“类型”。这不会改变上面的任何一个,除非您不需要Vehicle的一个显式属性(参数)来说明它是什么子类型。
发布于 2021-12-10 11:17:35
在这种情况下,我为不同的车辆类型创建单独的代理。

如果需要,请创建这些资源的集合,以便可以按索引访问所需的资源。
实际上,ResourcePool允许您添加多个资源。如果切换到动态编辑器,则可以这样做:

https://stackoverflow.com/questions/70303162
复制相似问题