Java 如何执行随机算法

Java 如何执行随机算法,java,language-agnostic,random,computation-theory,Java,Language Agnostic,Random,Computation Theory,对于我正在从事的一个项目,我希望能够生成并执行一个随机算法(相信我,这是有充分理由的!),根据Alan Turings的原始论文,每个TM都可以被分配一个唯一的数字(理解这一点的一个更现代的方式是,每个程序都编译成一个唯一的二进制大长数) 假设我有一个很长的数字。我现在如何执行与之对应的程序 语言在这里并不是很重要,我很乐意选择一些语言而不是另一种语言,如果它包含一种使这更容易的机制的话。如果说无论你选择哪种语言都很难,我最精通Java 如果您建议另一种生成随机算法的方法也可以,不过请记住,我最

对于我正在从事的一个项目,我希望能够生成并执行一个随机算法(相信我,这是有充分理由的!),根据Alan Turings的原始论文,每个TM都可以被分配一个唯一的数字(理解这一点的一个更现代的方式是,每个程序都编译成一个唯一的二进制大长数)

假设我有一个很长的数字。我现在如何执行与之对应的程序

语言在这里并不是很重要,我很乐意选择一些语言而不是另一种语言,如果它包含一种使这更容易的机制的话。如果说无论你选择哪种语言都很难,我最精通Java


如果您建议另一种生成随机算法的方法也可以,不过请记住,我最终会改变逻辑,使用一些启发式来选择算法,而不是纯粹的随机性。

这基本上是操作系统在运行程序时所做的。它基本上是将一个“二进制大长数”加载到内存中,然后从指令0开始执行程序


因此,要执行随机算法,您可以在一个文件中生成随机数据,然后执行该文件。

您需要做的是找到一种方法--任何方法--生成给定整数的程序。实现这一点的“标准”方法是选择任意编程语言,比如Java,想象与合法编译Java程序文本对应的每个可能字符串,然后想象这些字符串按字母顺序排序。这在所有Java程序上都是一个定义良好的顺序,因此,如果您有这个顺序,您可以通过在给定索引处获取程序,将列表中的任何数字转换为程序

不幸的是,这种算法不太实用;您必须枚举大量字符串才能到达列表中的第一个元素,更不用说2134345423532243或其他元素了。每个程序都是一个字符串,但绝大多数字符串都不是合法程序。将一个程序解释为一个巨大的二进制数时也存在同样的问题:每个程序都是一个数字,但几乎没有任何数字是程序


所以,如果你真的对生成真正的程序感兴趣,而不是花所有的时间生成实际上根本不是合法程序的虚假程序,那么你需要做得更聪明一点。一种方法是,将您的数字作为随机数生成器的种子,然后根据对RNG的连续调用,随机生成(比如)带有随机寄存器的汇编指令。

在“每个TM都可以分配一个数字”和“每个数字都代表一个有效、有意义的TM”之间存在巨大差异。考虑包含一个简单程序的编译对象代码的二进制字符串,比如2000字节长。这是一个8000位的数字,其中大约有102400个值。在这几乎无限多的值中,只有一小部分表示有效的可执行程序。随机生成一个文件生成任何可执行文件的可能性几乎为零


现在对6000字节的程序重复这个练习。问题的难度不是3倍,而是1012000倍。依此类推……

要执行程序,请将其加载到内存中并执行()。但是,你必须非常幸运,它才能真正做一些有用的事情。”(相信我,…“为什么?”…这是一个很好的理由!)“这是什么?这真的是离题了,可能属于@JimN。如果算法很愚蠢,就可以永远循环,等等。我只需要执行它。@AndrewThompson随机性并不是真正的本质属性,只是我可以想出一种启发式方法来生成任意算法。这是一个人工智能项目。这阐明了我没有想到的问题的某些部分。谢谢。你说得对,这比我原先想象的要复杂得多,也许属于理论计算机科学。