SC经济学

今天考虑了一下最基本的SC经济学。

我把这个问题设定为:在给定的时间Te之内,怎样做才能得到最大化的采矿量。

首先不考虑卡人口卡矿的问题,就是说一直不停的造农民,不造水晶,造农民的时候钱也总是够用。那么需要知道的几个时间是造农民的时间Tscv,农民采到以块矿的时间Tg,他还细分成移动时间Tgm和采集时间Tgg。于是矿从和基地的距离Lm和农民的移动速度Vscv成为需要知道的参数。Tgm = Lm/Vscv。Tgg和Tscv可以在游戏中实测得到。那么我们的第一个问题就是一个矿从需要多少农民。根据经验的话,当基地和矿从的距离最近的时候,一个矿从3个农民比较合适。如果用计算的话,就需要知道,采矿时同一个矿从的几个农民之间的距离是多少。想象两个农民都挤在一个矿从前面,一个开始采集,一个等待。当采集的那个农民离开的时候,等待的开始采集。经过了Tgg时间,离开的农民移动了Tgg Vscv距离,而等待的农民恰好开始移动。所以一个矿从所能容纳的农民数量是2Lm/(Tgg Vscv)。向下取整是经济值(没有农民等待),向上取整是最大值(每个矿从最多有一个农民等待)。更多就是浪费了。

那么在这个理想模型下,到达时间Te能采多少矿呢?到矿从饱和之前,假设训练了n个农民。这一共花了n Tscv时间。在这段时间内的采矿量是个等差数列求和,因为从第5个农民开始,每个农民的采矿量都比前面一个少Tscv时间所能采的矿量。总共少了(n-4)(n-5)/2这么多。所以总的采矿时间就是T’ = Tscv(n·n – (n-4)(n-5)/2)。在加上矿从饱和之后的采矿时间n(Te-T’), 可求出总采矿时间Ttotal。再用采矿量M=Mg Ttotal/Tg可求出总的采矿量(Mg=8,每个农民一次的采矿量)。

现在我们来考虑到Te时矿从没有达到饱和的情况。这个样的话应该什么时候停止造农民呢?因为一个造一个农民的消耗是Mscv=50。而一个农民一次采Mg=8的矿。因此要让这个农民“盈利”,需要他采Tg(Mscv/Mg)的时间,向上取整是7Tg。也就是说,假如准备造第n个农民的时候,所剩的时间小于7Tg,则应该停止造农民开始憋矿。这样的话就应该造(Te-7Tg)/Tscv个农民,向下取整。仍然可以用前面的采矿时间-采矿量方式计算总量。

我们继续考虑卡人口卡钱问题。。啊我前面农民都用scv表示了,就这么将就吧。接下来以神族为主,因为神族的建筑方式比较简单,并且我们参赛也将以神族为主。其实经验告诉我们,当Te比较大时(也就是说不快攻时),8BP是最好选择。这是因为8BP卡钱不多,并且Tscv的时间加上因为卡钱等第9个农民的时间跟一个Tpylon的时间差不多,因此卡到第10个农民的时间也不多。不过这里面的计算确实开始复杂起来。要仔细分析的话,首先需要知道任意时间Tr的时候手上的现钱有多少。根据前面的分析,这个时候的总采矿量已经知道,再减去造农民和水晶花掉的钱,就是手上的现钱Mtr。用Tpylon/Tscv得到造一个水晶的时间相当于造多少个农民。这里向下取整后,把余下的时间也记录下来。因为考虑到卡钱的问题,时间很可能刚好凑够。用Mtr-Mpylon 得到从这个时间开始造pylon剩下的钱,并计算Mtr-Mpylon-Mscv得到卡钱的量,并以当前拥有的农民数量估算卡钱时间(理论上讲,根据农民的出生时间和选择采矿的矿从可以计算出来他的位置和状态,并且精确的计算每个卡钱的时间。不过这些计算实在复杂,并且我们有API嘛,这些数据可以游戏时实时得到,就无需我在这里静态的去计算了……不过以后可能还是会把这里的一些公式补上,因为我们还是需要估计对手的矿量吧)。最后总的采矿量就是前面理想模型的总矿量减去这里卡钱卡人口时间里一个农民的采矿量(被卡的那个农民)。当Te较大的时候,采取这个策略总是最经济的,可以称之为经济策略。因为假如矿不够硬憋钱憋到Mpylon然后造水晶,之后又需要憋钱等农民,卡农民时间必然更长。并且经验告诉我们等到Mtr够Mpylon的时候,一般来说不会出现卡人口的情况(比如8BP,神族基地提供9人口)。但是当Te较小的时候(快攻),很有可能为了快出狂徒而停农民憋钱(比如经典的6BP)。因为这里我没有考虑这个问题,所以暂时不推了。

呜写到这里也累了,下次再来考虑血量伤害等的计算公式吧。

3 comments on “SC经济学

  • ChaosBB says:

    数学果然不行了,看得磕磕绊绊的,有个地方是不是有点小问题?就是在计算全单位总的采矿单位时间T’ = Tscv(n·n – (n-4)(n-5)/2)这个公式,我觉得n·n是不是应该改成n·(n-5)比较合适啊?因为初始有5个scv吧?假设用8scv策略,那么经过3Tscv时间,T’就应该是5*3Tscv + 2Tscv + 1Tscv + 0Tscv(第八个scv刚出来,时间到)。
    另外就是对于估量对手的矿量的重要性,我星际玩的不好啦,想不通如果知道了对手的矿量后该如何运用这些数据,是推测他们的科技或者兵量吗??但是对手的不同策略又没法在编程的时候一概而论,我在想辅助以侦查unit的侦查数据一起推测或许可行?

    • 哦哦,都没想到居然会有人看orz|||
      那个n*n 是假设n个农民采集了n*Tscv时间总计采矿时间,那个(n-4)*(n-5)/2是从第5个农民开始每个农民由于建造晚了而未采矿的时间,这样这个差就是这些农民依次建造出来的总采矿时间了。我是这样逆向思维的来着。。
      其实我一开始想计算矿量主要是用于自己推算最佳建造顺序用的。比如第几个农民建水晶第几个农民建兵营之类的。并且推算以这种建造顺序第几分钟能造出几个狂徒。进而推算如何打败对手。
      不过由于现在时间不够,建筑经济部份我已经放弃了,所以可能里面有错误我也没注意吧。。现在我只有精力做微操部分了。。
      还有就是多谢你的支持啊,一起加油!

      • ChaosBB says:

        呵呵,学长的文章还蛮有趣的,一些随想看着挺有共鸣的。
        嗯,一起加油吧,差不多最后一个月了。

Comments are closed.