0

サービス時間がいくつかの関数の計算の複雑さに依存するシミュレーションを作成したいと考えています。

関数の処理により、リクエストの到着が停止することはありません。テストのために、数秒間 CPU を使用する関数の例を使用します。

sorted([float(random.random()) for i in range(1000000)])

サービスをシミュレートするためにそれを呼び出す方法はありますが、新しいサービス要求の到着を妨げません。この関数を呼び出すと、指定された時間ではなく、関数の実行直後に新しいサービス リクエストが到着します。

def visit(self, timeAtNAT, res):
  arrive=time.clock()-startTime
  print("%7.4f. Packet #%s arrived." % (time.clock()-startTime, self.name))
  yield request, self, res
  wait = time.clock()-startTime - arrive
  print("%7.4f. Packet #%s waited %6.3f" % (time.clock()-startTime, self.name, wait))
  sorted([float(random.random()) for i in range(1000000)])  
  yield release, self, res
  print("%7.4f. Packet #%s left" % (time.clock()-startTime, self.name))

したがって、私の例では、前のパケットが残った後にのみ新しいパケットが到着します。

を使用しようとしましたが、(クラスmultiprocessingの) 命名衝突が発生しました。Process私は SimPy、並列プログラミング、および Python の初心者です。

4

1 に答える 1

0

ここで方法論を混ぜていると思います。複雑な計算をシミュレートしている場合-実際に複雑な計算を行っていない場合-計算にかかる時間の大きさを計算するアルゴリズムを作成し、ランダムな時間を追加しますジッタを調整します (つまり、+/- 5% 程度変更します)。

SimPy は離散イベント シミュレーション フレームワークです。これは、シミュレーションが次のイベントに進まないため、すべての計算がシミュレーション時間内に事実上瞬時に行われることを意味します (また、シミュレーション時間を進めるには、次のイベントに移行する必要があります。 {ただし、次のイベントが同時に発生している可能性があるため、次のイベントに移動しても、シミュレーション時間が進むことを意味するわけではありません})。

複雑な計算にかかる時間を計算するこのアルゴリズムを作ってみましょう。指数関数的な複雑さのアルゴリズム、つまり大きな O 表記のアルゴリズムにしましょう: O(2 n )

def calculateComputationComplexity(self, cValue):
    #lets make this an exponential algorithm
    algorithmTime = 0
    if cValue < 17:
        algorithmTime = 2**cValue
    else:
        algorithmTime = 2**16
    return algorithmTime

次に、コードに yield hold コマンドを追加します。

def visit(self, timeAtNAT, res):
    arrive=time.clock()-startTime
    print("%7.4f. Packet #%s arrived." % (time.clock()-startTime, self.name))
    yield request, self, res
    wait = time.clock()-startTime - arrive
    print("%7.4f. Packet #%s waited %6.3f" % (time.clock()-startTime, self.name, wait))

    waitTime = self.calculateComputationComplexity(10)
    yield hold, self, waitTime

    yield release, self, res
    print("%7.4f. Packet #%s left" % (time.clock()-startTime, self.name))

10 は、計算の複雑さを表す int に置き換える必要があります。DES フレームワークはマルチスレッドを使用せず、単純にすべてを決定論的に順番に計算し、発生するイベントのタイムラインに追加します。

于 2013-12-16T13:29:10.830 に答える