M/G/1の定常状態分布

M/G/1待ち行列が定常状態の時のシステム内のジョブ数の分布の求め方を紹介します。これは「M/D/1の定常状態分布の求め方(1)」「(2)」を拡張したものです。


M/G/1待ち行列システム内にジョブがk個存在する確率は、「M/G/mの定常状態のジョブ数分布について」で示したように時間平均でみても処理終了時点平均で見ても等しいことになります。そこで、ここでは処理終了直後のジョブ数を考察することにします。定常状態になっていれば、ある処理終了直後とその次の処理終了直後でシステム内にジョブがk個存在する確率は等しいはずです。このことを用いて定常状態確率を求めていきます。システム内にジョブがk個存在する定常状態確率をp(k)で表すことにします。


装置の利用率uで表すと、明らかに

  • p(0)=1-u・・・・(1)

であることが分かります。次に、1回の装置処理時間の間にジョブがいくつ到着するかを検討します。これはM/D/1の時には処理時間が一定だったので計算が楽でしたが、今回は処理時間は一般の分布を持つ確率変数です。この処理時間の確率変数をTで表すことにします。そしてある時T=t_1だったとします。到着はポアソン過程(M)なので、ポアソン分布の式(「ポアソン分布」参照)

  • p(k,t)=\frac{({\lambda}t)^k}{k!}\exp(-{\lambda}t)・・・・(2)

tt_1を代入すれば、処理時間t_1の間にジョブがk個到着する確率A(k;t_1)は、

  • A(k;t_1)=\frac{({\lambda}t_1)^k}{k!}\exp(-{\lambda}t_1)・・・・(3)

となります。ここで装置処理時間Tの分布の確率密度関数g(t)で表すことにします。すると1回の装置処理時間の間にジョブがk個到着する確率A(k)

  • A(k)=\Bigint_0^{\infty}A(k;t_1)dt_1・・・・(4)

で計算出来ます。式(4)に式(3)を代入して

  • A(k)=\Bigint_0^{\infty}\frac{({\lambda}t_e)^k}{k!}\exp(-{\lambda}t_1)g(t_1)dt_1

変数t_1tで書き直せば、

  • A(k)=\Bigint_0^{\infty}\frac{({\lambda}t)^k}{k!}\exp(-{\lambda}t)g(t)dt・・・・(5)

となります。


2個以上一度に処理終了することが出来ないので、ある処理終了直後のジョブ数が1つ前の処理終了直後のジョブ数より2個以上少ないことはあり得ません。よって、ある処理終了直後にシステムにジョブが0個であったならば、その1つ前の処理終了直後にはジョブが1個だった場合と、0個だった場合が考えられます。1つ前の処理終了直後1個ある状態が、処理中にジョブが0個到着して次の処理終了直後に0個になる確率は、

  • A(0)p(1) ・・・・(6)

となります。次に、1つ前の処理終了直後0個ある状態が、しばらくアイドル状態となり、その後ジョブが1個到着して処理が開始され、その処理中にジョブが0個到着して処理終了直後にまた0個になる確率は、

  • A(0)p(0) ・・・・(7)

となります。よってある処理終了直後にジョブが0個である確率p(0)は(6)と(7)を足したものになるはずです。つまり

  • p(0)=A(0)p(1)+A(0)p(0)・・・・(8)

これを変形すると

  • p(0)-A(0)p(0)=A(0)p(1)
  • [1-A(0)]p(0)=A(0)p(1)
  • p(1)=\frac{[1-A(0)]p(0)}{A(0)}・・・・(9)

式(1)でp(0)はすでに求められていますので、これを(9)に代入するとp(1)を求めることが出来ます。(実際に代入するとややこしそうなので、代入しませんが。)


以下、同様に考えていきます。
ある処理終了直後にシステムにジョブが1個であったならば、その1つ前の処理終了直後にはジョブが2個だった場合と、1個だった場合と、0個だった場合が考えられます。1つ前の処理終了直後2個ある状態が、処理中にジョブが0個到着して次の処理終了直後に1個になる確率は、

  • A(0)p(2) ・・・・(10)

となります。次に、1つ前の処理終了直後1個ある状態が、処理中にジョブが1個到着して次の処理終了直後に1個になる確率は、

  • A(1)p(1) ・・・・(11)

となります。最後に、1つ前の処理終了直後0個ある状態が、しばらくアイドル状態となり、その後ジョブが1個到着して処理が開始され、その処理中に別のジョブが1個到着して処理終了直後に1個になる確率は、

  • A(1)p(0) ・・・・(12)

となります。よってある処理終了直後にジョブが1個である確率p(1)は(10)(11)(12)を足したものになるはずです。つまり

  • p(1)=A(0)p(2)+A(1)p(1)+A(1)p(0)・・・・(13)

これを変形すると

  • [1-A(1)]p(1)-A(1)p(0)=A(0)p(2)
  • p(2)=\frac{[1-A(1)]p(1)-A(1)p(0)}{A(0)}・・・・(14)

式(1)でp(0)が、式(9)でp(1)が、すでに求められていますので、これらを(14)に代入するとp(2)を求めることが出来ます。(これも実際に代入するとややこしそうなので、代入しませんが。)


ある処理終了直後にシステムにジョブが2個であったならば、その1つ前の処理終了直後にはジョブが3個だった場合と、2個だった場合と、1個だった場合と、0個だった場合が考えられます。1つ前の処理終了直後3個ある状態が、処理中にジョブが0個到着して次の処理終了直後に2個になる確率は、

  • A(0)p(3) ・・・・(15)

となります。次に、1つ前の処理終了直後2個ある状態が、処理中にジョブが1個到着して次の処理終了直後に2個になる確率は、

  • A(1)p(2) ・・・・(16)

となります。次に、1つ前の処理終了直後1個ある状態が、処理中にジョブが2個到着して次の処理終了直後に2個になる確率は、

  • A(2)p(1) ・・・・(17)

となります。最後に、1つ前の処理終了直後0個ある状態が、しばらくアイドル状態となり、その後ジョブが1個到着して処理が開始され、その処理中に別のジョブが2個到着して処理終了直後に2個になる確率は、

  • A(2)p(0) ・・・・(18)

となります。よってある処理終了直後にジョブが2個である確率p(2)は(15)(16)(17)(18)を足したものになるはずです。つまり

  • p(2)=A(0)p(3)+A(1)p(2)+A(2)p(1)+A(2)p(0)・・・・(19)

これを変形すると

  • [1-A(1)]p(2)-A(2)p(1)-A(2)p(0)=A(0)p(3)
  • p(3)=\frac{[1-A(1)]p(2)-A(2)p(1)-A(2)p(0)}{A(0)}・・・・(20)

式(1)でp(0)が、式(9)でp(1)が、式(14)でp(2)が、すでに求められていますので、これらを(20)に代入するとp(3)を求めることが出来ます。


以上を一般化しますと

  • p(0)=1-u・・・・(1)
  • p(1)=\frac{[1-A(0)]p(0)}{A(0)}・・・・(9)
  • k{\ge}1の時
    • p(k+1)=\frac{p(k)-\Bigsum_{i=0}^{k-1}A(i+1)p(k-i)-A(k)p(0)}{A(0)}・・・・(21)

式(5)でA(k)を計算し、式(1)(9)(20)を用いることで、任意のkについてp(k)を求めることが出来ます。