12下一页
返回列表 发新帖

【点灯游戏变种】MATLAB解多元一次同余方程组求助

[复制链接]

2

主题

7

回帖

18

积分

新手上路

积分
18
发表于 2025-3-22 07:51:19 |显示全部楼层 | 阅读模式
首先说一下背景……
目的是为了解一个游戏,之前也有人在这个吧里发过,是exponential idle一个增量小游戏的里小游戏(套娃)
它长这样:


点击圆片会让它自己和周围的圆片状态发生变化,为方便举例以及后续运算,给圆片进行标号:


举个例子,点击1圆片会让1,2,8,9这几个圆片状态变化,点击31则是24,25,26,30,31,32,35。
一个圆片以它的朝向作为状态,如果是2就是经典的点灯游戏了,这里的状态量则是6。
于是,为了和游戏内容契合,把朝上记为0状态,而后每瞬时针旋转π/3标记一个状态,分别是1,2,3,4,5
我们知道,经典的点灯游戏可以通过解异或方程组随后进行高斯消元来快速得到一组特解
同时因为在游戏内的需求,我们也只关注特解。
这个游戏同样可以做类似的事情,不过是从异或方程组变成了同余方程组
以上述记号继续,我们标记圆片1的点击次数为X1,而它的最终变化量为Y1,以此方法标记所有圆片
从而可以列出第一个方程,mod(X1+X2+X8+X9,6)=mod(Y1,6)
当然,这个方程也能引入一个参量Z1∈Z来写成简单的形式:
X1+X2+X8+X9=6*Z1+Y1
同理,我们可以对所有圆片写出类似的方程,构成同余方程组:
AX=6*Z+Y
这里A是系数矩阵,X是X1到Xn的向量,同理Z和Y
构成同余方程组之后,就可以用高斯消元来将A变成类似上三角矩阵的结构,判断解的存在情况
然后从最后一个方程开始一步步回代,就能得到一组特解了
举个例子,对于下面两个方程:
a1X1+a2X2+...=6Z1+Y1,记为①
b1X1+b2X2+...=6Z2+Y2,记为②
记L=lcm(a1,b1),La=L/a1,Lb=L/b1。为了方便在matlab中调用,若X1前系数小于0,则方程两边变号
我们可以用La*①-Lb*②替代②式来消去X1元,得到的式子还可以两边求模进一步简化(或者说把乘数全部塞到Z里面)
当然有时候会存在一个问题,就是在进行消元后,发现后续的方程中跳过了下一个未知元
比如消元完X1后,发现后续方程里都没有X2了,只有X3及之后的元
这时候把X2标记为自由元,然后跳过这个元继续进行消元
在方程数量和未知元数量一样的情况下,每多一个自由元,A化简到最后就会多一行0向量在底部
这时根据你的目标状态数,也就是输入的Y,可以验证方程是否有解,也就是变化后的Y对应0向量的位置上的元素是不是0
有解之后,为便利起见,将所有自由元都代入为0,然后从A中最后一个不是0向量的方程一步步代入,就能得到一组特解了
以上是我的思路,想问问大佬们是否存在矛盾,或者推论错误的地方?
因为当我实际上用MATLAB进行操作时就出现问题了……
简单来说,就是答案对不上……
已经逐行逐句检查了快半个月了,包括A矩阵的录入也检查了数遍,始终没能发现问题所在
而且最令我疑惑的是,这个代码应对状态数为2或者4的情况都是成立的,唯独6总是出问题……
我会在二楼附上我的代码,也尽可能地注释了代码的含义,希望能有大佬看看哪里出了问题……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

2

主题

7

回帖

18

积分

新手上路

积分
18
发表于 2025-3-22 08:40:57 |显示全部楼层
在具体说下我遇到的问题吧
为了验证方便,我通常会把图形先进行一定的简化,比如这样:


然后我就会在MATLAB里输入我需要的状态变化:
original_br=[0 0 0 0 0 0 0,0 0 0 0 0 0 0,00 0 0 0 0 0,2 0 0 0 0 0 2,0 0 0 0 0,3 0 3,4]';
然后得到答案(而且是验证有解的答案)
4,1,1,4,3,1,4,3,4,2,4,0,4,3,5,2,2,4,2,4,3,0,2,0,4,0,2,0,1,2,0,0,0,1,0,0,0
但是当我仔细地把答案代入回游戏里,最后却变成了这样……


大约已经有很多次出现这种情况了……
我的网盘链接放在楼中楼里,大佬愿意看看裹脚布的话还请助我一臂之力……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

4

回帖

11

积分

新手上路

积分
11
发表于 2025-3-22 09:19:37 |显示全部楼层
……debug别人的代码这种事情………………
如果只想要结果的话,考虑直接用整数规划命令求解?

2

主题

7

回帖

18

积分

新手上路

积分
18
发表于 2025-3-22 11:01:30 |显示全部楼层
不是说一定要让大佬帮我debug,最重要的是帮我看看我的推到思路是不是对的

如果思路正确那就是我代码一坨,我再去de就是了
但是如果是哪里思路有漏洞,请大佬务必帮我指出来!
因为目前来看我的代码执行情况和我的思路是一致的……应该是思路里有一处没考虑完善,才导致对模2是能解决但是模6不能解决……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

3

回帖

10

积分

新手上路

积分
10
发表于 2025-3-22 12:53:54 |显示全部楼层
这东西攻略网上到处都有吧

0

主题

2

回帖

10

积分

新手上路

积分
10
发表于 2025-3-22 12:57:55 |显示全部楼层
啊?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

2

主题

7

回帖

18

积分

新手上路

积分
18
发表于 2025-3-22 13:01:49 |显示全部楼层
总是被删烦死啦!!!!!哪里违规了嘛!!😡
不只是要这个游戏的攻略呀,如果只是为了游戏的话其实模2的刷星效率更高,比如我现在做的

2

主题

7

回帖

18

积分

新手上路

积分
18
发表于 2025-3-22 14:50:44 |显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

2

主题

7

回帖

18

积分

新手上路

积分
18
发表于 2025-3-22 16:42:44 |显示全部楼层
原则上来说这个比模6的效率还要高,因为计算量只有2%,操作量也大约只有7%,但是收益只少了一半
但是为什么模6就是不对呢

我主要是想让大佬帮我看下上面构建方程组以及解特解的思路是不是有什么遗漏的地方,有可能导致在模2情况下没产生影响的错误,到模6时就产生影响了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

2

主题

23

回帖

24

积分

新手上路

积分
24
发表于 2025-3-22 18:30:25 |显示全部楼层
先声明下,我学编程的。
大概就是圆片A和周围圆片的变化量xi合计是A答案变化量Ya+6的倍数,就能得到A的解。然后找能让所有圆片等式成立的组合。
我的疑惑是你怎么找的。后面的消元看不太懂,感觉像是解3元一次方程那样消元套到现在的n元一次。对于第i个圆片,按理你不知道周围总变化量也就是Yi,你也不知道该圆片的变化量ai。那你是要暴力破解吗?
学习交流
小学交流
初中交流
高中交流
大学交流
小学学习
小学语文
小学数学
小学英语
初中学习
初中语文
初中数学
初中英语
初中物理
初中化学
初中学习
初中生物
初中地理
初中历史
初中政治
高中学习
高中语文
高中数学
高中英语
高中物理
高中化学
高中学习
高中生物
高中地理
高中历史
高中政治
大学考试
考研总复习
四六级英语考试
公务员考试
事业单位考试
专升本考试
大学考试
自学考试
成年人高考
各类就业考试
快速回复 返回顶部 返回列表