У меня есть эта программа, которая имитирует футбольный пенальти между 2 командами.
- Цель - 24 x 8 с координатой (0,0) в левом нижнем углу.
-В каждой команде по 5 кикеров и 1 вратарь (для удобства я назову 2 команды: команду А и команду Б)
- команда А - для кикера есть 5 стратегий (по одной на каждого), и5 стратегий для вратаря (потому что ему нужна стратегия для каждого кикера в команде B)
-Команда B - есть 5 стратегий для кикеров (по одной на каждого), и есть 5 стратегий для вратаря(потому что ему нужны стратегии для каждого кикера в команде A)
Стратегия для кикера - это координата (x, y) и значение силы.Координата - это место удара, а сила - насколько сильный удар.(Я объясню больше об атрибуте Power позже).Например, каждая входная стратегия для кикера будет выглядеть следующим образом: (1,2) 100 или (24,7) 25
Стратегия для вратаря - это координата и + Width и + Heightценности.Область покрытия вратаря - это прямоугольник, нижний левый угол которого (x, y), а верхний правый угол (x + ширина, y + высота).Например, (3,4) 5 5 Его нижний левый угол находится в (3,4), а (3 + 5,4 + 5) - его верхний правый угол прямоугольника (зона покрытия).
МАКС. ДИАПАЗОН ПОКРЫТИЯ - 25% ОТ ЦЕЛИ (программа проверит это)
Мощность: 0-24;удар не будет иметь ошибки;удар зона удара вратаря 100% спасброска Сила: удар 24-49 будет иметь 10% погрешности (- / + 10% ширины коора);Сохранение на 90% Мощность: удар 50-75 будет иметь ошибку 20%;Сила сохранения 80%: при ударе 76-100 будет ошибка 30%;Экономия 50%
ПРИМЕР ВХОДА: мощность должна быть 0-100, все остальные значения должны быть положительными целыми числами с 0- (2 ^ 7-1) TEAM A kicker: (14,3) 25 вратарь: (2,3) 4 4 (3,5) 50 вратарь: (1,1) 5,5 и т. Д ...
КОМАНДА Б: Кикер: (9,3) 75вратарь: (1,2) 5 5 (3,13) 100 вратарь: (2,3) 6 6 (при условии, что это не превысит 25% площади ворот и т. д. ...
Хорошо, это была программа симулятора
Теперь мне нужно создать GA, который придумал бы лучшую командную стратегию для симулятора.
Позвольте упростить задачу, чтобы каждый мог ее осмыслить:
Входные данные: -популяция (случайное создание n команды, например, если n = 5, 5 случайных команд создаются с атрибутом каждой команды, включая 5 страйкеров, 5 страйков вратаря)
Вывод: -лучшая командная стратегия (каждая команда будет играть друг с другом, и лучшая команда выбрана для следующей итерации, помните, что у каждой команды есть 5 страйкеров, 5 страйков вратаря)
Поэтому я ищу 1 решение послеll в поле n населения
Моя проблема заключается в том, как начать кодирование решений.Должен ли я кодировать решение как команда или как пара игрок / вратарь?
например, кодируя его как команду: Хромосома: = [игрок1, игрок2, игрок3, игрок4, игрок5, вратарь1, вратарь2, вратарь3, вратарь4,goalkeeper5]
class Player {
int
int
int
}
class Goalkeeper {
int
int
int
int
}
Или кодировать его в виде пары игрок / вратарь:
Chromosome:= [player, goalkeeper] = [x,y,power,x,y,weight,height]
Проблема, с которой я сталкиваюсь при таком кодировании, заключается в том, что я должен получить 5 лучших пар игрок / вратарь наконец, чтобы составить команду.
Другой вопрос - двоичное кодирование и кодирование значений.Допустим, я должен был пойти с парой игрок / вратарь, будет ли значение кодировки, подобное этой [x,y,power,x,y,weight,height] = [2,3,100,3,3,4,5]
, иметь больше смысла, чем двоичное представление [0010, 0011, 1100100, 0011, 0011, 0100, 0101] = [0010 0011 1100100 0011 0011 0100 0101].
Я бы подумал, что проще сделать кроссовер, а мутация представит его как двоичный код, не так ли?
Я просто пытаюсь собрать идеи, поэтому у меня есть с чего начать.
Заранее спасибо