Отказ от ответственности
Прежде всего, это для домашнего задания, так что не спрашивайте, почему это так надумано, это так и может быть только так. (я получаю много "а как насчет того, чтобы что-то изменить"), извините... я не могу.
Также я должен использовать эволюционные алгоритмы, то есть у родителей есть дети, они могут мутировать/рекомбинировать, формировать новые поколения и в итоге приводить к решению.
/Отказ от ответственности
У меня есть n*2
слов длины n. Мне нужно составить матрицу n^2
, содержащую все эти слова. Слова могут быть тарабарщиной, но они должны помещаться в эту матрицу (это требование со стороны пользователя).
Таким образом, AGE,AGO,BEG,CAB,CAD,DOG
даст мне этот результат (1 из как минимум 2 возможных):
C A B
A G E
D O G
Я должен использовать эволюционный алгоритм. Поэтому мне нужно найти способ закодировать мою информацию в хромосоме.
Что я придумал:
Каждое слово должно появиться, иметь начальную позицию в матрице и ориентацию (слева-направо или вверх-вниз). Таким образом, у меня есть [Word][Orientation][StartPosition]
, где начальная позиция [0][0]
/[0][1]
/[1][0]
и т. д. (левый столбец и верхняя строка). Но у него есть ограничения, мне нужно проверить, соответствует ли ориентация начальной позиции.
Проблемы:
Хромосома должна быть возможным решением, тогда как это только часть решения.
Поскольку мое решение должно представлять собой матрицу, содержащую все слова таким образом, чтобы «соответствовать», хромосома также должна каким-то образом представлять всю матрицу. Но это затрагивает несколько проблем. У меня может быть только одно слово из одной начальной позиции в одной ориентации (кроме первых двух слов, они имеют одну и ту же начальную позицию с разными ориентациями). Я не вижу, чтобы это работало как действенный способ попытки эволюционного алгоритма. Я просто не вижу, чтобы какая-то из фаз работала, особенно мутация/рекомбинация.
Я думаю об этом совершенно неправильно? Если да... то почему? и как я мог попытаться закодировать свои данные таким образом, чтобы позволить мне пройти через все фазы (воспроизведение, мутация / рекомбинация, естественный отбор ... иметь возможность рассчитать приспособленность и начать новое поколение), не имея тонны мусорные данные (слово появляется дважды, теряется слово, слово имеет неправильную ориентацию по сравнению с его начальной позицией)?
ИЗМЕНИТЬ
Я буду использовать это представление для реализации многих других алгоритмов, вдохновленных природой, поэтому мне нужно «хорошее» представление данных. Ничего импровизированного, что могло бы навредить мне позже.
Я, честно говоря, не могу придумать хороший способ. Потому что у меня много ограничений (может быть, я слишком долго думал об этом и не могу обойти их, а может, их и нет на самом деле). Я бы очень хотел двоичное представление, но это кажется невозможным.