Anylogic:数据集 resource_unit_states_log

Anylogic: Dataset resource_unit_states_log

我在 Anylogic 中创建了一个简单的模型(见第一个附件)。资源单元W1在服务中被占用,资源单元W2在服务1中被占用。服务和服务1的延迟时间均为5分钟。源的到达间隔时间为10分钟,源1的到达间隔时间为6分钟。

现在我想分析两个资源单元的使用状态,但是在数据集resource_unit_states_log中只有状态“usage_busy”被记录。是否有可能在此数据集中记录使用状态“空闲”?稍后在我的评估中,我想知道资源处于“空闲”状态时的确切日期和时间。目前我只能从数据集中读取状态“忙碌”的确切日期和时间(见第一个附件中的屏幕截图)。理论上,我可以根据现有值手动计算“空闲”状态的日期和时间,但如果有数千个日期,那将花费很长时间。

另一种尝试是使用时间图跟踪“空闲”状态。如果我使用 W1.time() 作为 x 轴值,我将在数据集中获得模型时间(例如 0、1、2 ...)。但我想要的是数据集“resource_unit_states_log”中的确切日期,如 27-12-2021 00:06:00.

有谁知道我该如何解决这些问题?

AnyLogic 内部 tables/logs 不可修改。他们就是这样。如果你想要任何其他格式的数据,你需要使用你自己的数据集合来完成 functions/codes。就您而言,第二种方法非常好。您每分钟都在收集信息,并且可以将其导出。我通常在 Python 中进行 post 处理。我处理数百万行,这需要几分钟;在您的情况下,数千行应该需要几秒钟。这是我的做法:

  1. 将数据(在您的第二种绘图方法中)导出到 Excel。数据应如下所示:

  2. 打开 Jupyter 笔记本(或任何 IDE)。

  3. 将数据读入Python。假设您已将数据保存为 data.xlsx.

  4. 输入您的start_datetime,即模拟的开始日期和时间。

  5. 然后只需将数据中的分钟添加到 start_datetime

  6. 将修改后的数据写入名为 data_modified.xlsx 的新 Excel 文件中。它看起来像这样:

完整代码如下:

import pandas as pd
import numpy as np
from datetime import timedelta
from datetime import datetime as dt


df=pd.read_excel('data.xlsx')

#Input your start date and hour below:
start_datetime='2021-12-31 00:00:00'


df['datetime']=start_datetime
df['datetime'] = pd.to_datetime(df['datetime'])

df['datetime']=df['datetime'].dt.strftime('%d-%m-%Y %H:%M:%S')
df['datetime'] = pd.to_datetime(df['datetime'])

df['time_added'] = pd.to_timedelta(df['x'],'m')
df['datetime']=df['datetime']+df['time_added']
del df['time_added']

df.to_excel('data_modified.xlsx')

另一种方法: 您可以使用服务块内的单元格 On seize unitOn exit 并使用函数 time() 记录资源被占用和释放的时间,并将此信息写入数据集。然后做计算。

您还可以使用AnyLogic的一些转换函数如下: