← Архив: Common Lisp

Бесконечный проект

Author: · 21.05.2013 01:52
· original author: PavelZ
    Несколько лет уже как, занимаюсь проектированием виртуального мира и игры на его основе. Перепробовал множество инструментов, начиная делать некоторые элементы проекта и бросая, чувствуя, что иду может и в верном направлении, но отдачи от своего труда почти не видно. В очередной раз решил сменить инструментарий и вот знакомлюсь с возможностями CL. Забегая вперёд, скажу, что не мог раньше найти возможность реализовать свои идеи используя минимум инструментов, современные реализации CL же (конкретно смотрю в сторону SBCL, поэтому и обратил внимание на этот сайт) дают возможность решить большинство задач серверной части проекта в пределах одной среды. Дополнительно смотрю также в сторону GT.M для организации БД.
Проект был изначально задуман как полигон для проверки и реализации разных подходов к созданию искусственного интеллекта (ИИ).
Есть некоторая концепция построения архитектуры проекта, которую я стремлюсь реализовать. Все эти пункты не привязаны к конкретным технологиям программирования. У меня не стоит задача добиться результата любой ценой, а подобрать наиболее удобные инструменты для реализации.
  1. В распределённой базе данных хранятся не только данные: константы, статичные и динамические данные, отражающие текущее состояние зарегистрированных в системе объектов, стандартные определения сущностей виртуального мира, но и как простые функции, алгоритмы, так и часто используемые составленные из них программы. Объекты виртуального мира имеют наборы постоянных и изменяемых свойств, возможность применения функции (алгоритма) к объекту (или сущности) зависит от комбинации этих свойств и диапазона их состояний.
  2. Децентрализованная система менеджеров обработки событий, запускающая экземпляры обработчиков событий в соответствии с потребностью системы (возникновение новых событий) прекращающая их деятельность при простое либо зависании (бесконечной рекурсии), а также осуществляющая сравнение версий обработчиков событий на устойчивость и эффективность работы. Основная задача менеджеров, распознать возникновение нового события и запустить подходящий обработчик.
  3. Обработчики событий не содержат в себе сложных функций и алгоритмов, а поэтому имеют небольшой объём кода, обработка события происходит за счёт выборки функций из баз данных (вместе с данными о состоянии взаимодействующих объектов) и комбинирования их между собой в зависимости от решаемой задачи. Применённые комбинации функций и использованные данные кэшируются в оперативной памяти для ускорения доступа к постоянно используемым данным и функциям. Некоторые, наиболее удачные, комбинации сохраняются в базе данных, как результат самообучения системы.
  4. Система не будет содержать больших программ. Каждая программа (менеджер системы, обработчик события) легко модифицируется. Любая функция может меняться на лету, может иметь варианты (версии) по быстродействию и точности. Данные доступны для любого обработчика событий, что позволяет менять логику работы элементов системы на ходу. Добавил новый алгоритм (функцию) и определённое событие может обрабатывается по новому алгоритму. Каждое событие обрабатывается своим экземпляром обработчика, взаимодействие обработчиков между собой возможно только через данные в базах (либо в кэше этих данных).
  5. Для повышения быстродействия системы прилагаются максимальные усилия для оптимизации кода на выполнение параллельных вычислений. Основная вычислительная мощь направляется на ускорение вывода и ввода данных в СУБД. Предполагается использование иерархических СУБД. Для повышения быстродействия и устойчивости системы, виртуальный мир делится на логически обособленные группы объектов (звёздные системы, крупные объединения индивидов, возможно даже отдельные высокоразвитые планеты) которые обслуживаются своим комплектом менеджеров системы и СУБД.
  6. Каждое действие над объектами документируется средствами СУБД, что позволяет на основе журналов обращений к базе и модификации значений просматривать историю. Создание новых объектов жёстко контролируется (любой объект создаётся только при наличии необходимых условий, обусловленных законами виртуального мира). При физическом уничтожении экземпляра объекта, записи о нём не уничтожаются, а просто записывается, что объект был уничтожен когда и по какой причине. Параллельно формируются либо отходы либо другие объекты в которые может переродится данный объект и энергия, обеспечивая постоянство энергия -- материя в виртуальном мире. Энергетический эквивалент является основой экономики игры.
  7. Обработчики событий используют логику основанную на четырёх состояниях, это как бы некий минимум нечёткой логики: неизвестно, среднее, положительно, отрицательно (вдобавок к этим четырём значениям, будут два коэффициента используемых в расширенных алгоритмах и реализуемых "обычными" числами: коэффициент достоверности знания и степень приближенности значения) для реализации элементов игрового ИИ. В перспективе возможно создание и использование аппаратных ускорителей ИИ на основе квадрологики.
  8. Игровой ИИ компьютерных персонажей, а также систем управления различными искусственными объектами виртуального мира, строится по трёхуровневой основе: действия, занятия и цели жизнедеятельности, за каждый из уровней отвечает свой комплект обработчиков событий, основанный на разных алгоритмах. Причём формирование целей жизнедеятельности для отдельных (продвинутых) индивидов, на основе комплекса их характерных черт и накопленного опыта, обеспечивает автогенерацию сюжета игры. Другие компьютерные персонажи, автономные роботы и системы управления транспортными средствами будут заниматься тем, чем прикажут их основная цель жизнедеятельности будет подчинением.
К примеру очень понравилось, что есть CL библиотека, которая подобно Erlang позволяет создавать множество агентов. Можно реализовать логические вычисления подобно Prolog, достаточно описать соответствующий DSL. И прочее, что пока для меня не столь очевидно, но интуитивно возможно благодаря особенностям объектной системы и макросов CL.
· original author: dmitrys99
Круто!
Вопрос в чем? :)
· original author: PavelZ
Вопросов вообще-то множество. У меня плоховато с английским, а русской документации по программированию очень мало... В основном переводы устаревших уже технологий. Ладно, это всё лирика.
Мне нужно сделать веб интерфейс конструкторов объектов виртуального мира, для работы с базой данных. Как я понял (по данному сайту) на CL есть возможность запустить вебсервер, существует фреймворк для построения веб сервисов. Но вот работу с БД на GT.M, организовать из CL библиотек нет, придётся разбираться как переделать под CL вот эту прогу, по аналогии с тем как она работает с другими языками, есть ещё такой вариант, но он также рассчитан на другие языки. В первом случае автор наш соотечественник и можно будет надеяться на какую-нибудь помощь, кстати он автор книги по M/MUMPS.
Пока только начал читать руководства по CL, поставил SBCL, Emacs, Slime (на Windows, проект будет делаться под Linux), пробую примеры набирать. Так что я совсем совсем начинающий.
Один из вопросов, к примеру, как перевести некоторый код с другого языка на CL.
· original author: dsorokin
А опыт создания проектов средней или большой сложности имеется? Это ключевой момент. Сам язык для сложных проектов не настолько важен, хотя CL хорош. Что касается переписывания, то я успешно перенес большую часть своего кода из Scala на лисп.
· original author: dmitrys99
Правильный вопрос задал dsorokin.
Еще один - программировать умеете?
Не троллинга ради, а чтобы представлять уровень собеседника, потому как новичок и профи - несколько разные собеседники.
(хотя если человек знает про Cache/MUMPS, все же должен быть не новичок)
Если умеете - поставьте задачу написать драйвер к БД на Лиспе. Все изучите.
Google в помощь
· original author: PavelZ
Как раз сейчас и озадачился сделать драйвер к GT.M, но опыта подобной работы не имею. С Cache/MUMPS познакомился случайно пару лет назад, когда устроился в поликлинику веб программистом.
В общем если честно программист я не очень. Последнее время много читаю по теме, но программирую очень мало. Не так давно познакомился с Питоном, но его возможности меня не впечатлили. (Сделал пару сайтов на Джанго, несколько простых программок написал.) В школе ещё, а потом на первых курсах института писал программы на Фортране, Паскале и Бейсике. Но потом в основном занимался электроникой и автомобилями, а в последнее время вообще в строительство подался. Программирование было для меня больше как хобби. Единственно занимался вебом пару лет, но делал сайты на Друпале, где писать код почти не требуется.
Заниматься робототехникой и программированием ИИ моя мечта, но работы (заработка) в этом плане практически найти невозможно, вообще в Хабаровске только 1С программисты требуются (сисадмины и вебмастера ещё иногда в вакансиях проскакивают, но это всё не то). Сейчас вот время есть некоторое, хочу вернуться к работе над проектом.
Вкратце могу сказать, что я пока больше теоретик и практики у меня очень мало. В основном, с чем работал серьёзно по теме, это администрирование серверов и СУБД.
По проекту из наработок только много текста и табличек. То что делал на Питоне и Постгрессе удалил, так как посчитал что эти работы ведут меня в тупик. На этом сайте можно почитать, что насочинял. (Надо продлить домен, возможно какое-то время сайт будет недоступен после 25.05, пока найду деньги.)
Первоначально надеялся собрать команду, привлекая к проекту молодёжь. Потом рассчитывал на удачу в бизнесе, чтоб нанять профессионалов. Сейчас эти надежды рухнули и просто занимаюсь проектом для фана, понимая, что огромный проект без денег и уникальных лидерских способностей не потянуть. Осталась надежда, что дети подрастут и смогут помогать мне.
В Лиспе понравилось, в первую очередь то, что код и данные имеют одинаковую структуру. Как я понял это уникально и в других языках нет такого удобного свойства упрощающего метапрограммирование.
· original author: dmitrys99
Потратьте для начала силы/время на книги по Лиспу.
PCL, On Lisp, ANSI Common Lisp, Let Over Lambda.
Эти усилия многократно окупятся.
· original author: PavelZ
Первую как раз читаю там где про макросы рассказывается :)
Параллельно думаю на каком нибудь старом компьютере установить Linux и настроить веб сервер на Лиспе и GT.M.
· original author: michael.filonenko
Метапрограммирование это сложнее, чем просто однообразное представление кода и данных.
· original author: dsorokin
> Заниматься робототехникой и программированием ИИ моя мечта

По темам ИИ и лиспа есть отличная книга Питера Норвига (Peter Norvig) "Paradigms of Artficial Intelligence Programming: Case Studies in Common Lisp" (известна как PAIP). Классика жанра. К тому же там хороший стиль кода. Начинает автор преимущественно с кода в функциональном стиле, а потом добавляет деструктивные оптимизации по мере необходимости. Разобраны до мелочей интерпретатор и компилятор Пролога. Английский по-моему там не очень сложный. На мой скромный взгляд это одна из лучших книг по программированию. Она в 2011 году была заново перепечатана. Шрифты и бумага - загляденье. Я заказывал ее на Амазоне.
· original author: PavelZ
Этот термин я выучил совсем недавно, а сама идея автоматического построения программы из фрагментов кода в проекте была заложена изначально. То же касается и мультиагентной системы.
· original author: PavelZ
Спасибо за намётку по книге, возможно воспользуюсь советом и закажу её чуть позже.
· original author: dmitrys99
В очередной раз посмотрел на GT.M/MUMPS, прям захотелось поиграться :)Я достаточно плотно работаю с CouchDB, интересно посмотреть на другую систему.
· original author: PavelZ
О языке M/MUMPS документация есть, но в основном устаревшая, впрочем как и CL этот язык стандартизирован. Единственная, современная книга, та о которой упоминал, что автор соотечественник. Её я обязательно закажу. По работе с GT.M документация скудная и вся на английском. Cache слишком дорогое удовольствие, да и множество плюшек, что к нему прилагаются лишние...