Encryption 预测博弈论

Encryption 预测博弈论,encryption,artificial-intelligence,game-theory,Encryption,Artificial Intelligence,Game Theory,为了给两位(德国)教授留下深刻印象,我试图改进博弈论 电脑游戏中的人工智能。 博弈论:智力是一个受过良好教育的问题的答案。 这意味着一个深思熟虑的决定就是选择一个能带来最佳结果的行为 Question -> Resolution -> Answer -> Test (Check) 例如,一个机器人正在与另一个机器人作战。 该机器人有3种选择: -move forward -hold position -move backward 生成的程序非常简单 randomseed =

为了给两位(德国)教授留下深刻印象,我试图改进博弈论

电脑游戏中的人工智能。 博弈论:智力是一个受过良好教育的问题的答案。 这意味着一个深思熟虑的决定就是选择一个能带来最佳结果的行为

Question -> Resolution -> Answer -> Test (Check)
例如,一个机器人正在与另一个机器人作战。 该机器人有3种选择:

-move forward
-hold position
-move backward
生成的程序非常简单

randomseed = initvalue; 
while (one_is_alive) 
{
  choice = randomselect(options,probability);
  do_choice(roboter); 
}  
我们正在使用伪随机性

成功的考验就是他是否击败了对手。 机器人拥有自动射击武器:

struct weapon 
{ 
  range 
  damage 
}

struct life
{  
  hitpoints
}
现在来看一些进化

我们让两个机器人互相战斗,并记住随机的种子。 机器人机器人成功的标志是什么

struct { 
  ownrandomseed;
  list_of_opponentrandomseed; // the array of the beaten opponents.
  }
现在的问题是,我们如何对对手选择正确的策略?   我们假设对于每一种可能的种子策略,我们都有最优的反策略。  现在我们唯一要做的就是观察对手的数字 计算他的种子价值,然后我们可以选择正确的策略

对于破解随机发生器,我们可以使用手动方法:

还是蛮力

这取决于用于生成(伪)随机数的算法。如果已知伪随机数生成器算法,则可以通过观察多个状态(机器人移动)来猜测种子。这类似于强力猜测密码,用于加密,因为有些加密算法被称为流密码,基本上(有时确切地说)是用于混淆数据的一次性密码。现在,假设您知道使用的伪随机数生成器是一个简单的滞后斐波那契生成器。然后,你知道他们通过计算x(n)=x(n-2)+x(n-3)%3来生成每个数字。因此,通过观察3个不同的机器人动作,您将能够预测未来的所有动作。种子是提供给你观察序列的前3个数字。现在,大多数随机数发生器并不是这么简单,有些有1024位长的种子,现代计算机不可能以蛮力的方式循环所有这些可能性。因此,基本上,你需要做的是找出使用了什么PRNG算法,找出所有可能的初始种子值,并设计一种算法,根据对手机器人的动作确定其使用的种子。根据算法的不同,有一些猜测种子的方法比测试每个种子都要快。如果有一种更快的方法来猜测这样的种子,这意味着所讨论的PRNG不适合于加密应用程序,因为这意味着密码更容易猜测。AES256本身有一个中断,但理论上它仍然需要2^111次猜测(而不是暴力2^256次猜测),这意味着它在技术上已经中断,但2^111仍然是现代计算机在有意义的时间范围内处理的太多操作


如果PRNG是滞后的斐波那契(不再使用了,我只是举一个简单的例子)并且你观察到机器人做了选项0,然后,1,然后2。。。然后你就会知道机器人接下来要做的事情是。。。1,因为0+1%3=1。您还可以回溯,并计算出代表种子的PRNG的初始值。

如果您知道对手机器人的行为,您可以计算种子的可能性很小。但是,你如何仅仅通过观察一个机器人来确定它的行为呢。没有办法先验地运行这个。还有,是什么让你认为对手总是以同样的方式行事?你只在实际时间获取数据,就像黑客获取他的数据一样。对手不需要表现得一样,毕竟这是一个随机数。哦,我正在阅读,黑客需要猜一个词。有趣的阅读:我没有看到一个形式化很好的游戏(消去法是如何工作的?),也没有什么东西能给理解博弈论基础的人留下深刻印象。PRNG的反向工程也不是真正的博弈论,CS有其他工具禁止这一点(加密PRNG)。通常情况下,人们会对游戏的艺术进行分类,根据游戏的内部运作,甚至不需要反转种子(与NIM游戏相比;在游戏的许多可能实现中,都有一个类似于NIM的简单策略).thx我发现了一个算法,它通过“旧”随机生成器的蛮力获得种子,并连续两次。我点击错误:我想说这对我来说太高了:(thx我发现了一个算法,蛮力强制“正常”带有2个键和65000个步骤的随机生成器。我现在得到了公式。但是递归简单吗?使用的随机数生成器是什么?java.util.random