「待ち行列」をGolangでプログラミング

統計検定2級の勉強ついでに待ち行列を再勉強してみました。 「待ち行列」そのものの勉強はこちらを参考にさせていただきました。

せっかくなのでプログラミング

とりあえず分かったところで、せっかくなので Webアプリとして答えを求められればいいな
っと思い、Golang + Docker + uikitでアプリを作ってみました。
待ち行列の入力画面
待ち行列の時間を求めるメインの部分はこんな感じにしてみました。 (QueueingController.goより抜粋)
type QueueingTheory struct {
    Window   string `form:"window" binding:"required,min=1,max=1"`
    Arrived  string `form:"arrived" binding:"required,min=1,max=3"`
    Servises string `form:"servises" binding:"required,min=1,max=3"`
}

type QueueingResult struct {
    // ID             uint   `json:"id"`
    WaitMan        string `json:"wait_man"`         // 待ち人(人)
    WaitTime       string `json:"wait_time"`        // 待ち時間(分)
    TurnAroundTime string `json:"turn_around_time"` // ターンアラウンドタイム(分)
}

var queueing_result QueueingResult // 計算結果を格納

func exec_queueing(ta, ts, win float64) error {
    λ := 1.0 / ta
    u := win * 1.0 / ts

    ro := λ / u // 混雑度

    fmt.Println("結果:", λ, u, math.Pow(ro, win))
    wait_man := math.Pow(ro, win) / (1 - math.Pow(ro, win)) // 待ち人
    wait_time := wait_man * ts
    turn_around_time := wait_time + ts

    // queueing_result.ID += 1
    queueing_result.WaitMan = strconv.FormatFloat(wait_man, 'f', 1, 64)
    queueing_result.WaitTime = strconv.FormatFloat(wait_time, 'f', 3, 64)
    queueing_result.TurnAroundTime = strconv.FormatFloat(turn_around_time, 'f', 3, 64)

    return nil
}
全部のソースはGithubに上げてみました。

こういうブログもありました。

人気のあるブログ:

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください