Я пытаюсь написать немного кода для проверки минимального количества итераций, необходимого для последовательного возврата правильного результата для проблемы.
В частности, я использую проблему Монти Холла как свою рабочую проблему для решения (в идеале я обобщу ее позже).
Я хочу создать систему, которая принимает вмененный целевой уровень доверия и стремится найти минимальное число итераций задачи (с известным решением), необходимых для получения решения, по крайней мере, для целевого% времени.
Мой подход к этому заключается в создании функции, которая запускает проблему до тех пор, пока ее решение не окажется в пределах одного стандартного отклонения от ожидаемого решения. Он считает, сколько итераций это потребовало.
Этот процесс повторяется, сохраняя наибольшее количество итераций в качестве текущего ответа. Каждый раз, когда текущий ответ не меняется, его оценка увеличивается (это рассчитывается с учетом процента прогонов, в которых текущий ответ не изменился).
Как только эта оценка равна или превышает целевой показатель, он должен вернуть этот текущий ответ.
Ниже приведен фрагмент псевдокода, который, по моему мнению, должен работать:
function runTester(runningMax, countRunningMax, countTotal){ %Tests for Max #of iterations required
test = probIterator(); %probIterator is a function running the Monty Hall problem
if (test > runningMax){ %Max #of iterations
runningMax = test;
}
countRunningMax += 1; %#of tests this Max has survived
countTotal += 1; %Total #of Tests performed
return(runningMax, countRunningMax, countTotal);
}
main(goal){
name(3) = [0,0,0];
for(i=0;1;10){ %No way Min<10
name = runTester(name[0], name[1], name[2]);
}
score = name[1]/name[2];
while(score < goal){ %Hopefully this doesn't run on forever...
name = runTester(name[0], name[1], name[2]);
score = name[1]/name[2];
}
statement = ('With a certainty of '
+ (score * 100)
+ '%, minimum number of iterations required to consistently
succesfully numerically solve the Monty Hall Problem: '
+ name[0]
+ '.');
print(statement);
}
Если я, кажется, допустил какие-либо серьезные ошибки в моем подходе или если вы видите какие-либо явные недостатки, пожалуйста, сообщите мне.