当前位置: 首页 > 手游 > 原神

原神荒海石块旋转解迷--MATLAB整数规划

来源:网络 时间:2023-07-30 10:49:47
导读1. 概述该场景位于原神--荒海中, 做任务"神樱大袚"时会偶然碰到. 解密规则如下 共有5颗石块, 中间固定, 其余四颗可以旋转;每颗石头有一紫色面, 所有石头紫色面同面则解谜成功使用雷元素可以激活石块, 自己…

1. 概述

该场景位于原神--荒海中, 做任务"神樱大袚"时会偶然碰到. 解密规则如下

共有5颗石块, 中间固定, 其余四颗可以旋转;每颗石头有一紫色面, 所有石头紫色面同面则解谜成功使用雷元素可以激活石块, 自己与相邻石块发生一次顺时针旋转

转了半天情况如下, 我们将左下角(靠近阿晴耳朵的)石块编号1, 从此顺时针依次编号2, 3, 4

对侧视角如下:

实在不想戳了!!! 玩了一天的罪恶涌上心头, 不行得学习一会儿了!!!

2. 模型建立

仔细分析, 不难得到, 这就一简简单单的线性整数规划问题. 1-4颗石头分别还需要单独旋转1, 0, 3, 2次才能与中间同面, 但是每颗石头的命运不是自己说了算的(受相邻石块影响), 我们记每块石头需要旋转n1, n2, n3, n4操作次, 同时在整个过程中转了k1, k2, k3, k4圈.

对于1号石头, 其受2, 4号石头的影响, 约束条件为:

n1+n2+n4=4k1+1n_1+n_2+n_4=4k_1+1

对于2, 3, 4号石头, 同理可得:

n1+n2+n3=4k2+0n2+n3+n4=4k3+3n1+n3+n4=4k4+2n_1+n_2+n_3=4k_2+0 \\ n_2+n_3+n_4=4k_3+3 \\ n_1+n_3+n_4=4k_4+2

对于还要锄地的打工人们, 当然希望总操作数最少, 即

min:N=n1+n2+n3+n4min: N=n_1+n_2+n_3+n_4

模型汇总如下:

min:N=n1+n2+n3+n4s.t.{n1+n2+n4=4k1+1n1+n2+n3=4k2+0n2+n3+n4=4k3+3n1+n3+n4=4k4+2ni,ki≥0,i=1,2,3,4min: N=n_1+n_2+n_3+n_4 \\ s.t. \left\{ \begin{aligned} n_1+n_2+n_4=4k_1+1 \\ n_1+n_2+n_3=4k_2+0 \\ n_2+n_3+n_4=4k_3+3 \\ n_1+n_3+n_4=4k_4+2 \\ n_i, k_i \geq 0, i=1,2,3,4 \end{aligned} \right.

3. 模型求解

MATLAB大法好!!!, 直接利用intlinprog()函数求解, 完整代码如下:

f=[1,1,1,1,0,0,0,0]; intcon=1:8; A=[]; b=[]; Aeq=[1,1,0,1,-4,0,0,0; 1,1,1,0,0,-4,0,0; 0,1,1,1,0,0,-4,0; 1,0,1,1,0,0,0,-4]; beq=[1;0;3;2]; %对于不同情况的问题, 只需将此次修改即可得到对应答案 lb=zeros(8,1); ub=[]; [x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

4. 结果展示

MATLAB成功求解:

MATLAB求解结果

即, 1-4颗石块旋转3, 0, 1, 2次, 最少需要6次操作, 1, 2, 4号石块多转了一圈.

实际操作后, 出现一个珍贵的宝箱:

好耶!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:704559159@qq.com

Top
加盟网