發表文章

[Paper note] Multiagent Bidirectionally-Coordinated Nets for Learning to Play StarCraft Combat Games

Paper:  https://arxiv.org/abs/1703.10069 這篇論文是由 Alibaba & UCL共同發表的,並投稿到 NIPS 2017。他們發表了一個 Multi-agent framework 讓 agents 利用共同的 framework 一起學習,他們將這個架構簡稱為 BiCNet。 Attribute of BiCNet Vectorised Actor-Critic: vectorised 指的是一個 input 可以輸入多個 agents的資訊。 Deterministic Policy Use bidirectional RNN as their actor network and critic network Dynamic Grouping 機制 Shared Parameter among all agents 他們使用 BRNN 利用 hidden layer 來 Model agents 之間彼此溝通的行為,這是這篇論文的創新點之一。不過他們團隊並不知道為什麼這樣可行,而僅僅解決了 how 的問題,還不知道 why? 另外精彩的地方我覺得是數學的 Model,他們分為兩個視角來看 Starcraft Combat 問題: 將 Combat 看作 zero-sum stochastic games (recycle) 定義出整體 Combat 的 reward (隨 step 變化) Model agents 之間彼此合作緊密度,是否完成共同目標。利用 Top-K list 記錄和當下 agent 合作的其他 agents。在這裡我稱為一個小 group,後續對應的是 dynamic grouping。在這樣的情況下,他們會共享 reward,好像一個小隊生死與共一樣。 最後,他們利用這樣的 framework 學習到了各種互動的策略 Coordinated moves without collision Hit and Run tactics Coordinated cover attack Focus fire without overkill Collaborations between heterogeneous agents 雖然這篇論

Build Starcraft Learning Environment (using TorchCraft) 中文教學

圖片
前言 自從 AlphaGo 戰勝世界棋王李世 乭 以來,AI 還有 Deep Learning 至今火紅。DeepMind 將他們下一個研究的目標定錨為 Starcraft 這樣的 Real-Time Strategy Game 即時戰略遊戲。 在 8月的時候,DeepMind 與 Blizzard 合作釋出了適用於 Starcraft 2 的學習套件: pysc2 。Blizzard 也是出了相應的 API protocol ,目前實作 C++ 的版本。開拓了機器學習專家以及資料科學家的新戰場。 在這裡,我想要分享的是在 Starcraft 1代 如何搭建機器學習的環境,主要是利用 Facebook 發布的 TorchCraft  進行資料的串接處理。 需要的套件軟體 Starcraft: Brood War 1.16.1 BWAPI 4.1.2 TorchCraft 1.3.0/1.0.2 Torchcraft-py gym-starcraft 我們將會在 Windows 端安裝遊戲以及 BWAPI 和 TorchCraft (server)。在 Linux 安裝 TorchCraft (client), Torchcraft-py, gym-starcraft Installation BWAPI 是與 Starcraft: Brood War 溝通的 API,在研究 RTS Game AI 的時候,主要的遊戲就是 Starcraft: Brood War (以下稱為 SC:BW) 以及 Starcraft2,並且透過自訂遊戲的方式來進行學習及遊玩。 Install Starcraft: Brood War 我們可以到 ICCup 的網站下載遊戲。 https://iccup.com/starcraft/content/news/iccup_updated_to_1.16.1.html Install BWAPI https://github.com/bwapi/bwapi/releases 然後到 BWAPI Github 頁面安裝需要的 API 版本。在這裡,我選定的版本是 4.1.2,因為目前 TorchCraft 尚未支援 BWAPI 4.2.0。在安裝的

如何建立 LINE BOT ( New API )

一個月前,我曾到 Golang Taiwan 參加社群聚會 GTG #16 (Golang Taipei Gethering) 在那次聚會中,Evan 為我們介紹如何建立一個 LINE BOT 然而,在前不久,11/16 的時候,LINE 把原本的 API 給移除了,目前採用的是 Messaging API, 和 LINE@ 的服務一起使用。於是我就想說,來分享一個 Talk 是有關於怎麼建置 LINE BOT 的好了! 今年我跟 Lab 的學弟政寬在系上創辦了一個 Open Source Community,名稱為 Edges 昨天(11/18) 是我們社群的第一次聚會,趁這個機會,趕快跟學弟妹們分享一下! 以下是當天的內容: https://hackmd.io/s/SyJUciYWg 有任何可以改進的地方歡迎來信: ita3051@gmail.com 謝謝 :)

python3 限定使用 keyword 關鍵字的方式作為參數

這篇是從 《Effective Python》: tips 21 學習到的觀念 在我們實作 function 的時候,定義 function specification。為了讓 function 的行為能夠更明確化,我們傾向在傳遞某些參數的時候 "強制" "限定" 使用 keyword方式的寫法來傳遞參數也就是指名 parameter=value 的方式。 這在 Python 裡面稱為 "Keyword-only Arguments" 相較於 Python2, Python3 有特殊的語法來支持這樣的使用方式: 在 parameter list 可以看到 "*" 它是用來標記 positional arguments 的結尾。在這之後的參數都一定要使用 keyword-only 的寫法。 如果這時候,我們使用 3個以上的 positional arguments 的話,會引發 "TypeError" 那 Python2 呢?使用 **kwargs 的方式,並且要手動引發 TypeError 。

python 動態預設參數, 執行期

python 動態預設參數, 執行期 本文的內容是參考 《Effective Python》: tips 20 我們在 python 定義一個 function 時,如果想要給定 default argument 可以這樣寫: def foo (arg= 10 ) : ... processing arg ... 但是如果我們今天要使用的預設參數是在動執行期才能夠決定的,而不是靜態時期該怎麼做呢? 例如:我們想要寫一個 log function, 會印出當時訊息的時間, 跟訊息內容 def log (msg, when=datetime.now () ) : print( "{when}: {msg}" .format(when, msg)) 可是如果我們是用上面的寫法,會發現取到的時間都是一樣的,那是 function 被定義的時間。為了處裡這個問題,我們會先將它設置為 None 再做進一步的處理,然後再利用 docstring 來補充說明 default argument 的用處。 def log (msg, when=None) : """ when 的預設值是 function call 發生的時間,也就是 log message 的時間 """ when = datetime.now() if when is None else when ... print message ... 因為 default argument 只會被 evaluate 計算一次,所以如果我們使用 [], {} 做為我們的 default argument 有時候會出現不可預期的錯誤。 例如: def to_json (data, default={}) : try : return json.loads(data) except ValueError: return default json_data1 = to_json( '123 321' ) json_data1[ 'k1' ]

Script Injection 的解決方案

在 Udacity Intro to Backend 的課程中,有提到一些後端的安全性問題像是: SQL Injection Script Injection 其中,針對 Script Injection 的處理方式是在我們將 user 傳送的資料寫到資料庫之前, 要先做清除的動作,這個術語叫作 Script Sanitize。 在 Intro to Backend 的課程中,就有以 python 舉例一些 script sanitize module 至於 golang 方面呢 ? bluemonday 好像是不錯的選擇: https://github.com/microcosm-cc/bluemonday