【问题标题】:Anylogic - Seize resource based on agent locationAnylogic - 根据代理位置获取资源
【发布时间】:2021-05-19 11:36:03
【问题描述】:

我是 AnyLogic 新手,我想知道是否可以根据占用代理的位置从资源池中占用资源。因此,如果代理位于节点 1 中,它将占用资源 1,否则将占用资源 2?如果是,我可以使用什么代码?

我曾尝试使用“自定义资源选择”和“资源选择条件”,但没有成功。

【问题讨论】:

    标签: java simulation anylogic


    【解决方案1】:

    其实有一个很简单的方法。资源池字段是动态的。单击服务属性中的等号会将等号变为圆形箭头,这意味着该字段是动态的,因此可以根据代理属性动态定义。

    现在,您可以在此字段中输入您的代码。这里的代码不是你的常规代码,所以你不应该使用“if”,而是使用以下语法:

    <statement> ? <value if true> : <value if false>
    

    最后,要引用代理,您只需要使用代理一词即可。下面是一个包含三个资源池的示例:

    node1.contains(agent) ? ResourcePool1 : node2.contains(agent) ? ResourcePool2 : ResourcePool3
    

    【讨论】:

    • 感谢您的回复! - 那么三个资源池的代码应该这样写吗? ? : node1.contains(agent) ? ResourcePool1 : node2.contains(agent) ? ResourcePool2 : node3.contains(agent) ?资源池3
    • 不完全是,因为您总是需要一个“else”条件,如果没有一个条件为真,它将分配一个资源池。所以对于 3 个资源池,你应该使用我的代码: node1.contains(agent) ? ResourcePool1 : node2.contains(agent) ?资源池2:资源池3
    • 或者,如果条件都不成立,则添加一个资源池: node1.contains(agent) ? ResourcePool1 : node2.contains(agent) ? ResourcePool2 : node3.contains(agent) ? ResourcePool3 : ResourcePool 4
    • 非常感谢!是否也可以以某种方式使用 AND 语句 - 我不知道语法。但例如: node1.contains(agent) ? ResourcePool1 AND node2.contains(agent) ? ResourcePool1 : node2.contains(agent) ? ResourcePool2 : ResourcePool 3。因此,如果代理在两个不同的注释中,则占用一个特定的资源池。
    • 语法是 && 虽然你在评论中的逻辑没有多大意义。我建议您阅读 AnyLogic 帮助中的 Java 基础知识。
    猜你喜欢
    • 2018-09-16
    • 2020-12-02
    • 2019-10-27
    • 2023-03-08
    • 2021-04-10
    • 2021-09-10
    • 2021-07-24
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多