【问题标题】:Automatic Application Generator自动应用程序生成器
【发布时间】:2009-12-04 11:56:48
【问题描述】:

是否可以编写一个每天可以输出数百个应用程序的自动应用程序生成器?应用程序只是一系列二进制值。如果让超级计算机每天生成数百万个组合并输出生成的不同大小的二进制文件。然后将“运行”这些二进制文件以查看它们是否实际运行,如果确实运行,则将它们发送给一些测试人员以检查“生成了什么”。

谁知道呢,我们可能会开始获得 100% 无错误的解决方案。

【问题讨论】:

  • ...如果结果没有运行,可能是 jpg...所以让我们看看随机生成的图片,也许它们向我们展示了一些令人惊讶的东西...或者听听结果也许这些是对我们说话的mp3 ...
  • 您正在尝试自动化 en.wikipedia.org/wiki/Infinite_monkey 定理。
  • 有趣!!似乎这个模型也可以用于其他东西。一个小的随机图像生成器,20KB 的随机图像会很好启动。
  • @A9S6:大多数随机图像就是这样:随机像素。获得有意义的图像的概率大约为 0。
  • 接近票数是怎么回事?这是一个有效的问题,没关系,答案是“不可能这样做”。

标签: code-generation generator


【解决方案1】:

假设您正在生成大小为 1KB(非常小)的二进制文件。 1KB 是 8192 位。这意味着总共有 28192 个可能的 1KB“程序”。假设您每秒可以生成 220 个程序(大约每秒一百万个程序,这是相当高的)。这意味着您仍然需要 28172 秒来生成所有可能的 1KB 二进制文件,这(根据 wolfram alpha)大约是宇宙年龄的 102442 倍。这应该让您了解在详尽搜索所有 1KB 程序时遇到有用程序的可能性有多大(到底有多少有用的 1KB 程序?)

【讨论】:

  • 很好的解释:你刚刚扼杀了我的想法 :-(
  • 好吧,只是想一想:为什么我们要等待“10^2442 倍宇宙年龄”来处理所有个组合。即使每秒可以生成 2 个程序,那么每周是否有可能获得大约 5-6 个可运行程序?您计算的时间是最坏情况。
  • @A9S6:有趣的评论。与其枚举限制内的所有二进制数,不如设计一个由指令组成的字母表,并枚举这些指令的字符串。可以仔细选择它们,以便几乎每个“程序”都会“运行”。这给你留下了一个问题——哪些人正在做一些对像我们这样的半智能生物来说似乎很有趣的事情?然后是他们处理什么输入的问题,还是他们只是“梦想”?
【解决方案2】:

我将扩展 Firestand 关于基因编程的答案。

已经有像你这样的想法了;不过,它们几乎一直都被限制在一些人造环境中。

我的朋友编写了一个系统来自动(使用基因编程)为CoreWars 环境进化程序。这些程序不长(几十到几百条汇编指令),合法指令集也不是很大,因此可能的程序空间比成熟的 x86 图形用户界面应用程序要小得多。一开始,机器人几乎没有互相争斗。但是每一代都有更好的战士。

您可以在research paper (PDF) 中阅读有关此概念的更多信息。

将这个想法应用于 x86 并不容易,这里的指令集很大,它们之间的交互有时非常复杂。但是,理论上您可以使用简化的指令集构建虚拟机并为其开发程序。我在某个地方读到过,但我不记得在哪里。

即使是非常简单的代码,检查所有可能的组合也是不合理的。你真的想要一些启发式策略,比如基因编程。

你的想法还有一个缺陷。您假设您可以严格指定程序的所有需求,以便可以自动测试所有需求。这是不可能的或非常接近不可能的。假设您想找到一个添加两个 int32 数字的程序,要真正确保该程序正常工作,您必须检查所有可能的输入,即 2^64 种可能性。试着想象一下,如果你正在编写一个财务程序,你需要检查多少个场景。

您可以尝试使用“智能”系统来为您的程序找到正确性证明......但是因为您不限于某些程序子集(您可以生成任何可以在处理器上运行的简单内容),由于Halting problem,您无法推理所有程序。简而言之,如果不检查所有可能的输入,就无法检测某些程序是否正常工作。

【讨论】:

  • ++ 很好的方法总结,但它唤醒了我休眠的人工智能知识。人已经完成的事情可以由计算机完成,因为人就是计算机(由遗传算法编程)。当然,我们的计算机仍在试图弄清楚我们是如何做到的 :-)
  • ... 关于停机问题的问题在于它的表述方式。人们也无法解决它,除非可接受的答案之一是“我放弃”。
【解决方案3】:

【讨论】:

  • 赞成,我会补充一点,看看遗传算法。我也有理由不同意其他受访者的观点,即 GP 和 GA 仅具有理论意义或在玩具领域有用。
【解决方案4】:

当然,您可以生成数百万个随机可执行文件,但这是简单的部分,困难的部分是找出哪些有用的东西,这需要测试,而您没有自动化。

【讨论】:

    【解决方案5】:

    简短回答:。虽然理论上是有可能的,但它比你在世界上每一场彩票中中奖的可能性要小得多,每天,在你的余生中。

    一个应用程序只是一系列 二进制值。

    确实 - 一系列精确排序的二进制值。通过随机生成一系列二进制值,您将获得一个实际上是可执行文件、实际执行且不会立即崩溃的应用程序,概率为 0,在宇宙结束之前。 (好吧,它并不完全为零,但它非常接近于零,以至于在真实宇宙中无法区分它,而不是数学)。

    请参阅Infinite monkey theorem,尤其是概率部分。

    【讨论】:

    • 也许我应该把这个问题留到 2099 年,那时我希望我们的电脑不会像猴子一样 ;-)
    • 要构建一台足够快的计算机以在合理的时间内检查所有可能的程序,您必须使用比宇宙中更多的石英。所以这在 2099 年和 10000000 年是不可能的,就像现在一样。
    【解决方案6】:

    这就像老锯子一样:如果你有大量的猴子打字足够长的时间,它们最终会产生莎士比亚的作品。

    这是个好消息。坏消息是,他们还会对莎士比亚的作品产生每一种可能的拼写错误,包括那些倒着写的,或者用粗俗的词代替每一个美丽的词,即使这在他们会产生的所有其他东西中也只是微不足道的一小部分。

    除非你只有一只猴子,莎士比亚本人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-10
      • 2021-11-21
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多