Anylogic中的动态到达函数在代理和时间相关函数时需要特别注意。如果您的模型需要在其逻辑中使用基于代理和时间的函数,则最好不使用动态到达功能,而是手动设置到达事件。以下是通过代码设置到达事件的示例:
1.在模型中创建一个定时器(timer)并创建一个函数,用于生成到达事件。
2.为您的代理创建一个状态,表示它是否已经到达。
3.在函数中编写代码以生成新的代理并将其放置在等待队列中,设置代理的到达状态为“是”。
4.在此函数后面添加一个计时器,以便在预设时间后再次调用此函数。
5.在代理的循环实现中添加一些代码检查它们的到达状态,如果到达则将其从等待队列中移除并执行其他逻辑。
以下是一个示例函数,它将根据正态分布生成到达时间:
double arrivalTime = 0;
while (true) {
//计算下一个到达时间
arrivalTime = normal(5, 2);
//产生代理并添加到等待队列中
MyAgent agent = new MyAgent();
agent.moveTo(waitQueue);
//设置代理到达状态
agent.arrived = true;
//等待下一个到达时间
hold(arrivalTime);
}
请注意,在此示例中,MyAgent是代理类,arrived是一个定义为布尔类型的代理状态。此代码将会在等待队列中间隔5分钟,并生成到先正态分布。
∠例如:Anylogic中动态到达函数无法工作(代理和时间相关函数)。解决方法是手动编写代理到达事件。以下是一个示例函数,它将根据正态分布生成到达时间。 double arrivalTime = 0; while (true) { arrivalTime = normal(5, 2); MyAgent agent = new MyAgent(); agent.moveTo(waitQueue); agent.arrived = true; hold(arrivalTime); }