「待ち行列」をGolangでプログラミング
統計検定2級の勉強ついでに待ち行列を再勉強してみました。
「待ち行列」そのものの勉強はこちらを参考にさせていただきました。
っと思い、Golang + Docker + uikitでアプリを作ってみました。
待ち行列の時間を求めるメインの部分はこんな感じにしてみました。 (QueueingController.goより抜粋)
せっかくなのでプログラミング
とりあえず分かったところで、せっかくなので 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に上げてみました。