簡體   English   中英

用於XML文件生成的機器學習算法

[英]Machine Learning algorithm for XML file generation

我有一個游戲應用程序,其中包含必須跨越迷宮的角色。 游戲可以生成數千個不同的迷宮,角色可以根據用戶的選擇移動並手動穿過迷宮。 我們需要增加顯示每個迷宮的正確方法的可能性。 因此,我們添加了根據xml文件移動字符的可能性。

這個XML文件非常復雜,通常大約有三十五萬行。 讓我們說它在以下結構中(但更復雜):

  <maze-solution>
  <part id="1">
  <sector number="1">
    <action>
        <equipment>heavy</equipemnt>
        <movement>
            <start-position>1250></start-position>
            <angle>23.43</angle>
            <duration>0.44</duration>
        </movement>
        <action-type>run</action-type>
        <character>1</character>
        <protection>none</protection>       
    </action>
    <action>
        <equipment>light</equipemnt>
        <movement>
            <start-position>4223></start-position>
            <angle>233.43</angle>
            <duration>0.32</duration>
        </movement>
        <action-type>walk</action-type>
        <character>1</character>
        <protection>none</protection>       
    </action>
    <action>
        <equipment>heavy</equipemnt>
        <movement>
            <start-position>1231></start-position>
            <angle>84.134</angle>
            <duration>0.454</duration>
        </movement>
        <action-type>run</action-type>
        <character>2</character>
        <protection>none</protection>       
    </action>
    <action>
        <equipment>heavy</equipemnt>
        <movement>
            <start-position>932></start-position>
            <angle>34.43</angle>
            <duration>0.50</duration>
        </movement>
        <action-type>duck</action-type>
        <character>1</character>
        <protection>none</protection>       
    </action>   
  </sector>
  <sector number="2">
    <action>
        <equipment>heavy</equipemnt>
        <movement>
            <start-position>1250></start-position>
            <angle>23.43</angle>
            <duration>0.44</duration>
        </movement>
        <action-type>run</action-type>
        <character>1</character>
        <protection>none</protection>       
    </action>
    <action>
        <equipment>light</equipemnt>
        <movement>
            <start-position>4223></start-position>
            <angle>233.43</angle>
            <duration>0.44</duration>
        </movement>
        <action-type>walk</action-type>
        <character>1</character>
        <protection>none</protection>       
    </action>
    <action>
        <equipment>heavy</equipemnt>
        <movement>
            <start-position>1231></start-position>
            <angle>84.134</angle>
            <duration>0.454</duration>
        </movement>
        <action-type>run</action-type>
        <character>2</character>
        <protection>none</protection>       
    </action>
    <action>
        <equipment>heavy</equipemnt>
        <movement>
            <start-position>932></start-position>
            <angle>23.43</angle>
            <duration>0.44</duration>
        </movement>
        <action-type>duck</action-type>
        <character>1</character>
        <protection>none</protection>       
    </action>   
  </sector>
  <sector number="3">   
  </maze-solution>

目前,我們有能力使用CNN算法對每個迷宮進行分類,並生成一個表示離開迷宮的方式的xml - 這意味着如果字符將根據該文件移動,它們將穿過迷宮。 該算法已經過測試,無法通過任何方式進行更改。

問題是,生成的文件大多數時候不是最好的(並且通常非常明顯)。 穿越迷宮有不同的,更快的,更好的方法。

我們還有數千個(我們可以根據需要獲得盡可能多的)文件,這些文件是為保存的迷宮手動創建的,因此它們代表了一種優雅而快速的迷宮。 理想的目標是,有一天,我們的程序將學習如何生成這樣的文件而無需人們手動創建它們。

總之,與硬編碼的XML文件相比,我們有大量的程序生成的XML文件。 有成千上萬對 - 程序生成的文件,以及一個人創建的“理想”文件版本。 (並且我們可以獲得無數個這樣的對)是否有一種方法,使用成千上萬的對,制作第二步算法,將“學習”應該在生成的XML文件中進行哪些調整,以使它們更像硬編碼的?

我不是在尋找一個特定的解決方案,而是一個讓我走的總體思路。 我希望自己清楚,但如果我錯過了一些信息,請告訴我,我會加上它。

我想你正在咆哮錯誤的樹。 將“不可變”算法的輸出轉換為基於用戶提供的解決方案的更好解決方案的機器學習算法似乎比它的價值更麻煩。

對我來說,這聽起來像Dijkstra算法的應用,因為你試圖找到迷宮中的最短路徑, 這就是這個算法的設計目標 當然,您心中所需的任何最短路徑算法也足夠,但Dijkstra是更常用的方法之一。 根據您在帖子中提供的評論:

最短持續時間的解決方案並不總是最好的,有許多不同的因素,在此過程中丟失的生命數量,浪費的能量(當然是游戲中的生命和能量),以及難度等等。手寫的解決方案是有時候持續時間較長但風險較小,資源使用和浪費較少

圖表上的邊緣權重不僅僅是距離,還應考慮與導航迷宮相關的所有這些成本。 由於這非常復雜,使用不同的邊緣權重計算提供多個“最佳”解決方案也可能是有用或有趣的,這可以最大限度地減少每個資源(時間,生命,能源......)的使用以及一個或更多,以最小化一些組合分數。

另一件事:如果這是真的:

比較並不那么容易

您如何確定用戶解決方案更好?

最后,你在原帖(強調我的)中說了以下內容:

目前,我們有能力使用CNN算法對每個迷宮進行分類,並生成一個表示離開迷宮的方式的xml - 這意味着如果字符將根據該文件移動,它們將穿過迷宮。 該算法已經過測試,無法通過任何方式進行更改。

為什么呢? 這種措辭的方式使它聽起來像你編寫的算法,所以為什么不能改變它?

正如您在問題和評論中提到的那樣,您不希望使用更改算法來查找最佳路徑,而只是尋找從生成的解決方案中找到最佳解決方案。

您應該注意到,機器學習方法旨在通過更改某些因素來優化某些解決方案,例如根據問題中的權重更改路徑以找到最佳解決方案或接近最佳解決方案。 但是你的問題是另一個故事,因為你只需要一個算法來檢查XML文件並找到最好的,而不需要改變解決方案。

總而言之,您需要一些測試方法,對於每個人來說,如果不確切地知道您的程序范圍,就很難找到其中一個。

我同意wlyles的回答。 這是我的想法:

有一個重要的問題:開發人員是如何確定哪種方法最好的? 您是否知道相關測量關鍵數據的確切權重。 例如,總持續時間的重要性可以是0.2; 活丟失= 0.2; 特殊物品= 0.1; 額外的生命增加= 0.4; 如果你知道這一點,你可以輕松地比較很多不同的解決方案,找到最好的解決方案。 但是,通過您的最佳解決方案,您應該能夠生成此類指標或培訓具有不同解決方案及其質量的CNN(0-1)。

你需要不同的迷宮解決方案來比較它們! 如果您沒有這些解決方案,則必須創建它們。 無法輕松修復xml。 也許你可以保留xml的一部分,但你需要寫一些東西來創建新的運動解決方案。 通過編寫一個算法,該算法使用您的權重來創建最佳解決方案,或者創建許多不同的解決方案,然后比較它們以找到最佳解決方案。

也許我弄錯了,但我不認為xml文件中的小調整有幫助,你需要在xml中更大的改動(至少到相關部分)。

這可能很明顯,但你真的不想直接使用xml,而是使用它的解析版本。 否則你將無法獲得任何有用的解決方案。

我完全理解這個問題。 我在大學里教授的概率過去常常在學期內多次提出同樣的問題:如果你有一張完美的洗牌套牌,你又一次洗牌了。 甲板或多或少是隨機的嗎?

答案是基於您用來確定套牌隨機性的標准。 你使用的是卡片或套裝的等級。 你在玩什么游戲 橋,5卡螺柱,或7手。

多年來,我和朋友一起玩了很多紙牌游戲。 當一位朋友過去常常洗牌8次和10次並減慢比賽時,我常常感到沮喪。 一直想着我的教授。

大約25年后,我參加了包括建模在內的研究生概率課程。 我有一個我必須選擇的最終項目。 我寫了一個程序,洗牌卡片,並用於5手牌和7手牌撲克的撲克手牌類型的標准。

我的第一個結果很奇怪。 當我洗牌1次和8次時,我得到了完全相同的結果。 還有2和9,然后是3和10.我終於找到了問題。 當你完成一次完美的洗牌時,將牌分成兩堆26,然后將兩張牌之間的牌交替進行洗牌,這樣做7次就得到了與你開始時完全相同的牌組。

學過的知識。 改變洗牌的方法,因此它並不完美。 你的問題也一樣。 當您開發出不同的解決方案時,您必須返回並重新評估標准,並在某些情況下返回並獲得額外的輸入。

我想知道Dijkstra算法是否可以提供幫助。 你基本上有一個圖表,像Dijkstra試圖獲得最佳路徑。 使用任何圖形解決方案,您都可以使用鄰居節點並嘗試連接鄰居。 所以最好的解決方案是首先確定節點和鄰居。 輸入不清楚節點和鄰居所在的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM