Skip to content
Georgiy Bagretsov edited this page Apr 24, 2017 · 29 revisions

MAS Carpooling wiki

Спецификации

Город

см. здесь

Районы

см. здесь

Начальная конфигурация:

    -count_agents N1 -auto_generate N2 -count_driver N3 -delay_agents N4
    // N1 - количество агентов (Integer)
    // N2 - автоматически генерировать агентов или нет (yes - автоматически, все остальное - нет) (String)
    // N3 - количество агентов-водителей (Integer)
    // N4 - время задержки создания агентов (Integer)

Аргументы командной строки агента (массив args)

  • старт: номер вершины
  • финиш: номер вершины

Опциональные параметры:

  • вместимость машины (не считая водителя)
  • стоимость проезда одного километра: может быть дробным числом

Сервис карпулинга в Yellow Pages

  • тип: carpooling
  • имя: JADE-carpooling
  • свойства:
    • districts: районы, которые проезжает водитель. Формат: D1,D2,...,Dn

Водитель регистрируется в сервисе.

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

Система диалога водителя и пассажира

см. здесь

Сценарий для Водителя в виде конечного автомата

см. здесь

Сценарий для Пассажира в виде конечного автомата

см.здесь

Для статистики

  • для получения списка пассажиров: myParentFSM.getPassengersList() вернёт List<Sting> локальных имен
  • для получения итогового маршрута: myParentFSM.myCitizenAgent.getFinalRoadVertexes() вернет список вершин итогового маршрута

Парсер графа из файла

  • расширение файла: .gml
  • как задавать город:mas-carpooling-appl/src/main/resources/small_city.gml
  • конструктор по умолчанию строит город из файла small_city.gml
  • возможный параметр конструктора: путь к файлу от папки mas-carpooling
  • как пользоваться:
    Parser parser = new Parser();
    Graph<String, DefaultWeightedEdge> city = parser.getCity();

Алгоритмы

Расчёт маршрута на собственном автомобиле:

  • осуществляется в классе CitizenAgent.java
  • расчёт выполняется на этапе setup агента
  • для доступа к списку рёбер необходимо вызвать getCurrentRoute()
  • для доступа к стоимости проезда на своей тачке нужно вызвать getCurrentPrice()

Циклическое поведение CheckPassengerPoolBehaviour:

  • оно циклически проверяет значение неравенства pp < (pd - cd) < p0:
    • если оно не выполняется, decided_be_driver = True у агента
    • если неравенство выполняется, decided_be_driver остается False

Метод List<Offers> analyzeOffersPool():

  • мониторит список предложений нашему водителю от пассажиров
  • он смотрит на поле агента offersPool и возвращает значение для поляbest_offer
  • на данный момент используется в поведении HandlePassengersOffers

Floyd-Warshall:

  • вместо постоянных вызовов дейкстры теперь у каждого агента есть и список кратчайших путей из каждой в каждую
  • хранится в поле FloydWarshallShortestPaths<String, MyWeightedEdge> shortestPaths агента
  • если нужен кратчайший путь: shortestPaths.getShortestPath(a, b)
  • если нужна длина кратчайшего: shortestPaths.getShortestPath(a, b).shortestDistance(a, b)