Я не думаю, что есть "лучший" способ, чем то, что вы делаете, потому что описание проблемы довольно расплывчато, и неясно, действительно ли это проблема искусственного интеллекта или симуляции.
Для принятия решения обычно хорошо иметь простую эвристическую систему (основанную на вашем интуитивном понимании моделируемого поведения), которая представляет собой последовательность условных выражений с возможными случайными факторами, которые могут немного ее изменить. У вас может быть система взвешенного среднего, которая выбирает несколько вариантов, ранжирует их в соответствии с воспринимаемым качеством, а затем выбирает вариант случайным образом, в то же время ориентируясь на лучшие значения. (Это называется выбором колеса рулетки или фитнес-пропорциональным выбором в кругах генетического алгоритма, но также очень полезно за пределами GA.)
Для части моделирования вы обычно хотите смоделировать процесс, а затем ввести случайность для моделирования более тонких частей процесса. Это означает четкое определение ваших входных данных (сила удара сзади, направление шара, ...) и ваших выходных данных (вектор перемещения шара?), А также рассмотрение того, как они связаны друг с другом. Это означает, что вы получаете некоторые выходные данные известных значений, а затем вы можете изменить их с помощью генератора случайных чисел. Ситуация усложняется, если вы пытаетесь смоделировать выбор человека, а не просто физическое моделирование, поскольку это часто имеет приоритет над всеми другими входными данными.
Упрощенный пример, с которого я мог бы начать, - то, что ИИ игрока выбирает, куда он хочет ударить по мячу. Я рассчитываю предполагаемое направление мяча как вектор, который послал бы шар именно там, где и планировался. Затем система вычисляет показатель сложности от 0% до 100% на основе направления мяча, скорости, способностей игрока и т. Д. Я генерирую модификатор «неточность», который представляет собой случайное число от 0% до уровня сложности%, что означает очень простой Выстрел будет полностью точным, в то время как у полусложного выстрела будет точность от 0% до 50%. Затем я вычисляю случайный нормализованный трехмерный вектор единичной длины, масштабирую его по значению неточности и добавляю его в заданное направление. Это означает, что более сложные выстрелы будут иметь тенденцию лететь дальше от цели.