2017-03-23 9 views
0

나는 상점에서 뭔가를 얻는 것이 다른 것에 의존하는 상황을 모델링하려고합니다.Simpy Store - Dependent Events

제한된 용량의 저장소 S1에 항목을 넣는 생산자가 있다고 가정 해 보겠습니다. 이 상품들은 다른 상점 S2로 이동합니다. (1) S1 에 항목이있는 경우에만 S2에 공간이 있습니다.

P -> S1 -> S2

문제가 I S2 공간 인 조건으로 할 S1에서 항목의 제거를 필요로한다는 것이다.

from simpy import * 

env = Environment() 
S1 = Store(env, capacity=1) 
S2 = Store(env, capacity=1) 

def producer(): 
    i = 0 
    while True: 
     yield S1.put(i) 
     print("Producer put item: %s"%i) 
     i += 1 

def s1_to_s2(): 
    while True: 
     item = yield S1.get() 
     yield S2.put(item) 

env.process(producer()) 
env.process(s1_to_s2()) 
env.run(until=20) 

Producer put item: 0 
Producer put item: 1 
Producer put item: 2 

이 내가 원하지 않는 S1과 S2 사이 1 개 추가 저장 슬롯이있다 것처럼 보이게 내가 모델링 한 방법을 생산 : 코드에서

. 두 개의 저장 장치가 있으며 용량이 각각 1 개인 경우 생산자는 2 개의 장치 만 삽입 할 수 있어야합니다.

답변

0

SimPy와 함께 사용하는 것은 불가능합니다. 그러나 상점 간 종속성을 모델링하기 위해 Store와 하위 이벤트를 서브 클래 싱 할 수 있습니다.

+0

이 작업을 수행하는 방법을 알고 계십니까? 나는 Store.get을 재정의하여 조건을 취한 이벤트를 반환하고 _do_get (이 경우 첫 번째 Store의 get을 실행하기 전에 다음 Store에 여유 공간이 있는지를 확인할 수 있음)을 평가하려고했습니다. 그것은 여분의 공간의 문제를 해결할 수 있지만 목적지 상점에 공석이없는 경우 사건을 "재조정"하는 방법을 알 수는 없습니다. 제 말의 의미는 다음과 같습니다 : https://gist.github.com/sheridp/31516e95bee350481c1a39b1597e559f – sheridp

+0

일반 상황보다 get 이벤트가 목적지 큐를 사용할 수 있습니다. 그렇다면 목적지에 여유가 없기 때문에 이벤트가 성공할 수 없다면 대상 큐가 get 이벤트를 경험할 때 이벤트를 다시 평가하도록 예약하는 방법은 무엇입니까? – sheridp