en ru
Автор: Виктор Казаринов
Много раз я собирался взяться за новый проект, несколько лет. Но вот - решился.
С 2000 года приблизительно я разрабатывал вплоть до 2009 года проект AIGod. Центральной частью там было ядро виртуальной 64 битной машины демонов. Само ядро написано на Masm. Но т.к. оно совсем небольшое, то была идея сделать портирование на несколько разных ОС. Однако демоны - это хоть и не очень большие, но полноценные программные процессоры с собственной системой команд. Получалось, что виртуальная машина сначала интерпретировала каждую команду демона, затем выполняла ее. Далее - переходила к следующему демону. И так далее по циклу. Немного напрягало то, что в памяти каждый демон должен был занимать одинаковое по размеру с другими демонами немалое место. Это приводило к тому, что в ОЗУ можно было размещать не очень много демонов.
Кроме того, неясным был ответ на вопрос - как же организовать эффективную совместную работу множества демонов для выполнения полезной работы.
Тогда в 2006 году я обратил внимание на CLIPS - движок экспертных систем на основе продукционных правил. В нем я рассматривал некий эквивалент моим демонам в виде правил и фактов. Эта система мне и сейчас очень нравится своей продуманностью и я ее буду развивать.
Но применить в реальных роботах или других сложных задачах CLIPS вряд ли удастся - правила интерпретируются довольно медленно, отсутствует реальный параллелизм. Есть и еще ряд неустраивающих меня недостатков.
Поэтому я решил приступить к новому проекту Neuronium как сплаву моих познаний и опыта создания AIGod, а также исследования изнутри системы CLIPS. Мне кажется, что он совместит в себе все лучшие черты нейросетей, продукционных правил, микромультиагентности и работы с онтологиями посредством сети нейроподобных элементов.
Neuronium состоит из трех основных частей:
Главным элементом проекта является нейроподобный компонент. Но это вовсе не искусственный нейрон в обычном понимании этого слова. Скорее всего это предельно упрощенный демон из моего проекта AIGod, который может выполнять самые разные операции вплоть до создания и уничтожения других таких же компонентов как он. Но особенность его в том, что выполнять в каждый такт времени он должен всего одно элементарное действие, функцию, а не очередную команду большой программы на своем виртуальном машинном языке, как это было в AIGod. Тогда практически почти весь алгоритм будет не внутри демона а снаружи него. Особое внимание обращу на получение предельной скорости работы системы, а также - ясности и удобства человека в процессе проектирования прикладных систем на основе Neuronium.
Run-time систему возьму переработанную от AIGod. Ее впоследствии можно будет легко портировать под разные ОС или даже в 32 битные микроконтроллеры. Систему программирования/компиляции/отладки писать буду наверное на C Builder. Мне он нравится больше чем MSVS. Но я тут еще до конца не определился. М.б. что-то кроссплатформенное выберу. Например, QT или даже Java.
Каждая Engine взаимодействует с внешним миром через TCP/IP протокол, даже если другие аналогичные Engines выполняются в одном общем адресном пространстве компьютера. Это несколько замедляет процесс обмена, но позволяет макимально упростить построение большой сети, состоящей из таких Engines.
Вот общая суть вкратце. Если кому-то будет интересно поучаствовать - я совершенно не против.
1. NeuroniumStudio:
1.1. Платформа для разработки различных программ, особенно для параллельного и последовательно - параллельного программирования.
А также для других парадигм программирования: ООП, АОП...
1.2. Платформа для разработки структур данных/знаний в различных парадигмах. Онтологческих, фреймовых и др.
2. Neuronium.exe - это главный модуль всей системы. Это движок псевдопараллельной виртуальной машины.
В нем и происходит вся главная обработка информации.
3. IO модули позволят работать с изображенями, например, с камерами робота, звуком, базами данных, приводами роботов, оборудованием "умного дома" и т.д.
Т.е. все специфическое будет стыковаться с Neuronium.exe через такие модули - драйверы,
в которых будет проходить первичная обработка информации и управление эффекторами.
http://www.ritis.ru/protar/index.php?protar=1 - Искусственные: память, сознание, интеллект...
Для упрощения текущей версии Neuronium каждую Engine я запускаю как отдельное приложение. И уже средства ОС сами раскидывают по ядрам. TCP в свою очередь синхронизирует потоки приложений - множества Neuronium Engines. Для этого в Neuronium есть отдельный поток ядра и поток I/O. Поэтому взаимодействие между процессами не тормозит основной вычислительный процесс. Приостанавливают свою работу лишь те демоны, которые занимаются I/O операциями.
Как совершенно правильно заметил shuklin, я вовсе неоригинален в этом жанре. Но каждая имплементация аналогичной системы может учитывать чужие разработки, что-то свое привносить, менять какие-то элементы и этим менять общие свойства системы.
Я решил делать проект Neuronium на основе проекта AIGod, довольно сильно его модернизировав. Не буду с нуля делать новый проект. Сил не хватит. Негоже пропадать работающему добру. Как и в проекте AIAssistant хотел бы сделать ассемблерную часть закрытой по ранее озвученным причинам и по причине того, что в ассемблере разбираться вряд ли кто захочет. Поэтому собственно ядро системы в общем то уже есть. Нужно будет писать еще код для демонов- нейронов, который на виртуальном ассемблере и прошивается в их виртуальные ROM (ПЗУ).
И еще - на этом параллельном языке высокого уровня нужно что-то реально работающее написать для демонстрации возможностей системы и выявления ее отличий от других аналогичных систем.
Не знаю. Предлагайте.
Никаких особых требований. Было бы желание. А работы на любого энтузиаста хватит.
Начинаю перепахивать ассемблерный код и рисовать структурную схему проекта. Думаю, что все энжины могут соединяться между собой даже в одном адресном пространстве компьютера по TCP протоколу. Несмотря на некоторые недостатки такой соединение модулей позволяет добиться максимальной гибкости и независимости этих модулей. А язык их взаимодействия тоже уже есть. За основу взята рекомендация FIPA - язык ACL. Я на робофоруме его немного перевел http://roboforum.ru/wiki/RoboBrain_Interchange_Language. Но м.б. и другой язык обмена выбран. Кроме того, ACL язык - это все равно обертка. Внутри сообщения будут видимо на каком- нибудь онтологическом языке знаний.
Я надеюсь на то, что онтологический подход в этом деле поможет. Если новые знания сразу укладывать в нужные места, добавляя листья к единому дереву онтологии, то этим корректность будет соблюдена.
© AIKernel 2011
10.05.2011 - 12.05.2011