matlab 真假随机,使用matlab使用概率随机生成器

这个解决方案详细描述了一个过程,该过程在最多3次失败的限制下,通过随机分配决定在后续步骤中失败发生的次数。每个步骤中,前一次的失败有更高的概率再次发生。这一逻辑在循环中实现,确保了失败模式的随机性和历史关联性。

这是一个具有以下逻辑的解决方案:

最多生成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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值