Anylogic:使用参数

时间:2018-05-03 19:11:18

标签: java anylogic

我的模型中有一列火车,里面有不同的代理人。在其中一个站点,我想放弃每个代理商的一部分。

我在火车上的经纪人是:儿童,青少年,成年人和金童。 在给定的一站,我想放弃:

20%的孩子

40%的青少年

在Drop-off代理中,我更改了以下输入:

下降:给定数量(如果有)

数量:children.size(0.2)+ teenagers.size(0.4)

点击HERE查看下线属性

1 个答案:

答案 0 :(得分:0)

要实现此目的,您应该在列车接收座席之前为座席中的变量创建一个值。创建一个名为willBeDropped的变量作为布尔值,默认值为false。此变量应存在于您的4种代理类型中的每一种中。

因此,当列车接收代理人时,您应该为willBeDropped分配一个真值或假值......所以当火车到达给定站点时,20%的孩子会有willBeDropped=true和80%将有willBeDropped=false

在下降时你应该使用"条件为真"条件为agent.willBeDropped==true

的地方

我不知道你是如何接载乘客所以我不知道如何在那里帮助你...你的问题是不完整的,但是你可以自己弄清楚我刚刚说了什么

但是如果你有以下配置,每个人都被添加到火车一个独特的时间:
enter image description here

您可以使用以下代码:

int num1=count(queue,q->q instanceof Children);
int num2=count(queue,q->q instanceof Teenager);

int numToDropOff1=(int)round(num1*0.2);
int numToDropOff2=(int)round(num2*0.4);

int counter1=0;
int counter2=0;

for(int i=0;i<queue.size();i++){
    if(counter1<= numToDropOff1 && queue.get(i) instanceof Children){
        queue.get(i).willBeDropped=true;
        counter1++;
    }else if(counter2<= numToDropOff2 && queue.get(i) instanceof Teenager){
        queue.get(i).willBeDropped=true;
        counter2++;
    }
}