Реализация полной системы вероятностей - C#
Формулировка задачи:
Здравствуйте. Реализую приложение, где очень много экземпляров одного класса. Этот класс содержит полную систему вероятностей, т.е. например, вероятность пойти вверх, вниз, влево или направо - их сумма равна 1. На каждой итерации, для каждого такого экземпляра я должен произвести мутацию, т.е. изменить вероятность по одному из направлений движения. Т.е. была система вероятностей: 25%, 25%, 25%, 25%. А я хочу увеличить вторую вероятность (которая, допустим, отвечает за вероятность пойти вверх) на 3%. Тогда, Система будет выглядеть следующим образом после внесения изменений: 24%, 28%, 24%, 24%. Как можно реализовать эту систему и модификацию её? Проблема возникла в, казалось бы, очевидном решении: слишком много делений приводит к зависанию. Нужно решать задачу иначе. Как бы Вы это мне предложили сделать?
Решение задачи: «Реализация полной системы вероятностей»
textual
Листинг программы
static void Main(string[] args)
{
var probabilites = GetProbabilites(4, 150, 3);
for (int i = 0; i < probabilites.Length; i++)
{
Console.WriteLine("Probability #{0} = {1:p}", i + 1, probabilites[i]);
}
}
private static double[] GetProbabilites(int possibilites, int iterations, int diff)
{
int[] result = new int[possibilites];
var r = new Random();
int total = 0;
for (int i = 0; i < iterations; i++)
{
int index = r.Next(result.Length);
int actualDiff = r.Next(1, diff);
result[index] += actualDiff;
total += actualDiff;
}
return result.Select(x => (double) x/total).ToArray();
}