- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个简单的游戏模拟程序,我有一些计算机控制的生物在节点图上移动。他们想要走向目标(想想,比方说,狼想要走向兔子)。
我已经实现了简单的寻路,因此生物可以找到直接通往给定目标节点的最快路线,但是在多个目标的情况下(多个节点上有很多食物),我想我想生成类似图表上的热图梯度,这样狼就可以查询邻居节点并走向 HitTest 的邻居。
有人知道在图表上生成热图的有效方法吗?我能想到的最快的方法是进行 N 次全图遍历(N=食物节点数),每次从每个食物节点开始进行 BFS(或最近/ HitTest 未访问节点首次遍历),计算图中每个节点上来自该食物节点的热量,然后在一次收集过程中将来自每种食物的所有热量相加。我不喜欢这样,因为,好吧,如果我有一个大图和大量食物节点,我可能必须进行许多完整的图遍历,每个遍历都有很多节点。
我正在考虑做一种 BFS,我从所有食物节点的开放集开始,然后从那里向外移动,但随后我将只计算到最近的食物节点的距离;一组食物节点不会产生非常热的位置,因为我不能返回以增加先前遍历的节点的热量(如果我允许这样做,我基本上就像我之前的例子一样访问每个节点 N 次) .例如如果我开始:
F-O-O-O-O-O-O-O-O
| | | | | | | | |
F-O-O-O-O-O-O-O-F
其中 F 是食物,O 是空节点,假设食物节点的热量为 5,每个节点的衰减为 1,我希望我的热图看起来像
9-7-5-3-1-1-2-3-4
| | | | | | | | |
9-7-5-3-2-2-3-4-5
但是 BFS 风格的遍历(其中任何节点只能被访问一次)看起来像:
5-4-3-2-1-1-2-3-4
| | | | | | | | |
5-4-3-2-2-2-3-4-5
有人有更聪明的方法来做到这一点吗?最坏的情况也许我可以进行多次 N 次图遍历,但要按计划进行,所以我每 X 秒只进行一次食物节点遍历...
最佳答案
为什么不模拟图形周围的热流?也就是说,如果节点 i 在时间 t 的温度是 Ti (t),然后设置:
Ti (t + 1) = α Fi (t) + (1 − β) Ti (t) + γ Σj ∈ n(i) Tj (t)
其中 Fi (t) 是节点 i 在时间 上的食物量t,n(i)是节点i的邻居集合,α,β,γ是模拟的参数。 α 是热量进入系统的速率,β 是热量离开系统的速率,γ 是热量从一个节点流向其相邻节点的速率。所有这些都应该是小数字:您必须通过试验为它们找到合适的值。
使用这个等式,需要 O(|nodes| + |edges|) 来更新每个节点的温度,因此您应该能够定期(最好是每帧)计算它。
上面的等式适用于离散模拟(具有恒定时间步长)。如果您有可变时间步长 δt,请尝试:
Ti (t + δt) = δt α Fi (t) + (1 − β)δt Ti (t) + δt γ Σj ∈ n(i) Tj (t)
关于algorithm - 有没有一种有效的方法来计算节点图上的热图之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15565747/
我想要类似于以下伪代码的东西: while input is not None and timer = 5: print "took too long" else: print inp
如何将 MainEngine Observable 转换为 Cold?来自这个例子: public IObservable MainEngine { get
自从手表被发明以来,表盘的方圆之争就始终没有停下来过,在漫长的岁月中,无论是方形还是圆形表盘,人们都为其寻找到足够多的设计元素,让其肆意成长,这种生机与活力后来也延续到了智能手表上,在2014年,这
我正在学习 CUDA,试图解决一些标准问题。例如,我正在使用以下代码求解二维扩散方程。但我的结果与标准结果不同,我无法弄清楚。 //kernel definition __global__ void
我的 Web 应用程序使用 native dll 来实现其部分功能(其位置在 PATH 中提供)。一切正常,直到我对 WAR 进行更改并且 JBoss 热部署此 WAR。此时dll已经找不到了,需要手
我看到这个问题here 。这是关于实现每个发出的项目的延迟。这是根据accepted answer如何实现的: Observable.zip(Observable.range(1, 5) .g
我最近一直在进行冷迁移...这意味着我无法在进行迁移时从应用程序级别读取/写入数据库(维护页面)。 这样就不会因为更改结构而发生错误,而且如果负载很大,我也不希望 mysql 在迁移过程中崩溃。 我的
我是一名优秀的程序员,十分优秀!