我编写了这个函数来根据某些标准查找索引。它应该可以工作,问题是在我的电脑上运行需要 2-3 天。有没有办法让它低于一个小时(或更快)?这真的不需要非常快。但是 2 天的速度慢得让人无法接受。
我不希望对该功能进行深入分析(尽管它会很好)。只是一些一般性的改进。
它本质上是 3 个 for 循环,用于使用另一个 256x8 矩阵逻辑填充 8 个大型 3d 数组。然后进行一些逻辑测试以找到所需的索引。
%These are sample values from the g.u.i. and other functions -
%ignore up til the loops unless you need it to understand something in the loops.
PriceMat=[58867 55620 16682 97384 11660 18175 25896 16300];
CapMat=[1400 1200 450 3600 150 1330 2000 250];
RepMat=[58 53 31 127 15 164 242 27];
DesiredRep=293.04;
DesiredCap=2600;
prevmin=99999999;
P=perms(0:7);
D=zeros(256,8,40320);
Cap=zeros(size(D,3),8);
Rep=zeros(size(D,3),8);
Price=zeros(size(D,3),8);
SufRep=zeros(1,size(D,3));
SufCap=zeros(1,size(D,3));
CapTot=zeros(1,size(D,3));
RepTot=zeros(1,size(D,3));
PriceTot=zeros(1,size(D,3));
for i=1:40320
for x=1:8
for j=1:256
D(j,x,i)=P(i,x)*Logic(j,x);
Cap(i,x)=D(j,x,i)*CapMat(x);
Price(i,x)=D(j,x,i)*PriceMat(x);
Rep(i,x)=D(j,x,i)*RepMat(x);
CapTot=sum(Cap,2);
RepTot=sum(Rep,2);
PriceTot=sum(Price,2);
if CapTot(i)>=DesiredCap
SufCap(i)=true;
else
SufCap(i)=false;
end
if RepTot(i)>=DesiredRep
SufRep(i)=true;
else
SufRep(i)=false;
end
if SufRep(i)==true && SufCap(i)==true
if PriceTot(i)<=prevmin
prevmin=i;
end
end
end
end
end
return prevmin