AnyLogic,资源集中的自定义资源选择
AnyLogic, custom resource choice among resource sets
在 AnyLogic 项目中,在 'seize' 块中,我需要从资源集中自定义选择资源。
在 'seize' 块的属性选项卡中,选中值为 { {ResourcePool_A, ResourcePool_B} }
的字段 "Resource sets" 和标记 "customize resource choice"。在 "resource choice condition" 代码部分,我需要做出如下选择:
if (unit isfrom ResourcePool_A)
{
if (unit.param_a == value)
do something
....
}
else if (unit isfrom ResourcePool_B)
{
if (unit.param_b == value)
do something
....
}
如何检查资源单元是否来自给定池,然后根据资源的特性相应地区分资源?谢谢你。最好的问候。
从你的问题来看,你似乎不需要选择特定的资源,而是在资源被占用后对其执行一组特定的操作。
这就是为什么我添加了两个答案。
1.
如果你只是想做一组特定的动作。您应该只将代码复制到 seize 对象中的 "On seize unit" 操作。
2.
如果你想 select 一个特定的资源。最简单的方法是创建一个 Anylogic 函数 resource_selector()
,returns 一个布尔值。
if(unit isfrom ResourcePool_A && unit.param_foo == agent.param_bar)
...
your own code
...
return true;
else
return false;
然后在资源选择条件中写入:
resource_selector(unit, agent);
我解决了编写一个 returns 布尔值的 Anylogic 函数的问题,并在资源选择条件下使用了它。我实现了 "isfrom" 来区分资源是从哪个池中获取的,如以下代码所示:
`
// cast pool object to the prorper type
ResourcePool t_pool = (ResourcePool)pool;
// resource selection condition
if ( (t_pool == ResourcePool_A && ((Resource_A)unit).param == agent.param_bar) ||
(t_pool == ResourcePool_B && ((Resource_B)unit).param == agent.param_bar) ) {
return true;
}
else {
return false;
}
`
在 Anylogic 文档中没有解释在占用块的资源选择条件下您还可以访问 pool
对象(这很糟糕...)。
在 AnyLogic 项目中,在 'seize' 块中,我需要从资源集中自定义选择资源。
在 'seize' 块的属性选项卡中,选中值为 { {ResourcePool_A, ResourcePool_B} }
的字段 "Resource sets" 和标记 "customize resource choice"。在 "resource choice condition" 代码部分,我需要做出如下选择:
if (unit isfrom ResourcePool_A)
{
if (unit.param_a == value)
do something
....
}
else if (unit isfrom ResourcePool_B)
{
if (unit.param_b == value)
do something
....
}
如何检查资源单元是否来自给定池,然后根据资源的特性相应地区分资源?谢谢你。最好的问候。
从你的问题来看,你似乎不需要选择特定的资源,而是在资源被占用后对其执行一组特定的操作。 这就是为什么我添加了两个答案。
1.
如果你只是想做一组特定的动作。您应该只将代码复制到 seize 对象中的 "On seize unit" 操作。
2.
如果你想 select 一个特定的资源。最简单的方法是创建一个 Anylogic 函数 resource_selector()
,returns 一个布尔值。
if(unit isfrom ResourcePool_A && unit.param_foo == agent.param_bar)
...
your own code
...
return true;
else
return false;
然后在资源选择条件中写入:
resource_selector(unit, agent);
我解决了编写一个 returns 布尔值的 Anylogic 函数的问题,并在资源选择条件下使用了它。我实现了 "isfrom" 来区分资源是从哪个池中获取的,如以下代码所示:
`
// cast pool object to the prorper type
ResourcePool t_pool = (ResourcePool)pool;
// resource selection condition
if ( (t_pool == ResourcePool_A && ((Resource_A)unit).param == agent.param_bar) ||
(t_pool == ResourcePool_B && ((Resource_B)unit).param == agent.param_bar) ) {
return true;
}
else {
return false;
}
`
在 Anylogic 文档中没有解释在占用块的资源选择条件下您还可以访问 pool
对象(这很糟糕...)。