我在Anylogic中创建了一个简单的模型(参见第一个附件)。在服务中捕获资源单元W1,在服务1中捕获资源单元W2,服务和服务1的延迟时间均为5分钟。源间到达时间为10 time,源1到达时间为6 time。
现在我想分析这两个资源单元的使用状态,但是在dataset resource_unit_states_log中只有状态"usage_busy“被记录。是否也有可能在此数据集中记录使用状态“空闲”?在稍后的评估中,我想知道的确切日期和时间,当资源处于“空闲”状态时。目前,我只能从数据集中读取状态“繁忙”的确切日期和时间(见第一附件中的屏幕快照)。理论上,我可以根据现有的值手动计算“空闲”状态的日期和时间,但这将花费数千个日期的很长时间。

另一种尝试是使用时间图跟踪“空闲”状态。如果使用W1.time()作为x轴值,则得到模型时间(例如0、1、2.)在数据集中。但是我想要的是数据集"resource_unit_states_log“中的确切日期,比如27-12-2021 00:06:00。
有人知道我如何解决这些问题吗?

发布于 2021-12-31 13:48:07
AnyLogic内部表/日志不可修改。他们就像现在一样。如果您想要任何其他格式的数据,则需要使用您自己的数据收集函数/代码来完成。在您的例子中,第二种方法非常好。你每分钟都在收集信息,你可以把它导出。我通常用Python进行后处理。我处理了数百万行,这需要几分钟;在您的例子中,数千行应该需要几秒钟。我会这样做:

data.xlsx.start_datetime,即模拟的开始日期和时间。然后,只需将数据中的分钟添加到start_datetime.中即可。
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 unit和On exit,并通过使用函数time()记录资源被捕获和释放的时间,并将这些信息写入数据集中。那就算算吧。
您还可以使用AnyLogic的一些转换函数,如下所示:

https://stackoverflow.com/questions/70542559
复制相似问题