博弈论与预测

时间:2017-03-17 21:50:45

标签: encryption artificial-intelligence game-theory

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

计算机游戏中的AI。 博弈论:智力是一个经过良好教育证明的问题答案。 这意味着一个深思熟虑的决定是选择能够产生最佳结果的行为。

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
}

现在进行一些演变。

我们让2个机器人互相争斗并记住随机种子。 一个成功的机器人的标志是什么?

struct { 
  ownrandomseed;
  list_of_opponentrandomseed; // the array of the beaten opponents.
  }

现在的问题是我们如何选择针对对手的正确策略? 我们假设每种可能的种子策略都有最优的反策略。 现在我们唯一要做的就是观察对手的数据 并计算他的种子价值。然后我们可以选择正确的策略。

为了破解随机生成器,我们可以使用手动方法: http://alumni.cs.ucr.edu/~jsun/random-number.pdf

或蛮力: https://jazzy.id.au/2010/09/20/cracking_random_number_generators_part_1.html

1 个答案:

答案 0 :(得分:0)

这取决于用于生成(伪)随机数的算法。如果已知伪随机数生成器算法,则可以通过观察多个状态(机器人移动)来猜测种子。这类似于用于加密的暴力猜测密码,因为一些加密算法被称为流密码,并且基本上(有时是精确地),用于混淆数据的一次性填充。现在,假设您知道使用的伪随机数生成器是一个简单的滞后斐波那契生成器。然后,你知道他们通过计算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的初始值。