【问题标题】:Anylogic referencing columns in a collection集合中的 Anylogic 引用列
【发布时间】:2019-04-03 23:09:50
【问题描述】:

我正在使用一个集合来表示系统中的可用卡车。对于给定的索引号,我使用10,使用1 表示索引卡车可用。然后,我尝试将该索引号分配给客户 ID。我正在尝试从列出的可用卡车中随机选择一辆可用的卡车。我收到一个错误,说赋值的左侧必须是一个变量,并突出显示代码中读取Available_Trucks() = 1 的部分。这是代码:

agent.ID = randomWhere(Available_Trucks, Available_Trucks() = 1);

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    你这样做的方式行不通... randomWhere 应用于整数集合时,将返回集合的元素(在本例中为 1 或 0)。 就这样吧

    randomWhere(Available_Trucks,at->at==1); //this is the right synthax
    

    将始终返回 1,因为这是集合中选择的数字的值。因此,您需要获得等于 1 的集合编号的索引。但是您必须自己创建一个函数来执行此操作...类似这样的方法(可能不是最好的方法,但可以:@ 987654322@

    getRandomAvailbleTruck 函数会将集合(可能是 arrayList)作为参数。如果没有可用的卡车,它将返回 -1

    int availableTrucks=count(collection,c->c==1);
    if(availableTrucks==0) return -1;
    int rand=uniform_discr(1,availableTrucks);
    int i=0;
    int j=0;
    while(i<rand){
        if(collection.get(j)==1){
            i++;
            if(i==rand){
                return j;
            }   
        }
        j++;
    }
    return -1;
    

    现在另一个想法是,您可以使用相关数字:1,2,3,4,5 ... 等,而不是使用 0 和 1 来表示可用性,如果不可用则使用 0。例如,如果卡车 3 不可用,则数组将为 1,2,0,4,5,如果可用,则数组将为 1,2,3,4,5。 在这种情况下,您可以使用

    agent.ID=randomTrue(available_trucks,at->at>0);
    

    但是如果没有可用的卡车,你会得到一个错误,所以检查一下。

    尽管如此,你正在做的是可怕的做法......如果你的卡车是代理人,如果你把可用性放在你的卡车上,那么有一个更简单的方法来做到这一点...... 然后你就可以做

    Truck truck=randomWhere(trucks,t->t.available==1);
    if(truck!=null)
         agent.ID=truck.ID;
    

    【讨论】:

    • 谢谢。我完全听从你所说的话,并感谢你的超越。我是 Anylogic 的新手,刚从大约 7 年的休息时间回到模拟。非常感谢您超越并增加可用性非常有意义。我想我将此标记为已回答,但如果我没有,请告诉我,我也是新来的。再次感谢。
    • 由于某种原因,这总是为卡车返回 null。卡车是我的代理人,这是我使用的代码。 Truck_ID 是卡车 ID,ID 是客户 ID,Available 是卡车上的变量,当它可用时我翻转为 1。
    • 卡车卡车 = randomWhere(卡车, t->t.Available == 1); if (truck!=null) agent.ID = truck.Truck_ID; if (truck == null) agent.ID = 3;
    • 我使用 if null it == 3 只是为了查看它正在将变量从 0 更改为。
    • 我将我的代理更改为卡车并使用此代码。现在它没有返回null,但agent.ID通过后仍然为0。如果它为空,我没有将值设置为 3 以进行仔细检查。卡车卡车 = randomWhere(卡车, t->t.Available == 0); if (trucks!=null) agent.ID = trucks.Truck_ID;
    猜你喜欢
    • 2020-05-12
    • 2021-11-08
    • 2018-04-26
    • 2022-06-11
    • 2019-02-20
    • 2015-04-16
    • 2022-08-14
    • 2011-05-28
    • 2022-10-16
    相关资源
    最近更新 更多