【问题标题】:Anylogic: how to send order to specific agent?Anylogic:如何向特定代理发送订单?
【发布时间】:2022-01-23 12:55:22
【问题描述】:

我是 Anylogic 的新手,我有这些代理群体:

  • 客户(参数:姓名、纬度、经度)
  • 终端(参数:名称、纬度、经度)
  • 订单(参数:客户、终端)
  • 卡车(状态图先移至 order.terminal,然后移至 order.customer)

对于每个不同的终端(我有 5 个),每个客户都有不同的订单率。因此,我(在客户内部)为每个终端的订单率创建了五个时间表。现在我想在 Customer 中创建一个事件来创建订单(每个终端一个事件)。我现在有这个名称为 terminalA 的终端:

Order order = new Order(this, terminal.name("terminalA"));
Truck truck = getNearestAgentByRoute(filter(main.trucks,
            v -> v.inState(Truck.Free)));
if (truck != null)          
    send(order, truck);

但是,terminal.name("terminalA") 部分不起作用,因为它无法解析为变量。如何为每个终端创建订单并告诉 Anylogic 它应该为哪个终端(使用什么名称)创建订单?

提前感谢您的帮助!

亲切的问候, 艾拉

【问题讨论】:

    标签: variables events parameters anylogic agent


    【解决方案1】:

    您不需要使用terminal.name("terminalA"),如果您已将该特定代理命名为terminalA,则只需使用terminalA;否则需要通过索引来访问,比如main.terminals(0)。 Order 代理中的参数类型应设置为Terminal。例如,下面我创建了一个带有许多不同参数和变量的订单代理,每个参数和变量都有一个自定义类型。

    编辑。您还需要确保您的代理列表不为空:

    【讨论】:

    • 感谢您的快速回复!但是,当我使用terminalA 时,我收到错误“终端A 无法解析为变量”。我认为因为“terminalA”是一个名称,它是来自终端的参数之一(通过数据库给出)?
    • 是的,如果您知道terminals(0) 是第一个终端代理,您可以使用terminalA
    • 然后我得到 "The method terminal(int) is undefined for the type Customer",我真的不明白,因为 Order 代理中的参数类型是设置在Terminal。如果我在输入new Order()后点击控制空间,它也会给Order(Customer customer, Terminal terminal),所以我不知道为什么它不起作用......
    • @Ella,请查看更新后的答案。
    • 感谢您详细解答!但是由于我从数据库中加载了我的客户和终端,它们不应该是空的......你知道还有什么问题吗?
    猜你喜欢
    • 2017-01-28
    • 2018-09-21
    • 1970-01-01
    • 2020-04-26
    • 2021-04-08
    • 1970-01-01
    • 2021-08-06
    • 2021-06-03
    • 2021-04-09
    相关资源
    最近更新 更多