ASE高階軟體工程 第一次結對作業

2022-08-22 11:24:14 字數 2681 閱讀 7854

具體規則見:講義。大致規則如下:

n個同學(n通常大於10),每人寫乙個0~100之間的有理數 (不包括0或100),交給裁判,裁判算出所有數字的平均值,然後乘以0.618(所謂**分割常數),得到g值。提交的數字最靠近g(取絕對值)的同學得到n分,離g最遠的同學得到-2分,其他同學得0分。

難點分析

環境未知。「**點」遊戲作為對戰類遊戲,遊戲規則本身較簡單。因此,遊戲的局面很大程度上取決於其它選手的策略、可**性較弱,而不像圍棋、象棋等遊戲中,遊戲的局面和發展很大程度受到規則約束,因此可**性較強。這導致遊戲中「最優策略」也很大程度上取決於其它選手的策略,因而pretrain的模型效果不令人滿意,甚至有時比從頭開始訓練的模型效果更差。

資料缺乏。由於第一點,我們以及大部分隊伍都選擇比賽過程中從頭開始訓練模型。然而,比賽過程中一輪比賽只能獲取乙個新資料,資料量太少不利於模型收斂。另外,寫**、調參過程中,使用server與他人對戰時每個資料需要至少3s,也較難有效調參。

獎勵稀疏。這是許多rl問題的共有問題。在本遊戲中,大部分情況下的獎勵都是0,不利於模型學習。

另外,個人對遊戲本身有一點小小的懷疑:許多rl遊戲的規則本身就能讓人聯想到可能的「最佳策略」,但是這個遊戲的規則讓我感覺隨機性太大,作為人我感到一頭霧水。即使我自己是rl agent,可能也難以學到比胡亂猜測更好的策略,或者可能需要對其它選手的策略進行一定程度的分析才能選擇較好的策略。雖然比賽結果顯示確實有的隊伍得分很高,這個遊戲本身是否真的存在乙個「最佳策略」?我個人不太確定。(當然這並不影響rl學習,只是個人覺得遊戲有些古怪。)

我們使用q-learning。該演算法維護乙個q表,記錄在某個外界狀態\(s\)下,執行某動作\(a\)預期得到的獎勵\(q(s, a)\)。一旦有了足夠貼近現實的q表,在每個狀態\(s\)下,可以選擇動作\(a^* = \arg \max_a q(s, a)\),從而最大化預期的獎勵。

實際操作中,由於q表未知,需要從環境中進行學習。具體而言,模型隨機初始化乙個q表,通過在不同狀態下嘗試不同動作、觀察獎勵回饋,模型逐步修正q表的估計,使之更接近現實,更能指導模型動作。流程圖如下:

本次作業中,我們增加了一些更合理的action;為了解決難點中的2.,我們構造了更多可供學習的資料。具體細節見 具體實現 部分。

由於難點分析中的1. 2.,我們認為需要train from scratch,因而資料量匱乏是乙個很嚴重的問題。因此,我們認為不適合採用引數較多、較難收斂的神經網路模型,而應該是用最簡單的q learning。

由於q learning不考慮狀態、動作之間的相關性,而是為每個\((s, a)\)單獨儲存乙個q值,因此狀態空間或動作空間太大會導致模型難以收斂。因此,我們控制了狀態空間和動作空間的大小,只手工設計了一些較為有用的策略作為動作。

action改進。對於demo中已有的action,我們更改了action輸出的初始值,使之更接近統計資料中常見的初始值;對於需要兩個數字輸入的情況,原始的很多action輸出的兩個數字相同,不利於得分,因此我們在第二個數字中引入一些隨機性;另外,我們引入了一些新的action,其在**點經常出現的特定範圍內輸出隨機數,或輸出乙個大數擾動。

構造資料。由於伺服器的api提供上一局中所有人的提交數字,因此我們在訓練過程中,可以構造「假如上一局中我採納了另乙個策略,得到的reward會是怎樣」的資料,從而將資料量擴充套件\(n_a\)倍,其中\(n_a\)為動作的個數。

在第一局中,我們為第6名。在兩局中間,我們根據**點走向資料對action的取值範圍等進行了微調,取得了一定的效果,在第二局中獲得第4名。

**點比賽的結果符合你們的預期嗎?

第一局遊戲結果較差,但我們採取改進之後略有提公升。整體而言,我們的bot效果不算突出,主要原因可能在於狀態設計過於簡單:我們用最後10輪中**點下降、上公升的次數作為狀態,難以完整描繪目前局勢狀況。另外,我們了解到成績較好的組採用了dqn,可能說明q-learning的學習能力仍然有限。

在正式的比賽前,你們採取了怎樣的策略來評價模型的好壞?

我們在room0、room1中執行bot,參與競賽,評估模型效果。後來,由於room0、room1速度實在太慢,我們加入了一些其他同學建立的房間評估效果。另外,我們記錄bot每輪reward,觀察bot學習曲線等,評估bot學習能力。

如果將每輪可提交的數字變成 3個,或者找更多的參賽者來參加比賽,你們的方法還適用嗎?

對於三個數字,q-learning可能適用,但需要分析資料、設計更適合提交三個數字的策略。如果action space太大,可能需要考慮action之間關係的q表建模方法。

對於更多的參賽者,方法仍然適用。

請評價合作夥伴的工作,評價方式請參考書中關於三明治方法的論述。並提出結對夥伴可以改進的地方。

我的合作夥伴是魏天心和吳紫薇和吳雪晴同學,兩個同學都很優秀,為我們的專案作出了很多貢獻。

魏天心同學對rl很了解,很快地分析了問題、提出了可行的解決方案,並且積極地寫**、進行除錯。

吳紫薇同學對資料進行了分析和相應的改進,也貢獻了很多**。

另外,由於我們在國外暑研,不在國內、和國內同學與助教交流有限;而且暑研期間各自有各自的工作,專案的ddl正好在我們暑研結束回國的時間附近,因此ddl前我們有的人剛回國正在倒時差、有的人還在忙暑研收尾、有的人馬上要上飛機,因此整體時間比較缺乏。隊友們都非常優秀,這樣的結果我覺得也能夠心滿意足了。

ASE高階軟體工程 第一次結對作業

bot8前來報道 a 問題描述 b 簡單的思考 a 環境分析 b 選擇模型 c q learning簡介 d 實現細節 e 工作流程 a 兩輪得分 第一輪1690分 1000輪 第二輪13850分 10000輪 b 心得反思 兩輪第一還是超出預期的,沒想到效果還不錯 v 其實在交bot之前,我們也是...

2020軟體工程第一次結對作業

這個作業屬於哪個課程 這個作業要求在 homework 11224 這個作業的目標 需求分析,製作專案原型,初步了解產品開發過程 原型製作工具 墨刀原型模型鏈結 學號031802302 陳凱強 031802303 陳龍輝 目錄uml用例圖 uml類圖 流程圖原型模型 github的使用 結對過程 總...

高階軟體工程第一次作業

1 回想一下你對計算機 軟體工程專業的暢想 對於我來說,以上三個問題可以歸結為 為什麼我現在會是一名計算機技術專業的研究生?高考志願填報時打算填報的是電腦科學相關的專業,沒想到最後卻填了個專業名稱相關的專業 資訊與計算科學 沒錯,資訊與計算科學 咋一看像是電腦科學的專業,其實是門數學專業。所以本科階...