一个新的智力方程式:熵最大化的困难

2024-10-03 11:19:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Ted演讲中碰到了亚历克斯·威斯纳·格罗斯和他的智能行为理论。 我试着读了与他的演讲相关的学术论文,但我对数学和物理没有足够的理解,无法真正理解发生了什么,更重要的是,我如何在python中重现这个等式。在

我发现在python中实现了两个独特的熵最大化模型,但我不知道如何设置它们,以及它们是否与Wissner-gross的方程相同。在

{a3}

内存:Tutorial| Homepage

假设这些方程是Wissner方程的不同形式,并使用上面的库或其他库,我如何建立一个熵最大化算法。在

尤其是

  • 如何初始化要更改的实体
    • (就像威斯纳模拟中的圆圈一样)。在
  • 如何为模型提供不同的操作选项
    • (就像模型封闭系统中实体的移动)。在
  • 如何设置在特定环境下产生约束的操作的信息
    • (相当于模拟中的边界框,并且无法移动到它们旁边)。在
  • 其他变量和处理方程所必需的。在

Tags: 内存模型实体智能物理数学理论tutorial
2条回答

这个问题很笼统,不幸的是,我不认为这个答案能给你一个你希望的解决办法。在

首先,你认为“这些方程是威斯纳方程的不同形式”的假设似乎是错误的。在

在浏览了这篇论文之后,似乎他们所说的因果熵的模型与最大熵模型(毫不奇怪)共享了一些组件,你已经找到了一些库。然而,要想了解这些库如何在因果熵强迫的实现中使用,您必须查看本文,并找出不同表达式如何匹配/共享组件。我不相信这里有人会帮你这么做。Wikipedia article about maximum entropy可能有助于您找到关系。在

为了开始动画和运动,我建议您找到一些精灵动画的介绍,for example this one。这将帮助您了解如何使用代码在空间中移动对象。在

编辑

这篇论文的supplemental material当然也值得一看,甚至包含一些伪代码。另外,本文参考文献[12]内容如下:

Our general-purpose causal entropic force simulation software will be made available for exploration at http://www.causalentropy.org

我试着把那次谈话中的想法用得有点简单。在

我想象的系统只有一个变量,外加均匀噪声和正反馈。想象一下在重力场中,一根棍子在一根棍子上被平衡的角度。 我想象中的系统在一瞬间的进化被描述为

def simulate1(theta):
    # introduce evil random displacement
    theta = theta + random.uniform(-noise, noise)

    # apply stipid physics laws
    f = math.sin(theta)
    theta = theta + f*dt

    return theta

#
# simulate evolution of the system during so many ticks
#
def simulate(theta, ticks):
    thetas = []
    for _ in range(ticks):
            theta = simulate1(theta)
            thetas.append(theta)

    return thetas

如果我运行这个模拟,θ会很快变为π或-PI,然后在那里波动。在

现在我介绍踢腿的概念(在这里,我们要么什么也不做,要么向左或向右踢系统,比噪音的作用大5倍):

^{pr2}$

最后,我们来到主循环。在每一次迭代中,以下装置考虑了给系统一次冲击的可能性,并计算了一个与各种可能的未来相关的度量(希望如此)(而不是原始问题中的熵):

while True:
    best_kick = None

    for kick in kicks:
            median_var = simulate_median_var(theta + kick)
            if (best_kick is None) or (median_var > best_median_var):
                    best_median_var = median_var
                    best_kick = kick

    print "theta=%f\tbest_kick=*\t\tbest_median_var=%f" % (theta, best_median_var)
    theta = theta + best_kick

    theta = simulate1(theta)

下面是度量的实际实现:

#
# estimate variation of possible future
# assume the variation is higher is standard deviation is higher (is it good one?)
#
def simulate_var(theta, ticks):
    thetas = simulate(theta, ticks)
    (theta_hist, _) = numpy.histogram(thetas)
    #print "# %s" % theta_hist
    return numpy.std(theta_hist)

# calculate median of the variaion for so many rounds
def simulate_median_var(theta):
    vars = []
    for _ in range(rounds):
            var = simulate_var(theta, ticks)
            vars.append(var)
    return numpy.median(vars)

首先计算可能系统状态的概率分布。然后我们用数字历史()将θ的整个历史演变分为10个部分。然后我们计算所有料仓的标准偏差。这不一定是最好的指标,但它似乎是一个大致的估计。在

以下是输出(带有一些额外的调试信息)的外观:

theta=0.000000  best_kick=0.000000  best_median_var=16.443844 # [(-0.005, 12.13260071048248), (0, 16.443843832875572), (0.005, 12.13260071048248)]
theta=0.000328  best_kick=0.000000  best_median_var=16.437761 # [(-0.005, 12.320714265009151), (0, 16.437761404765553), (0.005, 12.091319200153471)]
theta=0.001096  best_kick=0.000000  best_median_var=15.811388 # [(-0.005, 12.735776379946374), (0, 15.811388300841896), (0.005, 11.798304963002099)]
theta=0.001218  best_kick=0.000000  best_median_var=15.792403 # [(-0.005, 12.743625857659193), (0, 15.792403236999744), (0.005, 11.798304963002099)]
theta=0.000433  best_kick=0.000000  best_median_var=16.437761 # [(-0.005, 12.320714265009151), (0, 16.437761404765553), (0.005, 11.958260743101398)]
theta=0.000931  best_kick=0.000000  best_median_var=16.112107 # [(-0.005, 12.625371281669304), (0, 16.112107248898266), (0.005, 11.798304963002099)]
theta=0.001551  best_kick=0.000000  best_median_var=14.913082 # [(-0.005, 13.046072205840346), (0, 14.913081505845799), (0.005, 11.661903789690601)]
theta=0.001249  best_kick=0.000000  best_median_var=15.491933 # [(-0.005, 12.759310326189265), (0, 15.491933384829668), (0.005, 11.798304963002099)]
theta=0.002275  best_kick=0.000000  best_median_var=14.021412 # [(-0.005, 13.512956745287095), (0, 14.021412197064887), (0.005, 11.523888232710346)]
theta=0.002349  best_kick=0.000000  best_median_var=14.035669 # [(-0.005, 13.527749258468683), (0, 14.035668847618199), (0.005, 11.523888232710346)]
theta=0.002224  best_kick=0.000000  best_median_var=14.085453 # [(-0.005, 13.535139452550904), (0, 14.085453489327207), (0.005, 11.523888232710346)]
theta=0.002126  best_kick=0.000000  best_median_var=14.300346 # [(-0.005, 13.512956745287095), (0, 14.300345799157828), (0.005, 11.523888232710346)]
theta=0.003034  best_kick=-0.005000 best_median_var=14.615061 # [(-0.005, 14.615060725156088), (0, 13.274034804836093), (0.005, 11.41052146047673)]
theta=-0.003091 best_kick=0.005000  best_median_var=14.587666 # [(-0.005, 11.41052146047673), (0, 13.274034804836093), (0.005, 14.587666023048376)]
theta=0.001966  best_kick=0.000000  best_median_var=14.345731 # [(-0.005, 13.274034804836093), (0, 14.345731072343439), (0.005, 11.636150566231086)]
theta=0.002721  best_kick=-0.005000 best_median_var=14.021412 # [(-0.005, 14.021412197064887), (0, 13.512956745287095), (0.005, 11.523888232710346)]
theta=-0.002635 best_kick=0.005000  best_median_var=14.021412 # [(-0.005, 11.523888232710346), (0, 13.535139452550904), (0.005, 14.021412197064887)]
theta=0.002066  best_kick=0.000000  best_median_var=14.310835 # [(-0.005, 13.29661611087573), (0, 14.310835055998654), (0.005, 11.636150566231086)]
theta=0.001485  best_kick=0.000000  best_median_var=15.198684 # [(-0.005, 12.969194269498781), (0, 15.198684153570664), (0.005, 11.781341180018513)]
theta=0.001414  best_kick=0.000000  best_median_var=15.201973 # [(-0.005, 12.984606270503546), (0, 15.201973200284616), (0.005, 11.781341180018513)]
theta=0.000542  best_kick=0.000000  best_median_var=16.431676 # [(-0.005, 12.328828005937952), (0, 16.431675598153642), (0.005, 11.958260743101398)]
theta=0.000726  best_kick=0.000000  best_median_var=16.443844 # [(-0.005, 12.521980673998822), (0, 16.443843832875572), (0.005, 11.958260743101398)]
theta=0.000633  best_kick=0.000000  best_median_var=16.437761 # [(-0.005, 12.433824833895642), (0, 16.437761404765553), (0.005, 11.958260743101398)]
theta=-0.000171 best_kick=0.000000  best_median_var=16.437761 # [(-0.005, 12.116104984688768), (0, 16.437761404765553), (0.005, 12.255610959882823)]
theta=-0.000934 best_kick=0.000000  best_median_var=15.824032 # [(-0.005, 11.798304963002099), (0, 15.824032355881986), (0.005, 12.545915670049755)]
theta=-0.000398 best_kick=0.000000  best_median_var=16.440803 # [(-0.005, 11.958260743101398), (0, 16.440802618820562), (0.005, 12.320714265009151)]
theta=-0.001464 best_kick=0.000000  best_median_var=14.913082 # [(-0.005, 11.661903789690601), (0, 14.913081505845799), (0.005, 12.969194269498781)]
theta=-0.002141 best_kick=0.000000  best_median_var=14.310835 # [(-0.005, 11.532562594670797), (0, 14.310835055998654), (0.005, 13.512956745287095)]
theta=-0.002893 best_kick=0.005000  best_median_var=14.314328 # [(-0.005, 11.41052146047673), (0, 13.512956745287095), (0.005, 14.314328059637504)]
theta=0.003015  best_kick=-0.005000 best_median_var=14.314328 # [(-0.005, 14.314328059637504), (0, 13.274034804836093), (0.005, 11.41052146047673)]
theta=-0.002201 best_kick=0.000000  best_median_var=14.042792 # [(-0.005, 11.532562594670797), (0, 14.042791745233567), (0.005, 13.45362404707371)]
theta=-0.002234 best_kick=0.000000  best_median_var=14.042792 # [(-0.005, 11.523888232710346), (0, 14.042791745233567), (0.005, 13.512956745287095)]
theta=-0.001903 best_kick=0.000000  best_median_var=14.473666 # [(-0.005, 11.653325705565772), (0, 14.473665878659745), (0.005, 13.274034804836093)]
theta=-0.002782 best_kick=0.005000  best_median_var=14.085453 # [(-0.005, 11.41052146047673), (0, 13.520355024924458), (0.005, 14.085453489327207)]
theta=0.003083  best_kick=-0.005000 best_median_var=14.587666 # [(-0.005, 14.587666023048376), (0, 13.274034804836093), (0.005, 11.41052146047673)]
theta=-0.001439 best_kick=0.000000  best_median_var=15.491933 # [(-0.005, 11.661903789690601), (0, 15.491933384829668), (0.005, 12.961481396815721)]

上述模拟是用以下方法完成的:

noise = 0.001 # noise amplitude
kicks = [-5*noise, 0, 5*noise] # what kicks to try
ticks = 100 # now many time ticks to simulate
rounds = 1000 # now many rounds to simulate
dt = 0.1 # simulation rate koefficient, something like dt

我意识到没有完全遵循原始论文中的数学,但是(相当不准确地)使用了它的总体思想。在

相关问题 更多 >