自動堆俄羅斯方塊

來源:互聯網
上載者:User

  晚上睡不著覺的時候玩mp3的俄羅斯方塊。玩著玩著覺得挺有意思的,想看能不能寫個程式,讓機器也來玩一玩,和人比一下,看誰的得分儘可能的高。這裡面有個關鍵的遊戲規則:單次消掉一行得100分,消兩行得300分,消三行得700分,消四行得1500分。一次消一行最簡單,得分最低;一次消四行難度最高,並且潛在有最高的危險性,得分很高。最終的目的就是在遊戲不死掉的情況下,讓得分儘可能的高。顯然,這是個最佳化問題。

  遊戲的積木形狀是隨機的,假設服從一定的機率分布。這樣,在單位時間內,積木的總體積的數學期望容易得到。設為V。假設一次消掉一行的次數為x,一次消掉兩行的次數為y,一次消掉三行的次數為z,一次消掉四行的次數為k,則最終的目標函數為:
   max(100x+300*y+700*z+1500*k)

約束條件是:
   1.螢幕上剩餘行數不超過螢幕高度(若超過,則遊戲結束)
   2.(x+2*y+3*z+4*k)*螢幕寬度 <= V 

    感覺,積木形狀的隨機性是否服從規律感覺會對最終的結果有影響。暫時不考慮這個問題。

    顯然不可能窮舉,或者類似窮舉的策略,因為每次在螢幕上只會出現兩個積木:當前積木與下一個積木。無法得到所有積木出現的序列,而且這個序列本身就是隨機的,因此沒辦法窮舉。只能考慮啟發學習法策略。

 

     定義一個代價函數,通過代價函數來確定積木的最終的位置,確定了位置後才確定動作(移動與變形)來使得積木到達指定的位置。有幾個要考慮的因素:
1.得分
    這個是最重要的
2.積木之間無法填充的空格(只能等上層積木消掉了才能繼續填充)
    這個也很重要。尤其是當空格數較多,或者螢幕行數較多時,必須把這個指標調整到比得分更重要的位置。
3.當前螢幕上積木的行數
    行數的多少確定了策略的選擇。如果行數較少,則以得分高為主,當行數較高時,必須降低螢幕上積木的行數,防止行數超過螢幕高度而遊戲中止。
4.下一個積木
    當積木放到某個位置後,要使後面一個積木也有很好的選擇。

    顯然,這樣的問題背景無法得到最優解,除非能在遊戲之前獲得積木的出現次序。

    上面的都是很普通的解決思路。我比較感興趣的是,如何讓機器通過不斷的學習,獲得越來越好的堆積木技能呢?也就是說,當一個積木來了以後,如何讓選擇越來越趨於合理?

    以前聽機器學習的時候,好像也有個類似的問題,不過是下棋的。它的學習過程是讓機器自己與自己對弈,通過對弈的流程調適各個參數,不斷的學習進化以達到更好的棋藝。

     而這個自動堆積木的,該如何去學習進化呢? 也許可以考慮這樣的笨方法:隨機產生很多積木序列,一方面通過窮舉搜尋它的最優解,一方面機器通過自己的搜尋策略獲得一個序列,然後把最優解與機器的選擇來進行對比學習,通過迭代反饋的方式來調整參數?
    也許不可行,因為最優解很難得出。這個可能性很大。不過可以通過一定方式來獲得近似最優解。

     想想而已,和那個曆史搜尋系統一樣;想想而已,讓腦殼不至於鏽了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.