2010-11-30 1 views
1

В настоящее время я работаю над игрой, в которой каждая единица имеет ценность для здоровья, щитов и маневренности, а также определенное количество шести типов оружия.Вычисление значения единицы в игре

например. Блок B состоит из двух лазеров, 2 тяжелых лазеров и 1 ракетной установки, без ионного бластера, без взрывчатых веществ, без ядерных ракет, 5 здоровья, 2 щита и 40 маневров.

Я прошел через 20 различных алгоритмов, пытаясь заставить MS Excel сбалансировать эти все эти факторы, чтобы дать кораблю оценку. Мой текущий алгоритм отлично работает для некоторых из меньших единиц, но очень неуравновешен с большими единицами

Каждый корабль имеет значение урона, при котором каждый тип оружия умножается на повреждение этого оружия и складывается вместе.

damage = weapon1*damage1 + weapon2*damage2 + ... 

Ущерб умножается на здоровье + 2 * щит + 2 * ловкость. Ловкость и щит умножаются, чтобы дать им вес над здоровьем (единица не может потерять здоровье, если ее не ударить). Я также вычитаю стоимость единицы. Таким образом, мое текущее уравнение для одного из моих единиц выглядит следующим образом:

value = damage*(health + 2*shield + 2*agility) - 3*cost 

Вот некоторые примеры:

  • Unit 1 - 1 лазер 1 здоровья, 93 маневренности, а также расходы 1. Общий балл 233
  • Блок 2 - 2 лазера, ракетный пусковой аппарат и 3 здоровья, но только 76 ловкость. Оценка 200.
  • Блок 3 - 6 лазеров, 30 здоровья и 15 щитов, 37 маневренности - забивает 585.

Я хочу партитуры блока 3, чтобы быть выше, но баллы для блоков 1 и 2 довольно хороши. Может ли кто-нибудь предложить лучшее уравнение, которое сгладит значения?

+1

Вы не очень поняли свою цель здесь. Вы пытаетесь балансировать единицы, изменяя ущерб, нанесенный каждому оружию? Или это количество различных видов оружия каждого корабля? Или их стоимость? Или что-то еще? ... – ktdrv 2010-12-01 00:46:46

+0

Каждый блок имеет различное количество оружия, которое наносит одинаковый урон (за оружие) - вот почему F ... L умножается на N58 ... N64. Проблема заключается в том, что = ROUND (W * (M + 2N + 2O), 0) -3R подходит для значений, больших для более низких единиц, но смехотворно высоких или низких для лучших единиц. Я ищу лучшую формулу, которая сгладит эти удары. – 2010-12-01 17:20:06

ответ

1

Я думаю, что алгоритм genetic programming - это хороший подход к решению проблемы, которую вы описываете. Генетическое программирование развивает вычисления алгоритма с помощью итерации для минимизации функции затрат. Это делается путем создания набора «мутаций» для применения к алгоритму, например, ваша идея уменьшения стоимости единицы как 3R может быть одной из мутаций. Функция стоимости будет чем-то, что увеличивается/уменьшается относительно концепции баланса. Мутации будут оцениваться с учетом этой функции затрат.

Для этого решения проблемы см. Книгу Programming Collective Intelligence для кода Python.

1

Эта проблема аналогична моей cloud balancing example (с открытым исходным кодом, java). Просто замените Computer by Unit и Process by Weapon.