Программное обеспечение деятельности таксопарка
Анализ деятельности таксопарка и разработка программы "2Т-такси". Понятие о мультиагентных системах, моделях коллективного поведения и взаимодействия. Архитектуры агентов, основанные на знаниях, их уровни. Проектная реализация информационной сети.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.10.2012 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Язык Java может быть использован для создания двух типов программного обеспечения: автономных приложений, которые могут включать «родной» (т.е. машинно-зависимый) код и апплетов - платформо-независимых приложений, которые могут приходить из сети и запускаться с помощью поддерживающих Java Web - браузеров. Апплеты могут встраиваться в Web страницы после специальной метки языка HTML, указывающей ссылку на их код, и запускаться автоматически, когда страница открывается в браузере.
Язык Java был спроектирован с учетом возможности создания приложений работающих в распределенной среде. Кроме поддержки возможностей TCP/IP, таких как чтение URLs, работу с сокетами и обмен сообщениями на уровне датаграмм, в Java предусмотрен механизм удаленного вызова объектов, определенный в спецификации RMI (Remote Method Invocation). Этот механизм позволяет вызывать методы удаленных объектов, объявленные в специальном интерфейсе, причем синтаксически такой вызов выглядит идентично вызову простого метода. Эта схема предоставляет более гибкие возможности по сравнению с традиционным протоколом RPC (Remote Procedure Call). Механизм сериализации (Serialization) позволяет сохранять объекты и графы объектов в потоках данных (файлах, сетевых каналах) и восстанавливать их при необходимости. При этом обеспечивается достаточный уровень секретности передаваемой информации. С выходом спецификации Java IDL и нового продукта Black Widow компании PostModern Computing Technologies открылась возможность к сближению Java приложений и коммуникационного стандарта CORBA 2.0 консорциума OMG (Object Management Group). Специальный компилятор позволяет, исходя из описаний интерфейсов на языке IDL CORBA, генерировать код Java объектов. Это позволит использовать вызовы объектов, находящихся в корпоративных сетях, из Java приложений и сделать Java - объекты доступными для этих вызовов.
KQML - язык и протокол для поддержки взаимодействия агентов в распределенных приложениях. Примеры возможных применений языка включают интеллектуальные многоагентные системы, такие как интеллектуальные агенты планирования, поддерживающие распределенную обработку. Перед определением интерфейсов систем, основанных на знаниях, перечислим типичные компоненты таких систем:
Приложение, рассчитанное на неподготовленного пользователя (End User Application);
Систему, основанную на знаниях (Knowledge Based System);
Хранилище специальных знаний (Knowledge Base Repository) - хранилище знаний о содержимом базы знаний - используется для отслеживания истории доступа, целостности и других аспектов функционирования баз знаний;
Система управления базами данных (Database System);
Активные сенсоры (Active Sensors) - отвечают за обмен данными (знаниями) с “внешним миром”
Возможны различные способы взаимодействия перечисленных компонент.
Разработчики KQML выделяют 3 направления, особенно важных с их точки зрения для коммуникаций интеллектуальных агентов:
Связность (Connectivity) - фокусируется на способе связывания агентов между собой;
Архитектура (Architecture) - акцентирует внимание на способе построения будущей системы (будет ли система статической, когда все компоненты известны уже на этапе проектирования/реализации или динамической);
Коммуникации (Communication) - данное направление рассматривает синхронность/асинхронность обмена сообщениями между агентами.
При разработке языка были сделаны специальные предположения об основных моментах его использования для описания коммуникаций многоагентных систем:
Архитектура. Агенты - это отдельные процессы, работающие в одном адресном пространстве или на различных машинах, соединенные посредством Internet.
Коммуникации. Язык поддерживает следующие стратегии передачи информации: point to point, multicast, broadcast.
Синтаксис. Сообщения между уровнями содержимого, сообщений и коммуникаций представлены в виде s-выражений языка Lisp. Между процессами выражения передаются как потоки ASCII -символов.
Протокол. Для транспортной поддержки KQML был создан специальный протокол - SKTP (Simple Knowledge Transfer Protocol).
Рассмотрим уровни языка KQML. Язык KQML состоит из трех уровней: содержимого, сообщений и коммуникаций. KQML-выражение можно рассматривать как выражение-содержимое, помещенное в сообщение-обертку, которое, в свою очередь, помещено в коммуникационную обертку. На уровне содержимого находится представление знаний на некотором языке. Уровень сообщений добавляет дополнительные атрибуты, такие как описание языка, на котором выражено содержимое, его онтологию и тип используемого метода переговоров. Коммуникационный уровень добавляет информацию об отправителе и получателе сообщения, а также указывает, является сообщение синхронным или асинхронным.
Основу синтаксиса языка KQML составляют имена примитивных действий- сообщений, которые в английской транскрипции называются “performatives” Тип сообщений определяет, что можно сделать с предложениями, содержащимися в сообщении, с этим связано само название KQML-сообщений на английском языке.
Все действия-сообщения можно разделить на следующие категории:
-языка содержимого KQML, который предполагает модель баз в форме множества предложений некоторого языка, который может быть объектным;
-контекста рассуждений - подмножества предложений (фрагмента) базы знаний; запросы и отклики должны делаться относительно некоторого контекста, при этом сообщения данного типа должны позволять определять контекст и переключаться между фрагментами базы знаний;
-определения, которые имеют целью активизировать и отменять определения;
-ответы на вопросы, которые позволяют задавать вопросы относительно истинности предложений;
-отклики, которые определяют набор сообщений для получения ответов на заданные вопросы.
SKTP - Simple Knowledge Transfer Protocol. Первые две реализации SKTP были написаны на языках Common Lisp и Пролог соответственно. В настоящее время разрабатываются интерфейсы на других языках. SKTP - это реализация стека протокола KQML. Как и KQML, SKTP состоит из нескольких уровней: содержимого, сообщений и коммуникации. Коммуникации между приложениями происходят на языке приложений, поддержку данного процесса обеспечивает уровень содержимого (content layer). Выражения, помеченные для передачи, “обертываются” в сообщения - это т.н. уровень сообщений (message layer) , реализуемый с помощью интерфейса библиотеки посредника (Facilitator Interface Library - FIL). Уровень, отвечающий за стратегию передачи сообщений (multicast, broadcast и т.д.) называется коммуникационным и реализован в виде отдельного агента, называемого посредником (facilitator). На самом нижнем уровне, реально несущем структурированные данные между посредниками, находится протокол TCP/IP.
KIF - это язык для обмена знаниями между различными программами, написанными различными людьми, на разных языках и в разное время. Он имеет декларативную семантику (значение выражений, представленных на этом языке, может быть понято без обращения к специальному интерпретатору); он логически полон (обеспечивает выражение произвольных предложений логики предикатов первого порядка), обеспечивает представление знаний о представлении знаний; обеспечивает представление немонотонных правил вывода, определение объектов, функций и отношений.
KIF не претендует на звание языка для внутреннего представления знаний (хотя и может быть использован для этих целей). Обычно программа получает внешние знания, выраженные на языке KIF, затем транслирует их во внутреннее представление (списки, фреймы и т.д) и выполняет все вычисления, используя эти внутренние представления. KIF используется при коммуникациях с внешними программами. Цель языка KIF аналогична цели языка Postscript - он не является языком, достаточно эффективным для представления внутренних знаний программ, но тем не менее он удобен для независимой разработки программ, работающих со знаниями.
Перечислим основные свойства языка KIF.
1. Язык является декларативным, чем отличается от языков типа Prolog и Emycin.
2. Язык является логически полным.
3. Язык является транслируемым (translatability) - он предполагает значения для трансляции декларативных баз знаний в/из типичных языков представления знаний.
4. Язык является хорошо читаемым, что упрощает его использование разработчиком баз знаний.
5. Язык может быть использован как язык представления знаний.
Существуют две разновидности языка KIF: линейный и структурированный. В линейном варианте все его выражения - это строки ASCII-символов, что удобно для хранения на устройствах с последовательным доступом. В структурированном варианте языка правильные выражения - это структурированные объекты. Структурированный язык удобен для использования при коммуникациях программ, работающих в одном адресном пространстве. Между линейным и структурированным представлениями одной и той же сущности существует взаимно-однозначное соответствие.
Соответствие между линейным и структурированным представлениями определяется следующим образом: строка ASCII-символов будет правильным выражением линейного варианта языка KIF тогда и только тогда, когда она допускается интерпретатором языка Common Lisp, и структура, порожденная интерпретатором Common Lisp будет правильным выражением структурированного KIF.
В структурированном KIF определены следующие синтаксические конструкции: word, expression, operator, constant, term, sentence, definition, rule и т.д.
Применимость KIF в рамках разработки агентов видится следующим образом. Ядро агента, а именно: подсистемы управления памятью, планирования, база знаний и т.д. пишутся на С++ или на одном из языков Java, Telescript (если нас интересует способность агента к мигрированию по сетям), а KIF используется как язык для обмена знаниями/данными с другими агентами (для этого агент должен иметь подсистему перетрансляции с языка внутреннего представления знаний на KIF). Язык KIF можно также использовать и как язык представления собственных знаний агента, в этом случае отпадает надобность в упомянутом выше трансляторе.
April: Agent Process Interaction Language. Это язык высокого уровня, который предлагает простой интерфейс к другим языкам программирования типа C. April ориентирован на реализацию многоагентных систем. Однако, April не является языком программирования агентов в том смысле, что он не предлагает таких высокоуровневых возможностей, как планировщики, механизмы вывода на основе правил и системы представления знаний. April скорее является объектно-ориентированным языком со средствами поддержки параллельного выполнения задач и рассматривающим объекты как процессы. Он является подходящей основой расширений для задач распределенного искусственного интеллекта и для прикладного программирования многоагентных систем.
AgentSpeak. Аналогом класса в данном языке выступает семейство, представителем (экземпляром) семейства является агент. Каждый агент обладает базой данных отношений с публичной и приватной частями, множеством сервисов и множества планов - процедур, о которых известно лишь то, выполнены они или нет. Язык обеспечивает распределенность хранения информации в пространстве функционирования агентов.
Каждый агентский сервис может быть одного из следующих трех типов: achieve, query, told. Каждый агентский план определяется при помощи имени и описания абстрактной ситуации, в которой он может быть применен. Во время работы агента, если план применим в текущей ситуации, выполняются действия, связанные с данным планом.
Передача сообщений синхронно/асинхронная. Каждому агенту присваивается личный почтовый ящик, в который складываются все приходящие на его адрес сообщения. Помимо передачи сообщений типа агент-агент, поддерживаются коммуникации агент-семейство агентов, последнее позволяет агентам использовать сервисы обработки сообщений на базисе свойств семейства. Сообщения маршрутизируются по пространствам сообщений, каждое из которых присоединено к конкретному семейству агентов. Сообщения, используемые в языке, могут относиться к одному из трех типов: информировать, запрашивать с ожиданием ответа, запрашивать без ожидания ответа.
Несколько слов об операционной семантике языка. Язык требует, чтобы все семейства агентов были определены до начала выполнения средой агентских заданий (во время компиляции), динамическое создание агентов не поддерживается.
Каждый агент может находиться в одном из трех состояний: активный, ожидающий, неработающий (idle).
По прибытии к агенту сообщения оно кладется в его почтовый ящик, далее агент начинает обрабатывать сообщение. Это заключается в следующем. Сначала по типу речевого сообщения (achieve, query, told) выбираются планы, которые могут быть потенциально применимы в данной ситуации (множество подходящих планов), далее выполняется просмотр абстрактных ситуаций множества выбранных на предыдущем шаге планов (множество применимых планов). Затем для последнего множества строятся реализации (ссылки). По умолчанию система выбирает один план из множества применимых и начинает выполнять действия, указанные в целевой части описания плана. Такой выбранный план называется намерением . В любой момент выполнения агент может обладать несколькими намерениями - потоками. Как следствие из этого, агент является многопотоковым процессом. Внешние и внутренние сервисы агента функционируют, конкурируя за ресурсы, поскольку агент может выполнять как внешние, так и внутренние сервисы.
Данный язык близок по духу таким языкам как Agent0 and PLACA, от них он отличается тем, что здесь ментальное состояние агента рассматривается как объединение убеждений (отношений), целей (сервисов), планов и намерений. Agent0 рассматривает ментальное состояние, состоящее из списков способностей, убеждений и намерений.
Agent0 и Placa трактуют агентно-ориентированное программирование как вид объектно ориентированного программирования, создатели же AgentSpeak считают, что первое является расширением (продолжением) второго.
TeleScript. Первая коммерческая реализация концепции мобильного агента была сделана в среде TeleScript-технологии фирмы General Magic. Данная технология основана на метафоре электронного рынка - общедоступной сети (public network), которая позволяет продавцам и потребителям товаров и услуг находить друг друга и заниматься совместным бизнесом.
TeleScript-технология оперирует следующими понятиями: места (places), агенты (agents), перемещения (travels), встречи (meetings), соединения (connections), полномочия (authority) и разрешения (permits). Далее кратко разъясняются перечисленные понятия:
Места. TeleScript-технология рассматривает компьютерную сеть как множество мест. Место - стационарный процесс на сервере, предлагающий услуги входящему агенту.
Агенты. Коммуникационное приложение трактуется как набор агентов. Каждый агент занимает конкретное место. Однако, агент может перемещаться от места к месту, и поэтому он может занимать несколько различных мест в одно и то же время. Агентские процедуры выполняются параллельно. В модели электронного рынка на типичном месте постоянно присутствует один, выделенный агент.
Перемещение. Агенту предоставляется возможность путешествовать с места на место. Перемещение - отличительный признак системы удаленного программирования, оно позволяет агенту получить удаленную услугу и затем вернуться на место его старта. TeleScript позволяет коммуникационному пакету (computer package) - агенту (его процедурам и состоянию) перемещаться между компьютерами. Для перемещения между компьютерами агент выполняет инструкцию go. Инструкция включает ticket - данные о желаемом месте доставки, и других параметрах перемещения. В случае, если перемещение прошло успешно, агент получает уведомление об этом (его следующая инструкция выполняется уже на новом месте). В модели электронного рынка инструкция go позволяет агентам покупателей и продавцов располагать друг друга для более эффективного взаимодействия.
Встречи. Встреча позволяет агентам вызывать процедуры друг друга. Встречи - это то, что “заставляет” агента перемещаться. Для встречи с расположенным рядом (co-located) агентом, агент выполняет инструкцию meet. Данная инструкция содержит требование (petition) - данные, определяющие агента, который “хочет” встретится и другие параметры встречи. Meet-инструкция позволяет покупателям и продавцам осуществлять транзакции.
Соединения (пока не реализованы на 1995 год). Они позволяют агентам обмениваться информацией с разных мест. Для соединения агент выполняет connect-инструкцию. Данная инструкция содержит несколько параметров, таких как цель (target) соединения. Connect-инструкция позволяет агентам обмениваться информацией на расстоянии.
Полномочия. Технология позволяет агенту или месту распознавать полномочия другого агента/места, причем агент или место не могут ни скрывать, ни фальсифицировать свои полномочия. Анонимность исключена. Технологией предусмотрена проверка полномочий при перемещении агента между регионами (network regions) сети - набором мест, расположенных на компьютерах, обладающих одинаковыми полномочиями. Для проверки полномочий агент или место выполняет инструкцию name. Результатом выполнения инструкции является telename - данные, позволяющие распознавать полномочия в рамках региона сети. Данная возможность позволяет защитить агентов и места от проникновения вирусов.
Разрешения. Технология позволяет управлять назначением полномочий.
Язык программирования позволяет разработчику коммуникационного приложения определять алгоритмы функционирования агентов и данные, переносимые агентами во время перемещения по сети. Язык включает в себя возможности, предлагаемые C и C++. Приложение может быть написано целиком на языке TeleScript, но чаще разработчики поступают иначе: агенты и оболочки мест пишутся с помощью TeleScript, а стационарные части приложения (интерфейсы с пользователем, базами данных и т.д.) - на С или С++.
Telescript обладает следующими характеристиками:
Полнотой.
Объектно-ориентированностью.
Динамичностью (dynamic). Агент может переносить информацию с места на место. Даже если при пересылке объект не известен на месте назначения, его класс следует вместе с ним по сети (код, определение класса).
Сохранением (persistency). На каждом шаге выполнения агент и переносимая им информация безопасно сохраняется в не-volatile - памяти (постоянной - видимо, служебной памяти интерпретатора). Эта операция позволяет предотвратить крах компьютерной системы.
Переносимостью и безопасностью. Компьютер выполняет инструкции, составляющие агента не напрямую, а посредством engine-интерпретатора. Агент может выполняться на любом компьютере, на котором инсталлирован интерпретатор.
Ориентированностью на коммуникации (communication-centric). В язык встроены инструкции, позволяющие агенту просто выполнять сложные сетевые задачи.
Agent-Tcl. Agent-Tcl - это система мобильных агентов, в которой агенты написаны на Tcl 7.4 и Tk 4.0. Agent-Tcl активно используется в задачах информационного поиска и прикладных программах информационного управления. Agent-Tcl в целом аналогичен языку TeleScript, за исключением того, что Agent-Tcl более облегчен и в настоящее время обеспечивает ограниченную защиту. Альфа - версия доступна на Unix платформах.
Oz - параллельный, объектно-ориентированный язык программирования, который был разработан в DFKI (Германия). Имеются несколько проектов в DFKI, использующих Oz совместно с архитектурой InteRRaP (см. предыдущий раздел). InteRRaP представляет из себя многоуровневую архитектуру, которая построена для модели взаимодействующих автономных агентов. DFKI предлагает параллельный язык программирования, приспособленный для прикладных программ, которые требуют сложных символьных вычислений, организации кооперации агентов и некоторых возможностей управления в реальном масштабе времени. Реализация Oz является законченной средой программирования, включающей объектно-ориентированный интерфейс к Tcl/Tk. Прикладные программы на Oz уже использовались для моделирования многоагентных систем, обработки естественного языка, виртуальной реальности, графических пользовательских интерфейсов, планирования и создания расписаний.
Obliq - это интерпретируемый язык без контроля типов, который поддерживает, распределенные объектно-ориентированные вычисления. Вычисление в Obliq может охватывать многократные потоки управления внутри одного адресного пространства, многократные адресные пространства в пределах одного компьютера, множество компьютеров в гетерогенной локальной сети, и, наконец, даже множество сетей в Internet. Вычисления в Obliq могут перемещаться по сети, сохраняя сетевые соединения.
Facile - язык программирования высокого уровня для систем, которые требуют комбинации сложного манипулирования данными с параллельными распределенными вычислениями.
Таблица 2 - Сравнение языков.
Язык |
Переносимость кода |
Доступность |
Сетевые возможности |
Параллельность |
|
Java |
байт-код, виртуальная машина Java |
Windows, Solaris SPARC /Intel, HP-UX, OS/2, Macintosh, Linux |
APIs (библиотеки классов), Remote Method Invocation, сетевая сериализация |
Threads синхронизованные с помощью мониторов |
|
TeleScript |
интерпретация скриптов |
Solaris SPARC, HP-UX, OS IRIX |
TCP/IP, UDP, сетевая сериализация |
множественные процессы работающие в вытесняющей многозадачности |
|
Tcl/Tk |
интерпретация скриптов |
Macintosh, Windows 3.1, Windows 95/NT, Solaris |
|||
Oz |
Solaris SPARC, Sun OS, SGI IRIX, HP-UX, DEC Ultrix, IBM RS6000, Linux |
Продолжение таблицы 2
Obliq |
гетерогенные распределенные сетевые вычисления |
множественные threads внутри одного адресного пространства, множественные адресные пространства в пределах машины, распределенные вычисления в гетерогенных сетях |
|||
April |
UDP |
||||
AKL |
|||||
Scheme 48 |
|||||
Penguin |
|||||
Python |
интерпретиру-емый язык |
Windows, DOS, Macintosh, UNIX |
интерфейс к TCP/IP |
||
Facile |
|||||
AgentSpeak |
интерпретиру-емый |
пока не реализован |
аналог потоков - намерения |
Таблица 2 - Сравнение языков.
AKL (Agent Kernel Language) - параллельный язык программирования, разработанный в Шведском Институте Информатики (SICS). В AKL вычисления выполняются агентами, взаимодействующими через хранилища ограничений и условий (stores of constraints). Этот подход объединяет сразу несколько парадигм программирования. В соответствующих контекстах об AKL - агентах можно думать как о процессах, объектах, функциях, отношениях, или ограничениях. AGENTS - система для программирования в AKL. PENNY - это параллельная реализация AKL, для которой были получены очень перспективные результаты, и которая будет развиваться далее.
Scheme 48. Scheme - один из диалектов языка LISP. Широкое разнообразие парадигм программирования, включая императивный и функциональный стили, а также передачу сообщений, находят удобное выражение в данном языке. Реализация Scheme, основана на архитектуре виртуальной машины.
Продолжение таблицы 2
Язык |
Символьные вычисления |
Обеспечение безопасности |
Объектная ориентация |
Встроенные агентские свойства |
|
Java |
не поддерживаются |
есть |
есть, без множественного наследования |
нет |
|
TeleScript |
не поддерживаются |
встроенные в язык и библиотеку классов средства |
да |
агенты, места, маршруты, встречи, соединения, авторизация, полномочия, инструкции: go, meet, connect, permit, name |
|
Tcl/Tk |
не поддерживаются |
||||
Oz |
поддерживаются |
Продолжение таблицы 2
Obliq |
не поддерживаются |
распределенные объектно-ориентированные вычисления легко встраиваемые в приложения на Modula-3 |
нет |
||
April |
намерения |
||||
AKL |
|||||
Scheme 48 |
|||||
Penguin |
кодирование (и цифровая подпись) Perl кода передаваемого удаленной машине |
||||
Python |
да |
||||
Facile |
|||||
AgentSpeak |
агентно-ориентированный язык |
BDI (beliefs-desires-intentions) архитектура |
Python - переносимый, интерпретируемый, объектно-ориентированный язык программирования, разработанный пять лет назад в CWI (Амстердаме). Язык имеет изящный (но не переупрощенный) синтаксис; в него встроено небольшое число мощных типов данных. Python может быть расширен, путем добавления новых модулей, выполненных на компилируемом языке типа C или C++. Такие модули расширения могут определять новые функции и переменные, а также новые объектные типы.
Phantom - это интерпретируемый язык, разработанный для крупномасштабных интерактивных распределенных программ типа систем конференцсвязи, игр со многими игроками, и совместных инструментальных средств работы. Ядро языка основано на безопасном, расширенном подмножестве языка программирования Modula-3 и поддерживает ряд возможностей современного программирования, включая статическую типизацию, неявные объявления, объекты, облегченные процессы, и высокоуровневые функции.
Penguin - модуль языка Perl 5, который обеспечивает, набор функций для: (1) посылки шифрованного Perl-кода с цифровой подписью к удаленной машине, на которой он будет затем выполнен; (2) получения кода и, в зависимости от того, кем он подписан, его выполнения с соблюдением соответствующих прав. Комбинация этих функций дает возможность для непосредственного кодирования на языке Perl алгоритмов обработки безопасных финансовых сделок по Internet, мобильных агентов, собирающих информацию, “оживленных” Web-брoузеров, распределенных вычислений, удаленного обновления программного обеспечения, удаленного администрирования, распространения информации, конструкторов сетевых программ, и так далее.
Сводные характеристики языков и их сравнительные характеристики приведены соответственно в таблицах 1 и 2.
2. ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ ИНФОРМАЦИОННОЙ СИСТЕМЫ
2.1 МАТЕМАТИЧЕСКАЯ МОДЕЛЬ
Для решения поставленной задачи было решено применить мультиагнетный подход и сделать агентами водителей, а также создать управляющий агент.
Опр. Агент-водитель - это агент, отвечающий за представление в системе водителя
Опр. Управляющий агент - это агент, оценивающий эффективность решения.
Весь город разбивается на N районов, в каждом находится по нескольку водителей и клиентов. На рисунке 7 изображен пример такого разбиения.
Рисунок 7
Водители и клиенты имеют свои параметры.
Параметры агента водителя:
1. Район в котором находится (обозначается числом от 1 до N);
2. Баллы (У каждого водителя в начале рабочего дня A баллов, после каждых 70 рублей(минимальная цена за поездку) их количество уменьшается на 1);
3. Предпочитаемые районы для работы;
4. Статус(имеет 4 варианта: устал, готов к работе, делает заказ, перерыв);
Параметры клиента:
1. Район в котором находится;
2. Район в который хочет уехать;
3. Приоритет;
Сервер отправляет управляющему агенту список клиентов с их параметрами каждые 30 секунд, если появился новый клиент, или по мере появления клиента. Управляющий агент отправляет всем агентам водителям этот список.
У управляющего агента хранится массив NxN, в котором Nij = коэффициент, отображающий время, за которое из i-го района можно попасть в j-й. Коэффициенты Nij динамически меняются, т. к. после каждой поездки агент водитель отправляет время, за которое он справился с задачей. Этот массив отсылается всем водителям по мере изменения коэффициентов Nij.
Так же на управляющем агенте выполняется Алгоритм совместных действий.
Алгоритм выбора клиента водителем.
1. Присваиваем переменной T значение 99999
2. Берется число Nij, где i - район водителя, j - район 1го клиента в списке.
3. Берется число Nik , где i - район водителя, k - район 2го клиента в списке.
4. Выбираем наименьшее из Nij, Nik и Т.
5. Сохраняем в переменную T число полученное в шаге четыре и номер клиента у которого было получено это число. Если Nik и Nij равны и меньше Т сохраняем номера обоих клиентов в отдельный массив.
6. Повторяем шаги 2-5 для всех пар клиентов.
7. Если номеров сохранилось несколько, выбираем максимальное число из P1,P2,…Pk, где 1,..,k - номера клиентов, Pn - приоритет n-ного клиента.
8. Если таких несколько, то клиент выбирается случайно из оставшихся.
9. Для выбранного клиента находим разность
Q = M - Nij,
где М - количество баллов при выборе клиента.
Включается Алгоритм Совместных Действий(АСД)
10. Если в результате работы АСД агент не был выбран водителем, то алгоритм повторяется сначала уже для нового списка клиентов иначе 12
11. Выводится на экран подтверждение выбора водителем клиента.
12. Если водитель отказывается от заказа параметр «отказы» увеличивается на 1, когда он достигает числа F, которое вводится руководством, водителю не выдаются заказы в течении K минут.
Алгоритм совместных действий
1. Q и номер выбранного клиента отправляется каждым агентом водителем управляющему агенту.
2. Для всех водителей, у котрых номер выбранного пассажира совпадает сравнивается число Q.
3. Если число Q совпадает у нескольких агентов, то смотрим статус у каждого водителя.
4. Если статус устал, то заказ водителю выдается только тогда, когда нет других водителей, желающих получить данного клиента.
5. Если число М совпадает, то клиент отдается случайно, с равными шансами для каждого агента-водителя
6. Полученные результаты отправляются нужным агентам водителям(Тем кому достался клиент отправляется его точный адрес и запрос на согласие, тем кому он не достался отправляется обновленный список клиентов, в котором выбранный клиент удален).
Рассмотрим ситуацию, в которой весь город разбит на 2 района. С соответствующей матрицей А:
Так же есть 3 водителя: Иванов, Петров и Сидоров. Иванов находится в 1м районе, имеет на счету 100 баллов и статус «свободен». Петров находится в 3м районе, имеет на счету 100 баллов и статус «свободен». Сидоров находится в 1м районе, имеет на счету 70 баллов и статус «свободен».
Появляется 3 клиента в первом втором и третьем соответственно. Тогда для первого клиента система выбирает первого водителя, для второго клиента 3го водителя, для третьего клиента второго водителя.
Если Иванов поставит статус «устал» заказы распределятся следующим образом:
Первый клиент - третий водитель;
Третий клиент - второй водитель.
Если у нас есть 2 водителя Иванов и Сидоров. Иванов находится в 1м районе, имеет на счету 100 баллов и статус «устал». Петров находится в 3м районе, имеет на счету 100 баллов и статус «свободен».
Появляется 2 клиента в первом и втором районах. Система распределит их следующим образом:
Первый клиент - первый водитель;
Второй клиент - второй водитель.
Как видно из результатов работы системы, клиенты распределяются между водителями равномерно, оценивая несколько важных параметров, что позволяет наиболее эффективно использовать рабочее время всех водителей.
В обычной ситуации водители бы делали свой выбор, руководствуясь своими желаниями, что привело бы к менее эффективному распределению клиентов между ними.
2.2 РЕАЛИЗАЦИЯ
В качестве архитектуры системы была выбрана трехзвенная архитектура Client-Server, представленная на рисунке 8.
На первом уровне данной архитектуры расположены клиентские приложения, не имеющие прямого доступа к базе данных. В основном, на уровне клиента выполняется простейшая бизнес-логика. Большая часть бизнес-логики системы вынесена на второй уровень - сервер приложений, имеющий прямой доступ к базе данных. Взаимодействие между клиентом и сервером организовано при помощи API RMI (Remote Method Invocation) - программного интерфейса вызова удаленных методов в языке Java. Другими словами, на стороне клиента есть интерфейс, реализация которого расположена на сервере. Когда клиенту необходимо использовать какой-либо метод из этого интерфейса, сервер передает так называемую удаленную заглушку (stub), отвечающую за доведение вызова до метода.
Рисунок 8 - Архитектура системы
На третьем уровне расположен сервер базы данных, отвечающий за хранение данных. В качестве сервера базы данных была выбрана СУБД Apache Derby - кроссплатформенная реляционная СУБД с открытым исходным кодом, написанная на Java. Взаимодействие базы данных с сервером приложений организовано при помощи прослойки JPA в связке с Hibernate, предоставляющей средства для реляционной привязки объектов (объектно-реляционного отображения).
К основным достоинствам выбранной архитектуры можно отнести:
- гибкую конфигурируемость;
- масштабируемость системы;
- высокую безопасность и надежность системы;
2.3 ФИЗИЧЕСКАЯ СТРУКТУРА БД
Для работы с БД понадобятся следующие сущности: Водители, водители смены, автомобили, диспетчеры, клиенты и заказы.
На рисунке 9 представлены отношения между сущностями.
Рисунок 9.
На основе отношений между сущностями составим таблицы-сущности: «Водители» (таблица 2.1), «Автомобили» (таблица 2.2), «Водители смены» (таблица 2.3), «Клиенты» (таблица 2.4), «Диспетчеры» (таблица 2.5), «Заказы» (таблица 2.6).
Имя |
Тип |
Назначение |
|
Код водителя |
Целый |
Идентификатор водителя |
|
Фамилия |
Строковый |
Фамилия водителя |
|
Имя |
Строковый |
Имя водителя |
|
Отчество |
строковый |
Отчество водителя |
|
Дата рождения |
Дата |
Дата рождения водителя |
|
Номер паспорта |
Целый |
Номер паспорта водителя |
|
Серия паспорта |
Целый |
Серия паспорта водителя |
|
Дата выдачи |
Дата |
Дата выдачи паспорта водителя |
|
Кем выдан |
Строковый |
Место выдачи паспорта водителя |
|
Адрес |
строковый |
Адрес прописки водителя |
Таблица 2.1 Сущность «Водители»
Имя |
Тип |
Назначение |
|
Код автомобиля |
Целый |
Идентификатор автомобиля |
|
Код водителя |
Целый |
Идентификатор водителя |
|
Номер |
Строковый |
Номер автомобиля |
|
Цвет |
Строковый |
Цвет автомобиля |
|
Марка |
Строковый |
Марка автомобиля |
Таблица 2.2 Сущность «Автомобили»
Имя |
Тип |
Назначение |
|
Номер смены |
Целый |
Идентификатор смены |
|
Код водителя |
Целый |
Идентификатор водителя |
|
Фамилия |
Строковый |
Фамилия водителя |
|
Имя |
строковый |
Имя водителя |
Таблица 2.3 Сущность «Водители смены»
Имя |
Тип |
Назначение |
|
Код клиента |
Целый |
Идентификатор клиента |
|
Фамилия |
Строковый |
Фамилия клиента |
|
Имя |
Строковый |
Имя клиента |
|
Адрес отправления |
Строковый |
Адрес отправления |
|
Адрес прибытия |
Строковый |
Адрес прибытия |
|
Район отправления |
Целый |
Район отправления |
|
Район прибытия |
Целый |
Район прибытия |
|
Телефон |
Строковый |
Телефон клиента |
Таблица 2.4 Сущность «Клиенты»
Имя |
Тип |
Назначение |
|
Код диспетчера |
Целый |
Идентификатор диспетчера |
|
Фамилия |
Строковый |
Фамилия диспетчера |
|
Имя |
Строковый |
Имя диспетчера |
|
Отчество |
Строковый |
Отчество диспетчера |
|
Дата рождения |
Дата |
Дата рождения диспетчера |
|
Серия паспорта |
Целый |
Серия паспорта диспетчера |
|
Кем выдан |
Строковый |
Место выдачи паспорта диспетчера |
|
Дата выдачи |
Дата |
Дата выдачи паспорта диспетчера |
Таблица 2.5 Сущность «Диспетчеры»
Имя |
Тип |
Назначение |
|
Номер заказа |
Целый |
Идентификатор заказа |
|
Код водителя |
Целый |
Идентификатор водителя |
|
Код диспетчера |
Целый |
Идентификатор диспетчера |
|
Код клиента |
Целый |
Идентификатор клиента |
|
Время поступления |
Дата |
Время поступления заказа |
|
Статус |
Строковый |
Статус заказа |
ЗАКЛЮЧЕНИЕ
Изучены бизнес процессы работы таксомоторных компаний.
Проведен анализ существующего программного обеспечения.
Изучена область мультиагентного программирования, проведен сравнительный анализ языков, исходя из которого, выбран язык для реализации поставленной задачи.
Спроектирована и создана база данных для хранения информации о таксомоторной компании. Создан пользовательский интерфейс для базы данных
Создано приложение, автоматически выбирающее водителя на каждый заказ.
СПИСОК ЛИТЕРАТУРЫ
1. Городецкий В.И. Многоагентные системы (обзор) / В.И. Городецкий, М.С. Грушинский, А.В. Хабалов // Новости искусственного интеллекта. - М.: ЦНИЭИуголь, 1998. - №2. - 196 с.
2. Тарасов В.Б. От искусственного интеллекта к искусственной жизни: новые направления в науках об искусственном// Новости искусственного интеллекта. - 1995. - №4.
3. Рассел С., Норвиг П. Искусственный интеллект. Современный подход. Вильямс. 2006 (2007) Издание 2, 1410 стр.
4. Wooldridge M.J. An Introduction to Multiagent Systems. Wiley. 1996 (2002)
5. Glaschenko, A., Ivaschenko, A., Rzevski, G., Skobelev, P. “Multi-Agent Real Time Scheduling System for Taxi Companies”. Proc. of 8th Int. Conf. on Autonomous Agents and Multiagent Systems (AAMAS 2009), Decker, Sichman, Sierra, and Castelfranchi (eds.), May, 10-15, 2009, Budapest, Hungary.
6. Мартин Дж. Организация баз данных в вычислительных системах. - М.: Мир, 1980.
7. http://habrahabr.ru/post/29694/
Приложение A. Работа с приложением
При запуске приложения пользователь видит окно для ввода имени пользователя и пароля, представленное на рисунке 10.
Рисунок 10 - окно авторизации
Пройдя авторизацию, пользователь в зависимости от роли увидит свой интерфейс. Всего имеется 3 роли:
1. Администратор
2. Оператор
3. Отладчик
Администратор наделен правами на добавление и удаление пользователей.
Оператор наделен правами на изменение данных в таблицах «Заказы» и «Клиенты».
Отладчик наделен всеми правами.
Размещено на Allbest.ru
Подобные документы
Этапы создания компьютерной системы менеджера по работе с клиентами таксопарка: разработка схемы потоков информации, концептуальной, датологической моделей базы данных, форм пользовательского интерфейса, невизуальных компонент, выполнение блок-схемы.
курсовая работа [1,4 M], добавлен 14.03.2010Анализ программ автоматизации деятельности диспетчера такси. Жизненный цикл автоматизированной информационной системы, язык программирования, система управления базами данных. Создание программы "Автоматизированное рабочее место диспетчера такси".
курсовая работа [1,6 M], добавлен 19.11.2010Имитационное моделирование деятельности "Центра обслуживания абонентов". Диаграммы потоков данных. Выявление вариантов использования. Моделирование видов деятельности и взаимодействий. Проектирование пользовательского интерфейса и архитектуры приложения.
дипломная работа [1,3 M], добавлен 24.10.2010Анализ проектной деятельности Администрации губернатора Пермского края. Программное обеспечение процессов управления государственными программами, роли и функции участников. Требования к информационной системе и средствам моделирования бизнес-процессов.
дипломная работа [2,9 M], добавлен 30.06.2017Специальное и общесистемное программное обеспечение. Разработка диаграммы прецедентов, классов, деятельности, состояний. Детальная реализация функциональных частей программного обеспечения. Разработка пользовательского интерфейса, методика испытаний.
курсовая работа [3,3 M], добавлен 26.01.2013Сущность и задачи системы грид их практическое применение. Основные идеи, заложенные в концепции грид-вычислений. Уровни архитектуры грид, их характеристика. Технология облачных вычислений. Промежуточное программное обеспечение в распределенных системах.
контрольная работа [736,9 K], добавлен 06.01.2013Сущность понятия "программное обеспечение". Типы прикладных программ. Современные системы программирования для персональных компьютеров. Уровни программного обеспечения: базовый, системный, служебный. Классификация служебных программных средств.
реферат [20,2 K], добавлен 01.04.2010Программное обеспечение - важный компонент функционирования компьютерной деятельности. Изучение принципа работы резидентных программ. Разработка программы по удалению слов из текстового файла без учета регистра. Требования к программе, разработка проекта.
курсовая работа [404,5 K], добавлен 03.02.2011Туризм как сфера деятельности. Особенности функционирования туристических организаций и формирования продукта. Разработка и реализация информационной системы формирования индивидуального туристического тура. Алгоритм решения, программное обеспечение.
дипломная работа [1,6 M], добавлен 19.03.2014Браузер как программное обеспечение для просмотра веб-сайтов, то есть для запроса веб-страниц, их обработки, вывода и перехода от одной страницы к другой. Теги a, img, Script и Style. Используемые технологии Java. Разработка и реализация программы.
дипломная работа [571,4 K], добавлен 07.07.2013