钢铁雄心3吧 关注:108,243贴子:2,328,140

【技术】【坑】关于钢三的补给问题……

只看楼主收藏回复

图灵镇楼



IP属地:四川1楼2013-08-22 21:17回复
    首先,我们知道,钢三的补给系统是十分蛋疼的。
    1)省份中的单位可以得到足够补给(如果不足显示 “补给不足”)。2)在远距离运输时,每个省份都尝试去周边省份吸取足够使用的补给和燃料。首先查询临近补给源的省份,其总需求为单位所需与周边省份所需之和。3)额外的补给将运回补给源。(容克军官团的扫盲包)


    IP属地:四川2楼2013-08-22 21:19
    回复
      其实 这种做法是一种贪心的思想。当然我们知道,贪心能对付很多数据。但是对于另外一个“很多”的数据 是无法的到正确的结果,而且误差似乎是很大的。
      首先,绝对精确的解法。是用SPFA算法从首都跑一遍单源最短路。这样就能得到所有部队到达首都的一条最优路线,并可以算出所有部队在当前最优的路线下能够得到的补给。(注:这里的最优路线宽度始终为1,也就是没有两个省份并行往一个省份送补给。)如果补给不足怎么办?首先,在刚刚计算补给的时候,我们可以存下当前省份囤积的补给数目。从最近的有囤积的点开始。再跑SPFA。如此往复,直到补给用完,或者部队得到足够补给为止。


      IP属地:四川3楼2013-08-22 21:28
      回复
        这样做首先,不管你有多高富帅,即便开1速 都会很卡。
        因为SPFA 是O(N^2)的 钢三有1W4的省份。这意味着,游戏中的每个小时都要算上亿次……事实上,虽然据说我们的电脑每秒应该是能够承受上亿次的。但事实上,能跑千万就不错了。也就是每小时之后,目测你要等半分钟才能继续游戏。
        这个故事告诉我们,旅行商问题是不好解决的。


        IP属地:四川4楼2013-08-22 21:34
        回复
          不懂,很高深的样子...不合理的是,到前线的路应该是多条并行的,电脑集中到一条能不堵吗?


          5楼2013-08-22 21:36
          回复
            果真技术


            IP属地:四川来自Android客户端6楼2013-08-22 21:41
            回复
              哈,开推演


              来自Android客户端7楼2013-08-22 21:41
              回复
                事实上,我们也不需要去解决这个神奇的问题。
                因为现在电脑那么牛逼。当然没有牛逼到不用解决这个问题的地步。
                首先,打开游戏加载那么多东西,是很漫长的。我们可以让他更漫长,漫长到无法忍受。首先,我们可以跑floyd算法,这个算法是O(M*N^3)的,这里M是国家数。虽然这个的复杂度更高了,而且高的不靠谱。大约三天后,我们就能够得到一张表。这张表表示,当前基建和当前领土分布下的补给路线。
                这个解一定是最优的。虽然花了我们三天的时间才打开游戏……


                IP属地:四川8楼2013-08-22 21:46
                回复
                  并行也就是优化个常数什么的,无非就是复杂度除以4嘛。但这里复杂度是指数级的,并行也就只能呵呵……


                  IP属地:四川9楼2013-08-22 21:47
                  收起回复
                    果然技术!好评!


                    10楼2013-08-22 21:56
                    回复
                      那么,为毛要花这三天时间呢?
                      首先,有那么一些郭嘉,始终是打酱油的,我们根本不需要计算,对于小锅,而且和平的,直接爆力求解,因为也就那么几个兵,也不咋动,根本不用太在意。
                      接着,开局,大多数国家是和平的。埃塞俄比亚逆推的故事我们不要考虑,我们仍然可以在埃塞俄比亚考虑暴搜,因为范围很小。


                      IP属地:四川11楼2013-08-22 21:57
                      回复
                        现在 我们考虑变化情况。
                        1、基建升级了。当某个点的基建变化了。则访问周围点到部队的距离和到首都的距离。然后看是否优于之前首都到部队的距离。如果是,更新路径到当前城市。然后计算拓展宽度的请况。如果否,不理他。 然后将当前点排队。准备更新国内其他点。慢慢更,更不动了就卡。
                        2、领土失去了。
                        首先检查当前部队补给是否经过这个点。 是就找到这个点的父节点,从父节点重新建立路径。否,就不理他。同样排队,更新。
                        3、获得领土。相邻点到此点距离加边权去最小。然后再往相邻点跑看看有木有更新就好了。有更新就检查部队。有木有更新,做法一样


                        IP属地:四川12楼2013-08-22 22:05
                        回复
                          基本没太懂 智商拙计


                          13楼2013-08-22 22:08
                          回复
                            到此,内存已爆,CPU已爆。
                            但补给基本靠谱了,但仍然只是单条路径,只是宽度*3了,而且补给不会堵在一个位置。但其实也还行,毕竟真相是,补给线本身目测大多数情况是1条,只不过宽度有2、3个省份。
                            而玩家的内存目测需要30G左右。同时CPU需要同时处理:1、游戏一般运行;2、当前队列中更新的点;3、战前预估。上帝保佑CPU能够处理这么多……


                            IP属地:四川14楼2013-08-22 22:14
                            回复
                              最靠谱的还是时间同步。
                              玩家可以从1936年(2013年)到1948年(2025)年玩一个存档。
                              一小时之内,完全可以保证算完全球的补给线。至于分钟什么的细节就不要太在意了……


                              IP属地:四川15楼2013-08-22 22:18
                              回复