找回密码
 注册
X系列官方授权正版
搜索
楼主: nhofb

[灌水] 哦也,偶发现了0.15一个好玩的地方………………

[复制链接]
发表于 2013-3-26 16:52:13 | 显示全部楼层
HoneyFox 发表于 2013-3-26 12:41
当然和多体问题有关,但我似乎并没有提及到其定义。

你把一个不是多体问题的问题说成多体问题,果然是不涉及到多体问题定义的……
回复

使用道具 举报

发表于 2013-3-26 17:04:42 | 显示全部楼层
tcelvis 发表于 2013-3-26 16:51
没有那么复杂。上面那帮人拿多体问题来吓人而已。因为不需要考虑飞船对星球轨道的扰动,运算复杂度会下降 ...

即便不算是什么多体问题,起码也算是限制性多体问题。那玩意儿目前也就只有一些特定解。

问题就出在惯性飞行阶段,你必须不停的做积分运算。哪怕是开启时间加速的时候也如此,这样最终会带来不能容忍的累积误差。(玩过Universe Sandbox的人应该深有体会)
如果说依靠那个作弊手段,那还真没什么意义了,就为了L点效果而已。
回复

使用道具 举报

发表于 2013-3-26 17:28:29 | 显示全部楼层
本帖最后由 tcelvis 于 2013-3-26 17:35 编辑
HoneyFox 发表于 2013-3-26 17:04
即便不算是什么多体问题,起码也算是限制性多体问题。那玩意儿目前也就只有一些特定解。

问题就出在惯性 ...


累计误差随时间增加的前提是系统不收敛,累计误差会随时间放大。这个是可以通过采用合适的步长避免的。至于性能问题,开发组如果肯用GPGPU来实现的话同时保持成千上万个目标的实时数值积分轨道运算毫无压力。

什么叫有意义?Patched Conic Approximation从科学角度讲也是作弊,进出重力圈的转换和我上面说的那个L点check连作弊的性质都完全一样。按你的说法一样没意义。
回复

使用道具 举报

发表于 2013-3-26 17:47:24 | 显示全部楼层
tcelvis 发表于 2013-3-26 17:28
累计误差随时间增加的前提是系统不收敛,累计误差会随时间放大。这个是可以通过采用合适的步长避免的。至 ...


这种混沌系统的问题相当多的情况下都是发散的。所谓合适的步长究竟是多少?
1x加速时也许没什么问题,1000x加速时你的物理计算步长是不是还是1x时的步长?那运算量就是1000倍。如果放宽步长,那就会带来更多累积误差。当然这误差在还不算太大的情况下可以被接受(更准确的说,即便有些不太过分的误差,玩家也未必察觉得到)。
进一步的,如果100000x时间加速或者以后引入更高倍数的时间加速(目前看来可能性虽然的确不大),那这个运算量和模拟精度如何权衡?

至于所谓没什么意义,那完全就是按着你的话说的(当然其中可能有我表达方式或你理解方式的问题)。如果你自己表述的观点都要反对,我也没啥可说的了。
回复

使用道具 举报

发表于 2013-3-26 18:11:55 | 显示全部楼层
本帖最后由 tcelvis 于 2013-3-26 18:13 编辑
HoneyFox 发表于 2013-3-26 17:47
这种混沌系统的问题相当多的情况下都是发散的。所谓合适的步长究竟是多少?
1x加速时也许没什么问题,100 ...


吐槽无力了……

1、多体问题都还只“可能”是混沌系统,这个限制多体问题你一张口就直接混沌系统了……
2、合适的步长要根据方程计算收敛域,然后在收敛域里根据性能和精度需求选择步长。更具体的就算你想听数值计算课我也没义务教你
3、虽然我并不觉得增大步长是个合适的解决性能问题的办法。但是增大步长明明是减小累积误差好不好,信口开河也要有个限度。不要随便看来几个似是而非的名词就想当然。
4、GPU在这种运算路径一致的并性运算能力上是同级别CPU的成百上千倍。1000x对于GT650这个级别的显卡来说毫无压力
5、10000000x……您的想象力真是突破天际了
6、莫名其妙地“没意义”就成了我的观点了?虽然是论坛也请不要节操乱扔好不好?
回复

使用道具 举报

发表于 2013-3-26 19:04:06 | 显示全部楼层
TimChen 发表于 2013-3-26 10:31
即便有个程序员或者架构师超级牛,这些公式还都记得,以现在的计算机处理能力,运行这个简化的模型都卡成 ...

1+N, N++的计算量 ……
的确有点难度……
不过总觉得不应该啊。
回复

使用道具 举报

发表于 2013-3-26 19:10:24 | 显示全部楼层
HoneyFox 发表于 2013-3-26 17:47
这种混沌系统的问题相当多的情况下都是发散的。所谓合适的步长究竟是多少?
1x加速时也许没什么问题,100 ...

我想说下尽管KSP再拟真,这算法也是精简后的,你说的那么复杂的问题估计游戏压根就没那算法。
其次,我觉得时间加速纯粹就是改变时间数值(例如x2,所有的时间数值都除以2.加速过快时因为运算结果很大会导致各种Bug所以要停止一些可能损坏飞船的物理计算包括碰撞)。
完全没想象中的那么麻烦。
唯一我能想到的问题是:时间加速后因为变量的误差限制而导致的累积误差。
我想这点大家都注意到了,KSP里的数值用的都是能承担很多小数点的变量(double?不清楚……也许人家自定义的也说不定),但即使是这样,数值精度总会有个上限。累积误差会有的,但不至于像你说的那么吓人。除非乃用超级计算机和KSP里的数据核对一遍,肉眼上基本上看不出问题来的。而游戏追求的就是:看着可以就行了……
回复

使用道具 举报

发表于 2013-3-26 19:17:44 | 显示全部楼层
本帖最后由 HoneyFox 于 2013-3-26 19:19 编辑
tcelvis 发表于 2013-3-26 18:11
吐槽无力了……

1、多体问题都还只“可能”是混沌系统,这个限制多体问题你一张口就直接混沌系统了……


好吧,看来我是把截断误差误当做累积误差了。
目前KSP最高加速100000x,我不觉得再增加10倍是什么很异想天开的事情。你倒是顺便又帮我增加了10倍,不错不错。
并行率是主要针对不同物体的并行处理,同一个物体的积分运算恐怕没那么容易做并行化处理;毕竟后一次运算要以前一次运算的结果为输入,而且这也不是什么条件分支可以提前预测结果。

不过这样加入这个支持的全部意义就仅仅是L点了。
如果说依靠那个作弊手段,那还真没什么意义了,就为了L点效果而已。

我个人觉得这两句话表述的意思基本上没啥区别,你要这么咬文爵字硬说“没什么意义”就是指“没有任何意义”而不把后面那半句话一起看,我也没啥办法。
回复

使用道具 举报

发表于 2013-3-26 22:54:21 | 显示全部楼层
本帖最后由 tcelvis 于 2013-3-26 23:21 编辑
HoneyFox 发表于 2013-3-26 19:17
好吧,看来我是把截断误差误当做累积误差了。
目前KSP最高加速100000x,我不觉得再增加10倍是什么很异想 ...


目前的“加速”算法应该已经不是加速而是周期函数状态查找了。这个是有BUG的,比如你楼上说的物体间的碰撞。

虽然GPU的并行运算能力不能叠加到单一物体的运动状态计算上,但是轨道参数的数值积分运算一个难点在于各个引力源也是运动的,CPU算法下必须在每次更新飞船状态的同时对所有引力源进行轮询并更新其位置。把这个问题并行化解决之后,剩下的飞船状态参数计算内容是非常非常简单的基本乘加运算,不涉及任何复杂的分支或者迭代。在这个前提下1000x的倍速已经是非常保守的估计了。GPU的乘加运算是ns级别的,1000x不过是ms级别的,相差6个数量级,只不过还要把主内存和GPU之间的数据传输时间考虑进来(但是高加速倍率下可以运行很多个周期再传输一次,这个不是硬性瓶颈)。而即使只有1000x我认为对比较严谨的模拟来说已经是相对充分的速度了(3.6秒->1小时,864秒->1年)。有多少人真的想加速到自己的航天器在行星轨道上像电子一样随机乱跳的程度的?

你显然很微妙地转换了句子的重点,虽然深究起来句子都包含了相似的内容,但是表达的意思是截然相反的。
回复

使用道具 举报

发表于 2013-3-26 23:13:50 | 显示全部楼层
8749236 发表于 2013-3-26 19:10
我想说下尽管KSP再拟真,这算法也是精简后的,你说的那么复杂的问题估计游戏压根就没那算法。
其次,我觉 ...


浮点运算不太可能使用自定义格式。因为浮点数格式是跟CPU、GPU硬件绑定的。不符合的话会非常麻烦。因为一直有double运算比float慢的说法(我在许多机器上的测试都是速度相同,所以这个说法我不太支持,当然也可能是double占用的FPU数量比float多,在高并行度下可能会慢,这个就要看具体的CPU了),绝大多数图形处理都是用float而非double。照理来说KSP这种轨道参数应该是用double比较好的,但是在这种物理模型下我觉得他们实际用float的可能性更大一点。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|DeepTimes.NET 太空游戏站