Go + WS (仮)  psoをws使ってやってみる- @spdy+ws勉強会
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

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

on

  • 1,517 views

 

Statistics

Views

Total Views
1,517
Views on SlideShare
1,517
Embed Views
0

Actions

Likes
2
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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