断线年代 / 16 / 2036
胜率之外的工单
两套非自主调度模型都交出优良成绩,后方货站却收到一整列空车。工程师米娅跟车追查,发现供应预留与车辆周转不断争抢同一资源。她必须让指标暂时变差,才能让货物真正出发,而新增的等待、补偿与备用预算没有人愿意轻易买单。
01空车厢
米娅·霍尔站在货站月台上,看着一整列空车厢驶进来。她的终端却显示,这班车装载率达到九成以上。调度员向她摊开双手,说自己已经核对三遍,车厢是空的,系统也没有故障报警。
“东西呢?”她问。
“在北库。”
“那为什么车在这里?”
“南库的优先级更高。”
米娅抬头看信号灯,灯仍然是允许进入的绿色。她负责后方运输系统的工程维护,平时最难的工作是让模型输出的计划同实际车辆、班次和库存对应。今天两个互相独立的非自主调度模型分别给出了正确得不能再正确的建议:一个为了保障前方任务,预留了物资;另一个为了提高车辆周转,抢先调走了车。两份计划单独看都没有错,放到同一条铁轨上,就得到眼前这一列漂亮的空车。
站长福克斯说别再解释原理,告诉他这车能不能放走。后面还有一班民用货运等待进站,装着会变质的食品。如果不腾出轨道,损失每分钟都在增加。
米娅让他先别按系统建议返回北库。她看见计划已经更新,另一套模型正把北库剩余的车次视作即将可用的资源,准备分配给新的订单。空车如果立刻回去,很可能只是进入下一轮争抢。
“那停哪里?”站长问。
她指向备用线。福克斯说备用线要收费,而且会挤掉夜间检修。他不是不愿帮她,是每一个看似简单的临时选择都在别人账上落下重量。米娅把自己的工号写进临时占线申请,听着空车慢慢转入侧线,第一次觉得一种纯粹的软件错误可以有这么长、这么响的车轮声。
02两种好成绩
上午的协调会在站房二楼举行。北库供应主管哈维带来任务保障率,南库车队经理艾琳带来周转效率,两人都用上升曲线证明自己没有拖后腿。米娅把空车照片投到屏幕上,曲线旁边顿时多出一排没有任何货物的门。
哈维说北库的模型按最新需求优先锁定库存,物资不能随便释放,否则前方突然需要时会缺货。艾琳说车队模型必须减少等待,如果一辆车迟迟装不上货,就应调给已经准备好的订单。两个人都有真实的压力,谁先降低自己的指标,谁就会在月底解释原因。
“你们共享资源状态吗?”米娅问。
“共享。”两人同时回答。
她打开记录,发现他们共享的是预测状态。北库标记“预计可装”,车队就把对应车次算作“预计可用”;一旦其中一边调整,另一边立刻重新优化,却没有一个共同承认的实际占用期限。它们不会商量,也没有任何意志,只是在不断完成各自被交付的目标。
艾琳问为什么之前没有发生。米娅调出过去几周的负载:以前余量足够,错误被空闲车辆和仓库工人的额外加班吸收;近期局部战事使运输需求增加,两套系统终于在同一段窄处碰到一起。
哈维不接受把问题称为系统缺陷,认为是车队没有按预定时间到达。福克斯在门口听不下去,走进来把一张手写班次表放到桌上:司机昨天连续改了三次装货地点,最后一次通知到达时,人已经在第二个地方排队。
“你们的预计没有算上他喝水。”站长说。
屋里短暂安静。米娅要求冻结新一轮自动重分配,先清理已经承诺的任务。哈维说这会降低保障率,艾琳说会降低周转率。她看着两条曲线,回答:“会。但继续保持它们漂亮,今天晚上可能还是空车。”
03一袋融化的黄油
为了争取冻结权限,米娅必须先拿到可以复现的问题。她没有远程改掉所有规则,而是跟着一辆货车跑完整个班次。司机鲁本不喜欢工程师坐在旁边,怕她看见自己偶尔绕路买咖啡。他特意说车没有毛病,发动机声音从来就这样。
米娅让他按平时做,不用为自己演示。第一站在北库,货物尚未解除预留;第二站改到南库,月台却被另一辆提前调来的车占着。第三次通知要求他返回原地,他看了看油量,直接把车停在路边。
“再绕一次,下午那趟我就跑不了。”
“系统知道油量吗?”
“知道整箱油,不知道我昨天没来得及加满。”
米娅在本子上记下,不把所有问题都归到模型之间。输入状态本身也有迟滞,人工回报又因为太频繁而被人省略。鲁本说如果每次改道都填完整表,他一半时间得在驾驶室里写字。
他们去加油时,遇到一名冷藏车司机抱着纸袋站在阴影里。袋子底部渗出油,原来是即将融化的黄油。他被货站堵了两个小时,冷机燃料不足,只能先处理最容易损坏的一部分货物。司机问他们要不要买,价格比平时便宜一半。
鲁本买了一袋,说回家给孩子做点心。米娅没买,她看着袋底越来越大的油印,意识到自己的冻结方案也会让某些人继续等。解除一个循环,不等于把所有损失变回零。
回站后,她要求把易损货物的时间限制纳入临时方案,福克斯说这会使军方订单后移。米娅问能后移多久,站长给出具体窗口,而不是笼统说不行。她第一次拿到了两套模型都没提供的东西:有人愿意为一个实际可执行的时间作保证。
04让成绩变差
米娅在测试环境里重放当天记录。她先让两个模型继续使用原来的目标与预测,资源在屏幕上来回跳转,车辆编号像被两只看不见的手抢着移动。然后她加入共同的资源占用状态、承诺期限和变更代价。循环显著减少,但两个部门的漂亮成绩都下降了。
哈维看着结果,问她是不是故意把系统做慢。她说是,某些地方必须允许等待,才能换来真正完成。艾琳要求把等待限制在合理范围,不能一张预留单无限占车。米娅同意,设置到期复核,而不是永久冻结。
他们围着一张打印图争论了整个下午。哈维担心前方紧急需求被普通订单锁死,艾琳担心所有任务都自称紧急,福克斯则要求任何紧急插队都同时说明被推迟的是谁。米娅把这些要求转成明确约束,发现自己最重要的工作不是调高某个参数,而是让人们承认无法同时获得所有好处。
预算代表通过电话加入,询问新增的备用车辆和等待补偿由谁支付。米娅说这部分原来就存在,只是藏在工人的加班、燃料浪费和民用货损里。对方说隐藏成本不等于可以直接申请的预算,要她给出可核验估算。
她与福克斯一起翻记录,数空驶公里、重复装卸和延误时间,剔除不能证明由本次冲突造成的部分。数字变小,却更扎实。最后他们提出只为一条线路设有限的共同备用额度,先试三天,再决定是否扩展。
没有人把这称作胜利。北库的保障率会暂时变难看,南库的周转效率也要解释,货站还得承担人工复核工作。米娅在方案最后注明自己的维护责任,突然感到那张纸比终端里的任何模型都更接近她真正修改的系统。
05半个托盘
在正式试运行前一晚,米娅与装卸班一起核对实际装载。她原先认为,只要让两个模型承认同一份资源占用,就能先解决最明显的循环。装卸领班却把一只托盘推到她面前,问她这算多少体积。
终端上写着标准托盘,现场的货箱却比标准高度多出一截。装卸班为了保护一批易损部件,临时加了缓冲材料,外形尺寸没有及时回写。重量没有超,车门能关,但原定上下叠放的两层只能放一层。米娅蹲下量完,发现此前预留的一辆车实际上装不完这一批。
哈维说不能因为几厘米再延误。领班将一块已经受压变形的旧缓冲垫递给他,让他自己决定是否拆掉。哈维摸了一下,没有继续要求。那些部件如果途中受损,前方收到的只是一个数量正确的箱子。
鲁本试着改变排列,和两名工人把托盘从车尾搬到侧面。货箱之间挤出一点空间,但固定带角度变差,急转时可能滑移。他没有为了证明能装而关门,而是让米娅看车厢地板上旧的磨痕:上一次有人说差不多,最后整个箱组向前移动,撞坏了隔板。
艾琳赶来时已经快午夜。她看见空出的半个托盘位置,先问能否拼入另一批小件。两边货物的卸载点不同,放在里面的会被外层挡住,中途必须重新搬运。她拿出路线图,提出交换装载顺序,让后卸的先装,前卸的靠门。这不是模型完全想不到的方案,只是现场从未将包装尺寸和卸载顺序准确传回去。
装卸班开始重新排布。米娅帮忙拉固定带,掌心很快磨红。一个工人笑她手太嫩,告诉她不要只用手指拽,要把身体重量带上。她照做,带子一下收紧,自己却差点向后坐到地上。鲁本扶了她一把,说工程师也需要试运行。
真正装好后,货物仍比计划多占了一部分空间。米娅没有强行维持原来的车次数,直接更新实际容量,让系统重新显示缺口。哈维看着新增需求皱眉,艾琳则将夜间闲置的一辆较小货车纳入备选,但它的司机已经下班,不能凭一个可用标记把人重新召回来。
领班说自己会开这种车,愿意补班。米娅问他已经工作多久,回答使她打消念头。最后他们将一批允许晚到的包装辅料留到次日上午,向接收方说明新的到货时间。接收方不高兴,要求有人承担停工风险,哈维打电话确认库存,发现那边其实还有半天余量,只是之前为了保险一直报零。
这条消息又让所有人沉默。模型争抢资源的背后,还有人为了保护自己而放大的紧急程度。米娅没有立刻把所有申报都视为谎言。她请接收方区分安全余量和实际零库存,并让哈维记录:此次调整依据的是现场复核,不意味着今后的紧急需求都可以延后。
凌晨两点,装卸班终于坐下来吃夜宵。领班打开饭盒,菜已经凉了,大家围着保温壶分热水。米娅看着自己刚才量出的尺寸,意识到共同约束仍然需要一套能够被普通人维护的输入流程。如果每个班次都要找她到场量箱子,方案就不算真正完成。
她与领班商量,把包装外形变化简化为几种现场可选状态,超过范围时再人工测量;装卸完成后由司机确认实际装载,而不是要求一个人预先保证所有细节。领班提出把输入终端移到门边,别让工人穿过整个仓库填两行字。米娅答应了,还在任务单上注明终端需要防尘罩。
天快亮时,鲁本拿着装好的车钥匙过来,问她还坐不坐副驾驶。米娅看了一眼时间,说自己先去睡两小时,否则下一轮也会把预计当成实际。司机满意地点头,将一块饼干塞给她。她走出仓库时,听见装卸工讨论的是新终端应该装左边还是右边。那并不宏大,却比任何一张漂亮曲线都更像这项修改终于开始落地。
06凌晨的试运行
第一班试运行在次日凌晨开始。鲁本按新安排抵达北库,物资已经解除等待,装卸工却找不到对应包装架。哈维立刻看向米娅,像在说新规则也没带来奇迹。她没有辩解,先让现场确认预计延误,再决定是否占用车辆。
包装架在另一侧仓库,搬来需要二十分钟。新的承诺期限允许等十五分钟。艾琳要求按规则释放车辆,福克斯看着月台排队情况,提出使用一次明确记录的延期,不触发全面重分配。米娅问谁承担后续影响,哈维同意把自己另一批非紧急货物后移一个窗口。
车没有空着离开。二十分钟后,第一批物资装上去,鲁本关好门,朝米娅竖了一下拇指。她没有来得及高兴,第二个任务已经出现新的冲突:前方临时提高一批维修件的优先级,要求占用同一辆返回车。
这次没有系统偷偷把资源改走。终端显示当前承诺和可选代价,值班人员必须明确选择:让现有订单继续,调用付费备用,或推迟另一项任务。哈维选择备用车,预算代表不在现场,电话迟迟没人接。
艾琳说超额用车会记到她部门。米娅提醒临时方案已经批准有限额度,这次在范围内,不能每次都重新等同意。哈维确认需求,艾琳终于放行。那辆一直被认为浪费的备用车驶出停车区,车灯照过站房玻璃,几个人同时眯起眼。
维修件按时离开,原有订单也没有被抹掉。代价是备用额度消耗大半,接下来两天再出现同类需求就不能照搬。米娅在看板上把剩余额度写得很大,让所有人都能看见。不是为了吓人,而是为了不让一次成功又变成无限资源的错觉。
07被拒绝的订单
试运行第二天,一个承包商要求插入高收益订单,承诺支付加急费。艾琳有些犹豫,这笔收入足以抵消试运行的部分费用。哈维则支持优先保障军方任务,双方熟悉的争执又出现了,只是这次争的东西反过来。
米娅没有替他们判断哪个部门更高尚。她让承包商提交实际装货时间和违约条件,再把影响到的任务列出来。结果显示,如果接这笔订单,一班民用冷藏运输将被挤到夜间,货损风险由对方承担,所谓高收益只是把损失移出当前合同。
承包商说可以不写得这么复杂,口头协调一下就行。福克斯问他是否愿意支付预计货损和司机加班费。对方沉默,随后说价格需要重新谈。最后订单没有接成,艾琳的收入表因此少了一项本来可以很好看的数字。
午后,她独自来找米娅,说新系统让自己像个不会做生意的人。米娅问她是否认为拒绝错误,艾琳摇头,却说正确也会挨批评。“你可以解释技术,我得解释钱。”
米娅没有拿公平或长远利益敷衍她。她把那笔订单的完整影响估算交给艾琳,帮助她区分放弃的毛收入与避免的成本转移,随后答应在复盘会上共同说明,而不是让业务负责人独自承担工程方案的后果。
艾琳收起材料,说也许上面仍不在乎。米娅说可能。两个人站在窗边,看见鲁本将新买的点心分给装卸工,盒子上还沾着油印。那个因为延误而贱卖黄油的小插曲,已经变成孩子做的一盘歪歪扭扭的饼干。它没有抵消货损,却使这一天不只剩下损失。
08三天之后
复盘会上,两套模型的平均指标都比过去低。米娅把实际完成的装运量、空驶减少、受影响订单和补偿成本放在同一页,拒绝只挑其中一条曲线。预算代表问是否能够恢复原先的漂亮成绩,她说如果负载下降,可以减少等待,但不能撤掉共同资源约束。
哈维补充,前方任务仍需保留应急权限,但每次使用都应明确指出付出的代价。艾琳则要求补偿成本不能永远由车队承担,否则下一轮部门考核还会逼人绕过规则。福克斯最直接:“别一边让我们协作,一边只奖励抢得快。”
会议没有一次解决所有考核问题。最终只批准延长试运行,并调整其中一项共享指标,其他预算争议留待下一轮。米娅知道这远远不是完整改革,却也知道那条备用线今晚终于可以恢复检修。
鲁本来接她去现场查看,车里播放着孩子的笑声。他女儿以为父亲开回来的是一辆装满黄油的车,特意画了一幅画:车厢后面冒出一座巨大的黄色山。米娅看着画,问孩子知不知道父亲其实常常运军用物资。鲁本说知道,但黄油可以做点心,画起来更有意思。
福克斯把备用线的占用牌摘下来,露出下面早已褪色的检修日期。他说今晚终于可以换掉那段响得像在咳嗽的轨道。米娅问费用是否已经列入预算,站长笑她终于学会先问这个。他把工具车推上轨道,没有再把维修当成可以无限延后的余量。
货站的绿灯又亮了。这次驶进来的车确实装着货,车厢编号与月台任务对应。米娅没有站在原地欣赏太久,跟着福克斯去检查下一班可能延误的装卸点。模型仍在计算,部门仍会争抢,战争也没有因为一张新的资源表而停止。她能做的是让下一次争抢出现在人看得见的地方,在一辆车空着跑完一整圈之前,就有人必须说明自己究竟拿走了什么。