总结循环中的值

时间:2014-08-08 12:17:21

标签: matlab

希望有一个相对简单的方法来做到这一点,这只是我的愚蠢。 我试图找到一个盒子(大小)的组合,它将适合一个更大的特定容量盒子(boxSize)。在代码(下面)中,我现在把它作为geq,这显然不好看,因为通常值大于盒子的承载能力。

boxSize = 9;
size = [5 2 3 7 2 3 5 10 6 4]; % Box size
Nos = [50 20 300 78 22 34 55 120 643 442]; % No things in box

tmpMat = zeros(length(size),2); % Box size and number in there need to be linked
tmpMat(:,1)=size;
tmpMat(:,2)=Nos;

Order = tmpMat(randperm(length(tmpMat)),:); % Randomly sort

boxVector = [];

while(~isempty(Order)>0)                     % Determine which contributes to box
    sumMyBox=cumsum(Order);  
    sum2=find(sumMyBox(:,1)>=boxSize,1,'first');   % ISSUE here with geq 
    Used=Order(1:sum2,1);
    box = sumMyBox(sum2,:);
    boxVector = [boxVector; box];
    Order=Order((sum2+1):end,:);
end

简单地制作这个leq的问题在于它只需要一个值,因为2是< 10(例如),而我正在寻找的是将数字相加并使值尽可能接近boxSize。有什么建议?所有编码都在Matlab中。

提前致谢。

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是:

sum2=find(sumMyBox(:,1)>boxSize,1,'first') - 1;

找一个溢出点并备份一个。

在您当前的测试用例中,如果列表中的第10个框是第一个,则答案为no。我可能不完全理解你的任务,但似乎你可能想要计算所有可能的盒子组合。或者,也许,从最大到最小的排序,并采取最适合的盒子,类似的东西。希望我只是不完全理解你要解决的任务。