Здравствуйте, Anpek, Вы писали:
A>Я делал такое. Ну ползают, ну скрещиваются, ну передают свои гены детям, ну едят. И дальше чё? ИИ не появился
Причем тут ИИ? ГА это метод оптимизации. Правильное применение генетического алгоритма приводит к подбору удачного сочетания параметров (генов), удовлетворяющих условиям отбора, только и всего. Превзойти условие отбора (да еще так, чтобы создателю понравилось ) генетика в принципе не может.
uuu2: Чтобы ГА сделал вам ИИ, надо сформулировать такую функцию y = f(X), которая как можно более монотонно себя ведет при изменении каждого из параметров. Если параметры это команды процессора, то изменение одной полностью ломает всю программу, функция получается практически рандомным шумом. Это наихудшие условия для любого метода оптимизации. Вряд ли существует метод оптимизации, который может справиться с функцией такого вида
***
*** * *
*** ****** ********
Любые попытки будут не более чем случайными выстрелами в надежде однажды попасть, ГА тут ничего не даёт. Перебор будет быстрее.
Здравствуйте, Кодёнок, Вы писали:
Кё>Любые попытки будут не более чем случайными выстрелами в надежде однажды попасть, ГА тут ничего не даёт. Перебор будет быстрее.
Здравствуйте, uuu2, Вы писали:
E>>А что за команды? Свои какие-то? Или типа.... машина Тьюринга. Ну я не знаю... как было то?
U>Свои — имитация машинного кода. Команда состояла из 17 байт (1 байт команды и четыре 4-байтных числовых параметра). U>Команд было немного — типа "IF-THEN-ELSE", "GOTO", "MOV" и т.п. Были "ячейки памяти" для текущей позиции, а также 2 байта для выходного "ответа" (т.е. организм заносил в ходе своей работы какие-то значения в эти 2 байта, и это интерпретировалось как ход).
Здравствуйте, Ellin, Вы писали:
E>Появилась идея написания некоторого мира в котором живут некоторые организмы, обладающие какими-то характеристиками. Например, они могут ползать по какой-то поверхности, чем-то питаться, умирать и т.п. E>На основе генетического алгоритма они скрещиваются... E>Вобщем все это задумки... можно продумать основательно мне кажется. Вот только наверняка такое уже есть. Может подскажите где?
Тему интересную вы подняли. Да еще и в таком свете.
Давно хотел с ГА разобраться.
Накидайте мни пожалуйста ссылок на тему "что такое ГА" с примерами было бы вообще великолепно.
Спасибо.
Здравствуйте, nen777w, Вы писали:
N>Тему интересную вы подняли. Да еще и в таком свете. N>Давно хотел с ГА разобраться. N>Накидайте мни пожалуйста ссылок на тему "что такое ГА" с примерами было бы вообще великолепно. N>Спасибо.
Просто с ген. алгоритмом плотно столкнулся и разобрался летом 2006... пришлось... там решалась одна задача на его основе. Все лето ушло... но там сильно много специфики... зато видимо хорошо разобрался...
А так я сейчас посмотрел... может в википедии вам подсказать? Даже и не знаю где хорошие источники найти, что ни найду — все какое-то ... в молоко...
Предлагаю в википедию сходить для начала.
Скрещивания не было, было клонирование. Т.е. 2 "победителя" дублировали сами себя по 4 раза, а потом в "клоны" добавлялась небольшая (порядка 20 байт) случайная мутация. 8 "проигравших" (самых плохих игроков) уничтожались.
Кё>uuu2: Чтобы ГА сделал вам ИИ, надо сформулировать такую функцию y = f(X), которая как можно более монотонно себя ведет при изменении каждого из параметров. Если параметры это команды процессора, то изменение одной полностью ломает всю программу, функция получается практически рандомным шумом.
Монотонной функции тут явно не будет — алгоритм слишком сложный. И вообще, любой код состоит из команд процессора, как же ещё будет работать шахматная программа, без команд-то?
А для того, чтобы было меньше "шума", я и хотел "улучшать" организмы постепенно. Т.е. сначала они играют с простеньким "детским" движком, специально совершающим ошибки. Потом, он играет с противником на уровне 3-го разряда, и улучшает свой уровень. И так, постепенно, учится принимать правильные решения.
Кё>>uuu2: Чтобы ГА сделал вам ИИ, надо сформулировать такую функцию y = f(X), которая как можно более монотонно себя ведет при изменении каждого из параметров. Если параметры это команды процессора, то изменение одной полностью ломает всю программу, функция получается практически рандомным шумом.
U>Монотонной функции тут явно не будет — алгоритм слишком сложный. И вообще, любой код состоит из команд процессора, как же ещё будет работать шахматная программа, без команд-то?
В простейшем случае программа просто выбирает из всех ход, приводящий к наилучшей позиции. Оценка позиции производится путём домножения на веса и суммирования различных показателей. Собственно, эту функцию и имеет смысл подбирать генетическим алгоритмом.
Более продвинутая версия должна выбирать ход, приводящий к наилучшей позиции через серию ходов. Для оценки того, как долго просчитывать каждую ветвь используется другая функция, определяющая насколько позиция устойчива. Её тоже можно подбирать ГА. Ну а всё остальное надо просто тупо захардкодить.
M>В простейшем случае программа просто выбирает из всех ход, приводящий к наилучшей позиции.
Что значит "к наилучшей позиции"? Если я сдам своего ферзя — это хорошая позиция или нет? А если в результате сдачи фигуры я поставлю мат через 5 ходов?
M>Оценка позиции производится путём домножения на веса и суммирования различных показателей. Собственно, эту функцию и имеет смысл подбирать генетическим алгоритмом.
Тогда мне придётся самому придумывать показатели, а генетический алгоритм (ГА) только манипулирует весами. Это уже не ИИ! Я хочу чтобы ГА сам сформировал показатели и веса, чтобы он мог в ходе эволюции добавлять новые показатели, избавляться от ненужных и т.п.
U>Тогда мне придётся самому придумывать показатели, а генетический алгоритм (ГА) только манипулирует весами. Это уже не ИИ! Я хочу чтобы ГА сам сформировал показатели и веса, чтобы он мог в ходе эволюции добавлять новые показатели, избавляться от ненужных и т.п.
Так, стоп. ГА, несмотря на свое громкое название, — это всего лишь один из методов оптимизации, то есть это алгоритм поиска набора параметров некоторой функции, на которых эта функция достигает оптимума. Не более того. Соответственно, чтобы применить ГА надо свести задачу к функции f(X1, X2, ..., Xn)
Здравствуйте, uuu2, Вы писали:
U>Тогда мне придётся самому придумывать показатели, а генетический алгоритм (ГА) только манипулирует весами. Это уже не ИИ! Я хочу чтобы ГА сам сформировал показатели и веса, чтобы он мог в ходе эволюции добавлять новые показатели, избавляться от ненужных и т.п.
Ну когда мощность компьютеров порядков на 40 выростет, может у тебя чего-нибудь и получится. Хотя нет, чтоб получилось, механизм мутаций также должен быть подвержен мутациям. А такие мутации, как ты описал, любой механизм сразу выводят из строя.
V>Так, стоп. ГА, несмотря на свое громкое название, — это всего лишь один из методов оптимизации
Это вопрос терминологии. Ну, назовём это не "генетическим", а "эволюционно-интеллектуальным" алгоритмом. Смысл в том, что создается "живой" организм, который выполняет некую задачу, идеальный алгоритм решения которой не известен, постепенно обучается и проходи "искусственный отбор" по критерию успешности решения задачи.
Здравствуйте, uuu2, Вы писали:
U>Это вопрос терминологии. Ну, назовём это не "генетическим", а "эволюционно-интеллектуальным" алгоритмом. Смысл в том, что создается "живой" организм, который выполняет некую задачу, идеальный алгоритм решения которой не известен, постепенно обучается и проходи "искусственный отбор" по критерию успешности решения задачи.
Чем это отличается от простого полного перебора всех возможных комбинаций элементов живых организмов? Только скоростью. И то не факт. ГА (эволюционный) может работать быстрее только при выполнении ряда условий. Одним из таких условий является то, что "яблоко от яблони должно недалеко падать". Другими словами, функция эффективности должна быть гладкой. То есть f(x) — f(x + delta) должно стремиться к нулю, если delta стремиться к нулю. Потомок должен быть почти таким же, как его родители. Отсюда следует, что ГА не будет работать на мутациях компьютерной программы. Вообще, добиться выполнения этого условия очень трудно. И если это сделать, то пропадает вся "романтика" и "волшебство" эволюционных алгоритмов
V>Чем это отличается от простого полного перебора всех возможных комбинаций элементов живых организмов? Только скоростью.
Угу. Скоростью. И ещё тем, что я смогу проследить всю эволюцию организмов и сделать выводы о законах эволюции, скорости эволюции, образовании тупиковых ветвей и т.п. Это позволит улучшить и ускорить эволюцию для других (более сложных) задач, например при создания ИИ для сложных стратегический игр, систем распознавания образов...
V>Потомок должен быть почти таким же, как его родители. Отсюда следует, что ГА не будет работать на мутациях компьютерной программы.
Именно такой вывод я и сделал. Правда, есть ещё одна мысль — смоделировать некую нейронную сеть. Т.е. в "мозге" расположены нейроны (точки с координатами x,y,z). Часть нейронов являются рецепторами (туда поступает информация о расположении фигур на доске, о времени на часах и т.п.). Часть — "двигательными" (выполняют движение фигуры после обдумывания). Между нейронами протянуты "нити", по которым проходят сигналы. При этом нейроны сгруппированы нитями в "группы" (участки мозга), хотя есть нити и между разными группами.
Сигналы могут проходить одновременно по многим нитям. Время прохода по нити зависит от её длины (т.е. расстояния между нейронами). Сигналы могут иметь разную силу, при одновременном попадании нескольких сигналов на нейрон, они могут накладываться друг на друга и усиливаться). Работа мозга происходит небольшими "тиками" (за тик сигнал проходит единичное расстояние).
В ходе эволюции, в основном, мозг сохраняет структуру. Немного (в пределах 0.1%) изменяются связи, добавляются/исчезают некоторые нейроны. Связи меняются, в основном, не сильно (на соседние нейроны).
Здравствуйте, uuu2, Вы писали:
U>Сигналы могут проходить одновременно по многим нитям. Время прохода по нити зависит от её длины (т.е. расстояния между нейронами). Сигналы могут иметь разную силу, при одновременном попадании нескольких сигналов на нейрон, они могут накладываться друг на друга и усиливаться). Работа мозга происходит небольшими "тиками" (за тик сигнал проходит единичное расстояние).
U>В ходе эволюции, в основном, мозг сохраняет структуру. Немного (в пределах 0.1%) изменяются связи, добавляются/исчезают некоторые нейроны. Связи меняются, в основном, не сильно (на соседние нейроны).
Здравствуйте, Ellin, Вы писали:
E>Вобщем все это задумки... можно продумать основательно мне кажется. Вот только наверняка такое уже есть. Может подскажите где?
Естественно. Тысячи работ, не меньше.