比较分析找出矩阵的最大可能值

2个视图(过去30天)
莉娜·赫芬
莉娜·赫芬 2020年5月14日
编辑: 莉娜·赫芬2020年5月14日
我要找出一个方阵的最大值。这个矩阵是对角线上有0的数据。行和列是成对的,所以重新排列矩阵是不建议的,也就是我在做比较分析。我翻转了一行和相应列中所有值的符号然后对矩阵求和。
我们可以改变行-列对的符号。例如,我们可以把+9换成-9,或者把-3换成+3。这样做的“规则”是转换 全部的 行-列 一对 这是我的标志。因此,第3列和第5列将与第3行和第5行一起切换符号。这意味着可能存在2^N个符号置换。11,11-1,11-1,11-1,11-1-1,1-1-1等等,就像在二进制中计数一样。
我想知道哪个[-1-1等]sudo二进制序列数组会导致矩阵的最大和。
现在,对于一个51 x 51的输入矩阵,这个过程预计在i7英特尔处理器上需要78年,在512核集群上需要222天。有没有关于如何优化或缩小范围的想法?可能有某种蒙特卡罗方法我可以实现,只是不确定从哪里开始。另外,我知道该程序无法处理这个51 x 2^51二进制矩阵(已达到变量限制)。我也可以用python写这篇文章(可能需要考虑集群需求),但我只是在寻找一些算法帮助。谢谢^_^
我有以下代码:
%查找具有行/列位翻转的最大可能矩阵和值
%生成对角线上带零的伪平方矩阵数据,这里我们使用5 x 5:
Z=5;
原始矩阵=(-1*(眼睛(Z)-1)).*randi([-10],Z);
%方阵的长度:
N=长度(原始矩阵);
二进制矩阵=dec2bin(2^N-1:-1:0)-'0';%制作一个完整的二进制矩阵集N除以2^N
ONEPOS=find(二进制矩阵==0);%全零
二进制矩阵(ONEPOS)=-1;%将所有零设为-1
M=长度(二进制矩阵);%二进制矩阵的抓取长度(aka 2^N)
%在循环中一次生成sudo bin序列数组1,然后进行擦除,这样会更好吗?
抽搐%获取代码的运行时
结果=总和(sum (OriginalMatrix));%原矩阵的第一和
勾号=0;找到生成的矩阵数
tick2 = 0;%查找通过的行数(2^N)
MatrixDumb=原始矩阵;%原始的,未改变的矩阵
对于i=1:M
multrow=二元矩阵(i,:);
对于j=1:N
矩阵dumb(:,j)=原始矩阵(:,j)*multrow(j);%在矩阵列上写入二进制第一行
终止
对于k=1:N
MatrixDumb(k,:)=MatrixDumb(k,:)*multrow(k);将二进制的第一行除以矩阵的行
勾号=勾号+1;
终止
BigSum=sum(sum(MatrixDumb));%和整矩阵
如果BigSum>结果%确定总体最大可能值
结果=大和;
指数=i;%确定哪个二进制组合生成最大值
终止
tick2=tick2+1;
终止
toc

答案(0)

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!