Здравствуйте, uuu2, Вы писали:
U>* позднее была поставлена более простая задача — научить организм играть хотя бы в крестики-нолики. Было математически доказано, что такое обучение возможно и 4 Кб кода хватит для правильной работы такого организма. Однако "эволюция" этих организмов к успеху не привела.
Для такой задачи сложно проэволюционировать систему. 10 организмов не хватит точно, нужно десятки тысяч.
Проблема в том, что функция отбора изменяется неплавно с изменением генов. Эволюция с такими условиями работает плохо.
Вот что-нибудь аналоговое (типа алгоритма хождения по поверхности) — будет работать замечательно.
Здравствуйте, uuu2, Вы писали:
U>Монотонной функции тут явно не будет — алгоритм слишком сложный. И вообще, любой код состоит из команд процессора, как же ещё будет работать шахматная программа, без команд-то?
U>А для того, чтобы было меньше "шума", я и хотел "улучшать" организмы постепенно. Т.е. сначала они играют с простеньким "детским" движком, специально совершающим ошибки. Потом, он играет с противником на уровне 3-го разряда, и улучшает свой уровень. И так, постепенно, учится принимать правильные решения.
Я думаю обучения просто не происходило, даже в простейшем случае, на крестиках-ноликах. Представь конструкцию цикла например, ей нужно несколько взаимосвязанных опкодов. Допустим, мутация добавила половину этих опкодов, добавление второй половины сильно улучшит ИИ; даст ли половина какое-то преимущество? Она просто не будет работать, а значит в следующем поколении половина ценной эволюционной находки будет благополучно утеряна.
Если строить программу путем дописывания одной-пары команд, то для крестиков-ноликов, при правильном выборе опкодов сработает, но она будет перебором всех ситуаций на доске. Выглядеть она будет так:
IF ситуация-1 MOVE ход в такую-то клетку
IF ситуация-2 MOVE ход в такую-то клетку
сюда добавляются еще случайные команды
кончились команды, но игра еще идет — выигрывает тот, у кого позже кончились (т.е. длинее очередь)
Такая функция по мере удлинения программы правильными командами плавно приближается к правильному ИИ. Но это очевидно будет просто усеченным перебором.
Смысл генетического алгоритма, чтобы можно было заменить один ген и поменять одно свойство, не ломая остальные. Что нужно подкрутить, чтобы f1, f2, ..., fN превратилось в for i = 1..N f(i)? Для шахмат это необходимо, там перебор ситуаций не катит, даже для 4Гб генов. Проблема в том, что это должно случиться за одно поколение, сразу, скачком. Если по частям, то это движение в светлому будущему попадает во временную яму и будет сочтено неверным направлением. Надо чтобы каждый ген независимо от остальных плавно, любым изменением за одно поколение, мог приближать организм к победе; опкоды на роль генов как-то не подходят.
Кё>IF ситуация-1 MOVE ход в такую-то клетку Кё>IF ситуация-2 MOVE ход в такую-то клетку
Тогда получится база данных позиций и соответствующих им идеальных ходов. Вы знаете, сколько в шахматах возможно позиций? Ну а теперь оцените объём необходимой базы. А также машинное время, необходимое для накопления этой базы.
И потом, как определить, что ход в данной позиции идеальный? Ну, допустим, я выиграл партию за N ходов. Но это не значит, что все мои ходы были правильными! Вероятно, 80% ходов были совсем не идеальными, и при более серьёзном обдумывании можно было найти ход лучше.
Здравствуйте, uuu2, Вы писали:
Кё>>IF ситуация-1 MOVE ход в такую-то клетку Кё>>IF ситуация-2 MOVE ход в такую-то клетку
U>Тогда получится база данных позиций и соответствующих им идеальных ходов. Вы знаете, сколько в шахматах возможно позиций? Ну а теперь оцените объём необходимой базы. А также машинное время, необходимое для накопления этой базы.
Именно. Это вырожденная программа, зато работающий вариант. То, на что ты возлагал надежды, не могло сработать. Путем случайного мутирования строк нельзя написать даже простой вычислитель факториала из 1-го цикла, ибо цикл должен появиться сразу целиком, за одно поколение, а это не эволюция, это одномоментное угадывание; тогда как предназначение эволюции — постепенное приближение к идеалу от поколения к поколению.
Если ты сможешь придумать, как писать функции по шагам, так чтобы на каждом шаге они оставались работающими и выдавали все более точные результаты, только тогда твоя задумка с шахматами удастся.
Здравствуйте, Ellin, Вы писали:
E>Вобщем все это задумки... можно продумать основательно мне кажется. Вот только наверняка такое уже есть. Может подскажите где?
В целом я впечатлён идеей, что тысяча обезьян таки сможет написать "каису"
Если уж охота так эксперементировать, то я бы придумал другое представление программы. Какое-нибудь более оринетированное на предметную область. Хотя бы декларативное, что ли.
Скажем как цепочку слабейщих предусловий, или ещё как-нибудь декларативно.
Можно какой-то готовый декларативный язык взять или функциональный, например.
Но можно, в принципе, подумать, и родить какой-то свой интерпретатор. Грубо говоря, хорошо бы написать такую программу, чтобы любая последовательность байт интерпретирповалась ей, как корректный игрок в шахматы.
Тогда можно будет придумать адекватный способ скрещивания...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Ellin, Вы писали:
E>>Вобщем все это задумки... можно продумать основательно мне кажется. Вот только наверняка такое уже есть. Может подскажите где? E>В целом я впечатлён идеей, что тысяча обезьян таки сможет написать "каису"
Да мне много не надо. Достаточно обучить программу писать работающие программы по ТЗ
Здравствуйте, Erop, Вы писали:
E>Но можно, в принципе, подумать, и родить какой-то свой интерпретатор. Грубо говоря, хорошо бы написать такую программу, чтобы любая последовательность байт интерпретирповалась ей, как корректный игрок в шахматы. E>Тогда можно будет придумать адекватный способ скрещивания...
У меня вообщето планы весьма скромные... может я не правильно выразился... или попросту еще не устоялась формулировка.
Пусть есть мир и два типа насекомых, как здесь
Насекомые делятся на хищников и травоядных.
На карте, где они обитают есть земля с травой. которую едят травоядные и водой, которую для простоты никто не пьет и которую надо обходить.
Есть ряд характеристик у насекомых — может совершать рывки на такое то расстояние с такой-то скоростью, может двигаться бесшумно, может слышать шорохи, может различать движущиеся объекты на таком-то расстоянии, может обходится без еды столько-то, надо есть столько то чтоб наестся и т.п. и т.д. Здесь надо продумать набор этих параметров... многое выкинуть для простоты.
И самое главное!
Нейронные сетки У каждого зверька есть мозг . Так вот поведение зверька определяется сеткой... ну это можно сделать мне кажется... типа поступил сигнал со зрения — движущийся предмет там-то...(координаты пространства для простоты передаются...), нейронная сетка должна определить в какую сторону бежать... некоторые будут бежать в сторону хищника и соотв. исчезнут, некоторые убегать...
И цель. Как то так подобрать, чтоб со временем нейронная сетка хотя бы росла... нет я не говорю что искуственный интеллект получим это конечно упрется в какие-нить "оптимальные" 400 нейронов, определяющие поведение травоядного как зигзагообразное убегание от "рывками прыгающего" хищника с 300 нейронами... А изначально у них было, допустим по 20 нейронов...
Мне такого хватит, например... Хотя, конечно не факт что увеличение нейронов — плюсь... может даже они уменьшатся начнут...
Вобщем поковырятся можно... Вот только хорошобы какой-нибудь базис в виде API... или может готовых прог...
Это готовое, практическое решение. А мне хотелось бы забацать подобную (путь и более простую) штуку самостоятельно, чтобы хотя бы примерно понять, как это всё программируется и что я делал неправильно.
M>Вот график за последнее время Надо узнать, сколько будет завтра. Ну или через час, или через месяц. Можешь "насекомых" озадачить этим делом. Кто сильнее ошибся, тот и умер.
Все перемрут.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Генетические алгоритмы
От:
Аноним
Дата:
07.05.08 10:06
Оценка:
Здравствуйте, machine3000, Вы писали:
M>Вот график за последнее время Надо узнать, сколько будет завтра. Ну или через час, или через месяц. Можешь "насекомых" озадачить этим делом. Кто сильнее ошибся, тот и умер.
Брутально звучит
Я пробовал такие вещи делать. В лучшем случае удастся добиться 55-60% удачных сделок. Маловато однако. Так Баффетом не стать
Здравствуйте, Аноним, Вы писали:
А>Я пробовал такие вещи делать. В лучшем случае удастся добиться 55-60% удачных сделок. Маловато однако. Так Баффетом не стать
Где-то читал что уже сейчас 30% сделок на бирже совершается роботами. А через 10 лет, типа, будет 100.
Хотелось бы самому тоже попробовать. Так, блин, чтоб тело бренное прокормить, на работе всякой туфтой приходится заниматься. А по выходным ничего серьёзного сделать не успеешь.
- У вас закипает, — сказала флегматичная Петина мама.
— Да! У меня закипает чувство справедливого негодования по поводу нашего так называемого воспитания молодежи, которое приводит только к ...
— У вас закипело молоко, — сказала менее ленивая Сережина мама...
Все, что здесь сказано, может и будет использоваться против меня.