1
我是SymPy(3.0.8)的新手,想要運行演示模擬'會議參加者'直到給定值(250),即跑到講話7(3講話,1次休息,3次會談,1次休息,1次談話)。運行一個Simpy模擬直到給定的值
3 * 30 + 15 + 3×30 + 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('Talk {0},以{1}'開始)。format(talks + 1,env.now))''' – Rene