我希望创建一个人工智能环境,用户可以在其中提交自己的人工智能代码并让他们竞争。语言可以是任何语言,但最好是易于学习的语言,例如 JavaScript 或 Python。
基本上我看到三个选项和几个变体:
-
创建我自己的语言,例如一个 JavaScript 克隆,仅具有非常基本的功能,如变量、循环、条件、数组等。这是一个lot如果我想正确实现公共语言功能,这是一项工作。
1.1 采用现有语言并剥离其核心。只需从 Python 中删除大量功能,直到只剩下上述功能(变量、条件等)。还有很多工作,特别是如果我想跟上上游的最新情况(尽管我也可以忽略上游)。
-
使用语言的内置功能来锁定它。我从 PHP 中知道,您可以禁用函数并四处搜索,Python 似乎也存在类似的解决方案(有很多很多警告)。为此,我需要很好地理解该语言的所有功能,并且不要错过任何内容。
2.1.制作一个预处理器,拒绝含有危险内容的代码(最好基于白名单)。与选项 1 类似,但我只需实现解析器而不是实现所有功能:预处理器必须理解语言,以便您可以拥有名为“eval”的变量,但不能调用名为“eval”的函数。虽然还有很多工作要做,但比选项 1 更易于管理。
2.2.在非常锁定的环境中运行代码。 Chroot,没有不必要的权限......也许在虚拟机或容器中。从这个意义上来说。我必须研究如何实现这一目标以及如何让它以安全的方式给我结果,但这似乎是可行的。
手动阅读所有代码。可以小规模或与主持人一起使用,尽管仍然乏味且容易出错(我可能会错过类似的东西if (user.id = 0)
).
我想象 2.2 的工作方式是这样的:在虚拟机(或其他东西)中运行两个 AI,并限制它只与主机通信(没有其他互联网或 LAN 访问)。两个人工智能都在单独的机器上运行,并通过在主机上运行的 API 相互通信(好吧,通过比赛场地,从而它们可以看到彼此的位置)。
选项 2.2 似乎是最可行的,但也相对 hacky...我让某人的代码在虚拟化或锁定的环境中松散,希望这能让他们留在其中,同时为他们提供免费游戏以进行 DoS 或突破环境。话又说回来,大多数其他选择也好不了多少。
TL;DR:本质上我的问题是:我如何让人们给我人工智能的“逻辑”(我认为使用代码最容易完成),然后在不影响系统功能的情况下运行它?必须有至少 2 个 AI 在同一个比赛场地上工作。
这实际上只是一个插件系统,因此研究其他人如何实现插件是一个很好的起点。我特别关注 Chrome 和 Safari 等网络浏览器及其插件系统。
现代插件系统的一个共同主题是进程隔离。理想情况下,您应该在沙箱中自己的进程空间中运行该插件。在 OS X 中看看 XPC,它是专门为这个问题而设计的。在 Linux(或更便携)上,我可能会考虑 NaCl(本机客户端)。 JVM 还旨在提供沙箱,并提供丰富的语言选择。 (也就是说,我个人并不认为 JVM 是一个非常强大的沙箱。它有安全问题的历史。)
一般来说,我对此类项目的偏好是与语言无关的 API。我最常使用 REST API(或“类似 REST”)。这使得插件受到高度限制,同时不限制语言选择。我喜欢尽可能使用简单的 HTTP 进行通信,因为它对多种语言都有丰富的支持,因此对插件的限制很少。事实上,根据您的描述,您甚至不必在硬件上运行该插件(当然不在主服务器上)。使插件成为远程客户端可以消除许多潜在的问题。
但最终,我认为像你的“2.2”这样的东西是正确的方向。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)