Для ИИ я использую случайные значения, чтобы решить, какое действие выполнить дальше (только когда нет ничего основанного на правилах). Некоторые действия следует выбирать чаще, чем другие.
Идея состоит в том, чтобы определить группу вероятностей и выбрать действие из вероятностей 2 в два раза чаще, чем действие с 1, действие 4 с вероятностью в пять раз выше.
action prob
0 1
1 2 (twice as often than 1)
2 2
3 2
4 5 (5 times morer often than 1)
Есть ли известный алгоритм такого поведения или более математический подход?
Моя тестовая реализация несколько неудобна. Я бы предпочел избежать внутреннего цикла.
public static void main(String[] args) {
int[] counts = new int[5];
int[] props = { 1 ,2 ,2 ,2 ,5 };
int sum = 0;
for (int i = 0; i < props.length ; i++) {
sum += props[i];
}
for ( int i = 0 ; i < 100 ; i++ ) {
int rand = (int) (Math.random() * sum);
for ( int j = 0 ; j < props.length ; j++ ) {
if ( rand - props[j] <= 0 ) {
counts[j] = counts[j] + 1;
}
}
}
for ( int j = 0 ; j < props.length ; j++ ) {
System.out.println( "count " + j + "=" + counts[j] );
}
}
В зависимости от тестового прогона он дает такие результаты, как:
count 0=14
count 1=25
count 2=25
count 3=25
count 4=50