第69章 烟花算法

分布式炼丹 赵癸卯 1951 字 17天前

“第二个,我需要一套算法,来帮我直接做出选择,引爆哪些晶格,会产生最大的收益,比如达到100评分。”

金丹笑道:“没错。这就是我擅长的地方。”

“你对每一个奥术石都完成了建模?”

“建模是最容易的,”金丹说道,“我借用了一些很古老的机器智能算法,来快速从这100万个晶格中做出选择。由于每一个奥术石都是独一无二的,每一个晶格的映射函数的参数也充满了随机性,所以还是带有一点运气的成分:不太可能挑选出来的每一个晶格,都能达到100以上的评分。”

“但是已经比随机选择要引爆的晶格,要强上太多了。”林铭说道。“这个时候你没有摇卦问问应该引爆哪些晶格?”

“摇卦?效果是不错,但是太慢了,”金丹说道,“性价比不高。”

“你设计的算法是什么,还有优化空间吗?”

林铭作为上载智能专业的毕业生,对古老的算法还有一些研究。

虽然不可能用自己的脑子去运算了。不过也许会产生新的思路。

“其实很简单,姑且就叫烟花算法。”金丹说道。

“好像有一个同名的算法。”

“大致思路一样。我对一块奥术石完成建模以后,把每一个晶格,抽象成一个爆炸算子。这个爆炸算子,有一个使用坐标编号的唯一标识符,还附带一个映射函数。”

“这个映射函数你怎么建模的?”

“映射函数的解空间不大,我可以通过观察一些局部细节直接确定,这部分的解法已经相对稳定了。”

“那接下来就简单了,”林铭点点头,“第一次,比如说以我的精神力,能够短时间内引爆100个晶格,那就随机抽取100个爆炸算子,模拟第一轮的100次爆炸,评估每个爆炸算子的得分。拿出得分最高的那一个,再随机抽取99个爆炸算子,模拟第二轮的100次爆炸,继续拿出得分最高的那一个,进入下一轮。”

因为爆炸实际上会相互干涉,因此某一个爆炸算子,在前一轮的得分,跟映射函数和这一轮选择的顺序都有关,不见得会继续保持同一个分数。

“对,只要达到100分,就可以进入下一轮。”金丹说道,“一直算到时间不允许为止,综合得分和权重,选择要引爆的晶格和他们的顺序。轮次越高,权重越高。”

林铭略微思考了一下:“整挺好。最优的情况,是到了最后一轮,选择出来的100个爆炸算子,或者说晶格,总分正好达到。”

金丹表示赞同:“没错,一开始的设想就是这样的,后来我在这个最初设想的基础上,做了很多调整。

“比如,我发现晶体的位置和映射函数是存在规律的。我大致推算出来了最优解的规律,虽然不完全准确,但是基本够用。这样,我在挑选进入下一轮的爆炸算子的时候,就不是完全随机了。

“简单来说,就是引入了变异算子,通过目前最优的爆炸算子,应用刚才说的规律,去计算理论上的变异算子的映射函数,然后匹配出映射函数最为接近的爆炸算子,进入下一轮的备选。这样做也的确提高了效率,能更快找到我想要的解。我另外做了其他优化……”

十几分钟后。

林铭心神一动,退出了奥术石的晶格世界,然后用同样的方法,进入了黑石的晶格世界。

“果然,晶格的排布是一样的。”

“这一块黑石不是标准大小,共有大约80万个晶格,我会告诉你要引爆的晶格的位置和顺序,你只要动用意念和黑石沟通,它会精确指引你的意念到想要的位置上。”

林铭按照金丹的建议,引爆了黑石中的一个晶格。黑石顿时发出强烈的光芒。

“由于黑石晶格的特殊结构,这些丹气形成的光线,会在几分钟后才消失。每次引爆新的晶格,光线亮度和时间都会减弱一些。不过足够你把船舱内部的东西都拿出来了。”