C# 统一:机器学习-水平求解

C# 统一:机器学习-水平求解,c#,unity3d,machine-learning,C#,Unity3d,Machine Learning,最近我一直在玩弄机器学习,我想看看我是否能为我正在制作的游戏创建人工智能。人工智能应该能够为你解决这个难题 游戏目前的工作方式如下。网格中有一些瓷砖,其中一些是可移动的,而另一些则不是。单击要移动的平铺,然后将其拖动到某个方向。然后它将开始移动平铺,也可以选择移动玩家角色本身。最终目标是到达终点 自己玩游戏: 无论何时选择一个平铺(通过单击执行此操作),都可以按住鼠标按钮,然后拖动到希望平铺移动的方向上。一旦瓷砖移动完毕,玩家对象将向同一方向移动一步。如果玩家位于您移动的互动程序顶部,它将随互动

最近我一直在玩弄机器学习,我想看看我是否能为我正在制作的游戏创建人工智能。人工智能应该能够为你解决这个难题

游戏目前的工作方式如下。网格中有一些瓷砖,其中一些是可移动的,而另一些则不是。单击要移动的平铺,然后将其拖动到某个方向。然后它将开始移动平铺,也可以选择移动玩家角色本身。最终目标是到达终点

自己玩游戏:
无论何时选择一个平铺(通过单击执行此操作),都可以按住鼠标按钮,然后拖动到希望平铺移动的方向上。一旦瓷砖移动完毕,玩家对象将向同一方向移动一步。如果玩家位于您移动的互动程序顶部,它将随互动程序一起移动。然后在同一方向上再做一步

我想知道机器学习是否有可能(如果有,如何)在屏幕上定义一个位置,(可选)单击然后定义一个运动方向

请记住,我是机器学习的新手

要进一步澄清:

  • 网格现在是静态的,以使AI保持简单。但后来,我们的目标是随机生成一个关卡,看看它是否能解决这个问题
  • 理论上,AI需要做的就是选择一个要移动的瓷砖(0和网格宽度之间的数字,高度相同)。并定义运动方向。(0,1)、(0,-1)、(1,0)或(-1,0)
  • 脱离电网将导致重置
  • 到达网格的末尾将导致一场胜利
  • 沿无效方向移动会导致重置

    • 两个问题的简短回答:是

      您可以创建一个使用游戏状态(以便它可以读取网格的对象/属性)的ai,也可以使用原始屏幕输入与图像处理相结合的ai,这是一件很难创建的事情,而且运行起来很昂贵(计算)

      在统一形式上,对于“如何模拟鼠标输入”或类似问题,有几种答案。请看这里:

      如果你正在寻找人工智能的代码,很遗憾,你运气不好。网上有很多ai教程可以为这样的游戏创建一个简单的ai。我会建议不要一头扎进花哨的东西(比如神经网络),从简单开始。在我看来,最好也从为你的人工智能创建一个(类)结构开始,通过实践开始学习人工智能。从一个随机返回的“AI”开始,然后看看你可以在线学习和管理什么,并制作其他版本


      对于最早的人工智能之一,看看目标驱动人工智能或状态机。考虑到您的GIF,我认为他们应该能够给出很好的结果。

      基于您的要点,我真诚地建议只实施,并进行一些修改以模拟机器学习。A*寻路算法确定网格上从点
      A
      到点
      b
      的最佳路径,使用巧妙的编程,您可以以合理的开销获得想要的结果

      类似于“请勿触摸”网格点(死亡陷阱等)列表的东西,当AI进入这些网格点时,这些网格点会被填满,因此在下一次迭代中,它知道不要走这条路。这是您想法的一个非常基本的抽象概念,但是非常容易获得

      显然,我们无法为您编写代码,幸运的是,在*寻路中有大量资源可以帮助您开始


      假设您确实想要使用机器学习而不仅仅是路径系统:

      我将列出一些伪代码,您可以使用它们来实现AI学习静态板的基本场景。有不同的方法可以编写和实现这段代码,我只建议了一种方法。但在我们开始之前,让我们先讨论一下这个项目的总体情况和一些建议

      建议:

    • 我想说的是,你需要测量棋盘上的游戏状态,而不是鼠标移动。因此,人工智能基本上是在测量可以做出的动作。鼠标移动部分只是玩家与棋盘互动的一种方式,因此AI不需要它。让人工智能直接采取行动会更简单

    • 我不认为unity是这种实验的好平台。我想你最好用控制台程序来编程。例如,在visual studio c#console程序中使用二维数组(board),或通过CS50 IDE在c控制台程序中使用二维数组(通过edx.org免费注册CS50)。我之所以提出这些建议,是因为我认为Unity只会给机器学习实验增加不必要的层次

    • 我的假设是你想学习机器学习,而不仅仅是如何让人工智能解决游戏中的难题。因为在后一种情况下,更好的选择是一个合适的路径系统,或者在移动之前让ai蛮力尝试几次拼图,并用最少的步骤选择解决方案

      伪代码:

      现在来看看你的机器学习程序的伪代码


      假设:

      A.你有一个具有设置尺寸的板,你可以在开始时传递给Ai

      B.板上有AI无法移动的瓷砖(障碍物)

      人工智能应该学会解决问题,而不是因为我们设计的好代码(比如一个体面的路径系统)而在一开始就得到答案

      我们不希望人工智能在移动前通过尝试10亿种不同的组合来强行实现这一点,因为这意味着对其环境的完美理解。如果人工智能对其环境有完美的理解,那么是的,它应该在reaso使用暴力