AnyLogic,资源集中的自定义资源选择

时间:2017-01-03 13:17:16

标签: anylogic

在AnyLogic项目中,在'seize'块中,我需要从资源集中自定义资源选择。 在'seize'块的属性选项卡中,选中值为{ {ResourcePool_A, ResourcePool_B} }的字段“Resource sets”,并选中标志“customize resource choice”。在“资源选择条件”代码部分,我需要做出如下选择:

    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
            ....
    }

如何检查资源单元是否来自给定池,然后根据其功能区分资源?谢谢。最好的问候。

2 个答案:

答案 0 :(得分:0)

从您的问题看来,您似乎不需要选择特定资源,而是在资源被占用后对资源执行一组特定操作。 这就是为什么我添加了两个答案。

1。
如果您只想做一组特定的操作。您只需将代码复制到seize对象中的“On seize unit”操作。

2。
如果要选择特定资源。最简单的方法是创建一个返回布尔值的Anylogic函数resource_selector()

if(unit isfrom ResourcePool_A && unit.param_foo == agent.param_bar)
    ...
    your own code 
    ...
    return true;
else
    return false;

然后在资源选择条件中写:

resource_selector(unit, agent);

答案 1 :(得分:0)

我解决了写一个返回布尔值的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文档中没有解释在seize块的资源选择条件下你也可以访问pool对象(这很糟糕......)。