Прежде всего, это домашнее задание, так что не спрашивайте, почему это так надуманный, именно так, и это может быть только так. (Я получаю много «как насчет того, что вы что-то меняете»), извините ... я не могу.
Также я должен использовать эволюционные алгоритмы, это означает, что у родителей есть дети, они могут мутировать/рекомбинировать, формировать новые поколения и в конечном итоге приводить к решению.
/Отказ от ответственности
У меня есть n*2
слов длины п. Я должен сделать матрицу 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]
и т.п. (левая колонка и верхняя линия). Но у него есть ограничения, мне нужно подтвердить, что ориентация соответствует начальной позиции.
Проблема:
Хромосома должна быть возможно решением, тогда как это лишь часть раствора.
Поскольку мое решение должно быть матрицей, содержащей все слова таким образом, чтобы «соответствовать», хромосома также должна каким-то образом представлять всю матрицу. Но это несколько проблем. Я могу иметь только одно слово из одной начальной позиции в одной ориентации (кроме первых двух слов, они имеют одну и ту же начальную позицию с разными ориентациями). Я не вижу, чтобы это работало как действительный способ попытки эволюционного алгоритма. Я просто не вижу ни одной из фаз работы, особенно мутации/рекомбинации.
Я думаю об этом совершенно неправильно? Если так ... почему? и как я могу попытаться закодировать свои данные таким образом, чтобы позволить мне пройти через все этапы (воспроизведение, мутация/рекомбинация, естественный отбор ... возможность рассчитать пригодность и начать новое поколение), не имея тонны данные о мусоре (с двойным словом, потерять слово, сложить неверную ориентацию по сравнению с исходной позицией)?
EDIT
Я буду использовать это представление для реализации многих других алгоритмов вдохновленной природы, таким образом, мне нужно представление «хорошие» данных. Ничего временного, что могло бы повредить мне позже.
Я, честно говоря, не могу придумать хороший способ. Потому что у меня есть много ограничений (возможно, я слишком долго думал об этом, и я не могу пройти мимо них, и они, возможно, на самом деле не существуют). Мне бы очень понравилось двоичное представление, но это кажется невозможным.
Спасибо, очень много. Я прекрасно понимаю. Да, я знаю, что это далеко не лучший способ решения этой проблемы, но это ограничение (я должен сделать это таким образом). Это гораздо более легкие способы решения проблемы «clowned my vision». Я подумал о нескольких способах расчета фитнеса после добавления любой новой строки, но в итоге он оказался слишком сложным и (с моей ограниченной точки зрения) невозможно перевести в какой-либо эволюционный алгоритм. – Kalec
Проблема с этим подходом заключается в том, что фитнес-функция плохая (сильно прерывистая), поэтому она не лучше, чем случайная выборка. В этом примере каждый геном, за исключением двух решений, будет иметь степень 3. Даже в больших матрицах, где у вас могут быть геномы с физическими возможностями, отличными от n или 2n, они не будут никоим образом не связаны с решениями, поэтому объединение их не приблизится к решению. –
Лучшей функцией для фитнеса будет «Для каждого слова строки в матрице, сколько слов не в матрице в виде строк (но все же в наборе) может поместиться как столбцы с данным словом». Это даст пригодность от 0 до n^2 (решения). Что еще более важно, геномы, близкие к решению, будут иметь высокую физическую форму. –