这是一个具有以下逻辑的解决方案:
最多生成3次失败,随机分配
确定步骤2中有多少次失败
让以前的失败更有可能再次失败
请注意,我认为它同样可能有0,1,2或3次失败。
nRuns = 5;
allRuns = zeros(nRuns,10); %# stores success and failure for all runs
%# (1) generate from 0 to 3 failures (each outcome is equally likely)
nFailures = randi([0 3],1);
tmp = randperm(10);
firstRun = tmp > nFailures
allRuns(1,:) = firstRun;
%# (2) decide how many failures occur in the 2nd run (each outcome is equally likely)
for iRun = 2:nRuns
%# as the loop has been added later
%# I use "2" to indicate any next run
nFailures2 = randi([0 3],1);
%# (3) give previous failures a higher chance to fail again
failIdx = find(~allRuns(iRun-1,:));
successIdx = find(allRuns(iRun-1,:));
%# 5x higher chance of failing for previous failures
failCandidates = [repmat(failIdx,1,5),successIdx];
failCandidatesRand = failCandidates(randperm(length(failCandidates)));
%# if you have R2012a or later
failCandidatesRand = unique(failCandidatesRand ,'stable');
toFail = failCandidatesRand (1:nFailures2);
%# alternatively, if you have R2011b or earlier
toFail = zeros(nFailures2,1);
toFail(1) = failCandidatesRand(1);
ii = 2;
kk = 2;
while ii < (nFailures2+1)
if ~any(toFail==failCandidatesRand(kk));
toFail(ii) = failCandidatesRand(kk);
ii = ii + 1;
end
kk = kk + 1;
end
%# write failures
nextRun= true(1,10);
nextRun(toFail) = false
allRuns(iRun,:) = nextRun;
end
这个解决方案详细描述了一个过程,该过程在最多3次失败的限制下,通过随机分配决定在后续步骤中失败发生的次数。每个步骤中,前一次的失败有更高的概率再次发生。这一逻辑在循环中实现,确保了失败模式的随机性和历史关联性。
3177

被折叠的 条评论
为什么被折叠?



