줄 서기 이론의 세 가지

10852 단어 대열Python
저번의 예고대로 M/M/N/N/N을 고려합니다.이번에 참고줄 서기 이론했습니다.

이른바 M/M/N/N/N/N 모델


M/M/N/N/N 모델은 파송 분포에 따라 서버가 도착하고 서비스에 걸리는 시간은 지수 분포에 따라 분포하는 모델이다.행렬의 길이는 최대 0이다.줄을 설 수 없다는 뜻이다.서비스의 규율은 생략되었지만 FCFS입니다.이 시스템도 아란의 호출률 시스템이라고 불린다.이 모델은 줄을 서지 못하는 모델에게는 기본적인 아이디어이기 때문에 가장 이해가 간다.또한 이 모델의 사용률과 정의된 $$\rho=\rac{lambda} {N\mu}를 주의하십시오.

시스템에 n명이 존재할 확률


우선 고객이 파송 과정에 따라즉, $\Deltat 달러로 충분한 간격을 설정하면 최대 한 명의 고객만 올 수 있습니다.이때 평균 도착률은 $\lambda와 한 고객이 올 확률은 $\lambda\Delta달러로 표시할 수 있다.시간 t시스템에서 클라이언트 k의 확률을 $P로 설정합니다k(t)달러입니다.이 확률의 $\Deltat 달러 이후의 변화를 기술합니다.마찬가지로 고객이 평균 서비스 $\mu$의 서버에서 나올 확률도 $\mu\Delta달러가 됩니다.
여기까지는 지난번의 가설과 같다.이번에 우리는 상태 k가 $1\leqk\leqn달러일 때의 평균 서비스율을 $k\mu달러로 정할 것이다.이는 평균 서비스 비율이 $\mu달러인 서버가 k대를 이동하고 있음을 의미합니다.다음은 시스템에서 고객의 수량 변화를 나타내는 방정식(상태 방정식)이다.단, 저번와 같은 상황에서 경계를 나누는 $k=0, N달러에 주의해야 한다.10분이 지나서 안정된 상태로 계산하면
$P_k=\frac{\frac{a^k}{k!}}{\sum_{i=0}^{N}\frac{a^i}{i!}}$
그러나 $(i=0,...,N), a=\rac{lambda} {\mu}달러.
이렇게 하면 우리는 시스템에 k명의 고객이 있을 확률을 알게 된다.
이후 우리는 줄 서기 초기에 자주 발생하는 공식을 모색할 것이다.

시스템 내 평균 손님 수 L


L은 평균, 즉 기대치이기 때문에 $L=\sum{k=0}^{N}kP_$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.따라서 $L=\sum{k=0}^{N}kP_k$
$=a\frac{\sum_{k=0}^{N}\frac{a^k}{k!}-\frac{a^N}{N!}}{\sum_{k=0}^{N}\frac{a^k}{k!}}$
$=a(1-P_N)$

시스템 내 평균 대기 시간 W


작은 공식 $W=\rac{L} {lambda} =\racc {1-P N} {mu} 달러

줄을 서는 평균 손님 수 Lq


줄을 설 수 없기 때문에 0입니다.

대기열 평균 대기 시간 Wq


대기열에 배열되지 않기 때문에 0입니다.

호출 손실률


호출 손실률이란 줄을 서지 못하고 쫓겨난 사람의 비율을 뜻한다.일반 $Pb$EN (a) 달러로 표시됩니다. 여기는 달러 E 입니다.N달러.호출 손실률이 서버가 묻힐 확률과 같기 때문에 $EN(a)=P_모두 N달러입니다.알라가 이것을 발견했기 때문에 알란 B식이라고 불린다.주제 밖의 말을 좀 해라. C식 방이라고 한다.
더 재미있는 건 점화식으로.
$E_0(a)=1$
$E_N=\frac{a E_{N-1}(a)}{s+a E_{N-1}(a)}$
설립,$FN(a)=\rac{1}{E N(a)}$에 넣으면
$F_0(a)=1$
$F_N(a)=1+\frac{N}{a}F_{N-1}(a)$
성립N은 모두 1 이상의 정수다.

통과량 Y와 잃어버린 양 al


통과된 양은 시스템 내의 평균 손님 수이다.즉 $Y=a(1-P N)=a(1-E N(a)$)이로써 전체의 평균 a에서 통과한 양을 빼고 잃어버린 양을 계산하면 $al=a-Y=a E_N달러.

a와 N의 관계


B 를 0 이상 1 이하의 일정치로 $EN(a)=B달러입니다.현재 $EN(a)$a에 대한 편미분 방정식
$\frac{\partial E_N(a)}{\partial a}=(\frac{N}{a}-1+E_N(a))E_N(a)$
$EN(a)=B달러의 조건에서 풀면 a와 N의 것을 얻을 수 있다.또한 N, a, B의 활용도 $N(B)=\racc {a(1-B)] {N} 달러가 성립될 것 같습니다.
이번에는 파이톤으로 이 두 도표를 써 보았다.
프로그램입니다.
M_M_N_N.py![N_a.png](https

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt

# 無駄が多いプログラム

def E_B(N, a):
    # アーランB式を計算する。
    # Nはサーバー数
    # aはトラフィック密度
    p=1
    i=1
    while i < N+1:
       b = a * p
       p = b / (i + b)
       i += 1
    return p



def make_list(n, b):
    # nはサーバー数の最大値
    # bはニュートン法で解く為の目的関数E_B(N, a)-BのBを表していて呼損率を表す。
    p = [0 for i in range(n+1)]  # n+1番目がE_B(N, a)となる
    p[0] = 0  # a=s=0は明らかに成り立つ為
    c = 1  # a_0として初期値cを決める。
    for i in range(1, len(p)):
        a = c
        # E(N,a)=Bとなる値を20回程度の繰り返しで求める。
        for j in range(20):
            t = E_B(i, a)
            a = a - (t-b) / ((i/a-1+t)*t)
        p[i] = a
        c=a # 次回用に妥当な初期値に更新しておく

    return p


# ここからは描画と実行
n=50
b=0.01
p = make_list(n, b)

plt.figure()
plt.plot(range(n+1), p)
plt.xlabel("N")
plt.ylabel("a")
plt.title("E_N(a)=%.3f" % b)

plt.figure()
rho = [0]

for n, a in enumerate(p):
    if n == 0:
        continue
    rho.append(a*(1-b)/n)

plt.plot(range(n+1), rho)
plt.xlabel("N")
plt.ylabel("rho_N(B)")
plt.title("E_N(a)=%.3f" % b)

plt.show()
이 프로그램에 따르면 데이터 밀도 a와 서버 수 N의 관계는

따라서 B를 호출 손실률로 사용하는 경우 $\rhoN(B)$

총결산


지금까지 이 시리즈는 qita였지만 프로그래밍이 없어서 넣어봤어요.
주의해야 할 것은 $0다음엔 어떡해?

좋은 웹페이지 즐겨찾기