Реализация полной системы вероятностей - 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д