728x90

 연구를 하다 보면 실험을 위해 프로세스 모델로부터 시뮬레이션을 통해서 이벤트 로그를 만들어 내야하는(play-out) 경우가 생긴다. 아직 documentation이 안 되어 있어서 몰랐는데, (몰라서 ProM으로 100번 반복하고 그랬다 ㅎㅎ..) 오늘 코드를 뒤져보니 PM4Py에도 Simulation 코드가 있었다. 이번 포스팅에서는 PM4Py를 이용해서 프로세스 모델로 부터 simulation log를 generate하는 방법에 대해 알아보겠다.

 

* 이 포스팅은 pm4py version 1.2.2를 기준으로 작성되었다.

 

1. 우선, log를 만들어내고 싶은 petri net을 만든다.

import os
from pm4py.objects.log.importer.xes import factory as xes_importer
from pm4py.algo.discovery.alpha import factory as alpha_miner

log = xes_importer.import_log(os.path.join("input_data", "running-example.xes"))  # 괄호 안에 원하는 파일의 경로를 쓴다.
net, im, fm = alpha_miner.apply(log)

2. 이 petri net에 대해 simulation을 통해 log를 generate한다.

from pm4py.algo.simulation.playout import factory as sim_factory

log = sim_factory.apply(net, im, parameters={"noTraces": 200})

 이 때, 사용될 수 있는 parameter는 다음과 같다.

  • noTraces: generate할 log의 trace 개수 (default = 100)
  • maxTraceLength: trace의 최대 이벤트 개수 (default = 100)

3. log가 제대로 만들어졌는지 확인하기 위해 다음 코드를 입력한다.

print(len(log))
print(log[0])

len(log)가 설정한 noTraces와 같게 (설정하지 않았다면 100) 나오고, log[0]에 trace가 print되면 성공이다. 

 

 이번 포스팅에서는 페트리 넷으로부터 시뮬레이션 이벤트 로그를 만들어내는 방법에 대해 알아보았다. 이는 많은 모델들을 시뮬레이션을 통해 검증해야 할 때나 비교해야 할 때에 유용하게 활용될 수 있을 것이다.

300x250
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기