用于XML文件生成的机器学习算法

问题描述 投票:9回答:4

我有一个游戏应用程序,其中包含必须跨越迷宫的角色。游戏可以生成数千个不同的迷宫,角色可以根据用户的选择移动并手动穿过迷宫。我们需要增加显示每个迷宫的正确方法的可能性。因此,我们添加了根据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文件中进行哪些调整,以使它们更像硬编码的?

我不是在寻找一个特定的解决方案,而是一个让我走的总体思路。我希望自己清楚,但如果我错过了一些信息,请告诉我,我会加上它。

c# xml algorithm machine-learning
4个回答
9
投票

我想你正在咆哮错误的树。将“不可变”算法的输出转换为基于用户提供的解决方案的更好解决方案的机器学习算法似乎比它的价值更麻烦。

对我来说,这听起来像Dijkstra's algorithm的应用,因为你试图在迷宫中找到最短的路径,这就是这个算法的设计目标。当然,您心中所需的任何最短路径算法也足够,但Dijkstra是更常用的方法之一。根据您在帖子中提供的评论:

最短持续时间的解决方案并不总是最好的,有许多不同的因素,在此过程中丢失的生命数量,浪费的能量(当然是游戏中的生命和能量),以及难度等等。手写的解决方案是有时候持续时间较长但风险较小,资源使用和浪费较少

图表上的边缘权重不仅仅是距离,还应考虑与导航迷宫相关的所有这些成本。由于这非常复杂,使用不同的边缘权重计算提供多个“最佳”解决方案也可能是有用或有趣的,这可以最大限度地减少每个资源(时间,生命,能源......)的使用以及一个或更多,以最小化一些组合分数。

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

比较并不那么容易

您如何确定用户解决方案更好?

最后,你在原帖(强调我的)中说了以下内容:

目前,我们有能力使用CNN算法对每个迷宫进行分类,并生成一个表示离开迷宫的方式的xml - 这意味着如果字符将根据该文件移动,它们将穿过迷宫。该算法已经过测试,无法通过任何方式进行更改。

但为什么?这种措辞的方式使它听起来像你编写的算法,所以为什么不能改变它?


3
投票

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

有一个重要的问题:开发人员是如何确定哪种方法最好的?您是否知道相关测量关键数据的确切权重。例如,总持续时间的重要性可以是0.2;活丢失= 0.2;特殊物品= 0.1;额外的生命增加= 0.4;如果你知道这一点,你可以轻松地比较很多不同的解决方案,找到最好的解决方案。但是,通过您的最佳解决方案,您应该能够生成此类指标或培训具有不同解决方案及其质量的CNN(0-1)。

你需要不同的迷宫解决方案来比较它们!如果您没有这些解决方案,则必须创建它们。无法轻松修复xml。也许你可以保留xml的一部分,但你需要写一些东西来创建新的运动解决方案。通过编写一个算法,该算法使用您的权重来创建最佳解决方案,或者创建许多不同的解决方案,然后比较它们以找到最佳解决方案。

也许我弄错了,但我不认为xml文件中的小调整有帮助,你需要在xml中更大的改动(至少到相关部分)。

这可能很明显,但你真的不想直接使用xml,而是使用它的解析版本。否则你将无法获得任何有用的解决方案。


2
投票

正如您在问题和评论中提到的那样,您不希望使用更改算法来查找最佳路径,而只是寻找从生成的解决方案中找到最佳解决方案。

您应该注意到,机器学习方法旨在通过更改某些因素来优化某些解决方案,例如根据问题中的权重更改路径以找到最佳解决方案或接近最佳解决方案。但是你的问题是另一个故事,因为你只需要一个算法来检查XML文件并找到最好的,而不需要改变解决方案。

总而言之,您需要一些测试方法,对于每个人来说,如果不确切地知道您的程序范围,就很难找到其中一个。


-1
投票

我完全理解这个问题。我在大学里教授的概率过去常常在学期内多次提出同样的问题:如果你有一张完美的洗牌套牌,你又一次洗牌了。甲板或多或少是随机的吗?

答案是基于您用来确定套牌随机性的标准。你使用的是卡片或套装的等级。你在玩什么游戏桥,5卡螺柱,或7手。

多年来,我和朋友一起玩了很多纸牌游戏。当一位朋友过去常常洗牌8次和10次并减慢比赛时,我常常感到沮丧。一直想着我的教授。

大约25年后,我参加了包括建模在内的研究生概率课程。我有一个我必须选择的最终项目。我写了一个程序,洗牌卡片,并用于5手牌和7手牌扑克的扑克手牌类型的标准。

我的第一个结果很奇怪。当我洗牌1次和8次时,我得到了完全相同的结果。还有2和9,然后是3和10.我终于找到了问题。当你完成一次完美的洗牌时,将牌分成两堆26,然后将两张牌之间的牌交替进行洗牌,这样做7次就得到了与你开始时完全相同的牌组。

学过的知识。改变洗牌的方法,因此它并不完美。你的问题也一样。当您开发出不同的解决方案时,您必须返回并重新评估标准,并在某些情况下返回并获得额外的输入。

我想知道Dijkstra算法是否可以提供帮助。你基本上有一个图表,像Dijkstra试图获得最佳路径。使用任何图形解决方案,您都可以使用邻居节点并尝试连接邻居。所以最好的解决方案是首先确定节点和邻居。输入不清楚节点和邻居所在的位置。

© www.soinside.com 2019 - 2024. All rights reserved.