Генератор случайных чисел стандарта C, используемый в Lua, не является подходящим для моделирования. Слова «цепь Маркова» предполагают, что вам может понадобиться лучшая. Вот генератор, широко используемый для расчетов Монте-Карло:
local A1, A2 = 727595, 798405 -- 5^17=D20*A1+A2
local D20, D40 = 1048576, 1099511627776 -- 2^20, 2^40
local X1, X2 = 0, 1
function rand()
local U = X2*A2
local V = (X1*A2 + X2*A1) % D20
V = (V*D20 + U) % D40
X1 = math.floor(V/D20)
X2 = V - X1*D20
return V/D40
end
Он генерирует число от 0 до 1, поэтому r = math.floor(rand()*10) + 1
войдет в ваш пример. (Это мультипликативный генератор случайных чисел с периодом 2 ^ 38, множитель 5 ^ 17 и по модулю 2 ^ 40, исходный код Паскаля http://osmf.sscc.ru/~smp/ )