19.2.プログラム
プログラムは以下の4ページに現れる。2つのステートメント・ラベル(2001と2003)は第20章での参照のために含まれており、プログラムでは使用されない。
若干のFortran実装はフォーマットされたI/Oについて制約を課すことに注意しよう。プログラムを使用する時は実数の入力に(整数値の入力ではなくて)明示的な小数点を含ませることが最善である。program multpl c c 最大3クラスと25センターまで可能 c クラス2と3はおのおの最大10個の客までに制限される c クラス1はその個体数について制限はない、 c integer Ncents,center,class integer n1,n2,n3 c c Ncusts(c)はクラスcの個体数 c NはMVAが要求する一時的な個体数ベクトル c integer Ncusts(3),N(3) c c demand(c,k)はクラスcのセンターkでのサービス要求時間 c real demand(3,25) c c qlen(class 2 pop.,class 3 pop.,k)は3次元配列で、 c クラス2とクラス3のネットワーク個体数の可能な各々の組合せ c について個々のセンターkでの待ち行列長である。 c この繰返しの最も外側のクラスであるクラス1の個体数は添字として現れる c 必要はない。個体数の添字は1から11まで変化し、これは0から10までの個体数 c を表現する。というのは若干のFortran実装は配列の添字の最小値を1に制限 c しているからである。 real qlen(11,11,25) c c rtime(c,k)はクラスcのセンターkでの滞在時間 c real rtime(3,25) c c tput(c)とsysr(c)はクラスcのスループットと応答時間である。 c real tput(3),sysr(3) c write (6,5) 5 format (30h Input number of customers for) do 10 class = 1,3 write (6,15) class 15 format (9h Class ,i1,1h:) read (5,20) Mcusts(class) 20 format (i4) 10 continue write (6,25) 25 format (25h Input number of centers:) read (5,20) Ncents write (6,30) 30 format (25h Input service demand for) do 35 center=1,Ncents write (6,40) center 40 format (10h Center ,i2,1h:) do 45 class=1,3 if (Ncusts(class) .eq. 0) goto 45 write (6,50) class 50 format (11h Class ,i1,1h:) read (5,55) demand(class,center) 55 format (f8.4) 45 continue 35 continue c c ネットワークが記述されたので、評価を実行する。 c アルゴリズムは可能な全ての個体数ベクトルについて繰り返す。 c do 60 n1=0,Ncusts(1) do 65 n2=0,Ncusts(2) do 70 n3=0,Ncusts(3) if (n1+n2+n3 .eq. 0) goto 70 N(1) = n1 N(2) = n2 N(3) = n3 c c まず、個々のセンターでの滞在時間を計算する。 c do 80 class = 1,3 sysr(class) = 0.0 if (N(class) .eq. 0) goto 80 c N(class) = N(class) - 1 do 85 center=1,Ncents 2001 rtime(class,center) = x demand(class,center) * x (1.0+qlen(N(2)+1,N(3)+1,center)) sysr(class) = sysr(class) + x rtime(class,center) 85 continue N(class) = N(class) + 1 c c 次に、リトルの法則を用いてシステム・スループットを計算する。 c tput(class) = N(class) / sysr(class) 80 continue c c 最後に、リトルの法則を用いてセンターの待ち行列長を計算する。 c do 90 center=1,Ncents qlen(n2+1,n3+1,center) = 0.0 do 95 class=1,3 if (N(class) .eq. 0) goto 95 2003 qlen(n2+1,n3+1,center) = x qlen(n2+1,n3+1,center) + x rtime(class,center) * tput(class) 95 continue 90 contnue c 70 continue 65 continue 60 continue c c 結果をプリントする c do 100 class=1,3 if (Ncusts(class) .eq. 0) goto 100 c write (6,105) class 105 format (7h Class ,i1,1h:) write (6,110) tput(class) 110 format (22h System throughput: ,f8.4) write (6,115) Ncusts(class) / tput(class) 115 format (25h System response time: ,f8.4) c write (6,120) 120 format (24h Device utilizations: ) do 125 center=1,Ncents write (6,130) center,tput(class)*demand(class,center) 130 format (i7,2h: ,f5.3) 125 contnue c write (6,140) 140 format (25h Device queue lengths: ) do 145 center=1,Ncents write (6,150) center, tput(class)*rtime(class,center) 150 format (i7,2h; ,f8.4) 145 continue c 100 continue c end
「第20章 負荷依存サービスセンター」に続きます。