1
저는 SymPy (3.0.8)를 처음 사용하고 주어진 값 (250)까지 데모 시뮬레이션 '컨퍼런스 참석자'를 실행하고 싶습니다. 즉, 토크 7 (3 회) , 1 회 휴식, 3 회, 1 회 휴식, 1 회).Simpy 시뮬레이션을 주어진 값까지 실행하십시오.
3 * 30 + 15 + 30 + 3 * 15 + 1 * 30 = 240
그러나 시뮬레이션 3 개 회담 1 브레이크, 3 개 협상 1 브레이크 (210) 후에 종료한다.
왜 '시뮬레이션'이 '토크 7'이 될 때까지 실행되지 않는지와이 문제를 해결하는 방법을 알고 싶습니다.
# import
import simpy
from random import randint
# config
TALKS_PER_SESSION = 3
TALK_LENGTH = 30
BREAK_LENGTH = 15
ATTENDEES = 3
# process function
def attendee(env, name, knowledge=0, hunger=0):
talks = 0
breaks = 0
while True:
# Visit talks
for i in range(TALKS_PER_SESSION):
knowledge += randint(0, 3)/(1 + hunger)
hunger += randint(1, 4)
talks += 1
yield env.timeout(TALK_LENGTH)
print('Attendee %s finished %d talks with knowledge %.2f and hunger %.2f.' % (name, talks, knowledge, hunger))
# Go to buffet
food = randint(3, 12)
hunger -= min(food, hunger)
breaks += 1
yield env.timeout(BREAK_LENGTH)
print('Attendee %s has finished break %d with hunger %.2f' % (name, breaks, hunger))
# setup environment and run simulation
env = simpy.Environment()
for i in range(ATTENDEES):
env.process(attendee(env, i))
env.run(until=250)
이 시뮬레이션의 출력은 다음과 같습니다
Attendee 0 finished 3 talks with knowledge 2.33 and hunger 7.00.
Attendee 1 finished 3 talks with knowledge 0.60 and hunger 8.00.
Attendee 2 finished 3 talks with knowledge 3.81 and hunger 7.00.
Attendee 0 has finished break 1 with hunger 0.00
Attendee 1 has finished break 1 with hunger 0.00
Attendee 2 has finished break 1 with hunger 0.00
Attendee 0 finished 6 talks with knowledge 5.53 and hunger 6.00.
Attendee 1 finished 6 talks with knowledge 1.89 and hunger 9.00.
Attendee 2 finished 6 talks with knowledge 4.31 and hunger 5.00.
Attendee 0 has finished break 2 with hunger 0.00
Attendee 1 has finished break 2 with hunger 0.00
Attendee 2 has finished break 2 with hunger 0.00
그러나 나는 그것이 될 것으로 예상 :
Attendee 0 finished 3 talks with knowledge 2.33 and hunger 7.00.
Attendee 1 finished 3 talks with knowledge 0.60 and hunger 8.00.
Attendee 2 finished 3 talks with knowledge 3.81 and hunger 7.00.
Attendee 0 has finished break 1 with hunger 0.00
Attendee 1 has finished break 1 with hunger 0.00
Attendee 2 has finished break 1 with hunger 0.00
Attendee 0 finished 6 talks with knowledge 5.53 and hunger 6.00.
Attendee 1 finished 6 talks with knowledge 1.89 and hunger 9.00.
Attendee 2 finished 6 talks with knowledge 4.31 and hunger 5.00.
Attendee 0 has finished break 2 with hunger 0.00
Attendee 1 has finished break 2 with hunger 0.00
Attendee 2 has finished break 2 with hunger 0.00
Attendee 0 finished 7 talks with knowledge <...> and hunger <...>.
Attendee 1 finished 7 talks with knowledge <...> and hunger <...>.
Attendee 2 finished 7 talks with knowledge <...> and hunger <...>.
고마워요! Python (3.5.3) 버전에서 작업하는 코드가 print 명령을''print { '{1}'에서 시작합니다. ''format (talks + 1, env.now))''print ' – Rene