これが私がSimPyに実装しようとしているものです:
顧客は最初にサーバーAに5分間サービスを提供します。次に、各顧客は2つに分割され、1つはサーバーBに3分間サービスを提供し、もう1つはサーバーCに2分間サービスを提供します。
次のコードを書きましたが、出力に基づいて動作していないようです。また、サーバーAを離れる各顧客を分割したいので、コピー機能の使用方法が正しいかどうかはわかりませんが、私のコードは最初の顧客でしか機能しない可能性があると感じています。
どんな助けでもいただければ幸いです。
from SimPy.Simulation import *
from copy import *
class Source(Process):
def generate(self):
for i in range(5):
c = Customer(name="Customer%02d" % (i))
activate(c, c.runA())
yield hold, self, 10
class Customer(Process):
def runA(self):
print("%7.4f %s (original) enters server A" % (now(), self.name))
yield hold, self, 5
print("%7.4f %s (original) leaves server A" % (now(), self.name))
dup1 = copy(self)
dup2 = copy(self)
activate(dup1, dup1.runB())
activate(dup2, dup2.runC())
def runB(self):
print("%7.4f %s (copy) enters server B" % (now(), self.name))
yield hold, self, 3
print("%7.4f %s (copy) leaves server B" % (now(), self.name))
def runC(self):
print("%7.4f %s (copy) enters server C" % (now(), self.name))
yield hold, self, 2
print("%7.4f %s (copy) leaves server C" % (now(), self.name))
initialize()
s = Source()
activate(s, s.generate(), at=0.0)
simulate(until=100.0)
出力:
0.0000 Customer00 (original) enters server A
5.0000 Customer00 (original) leaves server A
10.0000 Customer01 (original) enters server A
15.0000 Customer01 (original) leaves server A
20.0000 Customer02 (original) enters server A
25.0000 Customer02 (original) leaves server A
30.0000 Customer03 (original) enters server A
35.0000 Customer03 (original) leaves server A
40.0000 Customer04 (original) enters server A
45.0000 Customer04 (original) leaves server A
logout