[simpy] 01. python으로 시뮬레이션 만들기 - simpy 이해하기
2024. 5. 4. 12:59ㆍ정보공유/python
- 본격적으로 simpy를 이용한 시뮬레이션 문제를 풀어보기에 앞서서, simpy에 대한 기본적인 설명을 시작하겠습니다.
- Simpy란? python을 기반으로 하는 프로세스 기반 DES 프레임워크
- 연속적인 시뮬레이션도 가능하지만, 'No features that help you with that..^^'''
Simpy DES Kernel
- 주요 클래스: Environment, Event, Process
Simpy 작동 원리
- Environment 객체 정의
- Process 객체 생성
- 각각의 Process 제너레이터에서 Event 객체 생성
- Event 객체를 Environment queue에 스케줄링
- Queue의 Event를 시간 순서대로 처리
- 시뮬레이션의 time을 나타내는 _now 업데이트
- 처리된 Event를 발생시킨 Process 재실행
- 종료 조건을 만족할 때까지 과정을 반복
자세한 내용은 하단 링크에 정리되어 있습니다.
https://simpy.readthedocs.io/en/latest/topical_guides/simpy_basics.html#how-simpy-works
SimPy basics — SimPy 4.1.1 documentation
© Copyright 2002–2023, Team SimPy. Revision 22cb5d86.
simpy.readthedocs.io
- 모든 process는 environments안에 있다
env = simpy.Environment()
- 자동차, 고객 또는 메세지와 같은 active한 요소들의 행동은 process안에 모델링된다
- 환경과 혹은 서로간의 interaction은 event를 통해 이루어 진다
: event를 생성하고, yield될 때까지 기다린다.
Sample Example (1)
- 첫 번째 간단한 예제로, Car 문제를 풀어보겠습니다
- 자동차가 수행할 수 있는 action은 두 가지입니다. 0시점에서부터 parking이 되어 있다가, parking duration이 지난 시점에 driving을 시작하고, driving이 끝남과 동시에 parking을 시작하는 순서입니다.
- Parking : 주차시간은 5
- Driving : 운전시간은 2
- 총 시뮬레이션은 15 동안 이루어진다고 하겠습니다.
- 코드구성
- parking과 driving을 반복하는 car 함수를 정의합니다.
- env.now 는 현재시간을 의미합니다.
- yield env.timout(000)은 000안에 정의된 값 만큼 멈춘다 라는 뜻입니다. 즉 000의 duration만큼의 시간이 흘러갑니다
- env.process(car(env))를 통해 process할 함수를 연결해줍니다.
- simpy를 run하기 위해서는 env.run(until=15)가 필요합니다.
- parking과 driving을 반복하는 car 함수를 정의합니다.
import simpy
def car(env):
while True:
print('Start parking at', env.now)
parking = 5
yield env.timeout(parking)
print('Start driving at', env.now)
driving = 2
yield env.timeout(driving)
env = simpy.Environment()
env.process(car(env))
env.run(until=15)
위와 같은 결과가 나온다면 성공입니다!
이후 포스팅 부터는 조금씩 복잡해지는 예제를 풀어보겠습니다.
'정보공유 > python' 카테고리의 다른 글
[simpy] 02. Interrupt를 포함한 예제 만들기 - 비행기 주유 프로세스 (0) | 2024.05.07 |
---|---|
[simpy] 00. python으로 시뮬레이션 만들기 - 환경세팅 (0) | 2024.05.04 |