Go + WS (仮) psoをws使ってやってみる- @spdy+ws勉強会

1,014 views
878 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,014
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Go + WS (仮) psoをws使ってやってみる- @spdy+ws勉強会

  1. 1. Go + WS (仮)PSOをWS使ってやってみる2013/3/28(Wed.)@SPDY+WS勉強会
  2. 2. 自己紹介上田拓也豊橋技術科学大学大学院電子・情報工学専攻博士後期課程3年(今週末まで)twitter : @tenntennblog: http://u.hinoichi.net
  3. 3. アジェンダ● Go言語でWebSocket○ ライブラリの使い方● 粒子群最適化法(PSO) + WebSocket○ WebSocketを使った分散シミュレーション○ 粒子群最適化法
  4. 4. Go言語でWebSocket
  5. 5. Go言語とは(念のため)● Googleの開発しているネイティブコードを吐き出す、クールな言語○ シンプルな文法○ 静的型付け○ チャネルとGoroutine○ 豊富なライブラリ○ かわいいマスコット● ビッグウェーブがきてますよ○ GoCon 2013 spring■ 申込人数 182 / 120人○ 電車でGo!■ 電車借り切ってGo言語でハッカソン
  6. 6. net/httpパッケージpackage mainimport "fmt"import "net/http"func handler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "hello, gophers")}func main() {http.HandleFunc("/", handler)http.ListenAndServe(":8080", nil)}localhost:8080にアクセすると「hello, gophers」と出る。
  7. 7. HandlerとHandlerFunctype Handler interface {ServeHTTP(ResponseWriter, *Request)}// ServeHTTPを実装type HandlerFunc func(ResponseWriter,*Request)func (f HandlerFunc) ServeHTTP(wResponseWriter, r *Request)
  8. 8. websocketパッケージ● リポジトリ○ code.google.com/p/go.net/websocket● ドキュメント○ http://godoc.org/code.google.com/p/go.net/websocket
  9. 9. 構成の例受信部送信部クライアントサイドClients受信部送信部Serverブロードキャスト受信部
  10. 10. websocketパッケージの使い方● ハンドラを作って登録する○ Clientを作りServerに登録● Client型を作る○ 受信部を作る○ 送信部を作る● Server型を作る○ 登録部○ 掃除受信部(ブロードキャスト)
  11. 11. ハンドラの作成と登録● WebSocketのハンドラの型type Handler func(*Cnn)// http.func (Handler) ServeHTTP(w http.ResponseWriter, r *http.Request)handler := func (ws *websocket.Cnn) {// 受信部// 送信部}http.Handle("/ws", handler)
  12. 12. 受信部を作る● websocket.JSON.Receiveを使う// 別のgoroutineで受信処理go func() {done = make(chan bool)for {var msg Message // 適当な型err := websocket.JSON.Receive(ws, &msg)if (err == io.EOF) {done <- truebreak}// ブロードキャストする}}()
  13. 13. 送信処理を作る● websocket.JSON.Sendを使うfor {select {case msg := <-ch:websocket.JSON.Send(ws, msg)case <-done:return}}
  14. 14. 粒子群最適化法(PSO)+WebSocket
  15. 15. 何をやったのか?● 粒子群最適化法をブラウザ側(JS0で実行する● 結果をWSでサーバに送る● サーバに送られてきた結果を他のクライアントにブロードキャスト分散して粒子群最適化法を行なう!
  16. 16. 粒子群最適化法とは?● 粒子に解空間を探索させ、目的関数値を最小に最適化していく● 個体のベストと全体のベストを持つことで、他の粒子に結果を伝達する解空間解
  17. 17. 粒子群最適化法とは?● 基本的にはランダムウォーク● ローカルベストとグローバルベストに吸いよされる● 完成も持つ解空間解
  18. 18. 粒子群最適化法とは?● 粒子○ 解空間上の位置○ 速度○ 個体のベスト○ 全体のベスト
  19. 19. 粒子群最適化法と分散処理● 粒子群最適化法は分散処理と相性がいい○ 各粒子の動作はグローバルベストとして以外影響がない○ 粒子を動的に増減できる○ 粒子を小グループに分割して実行できる■ グローバルベストを一定間隔で同期する
  20. 20. 分散型の粒子群最適化法解空間=1クライアントServerグローバルベストブロードキャスト
  21. 21. DEMO
  22. 22. まとめ● Go言語で結構簡単にWebSocket使える○ Goroutineとチャネルが便利● ブラウザで分散シミュレーション○ WebSocketを使えば簡単○ 粒子群最適化法は実装簡単

×