「待ち行列」を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に上げてみました。

鹿児島県の出水市という所に住んでいまして、インターネット周辺で色々活動して行きたいと思ってるところです。 Webサイト作ったり、サーバ設定したり、プログラムしたりしている、釣りと木工好きなMacユーザです。 今はデータサイエンスに興味を持って競馬AI予想を頑張ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

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