Реализация полной системы вероятностей - 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();
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы