我想详尽地搜索所有可能的结果,如以下算法所示:
for trace=1:2^(t*M)
R=0;
for i=1:t
for j=1:M
if obs(i,j)
%%do something and calculate E
R=R+getReward(E);%this calls a function
end
end
end
outcome(trace,:)=R;
end
finalResult=max(outcome);
obs(i,j)
是一个设计如下的矩阵:
%%Outside of loops
Matrix = dec2bin(0:2^(t*M)-1)-'0';
myMatrix = reshape(Matrix.',t,M,[]);
%%inside the big loop
obs=myMatrix(:,:,trace)
这基本上创建了二进制矩阵的所有可能组合,以便为基于t
和M
的二进制矩阵的所有不同组合产生结果。显然,如果t
和M
很大,则无法创建初始Matrix
,因为它需要大量内存。即使您分配内存,即使相对较小的t
和M
值运行也需要很长时间。我的问题是如何更有效地重新设计此算法以使用以下设置运行:例如t=100
和M=10
。您还可以将其视为树(例如M=2
和t=2
)。 t
是树的深度,M
是每个节点内二进制元素的数量。因此,对于t=1
,我们将拥有以下节点:n1=00 n2=01 n3=10 n4=11
。在t=2
,指数增加到2^(t*M)
。所以,我在问另一种方法,而不是制作一个包含所有二进制组合的矩阵会更好,还是有另一种标准算法来进行这种搜索。
如果您有任何疑问或需要任何澄清,请告知我们。任何评论也欢迎。