пятница, 27 марта 2009 г.

Психоистория или математическая история?

Давеча присутствовал на докладе г-на Малинецкого (зам. директора по научной работе НИИ им. Келдыша) и спешу поделиться впечатлениями.


Первое и главное -- это серьезный господин (зам. зав.) из серьезной организации, которая занималась расчетами в проектах создания ядерного оружия, космической техники и проч...

Интернет, конечно, уравнивает в правах блондинку и академика... все они могут "вещать". На тему кризиса, сисек-писек-фишек... Но в этом блоге досужей болтовне не место. Только адекватная и более-менее объективная информация.

Итак, Малинецкий и его соратники занимаются математическим анализом истории и прогнозированием будущего. По их данным поведение различных сложных систем в кризисных ситуациях весьма схоже.

Проблемы математической истории. Историческая реконструкция, прогнозирование, методологияПроблемы математической истории. Математическое моделирование исторических процессовПроблемы математической истории. Основания, информационные ресурсы, анализ данных


Было такое ощущение, что я попал в научно-фантастический мир психоистории Айзека Азимова (серия "Академия"). Сами посудите, все сходится один в один :)
  • Уже несколько лет разваливающаяся на куски империя.
  • Небольшая группа ученых пытается предсказывать будущее математическими методами.
  • Их результаты никому не нужны.
  • И похоже, они сами в данный момент не в силах обратить процесс вспять.
  • Никто из руководства страны им не препятствует, в последнее время даже наблюдается вялый интерес к теме.
  • Пока еще не поздно, нужно создавать в различных областях научного знания и технологий локальные центры для будущего восстановления.
  • И так далее...

АкадемияАкадемия на краю гибелиТранторианская империя

Не хватает только роботов. Но и они уже на подходе :)

Докладчиком было высказано много весьма занятных мыслей по поводу состояния дел в области планирования вообще, мирового кризиса и наших российских реалий.

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

Что касается нас, то российский кризис не имеет ничего общего с мировым. Ситуация в России сейчас сильно напоминает ту, что была в 1910 году: правящая элита довела страну до ручки, большое классовое неравенство и т.п...

Грядущее сокращение армии, ВУЗов, рабочих мест приведет к высвобождению большого числа активных молодых людей...

К настоящему времени многие параметры нашего общества вышли за границы своих оптимальных значений... что было весьма наглядно подкреплено результатами статистического анализа.

Правящая элита проводит либеральную политику невмешательства в процессы общества, что совершенно не соответствует историческому моменту и не способно кардинально изменить ситуацию...

В обществе царит материализм, индивидуализм и наблюдается полное отсутствие энтузиастов и мечтателей.

В науке и технике сейчас поколение тех, кому за 60. Достойной смены для них нет.

При обсуждении вариантов дальнейшего развития был приведен пример со сценарием восстановления Южной Кореи тоталитарными методами, как один из возможных. Страну победившей коррупции за несколько лет грамотного управления "довели" до такого состояния, что люди в очереди выстраивались, чтобы отдать свои фамильные драгоценности и помочь родной стране!

На вопрос "что делать?" было рекомендовано собирать вокруг себя единомышленников по областям профессиональных интересов, (клубы по интересам). Чтобы хотя бы анализировать достижения Запада, обмениваться идеями. Чтобы не утратить полностью знания в целых научно-технических областях.

В общем, все на самом деле плохо и будет еще хуже... конечно, мы обязательно прорвемся :) но вот какой ценой...

Как думаете, куда я попал:
  • В чей-то ночной кошмар?
  • В фантастический мир?
  • Или это все-таки реальность?


ЗЫ. Антиправительственных и революционных идей высказано не было.

вторник, 10 марта 2009 г.

Агенты, объекты, реализация

На уровне реализации агент - это обычно объект или функция, или программа, которая:

  • работает в независимом потоке управления;
  • принимает сообщения извне (из некой окружающей среды);
  • отправляет их другим агентам;
  • может следить за событиями в среде
  • и совершать в этой среде действия.

Чаще всего, разработчиков агентов не волнует, как именно это реализовано.

Как происходит передача сообщений между агентами? Можно использовать push или pull... можно устроить p2p обмен пакетами или через центральный узел...

Как реализовано выделение агенту процессорного времени? Можно жестко выделить на каждого агента поток, можно завести в менеджере пул потоков и выделять процессорное время агентам по очереди.

Как агент получает информацию о событиях среды и передает в среду действия? А Бог его знает


Сложность построения агентной системы НЕ В ЭТОМ! Спецы по агентам считают, что весь этот функционал у них уже есть.

Агенты - это более высокий уровень абстракции. Нельзя однозначно приравнять агента и объект. Агентами можно считать взаимодействующие daemon'ы в unix, написанные на чисто процедурном языке. И веб-сервисы с прикрученным интеллектом. И отдельные "умные" потоки в программе. И семейку роботов-терминаторов, продающих людей на органы.

Агенты могут быть реализованы с помощью объектов. Но точно также, они могут быть реализованы и с помощью чисто процедурного подхода. Или даже на чисто агентном языке вроде AgentSpeak, который вообще ничего не знает об объектах и исполняется в интерпретаторе.

Безусловно, интерпретатор написан на объектном языке и сам он знает только объекты. С другой стороны, процессор знает только операции над байтами и ничего не знает ни о каких объектах. С этой точки зрения вполне можно говорить: "агенты - это все равно объекты". Или: "агенты - это все равно машинный код".

Однако, теоретические модели, методы, средства агентного подхода никак не связаны с объектно-ориентированным программированием.

вторник, 3 марта 2009 г.

Машина мыслить... может!

От людей, не работающих в области ИИ, я часто слышу такие слова:

"Машина основывается на имеющихся данных и только. Пусть количество этих данных будет великО, а качество -- сложнО...

Но машина в состоянии решить только известные ей поблемы. Те, для которых в нее уже заложены алгоритмы решения. Но решить незнакомую задачу она не сможет.
"

Разрешите категорически не согласиться. По всей видимости, подобное мнение формируется на основе опыта использования имеющихся на рынке инструментов/девайсов, которые, увы, тупы как пробки. Но это проблема девайсов и их производителей.

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


Ах, да! Еще вы можете кусочки чужих решений всовывать в свои решения :) Прямо как в LEGO!

Если это ваш идеал (как разработчика) -- не стоит читать остаток статьи. Не тратьте время, не тревожьте душу! Ступайте и плодите такой софт себе на здоровье! Кришна вам в помощь.

А с оставшимися мы продолжим дальше.


Итак, еще на заре вычислительной техники группа инициативных товарищей таки хотела научить машину мыслить "аки человеце".


Конечно, они были весьма не удовлетворены императивным подходом и обратили свою неудовлетворенность в другую сторону.

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

В таких архитектурах неизменными остаются только базовые алгоритмы работы со знаниями: дедукция, индукция, абдукция, ассоциация, введение ошибки... те самые, которые мы используем в жизни...

А входные данные, знания, поведение становятся переменной величинами. Своего рода, типами данных, с которыми можно делать все, что душе угодно.


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

Бот может перестраивать последовательности действий по убиению врагов в зависимости от их действий.

Или разбивать целое на подзадачи.

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


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

Это резко расширяет класс задач, который может решить одна такая система. И, как следствие, ее вклад в общий прогресс, самооценку разработчика... И (надеюсь, когда-нибудь это случится) его зарплату ;)

Но ничего не дается даром. В данном случае приходится платить:
  • производительностью, но только до тех пор, пока мы не найдем новые способы оптимизации работы таких систем. Конечно, более интеллектуальные, чем развертывание циклов или inline-подстановки вызовов функций!
  • сложностью разработки. Есть проблема обучения такой системы. Ей ведь не скажешь, как нужно делать. Необходимо сконструировать ее знания так, чтобы она поступала нужным способом :)


А затем появились агенты и все стало еще веселее :)