大航海家3吧 关注:5,953贴子:153,770

dumaer的物流及回旋镖论文

只看楼主收藏回复

一楼献给汉萨联盟


IP属地:广东1楼2017-10-11 21:46回复
    起篇
    物流是P3中非常有趣的研究内容。所以写了这篇文章,希望可以详细的解释物流的基本原理。
    其实同样的一篇文章几年前就在写了。断断续续写了两年有余,又因各种原因(说白了就是懒)停笔不动,最终被废弃。前一篇现在看来,虽然抓到了一些皮毛,但毕竟没有真正说到点子上。现在这篇,是最近一个月左右的成果。虽然写了只有一个月,但是多年的想法沉淀,并且用最为严谨的数学描述,应该会更加清晰明了。(对于数学不好的同学是个麻烦,不过可以跳过计算过程看结论就好)
    很多年前设计出了回旋镖以后,虽然一直觉得是最为理想的物流方式,但对于其原理也是一知半解。这次完全是用数学建模的方式来计算各种物流情况,在计算过程中也是会因为计算结果和设想的结论不一致,找寻哪里算错了费了很多功夫,日思夜想,最终才得到了满意的计算过程,可以说现在已经对物流的各个方面都了如指掌了,也确信了回旋镖确实是P3中最为高效合理的运输方式。
    另外不少人对物流有一些误解,有些想当然的错误认识。比如星型是点对点运输,所以省船。环形绕远,所以废船。对于这些观点,也是很想纠正,又想避免打口水战,让数字说话。
    趁着十一又仔细修改了一版,修改来修改去,这篇文章说实话还是有很多不满意的地方,但是现在老玩家越来越少,新玩家入坑也不多,不如先放个草案出来,(如果还有人看到的话)等大家提完意见再改一版好了。
    我写这篇文章,不是打算说“大家都来用回旋镖吧,其他线路太差了”。而是详细的阐述物流的原理,希望大家了解每种线路的优缺点,可以选择最适合自己的线路。
    废话不多说了。起帆。


    IP属地:广东2楼2017-10-11 21:47
    收起回复
      从最开始的一条小船到处跑,建立一个环形的自动贸易路线,到进入实业,很多人转型成了星型,也有少数人继续保留环形,还有更少的人使用自己研究的特殊线路,比如我的回旋镖。
      那么不同线路的优缺点在哪呢?
      我们先来讲个小故事
      斯德丁生产稻谷,格但斯科生产啤酒。两城互相需要对方的产物。于是签了订单,派了一支船队给两城运送。船队先从斯德丁装载了稻谷,送到了格但斯科,很快又从格但斯科带了啤酒回斯德丁,来回不过几天。两城人民均表示非常快乐,签订了长期订单。
      斯卡伯勒生产羊毛。爱丁堡生产布。两城互相需要对方的产物。于是签了订单,派了一支船队给两城运送。船队先从斯卡伯勒装载了羊毛,送到了爱丁堡。之后装载了爱丁堡的布,浩浩荡荡的去地中海,不对,是奥尔堡里彭汉堡不莱梅逛了半个月,回到了斯卡伯勒。斯卡伯勒的市民表示满意。
      拉多加生产麻。诺夫哥罗德生产兽皮。两城互相需要对方的产物。于是签了订单,派了一支船队给两城运送。船队先从拉多加装了麻,浩浩荡荡的去奥尔堡晃了一圈,这才回到诺夫哥罗德。又将诺夫哥罗德的兽皮带去在奥尔堡显摆了一下,这才回到了拉多加。拉多加的市民表示恼怒,并写信给诺夫哥罗德说“俺们和汉堡签订单了,以后不从你们那嘎达订货了,老远了”


      IP属地:广东3楼2017-10-11 21:48
      回复(4)
        为什么差别这么大捏?其实这就是三种线路的物流,分别是回旋镖、环形、星型。
        环形和星型大家都应该大体知道情况,回旋镖是我发明的,知道的人比较少。
        其他的线路,比如各种接力(例如衔尾蛇)、树形(本质也是星型,效率较星型高,管理难度变大)、我以前设计的正逆双环,均属于复杂线路,我们另附一章,不在正文讨论。
        这篇文章里,将从三种线路的区别、物流基础理论、回旋镖教程,以及单独一章讨论复杂线路和现实中的物流,来解释物流的基本原理。


        IP属地:广东4楼2017-10-11 21:48
        回复
          第一章 三种线路的定义
          首先,我对大家都熟悉,但没有一个标准解释的名词,进行一个明确的定义。比如母港、星型、环形等等。


          IP属地:广东5楼2017-10-11 21:48
          回复
            1 母港的定义:
            这里我给出母港的三个要素:
            1.1 母港是所有多余货物的存储中心,一般也选择距离中心。
            所有子港生产、满足消费后的剩余货物,都集中在母港存储。
            1.2 母港既不生产,也不消费货物。
            同样是为了讨论起来方便。我们可以假设为,母港仅仅是个超大仓库。(相对于母港仓库的概念来说,母港所在的港口的生产消费活动,是与母港处于同一位置的子港,但是因为没有运输过程,与物流无关)。
            1.3 同时,货物还可以在母港中转,从一个子港通过母港转发到其他子港(星型),或者从一个地区集中后转发到另一个地区(环形和回旋镖)。
            注意,母港仅有中转作用,而不是货物的原始来源。所以有人认为星型是点对点运输,是不正确的。
            因此,母港的定义是:
            母港是一定范围内的集散地。作用是集中存储范围内的货物,并可由母港转发至消费地。


            IP属地:广东7楼2017-10-11 21:50
            回复
              子港是基于母港的概念。子港生产货物并且需要消费。一般情况下,我们还要让子港的生产大于其他港口的消费总和,多余的货物要存储于母港,这也更接近现实情况。
              为了讨论方便,我们这里默认子港仅生产一种货物,但可以需求多种货物。
              可以只有一个母港,也可以有多个母港,母港也可以有不同级别,比如全汉萨的中心母港,双中心母港,或者多级母港(除了一级中心港外,另分多个只管理几个港口的二级母港)。甚至也可以没有母港(比如我的20城大环形)。
              但是为了讨论简便,在这篇文章里,除了特别说明,我们不讨论多级、多中心、或者没有母港的情况。默认有且只有一个中心母港,如果涉及具体港口,默认为奥尔堡。
              同样的,一般我们也不讨论复杂的,或者多种线路混合的情况。
              (在另附的一章讨论现实物流中,会涉及复杂情况。)
              在这篇文章里,我们用大写字母O表示母港。用大写字母A、B、C表示子港,小写字母a、b、c分别表示子港的产物。


              IP属地:广东8楼2017-10-11 21:50
              收起回复
                3环型的定义:
                环型的定义:
                3.1环形指在一定区域内,使用一支舰队,从母港出发,依次连接多个子港,每个港口仅经过一次,最后回到母港的线路,。
                因为形状很像环形,因此称为环形路线。
                环形可以是大范围也可以是小范围的。例如我经常将汉萨分为东西南北四个区域,分别用一个环形舰队管理。这种情况我们依然称之为环形路线。
                3.2物流情况
                环形由于一支舰队管理多个港口,可以利用线路上的港口补给。当前子港生产的货物,可以直接提供给后续港口,这部分产物就无需从母港获取。
                例如,“奥尔堡->奥斯陆->卑尔根->奥尔堡”的环形,奥斯陆生产木材(大于卑尔根所需)。卑尔根需求木材。那么在母港取货时,就无需取出木材,直接从奥斯陆获取就可以了。
                我将环形线路先经过的港口称为上游,之后到达的港口称为下游。上下游的关系随着船队移动是会改变的,比如对于每个港口来说,其最近的上游港口也是最远端的下游港口。在设计环形路线时,应尽量让上游的港口产物满足较近的下游港口,而不是相反。


                IP属地:广东13楼2017-10-11 21:55
                回复
                  4回旋镖的定义
                  回旋镖的定义:
                  4.1回旋镖指从母港出发,依次经过多个港口,再沿原路返回的一种往返线路。
                  例如“奥尔堡->卢比克->罗斯托克->斯德丁->格但斯科->斯德丁->罗斯托克->卢比克->奥尔堡”是我常用的南部回旋镖。
                  4.2回旋镖总是就近补给。
                  我将从母港出发到最远端子港的航程为去程,从最远端子港返回的航程称为回程。
                  回旋镖在去程时,只取当前子港生产的、下游子港所需的消费货物。回程时,才装载上游港口所需及送往母港的货物。
                  比如4.1中的线路中,斯德丁生产稻谷,是其他港口所需。那么在第一次到达斯德丁时,仅装载需要送往格但斯科的稻谷。回程时,才装载需要送往罗斯托克、卢比克、母港的稻谷。
                  4.3物流情况:
                  回旋镖的线路虽然设计复杂,但原理并不难。整体原则就是”就近补给”,或者说“不走冤枉路”。这种特性使得回旋镖非常节省船只。
                  另外,回旋镖在母港与所有子港连线接近于直线时,效果最好。
                  具体的原理在第二章及第三章说明。


                  IP属地:广东14楼2017-10-11 21:55
                  回复
                    5物流管理成本
                    冻港、围城、醉酒、修理。
                    是不是看到这些,头都大了?一不小心,舰队被冻在港口里,十几天后才发现,点点城里的小人,已经全部都恼怒了。
                    我们已经知道,星型是每个子港一支舰队,而环形和回旋镖都是一支舰队管理多个子港。假设子港之间和子港到母港的距离都比较平均,那么环形和回旋镖舰队往返一次的时间,星型的多支舰队已经往返了多次。那么星型这种多舰队遇到问题的概率,肯定是环形和回旋镖的数倍。事实上我经常见到环形或者回旋镖路上有冻港,然而等舰队到达的时候冻港已经解除,没有产生任何影响。
                    另外,环形每次放置的货物很多,可以在船队出现状况时,坚持比星型更长的时间。
                    很多人觉得环形线路有个问题,如果其中的一个子港出了状况,那么整个线路都会出问题。说的并不全错,例如,运气真的差到舰队被冻在港里的情况,确实会造成整个线路上所有港口停摆。但是舰队少的好处在于,哪怕在快进的时候,也可以一眼看出来舰队出了状况,毕竟4个舰队少了一个,和25个舰队少了一个,不是一个数量级。曾经有过研究,大部分人可以一次看出的目标数量在5~7个左右,再多就无法一眼认出。(有兴趣的同学可以看下科幻小说《计算中的上帝》,讲到有种外星人可以一眼看到四十多个目标,但再多就数不过来,会出现用100只羊换200只羊的事情)。
                    所以环形和回旋镖如果出了问题,我一眼就可以看出来,并采取包括读档在内的方法解决。
                    而星型很容易发生停在港口半个月,因为小人恼怒才被发现的情况。更不要说星型的母港如此重要,所有的货物都是通过母港中转,假如母港选择了一个冻港城市(幸好奥尔堡不会冻港),那么所港口都会完蛋。(有人遇到过还没当上主席,港口被联合封锁的事么?)
                    即使是生产不足导致的缺货,环形处理也比星型简单。因为环形很明确货物的目的地,而星型都是通过母港,无法确定货物的去向。


                    IP属地:广东15楼2017-10-11 21:56
                    回复
                      另外,在初期,战船不够的时候,配备护卫舰也是个头疼事,因为大家都喜欢黑吃黑,从海盗手里抢船,所以一般海盗活动设置的都是高,导致贸易路线经常被骚扰,就算每次都跑的掉,也很烦不是。星型需要给每个船队安排护卫舰,环形因为舰队少,需要的护卫舰也少,同时也略微减少了船舱浪费。
                      当然,星型也是有好处的。最大的优点,就是所有子港一视同仁,全部用一种方式运输,取出产物,放置所需,也不用考虑其他港口的情况,所有货物都从母港获取。这使得星型的设计理念是最为大家容易理解的,也因此大多玩家都选择星型,毕竟其他路线相比之下设计起来显得复杂了。
                      你的的确确是一个人在战斗。
                      P3中,你不止要赚钱,建设,平衡物资,赢得声望,还要独自面对物流网络。船长和事务所虽然可以很大程度上提供帮助,但是这些人完全不会替你考虑哪怕再简单的问题。
                      所以,物流线路应当尽量利于维护和扩展。第一,舰队越少越好,维护线路时就比较方便。第二,要有合适的自动设置路线的方法,比如星型的模板和我的设定器,否则一个个港口计算货物是非常耗时的工作。因此,复杂线路,例如多级母港、多中心母港、港口两两连接等等,都是管理成本较大的线路,并不推荐。出于减少管理成本的考虑,应当尽量选择舰队少、结构单一的线路。在这一点上,环形和回旋镖是有优势的。
                      管理成本仅在此简单说明,这篇文章的主要内容是船舱成本,也就是对于同一张地图来说,某种线路所需的最少船舱。


                      IP属地:广东16楼2017-10-11 21:56
                      回复
                        6线路标识说明
                        这篇文章里,使用箭头“->”或者简写为“>”连接两个港口表示线路方向,比如”奥尔堡->卢比克”表示从奥尔堡到卢比克的线路。如果是字母表示港口,并且场景是描述线路的话,可以连箭头也不写,比如线路OA表示O到A的单行线。
                        使用“=”表示两个港口之间往返。比如“奥尔堡=马尔默”表示奥尔堡到奥斯陆的往返线路。特别的,使用多个“=”连接的是回旋镖型,比如4.1的例子中,可以简写为“奥尔堡=卢比克=罗斯托克=斯德丁=格但斯科”。
                        使用“(多个港口)”表示环形,比如“(奥尔堡->奥斯陆->卑尔根)”表示北方的一个环形。具体的汉字港口中间加箭头以区分,用大写字母O(母港)ABC(子港)时不用写箭头,如(OABC)表示一个三个子港的环形。
                        如果是两个港口之间的往返前路,用舰队A,舰队B,表示与母港直接连接的线路。舰队AB,表示子港A与子港B之间连接的线路。如果是多个港口之间的循环线路,用环形1,回旋镖1这样的方法命名。
                        港口的产物用小型字母abcd表示,一般港口A生产a货物,港口B生产b货物。如果有多种货物,用a1,a2,a3表示。


                        IP属地:广东17楼2017-10-11 21:56
                        回复
                          先设计一个星型线路:
                          那么很简单,两支舰队,分别处理奥斯陆和卑尔根。
                          奥斯陆舰队:从母港至奥斯陆往返需要2*2=4天。需要从母港装载4天的铁制品消费,也就是4天*200桶=800桶。从奥斯陆装载4天生产的木材,也就是4天*50=200包=2000桶,回到母港。
                          所需船舱,取最大的一步:200包=2000桶。
                          卑尔根舰队:从母港至卑尔根往返8天。需要从母港装载卑尔根所需30包木材*8天=240包=2400桶。再从卑尔根装载8天*300桶铁制品=2400桶回到母港。
                          所需船舱:2400桶。
                          总共需要:2000+2400=4400桶。那么我们准备足够的船,就可以使线路运行了。


                          IP属地:广东19楼2017-10-11 21:57
                          回复
                            接下来是回旋镖型:
                            奥尔堡=奥斯陆=卑尔根
                            往返时间是2+3+3+2=10天。
                            从奥尔堡出发,不装载任何东西。
                            到达奥斯陆,取出卑尔根所需10天*30包木材=300包=3000桶。
                            所需船舱:3000桶
                            到达卑尔根,放下300包木材,取出10天所生产的3000铁制品。
                            所需船舱:3000桶
                            回到奥斯陆,放下所需2000铁制品(船上还有1000桶),取出剩下的50包*10天-300包已经取出的=200包木材。
                            所需船舱:1000+2000=3000
                            回到奥尔堡,放下1000铁制品和200包木材。
                            所需船舱:3000桶。
                            通过这个简单的例子可以看出,在一定条件下,环形和星型差别不大。回旋镖在这种情况则是使用船舱最少的。
                            事实上,根据线路、货物的不同,有时候环形需要的船舱多一些,有时候星型多一些。那么是不是说回旋镖一定是最少的呢?我们要通过计算,来证明这一点。


                            IP属地:广东21楼2017-10-11 21:58
                            回复
                              2船舱简单计算
                              为了明确在不同条件下,哪种物流方式用的船最少,我们就需要建立一个物流模型,并且计算所使用的船舱。一支舰队经过多个港口的,计算每个港口的船舱情况。多个舰队的,将每支舰队的船舱计算总和。
                              为了计算清晰,我们将舰队在一个港口,分别计算入港、存取过程、出港三步。
                              入港和出港,是说船进入港口,以及离开港口的两个时间点,舰队装载的分别是从上个港口带来的货物,和离开港口时装载的货物。当前港口出港时,船上的货物和下一站入港时一致。
                              入港和出港时,均用正数表示船上有哪些货物。货物一律按“桶”来表示,并且一般不写单位。比如1000的船,表示1000桶容积的船(或者指船舱)
                              存取货物的过程中,用负数表示放置,正数表示提取。
                              例如:“-100a+100b”表示放置100a货物并提取100b货物。
                              存取过程中可以将两者相抵,比如上面的情况,船舱需求不变。
                              但是注意,我们总是按照需求船舱最大的情况计算。比如-120a,+200b的情况,是需要200船舱,而不是120或者80。
                              存取过程不考虑二次靠岸,仅计算当前港口先放置再装载的情况。
                              我们用案例1中,环形舰队到达卑尔根的情况,来说明如何描述某个港口的计算过程:
                              入港:450包木材=4500桶。
                              存取:-270包木材+2700桶铁制品=-2700+2700
                              出港:180包木材+2700桶铁制品=1800+2700=4500
                              所需船舱:4500
                              有了计算方法,我们可以任意建立一个物流模型,所谓物流模型,就是任意设置港口的间距及产出消费,方便观察各种条件下,三种路线的船舱使用情况。比如之前的例子,可以算作一个两个子港的物流模型。为了方便描述,我们用字母来表示港口和货物,并且货物一律按桶计算。


                              IP属地:广东22楼2017-10-11 21:59
                              回复