问题标签 [stochastic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 如何在高度不确定的系统上运行 MCTS?
我正在尝试为小型游戏的 AI 实现 MCTS 算法。游戏是一个rpg模拟游戏。AI应该决定在战斗中玩什么动作。这是一场回合制战斗(FF6-7 风格)。不涉及任何运动。
我不会详细说明,但我们可以有把握地假设,在任何给定情况下,当轮到该玩家出牌时,我们肯定知道什么动作会选择玩家。
当一方没有单位存活时,游戏结束(4v4)。它可以进行任意数量的回合(也可能永远不会结束)。伤害计算和技能处理中有很多 RNG 元素(攻击可以命中/未命中,暴击与否,有很多 proc 可以“触发”或不“触发”,buff 可以有 % 值发生等。 ..)。每个单元都有大约 6 种技能,可以让您了解分支因素。
我已经建立了一个初步版本的 MCTS,目前结果很差。我在一些事情上遇到了麻烦:
我的主要问题之一是如何处理我的动作的非确定性状态。我已经阅读了几篇关于此的论文,但我仍然一无所知。
有人建议确定游戏信息并在其上运行 MCTS 树,重复该过程 N 次以涵盖广泛的可能游戏状态,并使用该信息做出最终决定。最后,它确实将我们的计算时间乘以一个巨大的因子,因为我们必须计算 N 次 MCTS 树而不是一次。我不能依赖它,因为在战斗过程中我有成千上万的 RNG 元素:2^1000 MCTS 树来计算我已经在哪里挣扎不是一种选择:)
我有为相同的动作添加 X 个孩子的想法,但它似乎也没有带来一个好的答案。它会稍微平滑 RNG 曲线,但如果 X 的值与特定 RNG 的百分比相比太大/太小,则可以将其向相反方向移动。而且由于我获得了多个 RNG 标准动作(命中变化、暴击几率、触发某些东西的百分比等),我无法找到满足所有情况的合适的 X 值。比其他任何东西都更像是一个坏创可贴。
同样,每个 RNG 元组添加 1 个节点 {hit or miss ,crit or not,proc1 or not,proc2 or not,etc...} 应该涵盖所有可能的情况,但有一些严重的缺点:只有 5 个 RNG 机制意味着每次移动要考虑 2^5 个节点,计算量太大。如果我们设法全部创建它们,我们可以为它们分配一个概率(与节点元组中每个 RNG 元素的概率相关联)并在我们的选择阶段使用该概率。这应该总体上有效,但对 cpu 来说真的很难:/
我也无法将它们“合并”在一个节点中,因为我无法根据两种不同的游戏状态准确地平均玩家/怪物统计数据的值,并且在移动处理过程中平均移动结果本身是可行的,但需要很多简化代码是一种痛苦,无论如何都会很快损害我们的准确性。
你有任何想法如何解决这个问题吗?
该算法的其他一些方面让我无法理解:
在结束状态之前我无法进行完整的播放,因为 A)这将花费我大量的计算时间,并且 B)某些战斗可能永远不会结束(按设计)。我有 2 个解决方案(我可以混合使用) - 随机播放 X 轮 - 使用评估函数尝试对情况进行评分。
即使我只考虑评估健康点,我也无法找到一个好的评估函数来返回给定情况下的可靠值(玩家在 1-4 个单位之间,怪物也一样;我知道他们的 hp 当前/最大值)。令我困扰的是,战斗的长度/权力差异可能会有很大差异。这意味着有时 0.01% 的 Hp 变化很重要(例如,对于长时间的游戏与老板的关系),有时它只是微不足道的(当玩家与他相比的低 lvl 区域时)。
战斗之间的功率差异和 Hp 差异意味着我在 UCB 选择过程中的 Biais 参数很难修复。我目前正在使用非常低的东西,比如 0.03。任何 > 0.1 且探索因子如此之高,以至于我的树是按深度构建的:/
目前,我还在模拟阶段使用偏向的方式来选择移动:它选择玩家在这种情况下会选择的移动,并为 AI 选择随机移动,从而导致模拟偏向于玩家。我已经尝试对两者都使用纯随机的,但它似乎给出了更糟糕的结果。你认为有一个有偏见的模拟阶段是否有悖于算法的目的?我倾向于认为它只会给人工智能带来悲观的看法,不会对最终结果产生太大影响。也许我的想法是错误的。
欢迎任何帮助:)
java - 基于图的搜索与基于随机的搜索
到目前为止,我只知道 A* 搜索及其在网格上的一些变体。最近,我听说了诸如快速随机探索树(RRT)之类的随机搜索算法,以及当搜索问题变得非常大时它们如何非常好,但提供了非常次优的路径。遗憾的是,我没有发现任何将 RRT 或其他变体与 A* 及其变体进行基准测试的比较。有谁知道或有详细说明两种算法在非常大的网格(2048x2048 或更高)上的性能差异的链接?非网格搜索问题也很好
到目前为止我发现了什么:http: //movingai.com/GPPC/显示基于 RRT 的 Tree Cache 比所有 A* 变体都快得多
如果不是基准测试,Java 中是否有任何可用的 RRT 实现?编辑:在我问之前应该用谷歌搜索。http://correll.cs.colorado.edu/?p=1623
probability - wss过程和自相关
在一篇论文中,我看到了一个关于 WSS 过程的自相关的测验问题,我无法理解。它说:
正确答案是 c)。
现在我真的不明白。在所有三种情况下,自相关函数仅取决于差 t1 和 t2,因此它们都满足此条件。
提前致谢
random - 我们能否使用相同的随机种子但在不同的机器上为随机算法重现相同的基准测试结果?
我正在测试一个随机算法。为了使结果可重现,我计划使用相同的随机种子,并在发布时将这个种子数(一个整数)与基准结果一起包括在内。
但我对随机种子有一个幼稚的问题。如果使用相同的随机种子,其他使用不同机器的人是否可以保证重现我的结果?其实我对随机种子的原理知之甚少。诚然,许多网站或多或少地详细解释了它,但也许你对这个话题有一些想法可以分享?
具体来说,我有一个基于scipy.optimize程序的 python 项目。我将使用numpy.random.seed(42)
我发布的基准测试结果,并期望其他人在我的机器上获得相同的结果,只要使用相同的种子编号。是否有意义?
r - 从R中的随机数据中提取二进制函数
我有来自循环功率计的功率数据(这只是上下文所必需的,而不是问题的机制),看起来有些随机。见附图。电源图像
这是一个典型的会话,它基于一组目标“水平”,这些目标“水平”是所需功率输出的直线目标(因此看起来像一系列块,它们之间有线性线)。实际实现/实现的功率输出自然是混乱的。
我所追求的是从凌乱的电源数据中提取目标会话(因为我无权访问它)。它本质上看起来像二进制波(直线),尽管从附图中可以看出,有时功率目标是向上倾斜的。
更复杂的是,对于其他一些会话,目标努力块的持续时间可能很短。
我已经研究了实现这一目标的各种方法(小波等......),但似乎找不到任何明显的东西......我正在使用 R。
非常感谢任何想法和帮助。
python - 随机梯度下降和性能
我正在尝试使用 MNIST 集(一组手写数字)训练分类器,并且我想实现随机梯度下降算法。这是我写的函数:
alpha 是步长
h 是 transpose(theta).X 的 sigmoid 函数
X 是 50000*785,其中 50000 是训练集的大小,785 =(我的图像大小)+1(对于常数 theta0)
对于 100 次迭代 (nIter),此函数在大约 9 秒内运行,因此对于 100*1*785 次乘法。我发现的分类器是令人满意的。我想将此运行时间与梯度下降算法进行比较,其中:
对于 100 次迭代 (nIter),此函数在大约 12 秒内运行,因此对于 100*50000*785 次乘法, (h(theta,X)-y) 是 50000*1 向量。我发现的分类器也很令人满意,但我很惊讶,因为这段代码并不比第一个慢多少。我了解矢量化在点函数中起着重要作用,但我预计性能会更差。有没有办法提高我的随机梯度下降的性能?
谢谢您的帮助。
matlab - 二维随机微分方程 (SDE)
我第一次研究随机微分方程。我正在寻找模拟和求解二维的随机微分方程。
模型如下:
dp=F(t,p)dt+G(t,p)dW(t)
在哪里:
- p 是一个 2×1 向量: p=(theta(t); phi(t))
- F是一个列向量:F=(sin(theta)+Psi* cos(phi); Psi* cot(theta)*sin(phi))
- G 是一个 2×2 矩阵:G=(D 0;0 D/sin(theta))
- Psi 是一个参数,D 是扩散常数
我写的代码如下:
然后我使用以下脚本调用该函数:
当我运行代码时,我收到以下错误消息:
漂移率在初始条件下或模型尺寸不一致时无效。
知道如何解决此错误吗?
java - 如何根据正态(高斯)分布对网格(矩阵)的单元格进行采样?
我需要根据 Java 中的正态分布对网格(MXN 矩阵)的单元格进行采样。
我知道Apache Math 库具有对一维(1D)值进行采样的函数,因此对于向量来说它会很好,但我找不到 2D 的任何替代方法。
我曾考虑过两次使用 1D 方法:一次用于行,另一次用于列。然而,(1)它并不完全合适,因为它将使用冯诺依曼距离而不是几何距离,并且(2)这种方法不会避免重复(即它不会是采样)。
那么,如何根据以特定单元格(r,c)为中心的正态(高斯)分布对网格(矩阵)的单元格进行采样?
或者,如果采样不可能(或太复杂),我如何使用正态分布跨单元格在以特定单元格(r,c)为中心的网格中分布概率?例如,对于 3x3::
我不确定之前的值是否真的适合任何高斯,但更重要的是,对于任何矩阵,单元格的总和必须为 1。
从这里我可以迭代,并为它滚动;或滚动并迭代加起来。
math - 随机热方程 - Fortran
我在下面有一部分代码,它解决了具有周期性边界条件的一维随机热方程。随机项是高斯白噪声。
我的问题是,我是否正确地实现了噪音?
高斯噪声被定义为均值为零,二阶矩告诉我们任何一对时间的值都是相同分布且统计独立的。
这是在我的代码中添加高斯噪声的正确方法吗?我只使用高斯随机数y1,不需要y2。这个对吗?谢谢!