Я ищу, чтобы выбрать 1 человека из списка людей, где каждый элемент в списке имеет определенное «взвешивание». Предположим, что класс Person имеет необходимый конструктор.C# и «взвешенная вероятность»
public class Person {
public string Name { get; set; }
public float Weighting { get; set; }
}
public List<Person> People = new List<Person>();
People.Add(new Person("Tim", 1.0));
People.Add(new Person("John", 2.0));
People.Add(new Person("Michael", 4.0));
Теперь, я хочу выбрать человека случайно из этого списка. Но в среднем Я хочу выбрать Майкла в 4 раза чаще, чем Тим. И я хочу выбрать Джон половину (2/4) так же часто, как Майкл. И, конечно же, я хочу выбрать Майкла вдвое чаще, чем Джон.
В этом смысл?
У меня уже есть код для выбора людей по процентам. Не будет ли это работать, если бы я просто умножил% шансов на них по весу, представленному в этом примере?
Кроме того, моя текущая система работает только с шансами до 100%, ничего выше. Любые советы о том, как преодолеть это ограничение? Вероятно, мне нужно было бы масштабировать каждый шанс в соответствии с самым большим фактором в списке?
public static bool Hit(double pct) {
if (rand == null)
rand = new Random();
return rand.NextDouble() * 100 <= pct;
}
Или я что-то упускаю?
Ваши вопросы немного расплывчатым, и не очень подходит для этого форума, но я не вижу ничего плохого с предлагаемыми подходами. Предложите сначала попробовать что-то, а затем, если оно не работает, вы можете вернуться сюда (или более подходящий форум) и задать конкретный вопрос о конкретной проблеме кодирования. – LordWilmore