Pull to refresh

Comments 36

В smekni.txt находится посредственная реализация алгоритма bozosort — "проверить, не отсортирован ли массив — если нет, то поменять местами два случайных элемента; повторять до просветления", сложность по времени O(N!) в среднем. Каким образом плохой алгоритм сортировки скажет что-либо о самоизменениях?
Вы не поняли идею. Другой алгоритм, теоретически, может распознать его и исправить.
В этот момент ваш код из самомутирующего разделится на две части — мутируемый и оценивающий. Как, собственно, сейчас регулярно и делают.
"Или чего не может «Lisp»" — лисп, точнее некоторые его реализации (SBCL точно), умеет функцию save-lisp-and-die, т. е. может сохраняться в тот же исполняемый файл, из которого был запущен.

З.Ы. Глянул на код, немного поднял себе настроение. Советую присмотреться к генераторам лексических/синтаксических анализаторов для парсинга вашего языка (yacc, bison, lemon, antlr и прочие).
редактировать собственный алгоритм… именно эта возможность является необходимой и достаточной для существования… искусственного интеллекта.

Обучающиеся системы не меняют свой алгоритм, они меняют реакцию на входные данные. Алгоритм обучения и функционирования всегда один и тот же.

В самоизменяющихся программах нет ничего нового. Любой полиморфный вирус меняет свой машинный код в процессе работы. Также генерацию кода можно сделать в любом языке, в котором есть функция eval().

Программа, генерирующая рандомные арифметические операции, не является примером самообучаемой. Потому что нет цели обучения и метода определения, обучилась или нет.
Добавлю личное мнение. Автор, прекратите, пожалуйста, писать ерунду (я про статьи). Если напишете что-то полезное на своем языке — тогда другое дело.
«Самоирония» автора очень похожа на таковую у Терри Дэвиса. Не понятно, насколько автор всерьёз относится к тому, что рассказывает, и не понятно, насколько такой вопрос вообще имеет смысл.
UFO just landed and posted this here
UFO just landed and posted this here
<sarcasm>
    Хм. А ту статью и сайт точно сделал не ИИ на данном языке в процессе своего саморазвития и самообучения?
</sarcasm>
Оказывается может. Но я ему ещё покажу… :)
А можно "ему" показать интерпретатор "автора" на "авторе"?
Вы про мою библиотеку "Velosiped"? Которую я написал в качестве любопытного эксперимента.
//Так выглядел бы язык, будь он написан на самом себе.
Возможно… Я еще не видел описания данного Velosiped'а в ваших статьях...
Я недавно на хабре. Также как и вы хотел просто поделиться своей разработкой — библиотекой связывания (binding) данных для JavaScript. И что вы думаете? Вместо "Молодец! Так держать!" лишь гора отрицательных комментариев в стиле "зачем это нужно, если уже есть вот это". А буквально вчера на почту приходит сообщение "Спасибо за вашу библиотеку! Как раз то, что я и искал!". Было очень приятно, что кто-то наконец оценил по достоинству возможности моей библиотеки.

В общем, что я хочу сказать: вы зря так скептически относитесь к собственной разработке. Ваши идеи, повторюсь, заслуживают и внимания, и проработки. Однако пока еще, как мне кажется, рано ими делиться: все достаточно "сыро" и требуется еще немало работы, чтобы придать более-менее интересный вид и прикладной характер. Мне кажется, что сейчас вам нужно попробовать найти какую-нибудь область, в которой в силу тех или иных причин именно ваши разработки будут как нельзя кстати.
Хватит ныть уже. Без негативной критики вообще никакого прогресса не будет. Вы библиотеку писали ради похвалы?
Критика должна быть конструктивной. А когда человек разработал свой язык (!), а большинство вам подобных обрушивается на него в стиле "зачем вы это сделали, есть же Lisp?" — такая критика никакому прогрессу не способствует.
такая критика никакому прогрессу не способствует.

Почему же. В половине случаев можно просто выбросить свой язык и применять вместо него что-нибудь из посоветованного, что позволит успешно решить исходную задачу с меньшими усилиями. Во второй половине случаев можно посмотреть на предложенные языки и научиться у них полезному.
Вам написали кучу комментов со вполне конструктивной критикой. Если вы ожидали похвал, то неудивительно, что эта критика не воспринялась.

Ну а в написании своего языка нет ничего сложного. Другой вопрос, зачем это делать? Новые языки, которые реально полезны, разрабатывают обычно для какой-то конкретной цели. Разрабатывать язык ради самой разработки хорошо только для самообразования (и то не всегда).
Порой мне было очень сложно. Особенно на моменте преобразования структуры схемы алгоритма в текст программы, веди условия и циклы нужно как-то распознавать, а они могут быть как угодно вложены, с переходами по breace, continue, breake 2...
Модель памяти в java — вот это сложно. Но при этом несёт большую практическую пользу.
А придумать какую-то якобы фичу (бесполезную с практической точки зрения) и с трудом её реализовывать — как-то глупо. Вон на Malbolge тоже трудно программы писать.
Не текст программы, а именно алгоритм

Именно алгоритм, а не дерево синтаксического разбора?

Итак, вот «самый простой» пример программы, которая пытается учиться

Чему учится эта программа?
Полезному — ничему. Но она имеет меру развития, меру обучения, которую проще всего понять.
Полезному — ничему

А бесполезному? Как вы отличаете "обучилась" от "изменилась"?
Философский вопрос :) всё упирается в понятие "польза".
Иными словами, не отличаете. Вот поэтому ваша программа и не учится ничему.
На мой взгляд, именно эта возможность является необходимой и достаточной для существования самообучающихся программ

Вместо пустых и довольно глупых заявлений лучше почитайте про нейронные сети, например. Для обучения необходимы данные. При чём тут исходный алгоритм самой программы? Если же рассматривать саму программу, как данные, то обучение может привести лишь к оптимизации самой программы. Но все компиляторы это и так умеют. А JIT-компиляторы делают это как раз в рантайме.
К слову, нейронные сети, как пример обучающихся программ, можно реализовать даже на языках, где из коробки нет AST-преобразований в рантайме. Например, на C.
Да, но данные нужно задать на каком-то языке. Одна программа может пытаться оптимизировать другую, преобразовать её эвристические алгоритмы в совершенные. Поймите меня правильно, поймите :)
UFO just landed and posted this here
"Поймите меня правильно" — как бы говорит алгоритм своим наблюдателям, которые хотят его оптимизировать).
Получается язык умоляющих алгоритмов :)
Или чего не может «Lisp»

Перед тем как писать что-то подобное, стоит сесть и выучить язык, начать на нем писать, написать что-то нетревиальное.
Писать свой велосипед язык — хорошо. Вы — молодец.
Думать при этом, что Ваш велосипед язык умеет что-то,
… чего не может «Lisp»
Дилетантизм.

Ну так Лисп точно не может, согласитесь:

Редактор схемы алгоритма и демонстрация простейших самотрансформаций алгоритмов:
27) https://youtu.be/T2u9t96g25Y

Sign up to leave a comment.

Articles