12.07.2013
В публикации кратко рассматривается новый агент-ориентированный язык программирования Axum, разработанный в Microsoft. Также приводится информация о новом проекте компании по созданию компьютерной модели мира с использованием суперкомпьютерных технологий.

В 1990 г. профессор Стэнфордского университета Йоав Шохам предложил новую парадигму программирования — агент-ориентированный подход, концепция которого заключается в представлении агента в качестве программного модуля, выполняющего поставленные задачи, а его поведение зависит от окружающей среды, которую он воспринимает с помощью датчиков и, в свою очередь, может воздействовать на нее посредством исполнительных механизмов.

По мнению Шохама, агент-ориентированный подход является частным случаем более общей и широко известной парадигмы программирования — объектно-ориентированного программирования. В таблице 1 приведены сравнительные характеристики этих двух подходов [Shoham Y. (1990): Agent Oriented Programming: Technical Report. Computer Science Department, Stanford University]. 

Таблица 1
Сравнение двух парадигм программирования

Объектно-ориентированное программирование

Агент-ориентированное программирование

Базовая единица

Объект

Агент

Параметры, которые определяют состояние базовой единицы

Без ограничений

Убеждения, обязательства, возможности, выбор и др.

Процесс вычислений

Получение сообщений и методы ответа

Получение сообщений и методы ответа

Виды сообщений

Без ограничений

Информирование, запрос, предложение, обещание, отказ и др.

Ограничения используемых методов

Нет

Честность, последовательность и др.


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

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

В 2009 г. одна из крупнейших транснациональных компаний по производству программного обеспечения — Microsoft (а точнее, DevLabs — подразделение Microsoft, занимающееся экспериментальными и инновационными программными разработками) анонсировала новый язык программирования — Axum, который был изначально предназначен для написания многопоточных параллельных приложений, оптимизированных для работы на многоядерных процессорах. Другой, не менее важной особенностью нового языка является реализация в нем агент-ориентированной парадигмы программирования. Таким образом, экспериментальный язык вобрал в себя многие прогрессивные концепции программирования, а основной целью его создания стала проверка совместимости перечисленных выше парадигм в рамках одного языка.

По синтаксису и ряду конструкций Axum наиболее близок к языку C#, однако они концептуально разные. Ниже приведены их общие элементы и основные различия.

Общее
  • все C#3.0 выражения, в том числе LINQ (Language Integrated Query) запросы;
  • все C#3.0 операторы;
  • объявление полей и методов;
  • делегаты и перечисляемые типы.
Не поддерживаемые в Axum элементы языка C#
  • классы, интерфейсы и структуры;
  • объявление операторов;
  • свойства;
  • константные поля и константные переменные;
  • статические поля и методы.
Уникальные особенности Axum
  • агенты и домены;
  • каналы;
  • схемы;
  • сети;
  • асинхронные потоки.
Таким образом, главные концепции Axum — каналы, схемы, слои, домены и агенты. Первое, что бросается в глаза, — отсутствие в Axum классов. Вместо них в новом языке есть новый абстрактный тип — агенты, которые хоть и похожи на классы, но на них нельзя ссылаться. Однако взаимодействие между агентами происходит посредством передачи сообщений в рамках каналов. Агенты близки по смыслу потокам, но при этом они гораздо «легче» потоков, и, вообще говоря, количество агентов может составлять сотни, тысячи или даже миллионы в рамках одной программы.

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

Проиллюстрируем идею каналов на примере [Microsoft Corporation (2009): Axum Programmer's Guide], [Gustafsson N. (2009): Axum language overview (v0.8), Jun. 16, 2009]. Рассмотрим канал Adder, который принимает два числа (Num1 и Num2) и выдает сумму этих чисел (Sum). Пользователь канала посылает эти числа во входные порты Num1 и Num2 и получает результат в выходной порт Sum. Канал используется агентом MainAgent и осуществляется агентом AdderAgent (рис. 1).

Microsoft1.jpg
Рис. 1. Двойственность портов при реализации канала Adder

Канал определяется с помощью ключевого слова channel, а его порты определяются с помощью ключевых слов input и output. В конструкторе агента MainAgent с помощью статического метода CreateInNewDomain агента AdderAgent создается экземпляр канала Adder. Таким образом, создаются два порта канала Adder (являющиеся экземплярами различных типов), а также создается экземпляр агента AdderAgent, который реализует канал, а затем возвращает значение, передаваемое в выходной порт канала. Далее мы посылаем сообщения в порты Num1 и Num2 и ожидаем результата от порта Sum (листинг 1).


using System; 
using System.Concurrency;
using Microsoft.Axum;
channel Adder 
input int Num1; 
input int Num2; 
output int Sum;
agent AdderAgent : channel Adder
public AdderAgent() 
int result = receive(PrimaryChannel::Num1) + receive(PrimaryChannel::Num2); 
PrimaryChannel::Sum <-- result; 
agent MainAgent : channel Microsoft.Axum.Application
public MainAgent() 
var adder = AdderAgent.CreateInNewDomain();
adder::Num1 <-- 10;
adder::Num2 <-- 20;
var sum = receive(adder::Sum);
Console.WriteLine(sum);
PrimaryChannel::ExitCode <-- 0; 

Листинг 1. Программный код на языке Axum, реализующий канал Adder

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

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

Схемы позволяют осуществлять операции сериализации данных, а также корректное выполнение асинхронных операций (к примеру, чтобы реализуемые параллельно агенты до определенного момента не имели доступа к общим изменяемым состояниям). Концептуально схемы Axum похожи на схемы XML и в меньшей степени — на структуры в C#.

Работа над инновационным программным языком Axum на данный момент закончена, и в виде самостоятельного продукта он на рынок не выйдет. По мнению разработчиков, этот проект был весьма успешным и апробированные в нем концепции найдут применение в будущих релизах .NET: C# и VB будут поддерживать асинхронные режимы выполнения программного кода, а также реализованные в Axum парадигмы агент-ориентированного подхода в программировании. Наверное, с коммерческой точки зрения действительно эффективнее расширять функционал имеющихся и уже достаточно распространенных языков программирования, чем выводить на рынок абсолютно новые. Для нас, тем не менее, важно, что крупнейший вендор программного обеспечения в числе прочего взял курс на поддержку агентного подхода в своих продуктах.

Скачать последнюю на текущий момент версию языка (0.3) можно отсюда.

Более того, в 2010 г. компания Microsoft анонсировала ни много ни мало компьютерную модель мира с использованием в том числе агент-ориентированного подхода, т. е., по сути, создание виртуальной реальности, описывающей текущее состояние социальной и экономической системы всего мира. Более подробную информацию можно найти на сайте www.modelingtheworld.com.

Microsoft2.jpg
Рис. 2. Промо-сайт проекта

Ниже приведен текст, озвученный топ-менеджерами компании (в частности, Бобом Маглиа (Bob Muglia), экс-президентом подразделения серверов и инструментов бизнеса в Microsoft) в промо-роликах, размещенных на упомянутом сайте:

«На протяжении своей истории человечество стремилось к новым знаниям и пыталось ответить на самые важные для себя вопросы. При этом было собрано огромное количество самых разных данных, которые наши ученые и специалисты в области информационных технологий будут обрабатывать в течение ближайших пяти лет. Мы будем использовать весь потенциал наших технических наработок с целью моделирования окружающего нас мира, что позволит, по нашему мнению, перейти на другой уровень понимания наиболее актуальных проблем нашего времени для их последующего разрешения. В этой связи мы считаем, что наука находится в точке бифуркации: новейшие достижения в области суперкомпьютерных технологий, а также в области технологий интеллектуальной обработки информации позволят нам разрабатывать сложные модели, возможности которых соответствуют тем скоростям, с которыми меняется современный мир. Мы считаем, что создаваемые нами модели позволят найти пути трансформации для ключевых отраслей, оказывающих влияние на все население планеты, — для энергетики и здравоохранения. Кроме того, мы предполагаем, что инструментарий окажет огромное влияние на бизнес-сообщество и отрасль инженерии знаний, что может привести к созданию принципиально новых продуктов, предприятий и отраслей промышленности. Мы приглашаем профессионалов разных областей (инженеров, экономистов, бизнесменов, политиков и др.) к сотрудничеству и совместному поиску решений для ЛЮДЕЙ и ПЛАНЕТЫ».

Microsoft3.JPG
Рис. 3. Боб Маглиа, экс-президент подразделения серверов и инструментов бизнеса в Microsoft

Несомненный интерес крупнейших игроков IT-рынка к агентным моделям лишний раз доказывает перспективность инструмента и его большое будущее.
rss
Назад

Статьи
Суперкомпьютерные технологии Демография Cуперкомпьютерные технологии Агент-ориентированные модели БРИКС Высокопроизводительные вычисления Транспортные модели пешеходная модель METIS МЁБИУС Монография Parallel computing Параллельные вычисления Биомедицина SWAGES Публикации Axum Social Simulation Conference ГИС Междисциплинарное исследование Новости Революция Экономические процессы цунами CUDA Microsoft TSUBAME Методология запуска О проекте Социальная сеть Эксафлопная производительность Case HPS POLARIS XAXIS Иерархическая платформа Механизм раделяемой памяти Пандемия Ссылки Эпидемия Исследования Моделирование мира Пандора Стратегии распараллеливания Ядерная атака на США D-MASON Repast Агент-ориентированный подход Исторические процессы Моделирование эпидемий Суперкомпьютерная Академия автоматическое распараллеливание FuturICT Russian Supercomputing Days Клеточные автоматы Модель экономики Евросоюза Пространственно-распределенные агентные модели Суперкомпьютерные дни агентная модель GPU SEGMEnT Контакты Мониторинг планеты Пространственные модели большие данные HPABM SSC