本帖最后由 smilesadness 于 2022-4-13 22:18 编辑
观前注意:本文仅限内部交流使用,不同的版本、不同的分支、不同的cfg都可能导致最优路径的改变,盲目抄答案导致的产物损失由玩家自行承担。
5.09.33.02数字化草稿本镇楼
众所周知,GT5有3种原油,都可以在蒸馏塔处理成数量不等的3种燃油,3种燃油分别通过2种裂解、蒸馏后可以获得各式各样、数量不同的有机产物;反过来推敲,每种有机产物都有复数种生产方式。在寸土寸金的格雷公司,一朵阴云笼罩在每一位葛朗台的头顶:如何选择生产路线,使最少的原料产出最多的目标产物?
由于单一产物评估和多产物评估互为特殊与一般的关系,本着从特殊推广到一般的套路,本文仅讨论单一产物评估。
一、数据分析。
1.加氢裂解能使比较重的燃油裂解为比较轻的燃油,并产出链烷烃和甲烷;
2.蒸汽裂解能使3种燃油裂解为另外2种燃油,并产出芳香烃和不饱和链烃和甲烷;
3.加氢裂解能使链烷烃裂解为更短的链烷烃;
4.蒸汽裂解能使链烷烃裂解为不饱和链烃和甲烷。
瞪眼法得出以下结论:
1.把蒸汽裂解和加氢裂解分开讨论有助于降低难度;
2.芳香烃只能通过蒸汽蒸汽裂解3种燃油获得;
3.蒸汽裂解3种燃油裂解为另外2种燃油的比例相互共轭;
4.不饱和链烃有两种获得方式:蒸汽裂解燃油、加氢裂解燃油+蒸汽裂解链烷烃。
我们可以初步得出“芳香烃通过蒸汽裂解”的结论,但是不饱和链烃瞪眼法看不出来头,只能算一算。
由于加氢裂解“单向裂解”的特性,我们可以轻松计算出不饱和链烃的产量;受益于蒸汽裂解的高度共轭,我们也可通过简单的多项式加减轻松获得仅蒸汽裂解各种燃油完全处理后的各种不饱和链烃的产量。假如各产物的产量都是明显“加氢裂解燃油+蒸汽裂解链烷烃”多于“蒸汽裂解燃油”,那么受“蒸汽裂解和加氢裂解分开讨论”的影响(由于暴力分组,排列组合出现的情况大量减少),简单得出一个“想要芳香烃就蒸汽裂解,想要不饱和链烃就加氢裂解燃油+蒸汽裂解链烷烃”的结论,话题大概也终结了——石脑油产丁二烯是蒸汽裂解更多——葛朗台们睡不着了。
二、BUG越修越多。
由于蒸汽裂解石脑油产丁二烯更多,所以之前暴力分组而忽略的一些情况,我们需要捡回来重新讨论过:加氢裂解石脑油打不过别人,就不用了,但是另两个燃油如何选择?我们没有思路,只能全试一遍;2种燃油都可能作为原料,都要讨论。所以总共需要考虑2*2*2一共8种情况——熬夜总比失眠舒服。
由于各种组合情况不再共轭,消元的难度激增,我尝试使用逆矩阵的方法计算,结果发现学不会,只能老老实实设待定系数解不定方程,并比较出最优解但是不保证没算错。
此时,新的BUG诞生了:其它2种燃油产芳香烃还是不是直接裂解呢?1B重燃油完全加氢能获取1.04B石脑油,产率还更高——瞪眼法的结论发生了一些变化。
三、数学老师真的教过
线性规划,高中数学内容,在多个一次多项式限制条件下寻找另一一次多项式最大值的方法,用此法解决问题应该再适合不过:限制条件都是一次式;自变量变成了3个应该问题不大;评估指标为某个单一产物的产量。我们先提前计算各种处理链的各种原料的消耗(允许负数)和目标产物的产量,每一种处理链变成1个4元数:3种原料的量和产物的量——等比缩放把产物的量变成1然后忽略:3元数——空间坐标系的一个向量。至此,问题变成了奇怪的样子:
空间坐标系内有复数个向量(例:向量A=(a1,b1,c1),向量B=(a2,b2,c2)),若向量A*d1+向量B*d2+…=(x,y,z),则函数G(x,y,z)=d1+d2+…,求函数G(1,0,0)、G(0,1,0)、G(0,0,1)的最大值,此时哪几个常数dn不为0?(为了保证不出现“逆反应”,d1、d2…均为非负数)
根据瞪眼法优秀的数学直觉可得最多只有3个dn不为0(3个不共面的向量可以作为单位向量描述空间里所有点并可与原坐标系稳定相互转换),系数非零的3个向量的顶点构成一个平面lx+my+nz=1,G(该平面上的点)=1恒成立,该平面与3条坐标轴的交点的刻度为l、m、n,l、m、n为系数非零的3个向量组成的3*3矩阵的逆矩阵(这句话可能不对,但是肯定和某一步有关),G(1,0,0)=1/l,G(0,1,0)=1/m,G(0,0,1)=1/n。另外,l、m、n应都>0,否则可能出现原料越消耗越多之类的情况。
至此,奇怪的线性规划问题变成奇怪的形状以后又莫名的圆回来了。
四、就要到终点了……等等,终点有多个?
至此,解题的思路大概出来了:
1.先随机抽取“合适的”3个向量,并求出这3个向量的定点确定的平面lx+my+nz=1;
2.把其中一个向量替换为对应组的一个待选向量,如果它的顶点与坐标原点在平面的同侧(即G(an,bn,cn)<1),则替换;
3.获得新的平面l'x+m'y+n'z=1;
4.通过以上的步骤,新的l、m、n中的2个值应较前减小,最后1个值的趋势需要讨论:未被替换的2个向量的连线有没有进入(+,+,+)区间:如果没有,最后一个值也变小;如果进入了,则变大;交于坐标轴则不变。判断也简单:忽略对应方向的坐标轴化简为平面问题,两点确定一条直线,常数项>0则进入(+,+,+)区间,否则反之。
通过上述步骤不断地缩小l、m、n的值,最终获得G(1,0,0)、G(0,1,0)、G(0,0,1)的最大值这时候应该已经遍历了所有的组合了吧。借助向量的加减,可以进一步获得一般情况G(a0,b0,c0)的值。
另外,当所有待选择的向量的定点在坐标原点的对侧时,我们认为这3个向量的组合是一个“热阱”(我在一个介绍旅行商问题和退火算法的视频里的字幕里认识的,但是百度不到相关介绍),即周围点的评估指标都不如这个点,但是它不一定是极值——多走两步可能会有另一个热阱。
反过来推敲,想获取G(a0,b0,c0)的最优解,亦可以此为法向量构建一簇平面,从-∞向+∞移动,以最先遇到的几个点——因为向量的选择要“合理”(一个象限只需要一个向量、(a0,b0,c0)应在3个向量定点围成的三角形中间、l、m、n均>0),如不符合,则应舍去)——的组合是否为最优解?就算不是最优解,至少也是一个不错的热阱。特别地,对于多个顶点在一个平面上的情况,瞪眼法可得离向量(a0,b0,c0)所在直线越远的点有优势。
此时,我的思维也掉进热阱了。
五、我的目标是星辰大海。
原题只有3种原料,各有2种处理途径。
GT5.09.33的石化是被简化过的,以前更有轻中重3种处理方式,我已尝试让算法支持任意数量的处理方式计算量爆炸解决不了。
原料大于4种时,难以可视化,但是算法大概还能使用?至少有很多步骤不依赖几何运行,纯代数环境应该可以正常使用。
多产物评估时,产物不是单纯的计总量,不能将评估指标直接相加;独立求解时对于一个产生多种目标产物的处理途径的评分如何计算;同一个象限可能需要选择多个向量以改变产物的比例;最优解时某个产物可能产量溢出……
限制条件不再是线性时——这是非线性规划的内容,爷已经不会了,再往上深究爷更不会了。
假如有数学专业的大佬可以进一步讲解下去,我代表广大GT员工谢谢你,并送你一量子缸本来打算倒垃圾桶的链烷烃奖励你在GT石化的做出的卓越贡献。 |
|