Усовершенствование системы краткосрочной аренды

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Основы права
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,49 Мб
  • Опубликовано:
    2017-08-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Усовершенствование системы краткосрочной аренды

Оглавление

Введение

Глава 1. Введение в car sharing на примере DriveNow

1.1 О car sharing

1.2 Основные принципы работы краткосрочной аренды машин DriveNow

1.3 Преимущества и недостатки совместного использования автомобилей

Глава 2. Исследование технических процессов использования автомобиля в системе DriveNow

2.1 Процесс регистрации клиента

2.2 Процесс резервирования автомобиля

2.3 Процесс заправки автомобиля

.4 Процесс парковки автомобиля

2.5 Процесс завершения аренды автомобиля

2.6 Процесс технического обслуживания автомобиля

2.7 Процесс передачи автомобиля следующему водителю

Глава 3. Предложения по усовершенствованию бизнес-процессов в системе DriveNow

3.1 Усовершенствование процесса резервирования автомобиля

3.2 Онлайн-оплата заправки автомобилем

3.3 Усовершенствование процесса парковки автомобиля

3.4 Техническое обслуживание автомобиля без обслуживающего персонала

3.5 Оптимизация процесса передачи автомобиля следующему водителю

Глава 4. Моделирование краткосрочной аренды машин

4.1 Описание входных параметров программы

4.2 Результаты проведения симуляционных экспериментов

Глава 5. Анализ рисков системы, использующей усовершенствованные бизнес-процессы

5.1 Информационная безопасность

5.2 Анализ рисков

Заключение

Список литературы

Приложения

Введение

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

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

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

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

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

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

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

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

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

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

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

автомобиль бизнес использование совместный

Глава 1. Введение в car sharing на примере DriveNow

1.1 О car sharing

Car sharing (английский car „автомобиль“, to share „поделиться“; на русском „общий автомобиль“) - это организованное совместное использование одного или нескольких автомобилей. Совместное использование автомобилей позволяет, в отличие от обычных агентств по аренде автомобилей, кратковременную, поминутную аренду транспортных средств.

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

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

В статье "Bringing Carsharing to your Community", опубликованной компанией City Car Share [1], обязательным условием совместного использования автомобилей является хорошо развитая общественная транспортная система. Следует подчеркнуть, рассматриваемая услуга не может заменить общественный транспорт. Концепция предназначена больше для нерегулярных поездок или перевозок. Все большую популярность набирают поездки в аэропорт и обратно с применением краткосрочной аренды автомобилей. Услуга пользуется отличным спросом у немецких компаний DriveNow и Сar2go. В аэропортах многих городов Европы существуют специальные парковки для краткосрочной аренды автомобилей.

Можно выделить следующие характеристики услуг по совместному использованию автомобилей:

• пользователь должен пройти процесс предварительной регистрации для проверки личности и подтверждения удостоверения для управления транспортным средством;

• клиент оплачивает единовременный вступительный взнос, в дополнение ко времени и/или расстоянию на основе издержек;

• использование любой свободной машины поблизости, которую можно найти в режиме реального времени и зарезервировать;

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

• использование автомобиля оплачивается поминутно, либо в соответствии с выбранным часовым пакетом или на основе пройденного расстояния. Многие операторы позволяют многодневное использование автомобиля. Если клиент не пользуется арендой машин, то месячная оплата не производится;

• обслуживание и уборка автомобиля осуществляется сотрудниками компании по мере необходимости. Популярность набирает сотрудничество с клиентами для обслуживания документов. Компания DriveNow запустила проект лояльности по заправке автомобилей. Каждый клиент, заправивший автомобиль, получает бесплатные минуты для поездки [2].

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

Так, в научной работе [3] - “Использование вместо покупки. Влияние экономии при совместном пользовании на автомобильную индустрию. Car sharing” - освещается новое развитие, связанное со снижением потребительского поведения покупателей по сравнению с повышением спроса на совместное использование повседневных предметов, например, автомобиля. Подчеркивается, что в связи с растущей численностью земного населения, такими глобальными проблемами, как защита окружающей среды и снижение загрязнения атмосферы, ограниченностью ресурсов и притоком населения в города происходит осознание необходимости более экономного использования продуктов.

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

В работе [4] - “Мобильность по сравнению с экономным использованием. Социальное, экологическое и экономическое воздействие от car sharing” - исследуется вопрос, вносит ли совместное использование автомобилей по сравнению с личным использованием автомобиля значимый вклад в развитие экономного пользования предметов повседневного потребления в Германии. Автор проводит анализ, насколько значительными являются экономическое и социальное влияние от краткосрочной аренды автомобилей наряду с положительным экологическим аспектом.

В статье “Car sharing - способ передвижения будущего? Эмпирическое исследование к способу передвижения без права собственности на автомобиль из перспективы простых пользователей и экспертов этой области” [5] автор дает введение в совместное использование автомобилей и проводит сравнение отзывов простых пользователей и специалистов по данной области.

Технология совместного использования автомобилей работает на основе облачных технологий. Сервер DriveNow связан с облаком посредством бортовых компьютеров в автомобиле и мобильном приложении.

Краткосрочная аренда автомобилей предполагает использование модели B2C (business-to-consumer, рус. бизнес для потребителя) и обслуживание на равных условия P2P (англ. peer-to-peer, P2P - равный к равному).

Первое место в мире занимает азиатский континент с 2,3 миллионами пользователей по совместному использованию автомобилей. Второе место по количеству пользователей данных услуг занимает Европа с 2,1 миллионами человек. 1,5 миллиона людей пользуются услугами краткосрочной аренды машин в Северной Америке. Этот рынок показывает активный прирост в Японии, Корее, Индии, Австралии, ЮАР и Новой Зеландии.

Мировое лидерство на рынке совместного использования автомобилей успешно держит американская компания ZipCar, которая начала деятельность в США в 2000 году. Сегодня автопарк составляет 11000 машин, ZipCar активно развивается в Канаде и завоевывает европейский рынок в Великобритании, Австрии и Испании.

Вместе эти три региона продают 2,5 млрд минут по использованию автомобиля в год и имеют €650 млн выручки (рис. 1).

Рисунок 1. Краткосрочная аренда автомобилей в 2015 году. BCG research “Car sharing today”.

Совместное использование автомобилей активно развивается. Это можно заметить, исследуя мировую тенденцию вложения капитала в этот рынок со стороны компаний из разных сфер бизнеса - лизинговых и транспортных компаний, а также представителей автопрома. Например, концерн Daimler основал дочернюю компанию Car2go, производитель BMW вывел на рынок фирму DriveNow, а концерн Volkswagen представил сервис Quicar. Гиганты отрасли, такие как Ford, Toyota и Renault тоже развивают направление совместной аренды машин.

Краткосрочная аренда автомобилей в Европе по количеству компаний в отрасли ярче всего представлена в Германии (130 операторов). За ней в тройку лидеров попадают Великобритания и Франция. Англичане называют такой способ аренды автомобиля автомобильные клубы (car clubs).

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

В февральском отчете немецкого федеративного союза краткосрочной аренды машин (Bundesverband CarSharing) 2017 года был отмечен значительный прирост пользователей услуг краткосрочной аренды автомобилей. К 2016 году на 36% увеличилось количество клиентов у немецких компаний по краткосрочной аренде автомобилей, это около 1,7 миллиона новых пользователей. Данный рост обусловлен внедрением данной услуги еще в 60 городах и населенных пунктах. Местные муниципалитеты рассматривают совместное использование автомобилей как способ снижения многочисленных частных автомобилей.

В Германии количество машин по краткосрочной аренды достигает 17200, что на 11,4% больше чем в 2015 году (рис.2).

Рисунок 2. Развитие краткосрочной аренды машин до 2017 года. Bundesverband Carsharing

.2 Описание работы DriveNow со стороны пользователя

DriveNow - это совместное предприятие между компаниями BMW и SIXT, которая предоставляет услуги совместного использования автомобилей. Компания DriveNow была основана в Мюнхене, в июне 2011 года. В сентябре 2015 года в DriveNow работает более 4000 транспортных средств в семи странах мира и имеет более чем 500 000 клиентов.

Бизнес-модель DriveNow придерживается к стандартной форме совместного использования автомобилей на всех рынках, но ценовая политика варьируются между странами. Прокат автомобилей тарифицируется поминутной ставкой. Для начала или окончания аренды в аэропортах предусмотрены единовременные сборы. Компания делает скидку, если автомобиль используется в режиме парковки, при многочасовом и ежедневном использовании. Организация взимает единовременный регистрационный взнос, но нет ежемесячной платы. Тарифы "все включено" подразумевают и прокат машины, бензина, зарядки, страховки, парковки (разрешенные зоны) и ремонта. На большинстве рынков, автомобили DriveNow могут быть припаркованы в специально отведенных для этого парковочных местах, или в стандартных парковках, имея специальное разрешение от местного муниципалитета. функционирует с множеством бензиновых двигателей BMW 1,2 серии, BMW X1 и Mini автомобилей, а также электрических автомобилей BMW i3 и и BMW ActiveE.

Сильные стороны компании:

лидирующее положение на рынке;

производство автомобилей компанией-партнером;

установившиеся партнерские отношения с Sixt (компания, предоставляющая услуги по стандартной аренде автомобилей);

наличие мобильного приложения;

наличие сайта;

наличие облачной платформы;

широкий ассортимент автомобилей;

большое количество автомобилей;

хороший имидж DriveNow.

Слабые стороны компании:

возможные отказы серверов платформы;

большая з/п у обслуживающих сотрудников;

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

Возможности:

оптимизация времени на обслуживание автомобиля (заправка, проверка, мойка и т.д.);

улучшение качества оказываемых услуг;

ненасыщенный рынок России и ряда других стран дает большие возможности для роста;

внедрение услуг в новых странах;

привлечение новых клиентов;

расширение услуг;

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

добавление новых моделей BMW (3,4,5,6,7 моделей);

увеличение использования электронных автомобилей;

связать приложение с экосисистемой города;

возможность вступления в партнерские отношения с Car2go (компания конкурент по краткосрочной аренде машин, возможно создание единой облачной платформы);

использование новых рекламных технологий.

Угрозы:

уменьшение парковочных мест;

городской контроль по совместному использованию автомобилей;

выход на рынок нового конкурента;

усиление позиций компаний-конкурентов;

повышение цен на расходные материалы;

жесткая конкуренция с Uber.

.2 Основные принципы работы краткосрочной аренды машин DriveNow

Принципы работы совместного использования автомобилей DriveNow необходимо рассматривать с двух позиций - клиента и работы бортовых компьютеров.

Для использования сервиса краткосрочной аренды машин DriveNow клиент должен пройти регистрацию (рис.3). Она состоит из трех этапов:

Создание профиля пользователя.

Подтверждение личности пользователя.

Подтверждение платежеспособности.

Рисунок 3. Регистрация нового пользователя DriveNow

На первом этапе клиент указывает личные данные: ФИО, e-mail, телефон, место прописки.

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

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

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

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

Рисунок 4. Поиск автомобиля DriveNow в мобильном приложении

Забронировать автомобиль можно с мобильного приложения или с сайта на 15 минут. Для быстрого поиска забронированной машины существует функция «мигание». С помощью мобильного приложения клиент может послать сигнал зарезервированному автомобилю, чтобы тот включил аварийный сигнал на несколько секунд. Таким образом, пользователь сможет быстро найти машину.

Открытие автомобиля можно реализовать двумя способами: с помощью мобильного приложения или поднеся пластиковую ID карту к индикатору на лобовом стекле.

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

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

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

В данном случае водитель подъезжает к заправке, выбирает из меню бортового компьютера «заправка». На экране бортового компьютера появляется пин-код к кредитной карте, хранящейся в центральном подлокотнике автомобиля. Клиент после заправки машины идет на кассу и оплачивает бензин с помощью кредитной карты, взятой из автомобиля. За заправку автомобиля клиент получает 30 бонусных минут.

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

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

Таким образом, механизм работы DriveNow устроен следующим образом, пользователи должны зарегистрироваться на сайте, оставить индивидуальные радиометки и прикрепить водительские права. Машину можно найти по приложению для смартфонов или онлайн на компьютере вблизи непосредственного места. Система позволяет бесплатно зарезервировать машину на срок до 15 минут. Когда клиент держит ID карточку в зоне чтения датчика лобового стекло автомобиля, машина открывается. Кроме того, журнал расстояния и время движения, и процесс выставления счетов, запускается автоматически.

1.3 Преимущества и недостатки совместного использования автомобилей

Рассматривая совместное использование автомобилей, можно выявить преимущества и недостатки для окружающей среды и пользователя.

Плюсы краткосрочной аренды автомобиля:

Нет финансовых и временных затрат на владение автомобилем.

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

Дешевле услуг такси или аренды автомобиля.

Поминутная плата за использование транспортного средства.

Не нужно оплачивать городские платные парковки.

Улучшение экологии города за счет отказа от личного автомобиля.

Снижение количества машин на дорогах.

Уменьшение пробок на дорогах.

Эффективное использование автомобиля.

Снижение простоя транспортных средств.

Недостатки совместного использования автомобилей:

Привыкание водителя к габаритам и управлению нового автомобиля.

Клиент должен проверять внешние и внутренние повреждения автомобиля.

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

Машина может не содержать достаточно стеклоомывательной жидкости. Уровень топлива можно отслеживать по мобильному приложению, а уровень жидкости - нельзя.

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

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

Далее было проведено введение в особенности системы DriveNow.

Были представлены преимущества и недостатки краткосрочной аренды автомобилей.

Глава 2. Исследование технических процессов использования автомобиля в системе DriveNow

2.1 Процесс регистрации клиента

Компания DriveNow поддерживает базу данных всех клиентов. В базе данных хранятся имя, фамилия, номер паспорта и место жительства клиента. Для возможности взыскания штрафа с провинившегося клиента организация DriveNow разрешает регистрацию в системе только для жителей Европейского Союза.

Схема базы данных клиентов выглядит следующим образом:

идентификационный номер клиента (первичный ключ): INT

имя клиента: VARCHAR(255)

фамилия клиента: VARCHAR(255)

номер паспорта: INT

номер водительского удостоверения: VARCHAR(255)

адрес электронной почты: VARCHAR(255)

номер мобильного телефона: INT

номер кредитной карты: INT

пароль для доступа к личной странице: VARCHAR(255)

После регистрации клиента обслуживающий персонал DriveNow требует предъявить оригинал паспорта и водительских прав.

Регистрация клиента проходит с помощью многоуровневой аутентификации. После внесения личных данных пользователем на веб-странице DriveNow клиент должен внести присланный на его мобильный телефон код аутентификации и предъявить паспорт с водительскими правами в одном из офисов SIXT или DriveNow. В случае успешной проверки документов клиенту выдают идентификационную карточку с NFС (Near field communication) доступом.

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

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

.2 Процесс резервирования автомобиля

Клиент имеет возможность бесплатно зарезервировать машину на 15 минут. Как правило, резервирование машины осуществляется с помощью мобильного приложения. Приложение определяет положение клиента с помощью GPS-трекера мобильного телефона. Далее приложение посылает запрос серверу DriveNow и получает в ответ список автомобилей, находящихся рядом с клиентом, их местоположение и характеристики, например, количество бензина в баке или степень зарядки электробатареи (рис.5).

Рисунок 5. Процесс поиска автомобилей

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

Рисунок 6. Процесс резервирования автомобиля

Мобильное приложение оповещает клиента об успешном резервировании и запускает таймер на 15 минут.

В том случае, если Сервер DriveNow определяет, что машина была только что зарезервирована другим пользователем, то сервер посылает мобильному приложению отказ в резервировании, и пользователю показывается сообщение, что машина зарезервирована другим пользователем (рис.7).

Рисунок 7. Процесс отказа в резервировании автомобиля

2.3 Процесс заправки автомобиля

Во время езды бортовой компьютер следит за количеством топлива или степенью заряженности автомобиля. Если содержимое бака падает ниже 25%, то водителю показывается сообщение, что в случае заправки автомобиля он получит 30 бонусных минут. Бортовой компьютер показывает на карте ближайшие заправочные станции, с которыми сотрудничает DriveNow. Когда водитель подъезжает к заправочной станции и выключает мотор, бортовой компьютер спрашивает водителя:

хочет ли он завершить аренду?

желает ли он припарковаться, не прекращая аренды?

хочет ли он заправить автомобиль?

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

Рисунок 8. Процесс заправки автомобиля

2.4 Процесс парковки автомобиля

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

через мобильное приложение;

поднеся идентификационную карточку к цветовому датчику под лобовым стеклом автомобиля.

При этом цветовой датчик загорается красным цветом. Бортовой компьютер засекает время парковки и отсылает данное время серверу DriveNow после окончания аренды.

Режим парковки, как правило, дешевле активного использования автомобиля с включенным мотором (рис. 9).

Рисунок 9. UML диаграмма процесса парковки автомобиля

2.5 Процесс завершения аренды автомобиля

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

Общее количество минут использования автомобиля.

Количество минут парковки.

Пройдённое расстояние.

Остаточный уровень содержания топлива в баке или заряд батареи.

После завершения аренды водитель получает е-mail с информацией о стоимости аренды с указанием количества минут в движении и длительности парковки (рис.10).

Рисунок 10. UML диаграмма процесса завершения аренды автомобиля

.6 Процесс технического обслуживания автомобиля

Процесс технического облуживания автомобиля включает в себя следующие задачи:

Заправка автомобиля (в том случае, если при завершении аренды клиент не заправил машину, и она не может доехать до ближайшей заправки).

Восполнение запаса жидкости для стеклоомывателя.

Сезонная замена шин.

Периодическое обслуживание автомобиля (замена масла, тормозных колодок и т.д.).

Осмотр и учет повреждений машины.

Водитель автомобиля DriveNow получает 30 бонусных минут, если содержание бака к началу аренды или во время движения падает ниже отметки 25% и если он заправляет машину. При завершении аренды минимальный остаточный пробег машины должен быть больше 15 км. В противном случае, следующий клиент, возможно, не сможет доехать до ближайшей заправки, и водитель, оставивший машину не заправленной, должен будет оплатить затраты на ручную заправку автомобиля.

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

Рисунок 11. UML диаграмма процесса заправки автомобиля техническим персоналом

Клиент не получает дополнительных бонусных минут, если при заправке он заливает жидкость для промывания лобового стекла. Это приводит к тому, что во многих автомобилях отсутствует эта жидкость, что приводит к трудностям вождения в плохую погоду. Жидкость заполняется обслуживающим персоналом, если необходимо иное техническое обслуживание машины.

Сезонная замена шин также производится обслуживающим персоналом. Сотрудники DriveNow резервируют и отвозят машину в центр технического обслуживания для выполнения сезонных работ.

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

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

.7 Процесс передачи автомобиля следующему водителю

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

Рисунок 12. UML диаграмма процесса передачи автомобиля следующему водителю

Во второй главе было произведено детальное описание существующих бизнес-процессов, а именно:

регистрация клиента;

резервирование автомобиля;

заправка автомобиля;

парковка автомобиля;

завершение аренды автомобиля;

техническое обслуживание автомобиля;

передача автомобиля следующему водителю.

На основе данного исследования можно оценить принцип работы системы DriveNow и выявить возможности усовершенствования.

Глава 3. Предложения по усовершенствованию бизнес-процессов в системе DriveNow

3.1 Усовершенствование процесса резервирования автомобиля

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

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

Рисунок 13. UML диаграмма улучшенного процесса резервирования автомобиля

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

Данное изменение будет отражать доступность машин в реальном времени и повысит удобство работы пользователя с мобильным приложением.

.2 Онлайн-оплата заправки автомобилем

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

Текущая система DriveNow устроена таким образом, что при выключении мотора водителю задается стандартный вопрос независимо от того, где он находится. Но если клиент выключает мотор на заправочной станции, то разумно было бы предположить, что он намерен заправить машину. Бортовой компьютер автомобиля мог бы постоянно отслеживать местоположение машины, сверять положение с заправочными станциями-партнерами и в случае выключения мотора предлагать водителю активировать режим заправки, а не парковки или окончания аренды (рис.14).

Рисунок 14. UML диаграмма процесса распознавания местоположения на заправке автомобиля

Данное изменение повысит удобство работы с бортовым компьютером в случае заправки автомобиля.

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

Рисунок 15. UML диаграмма процесса проверки уровня стеклоомывательной жидкости

Данное изменение повысит комфорт вождения автомобилем в плохую погоду и избавит обслуживающий персонал DriveNow от необходимости заполнять стеклоомывательную жидкость.

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

Онлайн-оплата заправки автомобилем может выглядеть следующим образом. После наполнения бака топливом водитель садится в машину и выбирает в бортовом компьютере режим онлайн-оплаты, вводя номер заправочной колонки. Бортовой компьютер связывается с сервером DriveNow, посылает серверу свое местоположение, название заправочной станции и номер заправочной колонки. Сервер DriveNow, в свою очередь, устанавливает связь с кассовой системой заправочной станции, запрашивает стоимость топлива, заправленного на данной колонке, и переводит деньги на счет кассовой системы, тем самым оплачивая заправленное топливо. Кассовая система принимает платеж и подтверждает успешное получение платежа серверу DriveNow. Cервер DriveNow отсылает бортовому компьютеру автомобиля разрешение снова завести мотор. Только после этого у водителя появляется возможность завести мотор и уехать (рис.16). В случае отсутствия онлайн-соединения бортового компьютера с сервером DriveNow или каких-либо других технических неполадок, водитель должен произвести оплату кредитной картой.

Рисунок 16.UML диаграмма онлайн-оплаты заправки автомобилем

Данное изменение позволит производить оплату более быстрым и удобным для клиента способом.

.3 Усовершенствование процесса парковки автомобиля

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

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

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

Рисунок 17. UML диаграмма улучшенного процесса парковки автомобиля

Данное изменение повысит удобство в пользовании автомобиля клиентом.

.4 Техническое обслуживание автомобиля без обслуживающего персонала

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

Рисунок 18. UML диаграмма процесса технического обслуживания автомобиля без обслуживающего персонала

Оптимизация процесса передачи автомобиля следующему водителю

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

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

Рисунок 19. UML диаграмма процесса передачи автомобиля, инициируемая водителем

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

Рисунок 20. UML диаграмма процесса передачи автомобиля, инициируемая клиентом, ищущем машину

Исходя из этого два водителя могут легче и быстрее найти друг друга. Инициатива передачи автомобиля может исходить от обеих сторон.

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

резервирование автомобиля;

онлайн-оплата заправки автомобилем;

парковка автомобиля;

техническое обслуживание автомобиля без обслуживающего персонала;

передача автомобиля следующему водителю.

Глава 4. Моделирование краткосрочной аренды машин

4.1 Описание входных параметров программы

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

Карта города представляется в виде прямоугольника. Параметрами программы служат ширина и длина города в километрах. В том случае, если пользователь не указывает данные параметры, по умолчанию программа выбирает размеры среднего европейского города, длинной 20 километров и шириной 15 километров. Все параметры по умолчанию указаны в приложении 1 «Входные параметры программы». Также параметром программы служит количество автомобилей, используемых для совместного использования. В начальном состоянии программы первичное положение машин в городе симулируется с помощью непрерывного равномерного распределения. Непрерывное равномерное распределение выбрано, чтобы в начале работы программы машины были разбросаны равномерно, с равной вероятностью как в центре, так и на окраинах города.

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

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

Рисунок 21. График плотности стандартного нормального распределения. (statanaliz.info)

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

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

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

Приложение симулирует расход топлива каждого автомобиля. Для этого делается предположение о среднем размере бака автомобиля и о расходе бензина на 100 км. В случае, если содержимое бака автомобиля составляет меньше 25%, водителю, заправившему автомобиль, предоставляются бонусные минуты. Будет ли заправлен автомобиль клиентом или нет, моделируется с помощью вероятности, являющейся параметром программы.

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

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

.2 Результаты проведения симуляционных экспериментов

В январе 2017 года компания DriveNow увеличила количество бонусных минут для заправки автомобиля с 20 до 30 минут. Таким образом, вероятность заправки автомобиля клиентом возросла. Реализованная симуляционная модель показывает, что несмотря на увеличенные расходы в связи с ростом бонусных минут снижаются простой автомобилей и затраты на заправку автомобилей обслуживающим персоналом. Таким образом, растет итоговая прибыль компании (табл. 1, 2).

Таблица 1 - Результат эксперимента с 20 бонусными минутами

название параметра

значение параметра

Количество используемых автомобилей

100

Продолжительность симуляции в минутах

43200 (30 дней)

Количество бонусных минут

20

Выручка от аренды машин в евро

108195

Выручка от парковки машин в евро

24215

Затраты на бонусные минуты в евро

2918

Затраты на заправку машин в евро

15700

Итоговая выручка в евро

113792


Таблица 2 - Результат эксперимента с 30 бонусными минутами

название параметразначение параметра


Количество используемых автомобилей

100

Продолжительность симуляции в минутах

43200 (30 дней)

Количество бонусных минут

30

Выручка от аренды машин в евро

113766

Выручка от парковки машин в евро

25374

Затраты на бонусные минуты в евро

3100

Затраты на заправку машин в евро

3650

Итоговая выручка в евро

132390


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

Таблица 3 - Результат эксперимента обслуживания автомобиля персоналом

название параметра

значение параметра

Количество используемых автомобилей

100

Продолжительность симуляции в минутах

43200 (30 дней)

Количество бонусных минут

30

114182

Выручка от парковки машин в евро

24679

Затраты на бонусные минуты в евро

3062

Затраты на заправку машин в евро

4900

Затраты на одну поездку в сервисный центр в евро

100

Количество поездок в сервисный центр

25

Затраты на поездки в сервисный центр в евро

2500

Итоговая выручка в евро

128399


Таблица 4 - Результат эксперимента обслуживания автомобиля клиентами за бонусные минуты

название параметра

значение параметра

Количество используемых автомобилей

100

Продолжительность симуляции в минутах

43200 (30 дней)

Количество бонусных минут

30

Выручка от аренды машин в евро

114182

Выручка от парковки машин в евро

24679

Затраты на бонусные минуты в евро

3062

Затраты на заправку машин в евро

4900

Количество бонусных минут для поездки в сервисный центр

120

Количество поездок в сервисный центр

25

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

960

Итоговая выручка в евро

129939


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

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

Глава 5. Анализ рисков системы, использующей усовершенствованные бизнес-процессы

5.1 Информационная безопасность

К автомобилям и к связанным с ними информационным системам предъявляются повышенные требования по надежности и безопасности. В дальнейшем будут рассмотрены вопросы информационной безопасности в области совместного использования автомобилей.

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

С точки зрения информационной безопасности бортовой компьютер машины должен выполнять требования по:

конфиденциальности передаваемых данных;

выполнять аутентификацию клиента;

обеспечивать невозможность отказа от совершенных водителем действий;

гарантировать целостность передаваемых данных.

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

Аутентификация клиента подразумевает проверку личности водителя перед резервированием автомобиля и перед запуском мотора.

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

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

Конфиденциальность передаваемых данных обеспечивается с помощью использования криптографических протоколов транспортного уровня (TLS/ SSL), гарантирующих защищенную передачу данных.

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

Использование цифровой подписи, встроенной в мобильное приложение клиента, и уникальность пин-кодов обеспечивает невозможность отказа от совершенных действий.

Применение современных технологий для обеспечения безопасности транспортного уровня (TLS/ SSL) подразумевает использование кодов аутентичности сообщений, что гарантирует сохранение целостности сообщений.

.2 Анализ рисков

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

В случае усовершенствованного процесса резервирования автомобиля добавляются дополнительные сообщения для коммуникации между мобильным телефоном и сервером DriveNow. Это незначительно увеличит сложность бизнес-логики мобильного приложения и сложность поведения сервера DriveNow.

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

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

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

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

Заключение

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

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

В ходе работы были достигнуты следующие результаты:

оценена актуальность выбранной темы и важность ее анализа;

произведен анализ бизнес-процессов краткосрочной аренды машин, были выявлены недостатки данных процессов;

проведено детализирование процессов совместного использования автомобилей в компании DriveNow и построение их текущих моделей с помощью UML диаграмм;

сформированы требования, приводящие к усовершенствованию бизнес-процессов;

созданы будущие модели измененных бизнес-процессов;

было описано концептуальное проектирование системы;

было реализовано приложение на языке С++, симулирующее процесс краткосрочной аренды автомобилей;

были описаны аспекты информационной безопасности системы;

были учтены риски использования новых процессов.

При выполнении магистерской диссертации были применены практические и теоретические навыки. Были достигнуты цели и задачи магистерской диссертации.

В результате работы были разработаны решения более эффективного использования автомобилей DriveNow благодаря расширению существующей системы.

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

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

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

Список литературы

1.      "Bringing Carsharing to your Community", компания City Car Share, 2016.

.        "DriveNow Tarife und Pakete", блог DriveNow 2017.

.        M. Land, “Nutzen statt Kaufen. Auswirkungen der Sharing Economy auf die Automobilindustrie. Car-Sharing”. - M.: Издательство Фрезениус, 2016 .

4.      M. Borchardt, “Mobilität vs. Nachhaltigkeit. Soziale, ökologische und ökonomische Auswirkungen des Car-Sharing”, Бремен 2011..         Gebauer, “Car-Sharing - Die Fortbewegungsart von morgen?: Eine empirische Studie zur eigentumslosen Fortbewegungsart aus der Sicht von Laien und Experten”, Akademikerverlag 2014.

5.      “DriveNow”, DriveNow Blog.

.        Немецкий федеративный союз краткосрочной аренды машин. Carsharing [Электронный ресурс] / Википедия - свободная энциклопедия. - URL: https://en.wikipedia.org/wiki/Carsharing. (Дата обращения: 10.12.16).

7.      Seeing the back of the car // The Economist, 2012.

.        M. Gibbs,T. Nick, Car2Go poised to top 1-million users // Automotive News, 2014.

.        Car sharing today [Электронный ресурс] / BGG Website - Официальный сайт BGG. - URL: https://www.bcg.com/careers/path/knowledge-analytics/default.aspx (Дата обращения: 06.01.17).

.        J. Fingas. BMW DriveNow EV car sharing comes to San Francisco Bay Area, ParkNow follows suit // Engadged, 2013.

.        DriveNow Munich [Электронный ресурс] / DriveNow Website -Официальный сайт DriveNow. - URL: https://www.drive-now.com/gb/en/london#!/carsharing/munich (Дата обращения: 08.01.17).

12.    Car sharing/ Дж. Рассел, Р. Кон. - M.: Издательство пер. с англ. - Буквика паблишинг, 2012. -130 c.

.        Новости car sharing [Электронный ресурс] / Carsharing Association -Ассоциация по car sharing. - URL: http://carsharing.org/news/. (Дата обращения: 25.11.16).

.        Процессный подход к управлению. Моделирование, внедрение, управление. / Репин В. В. - M.: Издательство Манн, Иванов и Фербер, 2013. - 544 c.

15.    Designing Concurrent, Distributed, and Real-Time Applications with UML/. Х.Гома. . - M.: Издательство ДМК Пресс, 2017. - 700 c.

16.    UML distilled second edition/. M. Fowler, K. Scott. - M.: Издательство Addison Wesley, 2013. - 192 c.

.        Die UML-Kurzreferenz 2.3 für die Praxis/. B. Oestereich.- M.: Издательство Oldenbourg Wissenschaftsverlag, 2009. - 198 c.

.        UML online [Электронный ресурс] / PlantUML in a nutshell - URL: http://plantuml.com. (Дата обращения: 15.11.16).

19.    Моделирование бизнес-процессов. Учебник и практикум/ О.Долобанов, Е. Виноградов, А. Лобанова- M.: Издательство Юрайт, 2016. - 290 c.

.        Основы менеджмента. / Мескон, Альберт, Хедоури. - M.: Издательство Вильям, 2016. - 720 c.

.        Стратегический менеджмент: концепции и ситуации для анализа/. Томпсон-мл., Стрикленд ІІІ. - M.: Издательство Вильям, 2007. - 928 c.

.        Стратегическое управление/. Писаренко Н. Л., Длигач А. А. - M.: Издательство МИФ, 2008. - 352 c.

.        Путь к снижению затрат и повышению качества/ Масааки И. Гемба. - M.: Издательство пер. с англ. -Альпина Бизнес Букс, 2015. - 424 c.

.        Курс теории вероятностей и математической статистики: учебник для студентов высших учебных заведений, обучающихся по специальностям «математика» и «механика»/ Б.А. Севастьянов, главная редакция физико-математической литературы, 1982. - 198 с.

.        Основы имитационного моделирования сложных экономических систем/ Н. Кобелев. - M.: Издательство Дело, 2006. - 336 c.

.        Вероятность - 1: учебник для студентов высших учебных заведений, обучающихся по физико-математическим направлениям специальностям/ А.Н. Ширяев. - M.: Издательство МЦНМО, 2007. - 240 с.

.        Вероятность - 2: учебник для студентов высших учебных заведений, обучающихся по физико-математическим направлениям специальностям/ А.Н. Ширяев.- M.: Издательство МЦНМО, 2007. - 198 с.

.        Программирование: принципы и практика использования C++/. Б. Страуструп. - М.: Издательство Вильямс, 2011. - 1382 с.

29.    Thinking in C++ second edition/ Volume One: Introduction to standard C++/. B. Eckel. - M.: Издательство Prentice Hall, 2000. - 857 с.

30.    The C++ Standard Library/. Nikolai M. Josuttis. - M.: Издательство Addison-Wesley, 2006. - 1136 с.

.        Teach Youself C++/. J. Liberty, B. Jones. - M.: Издательство Sams, 2005. - 768 с.

.        More effective C++/. S. Meyers. - M.: Издательство Addison-Wesley, 2015. - 653 с.

.        Eclipse: Building Commercial-Quality Plug-ins/ E. Clayberg, D. Rubel. - M.: Издательство Addison-Wesley, 2006. - 1142 с.

34.    Eclipse. Платформа Web-инструментов/. Н. Дей, Л. Мандел, Артур. - M.: Издательство КУДИЦ-Пресс, 2008. - 688 с.

.        Расширения Eclipse. Принципы, шаблоны и подключаемые модули/. К. Бек, Э. Гамма. - M.: Издательство Кудиц, 2006. - 384 с.

.        Eclipse IDE/. Э. Барнет. - M.: Издательство Кудиц, 2006. - 160 с.

.        Pro Git/. S. Chacon. - M.: Издательство Apress, 2009. - 598 с.

.        Бизнес-информатика: немецкий взгляд на характеристики, проблемные области и возможности/ Д. Штельцер. - M.: Издательство Синергия, 2015. - 458 c.

Приложение 1

Входные параметры программы

Входные параметры программы

Название параметра

Значение параметра

Длина города в км

20

Ширина города в км

15

Количество используемых автомобилей

500

Продолжительность симуляции в минутах

43200 (30 дней)

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

0,01

Вероятность ночного использования машины в начале симуляционного шага

0,001

Средняя скорость движения автомобиля в км/ч

30

Максимальное количество минут парковки

15

Средний размер бака автомобиля в литрах

50

Средний расход бензина автомобиля в литрах на 100 км

8

Верхняя граница содержимого бака для получения бонусных минут в процентах

25

Вероятность заправки автомобиля клиентом

0,05

Количество бонусных минут после заправки автомобиля

30

Затраты в евро на обслуживающий персонал в час

20

Стоимость минуты аренды машины в евро

0,32

Стоимость минуты парковки машины в евро

0,15



Приложение 2

Исходный код программы

*************************************************CarInfo.h:

#ifndef CARINFO_H_

#define CARINFO_H_drivenow

{

/**

* Class containing all car properties

*/CarInfo

{:()

{= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= false;

}currentPositionX;currentPositionY;targetPositionX;targetPositionY;totalDistance;totalDriveDurationMinutes;restDistance;restDriveDurationMinutes;totalNumberOfParkingMinutes;restNumberOfParkingMinutes;tankFillStateLiter;mileage;numberOfNoRefuels;inUse;

};

} /* namespace drivenow */

#endif /* CARINFO_H_ */

*************************************************DefaultValues.h:

#ifndef DEFAULTVALUES_H_

#define DEFAULTVALUES_H_

/**

* Default values that are used if no command line parameters are specified

*/

#define CITY_WIDTH_KM 15

#define CITY_HEIGHT_KM 20

#define NUMBER_OF_CARS 100

#define SIMULATION_TIME_MIN (60 * 24 * 30)

#define CAR_USAGE_PROBABILITY 0.01

#define CAR_AVERAGE_SPEED_KMH 30.0

#define DRIVING_MINUTE_PRICE_EURO 0.32

#define PARKING_MINUTE_PRICE_EURO 0.15

#define REFUEL_PROBABILITY 0.06

#define MAX_PARKING_DURATION_MIN 15

#define TANK_SIZE_L 50.0

#define FUEL_USAGE_100KM 8.0

#define TANK_FILL_LEVEL_TO_GET_BONUS_MINUTES 25.0

#define REFUEL_DURATION_MIN 5

#define NEXT_REFUEL_STATION_DISTANCE_KM 10.0

#define NUMBER_OF_BONUS_MINUTES 30

#define MANUAL_REFUEL_COSTS 50.0

#define DURATION_TO_BECOME_EMPTY_CAR_MIN 60

#define SERVICE_VISITS_COSTS 100.0

#define SERVICE_VISIT_PROBABILITY 0.001

#define NUMBER_OF_BONUS_MINUTES_FOR_SERVICE_VISIT 120

#endif /* DEFAULTVALUES_H_ */

*************************************************Parameters.h:

#ifndef PARAMETERS_H_

#define PARAMETERS_H_drivenow

{

/**

* Command line parameters that can be specified by user

*/Parameters

{:()

{= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;= 0;km = 0;= 0;= 0;= 0;

}const int MAX_LOG_FILE_NAME = 1024;cityWidth;cityHeight;numberOfCars;simulationTimeMin;carUsageProbability;carAverageSpeedKmh;drivingMinutePriceEuro;parkingMinutePriceEuro;refuelProbability;maxParkingDurationMin;tankSizeL;fuelUsage100km;tankFillLevelToGetBonusMinutes;refuelDurationMin;nextRefuelStationDistanceKm;

};

} /* namespace drivenow */

#endif /* PARAMETERS_H_ */

*************************************************Parser.h:

#ifndef PARSER_H_

#define PARSER_H_drivenow

{Parameters;

/**

* Class used to parse command line parameters

*/Parser

{:

/**

* Prints command line parameters

* @param outputFileDescriptor file descriptor to log file

* @param argc number of command line parameters

* @param argv array of command line parameters

*/void printCommandLineParameters(* outputFileDescriptor,argc,** argv);

/**

* Parses command line parameters

* @param outputFileDescriptor file descriptor to log file

* @param argc number of command line parameters

* @param argv array of command line parameters

* @param parameters object containing all command line parameters

*/void parseCommandLineParameters(* outputFileDescriptor,argc,** argv,& parameters);

};

} /* namespace drivenow */

#endif /* PARSER_H_ */

*************************************************Parser.cpp:

#include "DefaultValues.h"

#include <cstdio>

#include <cstring>

#include <cstdlib>

#include "Parameters.h"

#include "Parser.h"drivenow

{

/**

* Prints C-style command line parameters

* @param outputFileDescriptor file descriptor for output file

* @param argc number of arguments

* @param argv command line parameters (array of strings)

*/Parser::printCommandLineParameters(* outputFileDescriptor,argc,** argv)

{(outputFileDescriptor == 0L)

{("printCommandLineParameters(): empty file descriptor\n");

}(outputFileDescriptor, "Command line parameters:\n");(int i = 0; i < argc; ++i)

{(outputFileDescriptor, "%d: %s\n", i, argv[i]);

}(outputFileDescriptor, "\n");

}

/**

* Parses C-style command line parameters

* @param outputFileDescriptor file descriptor for output file

* @param argc number of arguments

* @param argv command line parameters (array of strings)

* @param parameters reference to class containing all parameters

*/Parser::parseCommandLineParameters(* outputFileDescriptor,argc,** argv,& parameters)

{(outputFileDescriptor == 0L)

{("parseCommandLineParameters(): empty file descriptor\n");

}(int i = 1; i < argc; ++i)

{(strstr(argv[i], "-cityWidthKm=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.cityWidth = atoi(&str[1]);

}

}if (strstr(argv[i], "-cityHeightKm=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.cityHeight = atoi(&str[1]);

}

}if (strstr(argv[i], "-numberOfCars=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.numberOfCars = atoi(&str[1]);

}

}if (strstr(argv[i], "-simulationTimeMin=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.simulationTimeMin = atoi(&str[1]);

}

}if (strstr(argv[i], "-carUsageProbability=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.carUsageProbability = atof(&str[1]);

}

}if (strstr(argv[i], "-carAverageSpeedKmh=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.carAverageSpeedKmh = atof(&str[1]);

}

}if (strstr(argv[i], "-drivingMinutePriceEuro=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.drivingMinutePriceEuro = atof(&str[1]);

}

}if (strstr(argv[i], "-parkingMinutePriceEuro=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.parkingMinutePriceEuro = atof(&str[1]);

}

}if (strstr(argv[i], "-refuelProbability=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.refuelProbability = atof(&str[1]);

}

}if (strstr(argv[i], "-maxParkingDurationMin=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.maxParkingDurationMin = atoi(&str[1]);

}

}if (strstr(argv[i], "-tankSizeL=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.tankSizeL = atof(&str[1]);

}

}if (strstr(argv[i], "-fuelUsage100km=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.fuelUsage100km = atof(&str[1]);

}

}if (strstr(argv[i], "-tankFillLevelToGetBonusMinutes=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.tankFillLevelToGetBonusMinutes = atof(&str[1]);

}

}if (strstr(argv[i], "-refuelDurationMin=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.refuelDurationMin = atoi(&str[1]);

}

}if (strstr(argv[i], "-nextRefuelStationDistanceKm=") != NULL)

{char* str = strstr(argv[i], "=");(str != NULL)

{.nextRefuelStationDistanceKm = atof(&str[1]);

}

}

}(parameters.cityWidth == 0)

{(outputFileDescriptor, "taking default value %d for city width\n", CITY_WIDTH_KM);.cityWidth = CITY_WIDTH_KM;

}(outputFileDescriptor, "city width = %d km\n", parameters.cityWidth);(parameters.cityHeight == 0)

{(outputFileDescriptor, "taking default value %d for city height\n", CITY_HEIGHT_KM);.cityHeight = CITY_HEIGHT_KM;

}(outputFileDescriptor, "city height = %d km\n", parameters.cityHeight);(parameters.numberOfCars == 0)

{(outputFileDescriptor, "taking default value %d for number of cars\n", NUMBER_OF_CARS);.numberOfCars = NUMBER_OF_CARS;

}(outputFileDescriptor, "number of cars = %d\n", parameters.numberOfCars);(parameters.simulationTimeMin == 0)

{(outputFileDescriptor, "taking default value %d for number of cars\n", SIMULATION_TIME_MIN);.simulationTimeMin = SIMULATION_TIME_MIN;

}(outputFileDescriptor, "simulation time = %d min\n", parameters.simulationTimeMin);(parameters.carUsageProbability == 0)

{(outputFileDescriptor, "taking default value %.02f for car usage probability\n", CAR_USAGE_PROBABILITY);.carUsageProbability = CAR_USAGE_PROBABILITY;

}(outputFileDescriptor, "car usage probability = %.02f\n", parameters.carUsageProbability);(parameters.carAverageSpeedKmh == 0)

{(outputFileDescriptor, "taking default value %02.02f for car average speed\n", CAR_AVERAGE_SPEED_KMH);.carAverageSpeedKmh = CAR_AVERAGE_SPEED_KMH;

}(outputFileDescriptor, "car average speed = %02.02f km/h\n", parameters.carAverageSpeedKmh);(parameters.drivingMinutePriceEuro == 0)

{(outputFileDescriptor, "taking default value %02.02f for driving minute price\n", DRIVING_MINUTE_PRICE_EURO);.drivingMinutePriceEuro = DRIVING_MINUTE_PRICE_EURO;

}(outputFileDescriptor, "driving minute price = %02.02f Euro\n", parameters.drivingMinutePriceEuro);(parameters.parkingMinutePriceEuro == 0)

{(outputFileDescriptor, "taking default value %02.02f for parking minute price\n", PARKING_MINUTE_PRICE_EURO);.parkingMinutePriceEuro = PARKING_MINUTE_PRICE_EURO;

}(outputFileDescriptor, "parking minute price = %02.02f Euro\n", parameters.parkingMinutePriceEuro);(parameters.refuelProbability == 0)

{(outputFileDescriptor, "taking default value %02.02f for refuel probability\n", REFUEL_PROBABILITY);.refuelProbability = REFUEL_PROBABILITY;

}(outputFileDescriptor, "refuel probability = %02.02f\n", parameters.refuelProbability);(parameters.maxParkingDurationMin == 0)

}(outputFileDescriptor, "max parking duration = %d min\n", parameters.maxParkingDurationMin);(parameters.tankSizeL == 0)

{(outputFileDescriptor, "taking default value %02.02f for tank size\n", TANK_SIZE_L);.tankSizeL = TANK_SIZE_L;

}(outputFileDescriptor, "tank size = %02.02f L\n", parameters.tankSizeL);(parameters.fuelUsage100km == 0)

{(outputFileDescriptor, "taking default value %02.02f for fuel usage/100km\n", FUEL_USAGE_100KM);.fuelUsage100km = FUEL_USAGE_100KM;

}(outputFileDescriptor, "fuel usage/100km = %02.02f L\n", parameters.fuelUsage100km);(parameters.tankFillLevelToGetBonusMinutes == 0)

{(outputFileDescriptor, "taking default value %02.02f for tank fill level to get bonus minutes\n", TANK_FILL_LEVEL_TO_GET_BONUS_MINUTES);.tankFillLevelToGetBonusMinutes = TANK_FILL_LEVEL_TO_GET_BONUS_MINUTES;

}(outputFileDescriptor, "tank fill level to get bonus minutes = %02.02f %%\n", parameters.tankFillLevelToGetBonusMinutes);(parameters.refuelDurationMin == 0)

{(outputFileDescriptor, "taking default value %d for refuel duration\n", REFUEL_DURATION_MIN);.refuelDurationMin = REFUEL_DURATION_MIN;

}(outputFileDescriptor, "refuel duration = %d min\n", parameters.refuelDurationMin);(parameters.nextRefuelStationDistanceKm == 0)

{(outputFileDescriptor, "taking default value %02.02f for next refuel station distance\n", NEXT_REFUEL_STATION_DISTANCE_KM);.nextRefuelStationDistanceKm = NEXT_REFUEL_STATION_DISTANCE_KM;

}(outputFileDescriptor, "next refuel station distance = %02.02f km\n", parameters.nextRefuelStationDistanceKm);(outputFileDescriptor, "\n");

}

} /* namespace drivenow */

*************************************************RandomNumberGenerator.h:

#ifndef RANDOMNUMBERGENERATOR_H_

#define RANDOMNUMBERGENERATOR_H_drivenow

{

/**

* Class used to get random numbers

*/RandomNumberGenerator

{:

/**

* Returns uniformely distributed random number in [0.0, 1.0]

*/float getUniformDistributedRandomNumber(void);

/**

* Returns standard distributed random number

*/float getStandardDistributedRandomNumber(void);

};

} /* namespace drivenow */

#endif /* RANDOMNUMBERGENERATOR_H_ */

*************************************************RandomNumberGenerator.cpp:

#include "RandomNumberGenerator.h"

#include <cstdlib>

#include <cmath>drivenow

{RandomNumberGenerator::getUniformDistributedRandomNumber(void)

{random_variable = rand();f1 = (float) random_variable;f2 = (float) RAND_MAX;f3 = f1 / f2;f3;

}RandomNumberGenerator::getStandardDistributedRandomNumber(void)

{u1 = getUniformDistributedRandomNumber();u2 = getUniformDistributedRandomNumber();cos(2 * 3.14 * u1) * sqrt(-2.0 * log(u2));

}

} /* namespace drivenow */

*************************************************Simulator.h:

#ifndef SIMULATOR_H_

#define SIMULATOR_H_

#include <cstdio>

#include <vector>

#include "Parameters.h"

#include "CarInfo.h"drivenow

{

/**

* Class used to simulate drive now process of cars rental

*/Simulator

{:

/**

* Randomly generates start position for all cars

* @param parameters object containing all command line parameters

* @param cars vector of all cars

*/void generateStartPosition(Parameters& parameters,::vector<CarInfo>& cars);

/**

* Randomely chooses cars that will be used by clients

* @param outputFileDescriptor file descriptor to log file

* @param parameters object containing all command line parameters

* @param cars vector of all cars

* @param currentTime current time

* @param numberOfBonusMinutes total number of bonus minutes given to all clients

* @param numberOfEmptyCars total number of empty cars where manual refuel is needed

* @param numberOfServiceVisits total number of service visits

*/void chooseCarsForDriving(* outputFileDescriptor,Parameters& parameters,::vector<CarInfo>& cars,currentTime,& numberOfBonusMinutes,& numberOfEmptyCars,& numberOfServiceVisits);

/**

* Simulates car driving process, updates car position, car fuel state

* @param outputFileDescriptor file descriptor to log file

* @param parameters object containing all command line parameters

* @param cars vector of all cars

* @param numberOfDrivingMinutes total number of driving minutes of all clients

* @param numberOfParkingMinutes total number of parking minutes of all clients

*/void driveCars(* outputFileDescriptor,Parameters& parameters,::vector<CarInfo>& cars,& numberOfDrivingMinutes,& numberOfParkingMinutes);

/**

* Prints current car information

* @param outputFileDescriptor file descriptor to log file

* @param parameters object containing all command line parameters

* @param cars vector of all cars

*/void printCarInformation(* outputFileDescriptor,Parameters& parameters,::vector<CarInfo>& cars);

};

} /* namespace drivenow */

#endif /* SIMULATOR_H_ */

*************************************************Simulator.cpp:

#include "DefaultValues.h"

#include <cmath>

#include "Simulator.h"

#include "RandomNumberGenerator.h"

#include "Utilities.h"namespace std;drivenow

{Simulator::generateStartPosition(Parameters& parameters,<CarInfo>& cars)

{(int i = 0; i < parameters.numberOfCars; ++i)

{CarInfo& car = cars[i];.currentPositionX = RandomNumberGenerator::getUniformDistributedRandomNumber() * parameters.cityWidth;.currentPositionY = RandomNumberGenerator::getUniformDistributedRandomNumber() * parameters.cityHeight;.targetPositionX = 0;.targetPositionY = 0;.totalNumberOfParkingMinutes = 0;.restNumberOfParkingMinutes = 0;.tankFillStateLiter = parameters.tankSizeL;.mileage = 0;.inUse = false;

}

}Simulator::chooseCarsForDriving(* outputFileDescriptor,Parameters& parameters,<CarInfo>& cars,currentTime,& numberOfBonusMinutes,& numberOfEmptyCars,& numberOfServiceVisits)

{(int i = 0; i < parameters.numberOfCars; ++i)

{CarInfo& car = cars[i];(!car.inUse)

{carUsageProbability = RandomNumberGenerator::getUniformDistributedRandomNumber();

//simulate lower night car usage probabilitydayTime = currentTime % (24 * 60);(dayTime > 18 * 60)

{*= 10.0;

}(carUsageProbability < parameters.carUsageProbability)

{refuelWillBeDone = false;(Utilities::getTankFillState(parameters, car) < parameters.tankFillLevelToGetBonusMinutes)

{(RandomNumberGenerator::getUniformDistributedRandomNumber() < parameters.refuelProbability)

{= true;.numberOfNoRefuels = 0;

}

{

++car.numberOfNoRefuels;(car.numberOfNoRefuels >= DURATION_TO_BECOME_EMPTY_CAR_MIN)

{

++numberOfEmptyCars;

};

}

}(RandomNumberGenerator::getUniformDistributedRandomNumber() < SERVICE_VISIT_PROBABILITY)

{

++numberOfServiceVisits;

}targetPositionX;targetPositionY;numberOfRetries = 0;(numberOfRetries < 3)

{radius;(parameters.cityWidth < parameters.cityHeight)

{= parameters.cityWidth;

}

{= parameters.cityHeight;

}/= 4.0;centerX = parameters.cityWidth / 2.0;centerY = parameters.cityHeight / 2.0;dx = centerX - car.currentPositionX;dy = centerY - car.currentPositionY;(dx * dx + dy * dy <= radius * radius)

{

//car is in center= RandomNumberGenerator::getUniformDistributedRandomNumber() * parameters.cityWidth;= RandomNumberGenerator::getUniformDistributedRandomNumber() * parameters.cityHeight;

}

{

//car is not in centerr1 = RandomNumberGenerator::getStandardDistributedRandomNumber();r2 = RandomNumberGenerator::getStandardDistributedRandomNumber();(r1 >= 1.0 || r1 <= -1.0 || r2 >= 1.0 || r2 <= -1.0)

{= parameters.cityWidth / 4.0 + 2.0 * radius * RandomNumberGenerator::getUniformDistributedRandomNumber();= parameters.cityHeight / 4.0 + 2.0 * radius * RandomNumberGenerator::getUniformDistributedRandomNumber();

}

{= centerX + r1 * parameters.cityWidth / 4.0;= centerY + r2 * parameters.cityHeight / 4.0;

}

}(targetPositionX != car.currentPositionX

&& targetPositionY != car.currentPositionY)

{;

}

++numberOfRetries;

}(targetPositionX == car.currentPositionX

&& targetPositionY == car.currentPositionY)

{;

}.inUse = true;.targetPositionX = targetPositionX;.targetPositionY = targetPositionY;x1 = car.currentPositionX;x2 = car.targetPositionX;dx = x2 - x1;y1 = car.currentPositionY;y2 = car.targetPositionY;dy = y2 - y1;.totalDistance = sqrt(dx * dx + dy * dy);(refuelWillBeDone)

{.totalDistance += parameters.nextRefuelStationDistanceKm;

}.totalDriveDurationMinutes = car.totalDistance / (parameters.carAverageSpeedKmh / 60.0);(car.totalDriveDurationMinutes == 0)

{.totalDriveDurationMinutes = 1;

}.restDistance = car.totalDistance;.restDriveDurationMinutes = car.totalDriveDurationMinutes;.totalNumberOfParkingMinutes = (int) (RandomNumberGenerator::getUniformDistributedRandomNumber() * parameters.maxParkingDurationMin);(refuelWillBeDone)

{.totalNumberOfParkingMinutes += parameters.refuelDurationMin;.tankFillStateLiter = parameters.tankSizeL;+= NUMBER_OF_BONUS_MINUTES;(outputFileDescriptor, "Refuel of car %d\n", i + 1);

}.restNumberOfParkingMinutes = car.totalNumberOfParkingMinutes;

}

}

}

}Simulator::driveCars(* outputFileDescriptor,Parameters& parameters,<CarInfo>& cars,& numberOfDrivingMinutes,& numberOfParkingMinutes)

{(int i = 0; i < parameters.numberOfCars; ++i)

{& car = cars[i];(car.inUse)

{(car.restDriveDurationMinutes >= 1)

{

-car.restDriveDurationMinutes;distance1min = car.totalDistance / car.totalDriveDurationMinutes;.restDistance -= distance1min;spentFuel = distance1min * parameters.fuelUsage100km / 100.0;.tankFillStateLiter -= spentFuel;

}

{(car.restNumberOfParkingMinutes >= 1)

{

-car.restNumberOfParkingMinutes;

}

{(outputFileDescriptor, "CAR %d ARRIVED (adding %d min)!\n", i + 1, car.totalDriveDurationMinutes);.inUse = false;.restDistance = 0.0;+= car.totalDriveDurationMinutes;+= car.totalNumberOfParkingMinutes;.mileage += car.totalDistance;.restDistance = 0.0;.totalDistance = 0.0;.restDriveDurationMinutes = 0;.totalDriveDurationMinutes = 0;.targetPositionX = 0;.targetPositionY = 0;.restNumberOfParkingMinutes = 0;.totalNumberOfParkingMinutes = 0;

}

}

}

}

}Simulator::printCarInformation(* outputFileDescriptor,Parameters& parameters,<CarInfo>& cars)

{(int i = 0; i < parameters.numberOfCars; ++i)

{CarInfo& car = cars[i];(outputFileDescriptor, "CAR %d: %s: (%02.02f, %02.02f) -> (%02.02f, %02.02f), %2.1f of %2.1f, %d of %d min, parking: %d of %d min, "

"tank: %d%%, "

"total: %dkm"

"\n",+ 1, (car.inUse) ? "driving" : "free ",.currentPositionX, car.currentPositionY,.targetPositionX, car.targetPositionY,.totalDistance - car.restDistance, car.totalDistance,.totalDriveDurationMinutes - car.restDriveDurationMinutes, car.totalDriveDurationMinutes,.totalNumberOfParkingMinutes - car.restNumberOfParkingMinutes, car.totalNumberOfParkingMinutes,::getTankFillState(parameters, car),

(int) car.mileage);

}

}

} /* namespace drivenow */

*************************************************Utilities.h:

#ifndef UTILITIES_H_

#define UTILITIES_H_

#include "Parameters.h"

#include "CarInfo.h"drivenow

{

/**

* Utilities class

*/Utilities

{:

/**

* Returns tank fill state

* @param parameters object containing all command line parameters

* @param car object containing car information

*/int getTankFillState(const Parameters& parameters, struct CarInfo& car);

};

} /* namespace drivenow */

#endif /* UTILITIES_H_ */

*************************************************Utilities.cpp:

#include "Utilities.h"drivenow

{Utilities::getTankFillState(const Parameters& parameters, struct CarInfo& car)

{(int) (car.tankFillStateLiter * 100.0 / parameters.tankSizeL);

}

} /* namespace drivenow */

*************************************************main.cpp:

#include "DefaultValues.h"

#include <cstdio>

#include <cstring>

#include <cstdlib>

#include <ctime>

#include <iostream>

#include <vector>

#include "Parameters.h"

#include "Parser.h"

#include "CarInfo.h"

#include "Simulator.h"

#include "RandomNumberGenerator.h"

#include "Utilities.h"namespace std;namespace drivenow;

/**

* Application entry point

* creates car objects and starts simulation

*/main(int argc, char** argv)

{* outputFileDescriptor = 0L;numberOfDrivingMinutes = 0;numberOfParkingMinutes = 0;numberOfBonusMinutes = 0;numberOfEmptyCars = 0;numberOfServiceVisits = 0;parameters;= fopen("drivenow.log", "w");::printCommandLineParameters(outputFileDescriptor, argc, argv);::parseCommandLineParameters(outputFileDescriptor, argc, argv, parameters);<CarInfo> cars;

//add cars to vector of cars(int i = 0; i < parameters.numberOfCars; ++i)

{car;.push_back(car);

}

// use current time as seed for random generator(time(0));(outputFileDescriptor, "TIME 00d:00h:00min\n");::generateStartPosition(parameters, cars);::printCarInformation(outputFileDescriptor, parameters, cars);numberOfHours = 0;numberOfDays = 0;(int currentTime = 0; currentTime < parameters.simulationTimeMin; ++currentTime)

{(((currentTime + 1) % 60) == 0)

{

++numberOfHours;((numberOfHours % 24) == 0)

{

++numberOfDays;

}

}(,

"\nTIME %02dd:%02dh:%02dmin\n",, numberOfHours % 24, (currentTime + 1) % 60);::chooseCarsForDriving(,,,,,,);::printCarInformation(,,);::driveCars(,,,,);

}drivingPrice = numberOfDrivingMinutes * parameters.drivingMinutePriceEuro;parkingPrice = numberOfParkingMinutes * parameters.parkingMinutePriceEuro;bonusMinutesPrice = numberOfBonusMinutes * parameters.drivingMinutePriceEuro;manualRefuelPrice = numberOfEmptyCars * MANUAL_REFUEL_COSTS;serviceVisitsPrice1 = numberOfServiceVisits * SERVICE_VISITS_COSTS;serviceVisitsPrice2 = numberOfServiceVisits * NUMBER_OF_BONUS_MINUTES_FOR_SERVICE_VISIT * parameters.drivingMinutePriceEuro;totalPrice1 = drivingPrice + parkingPrice - bonusMinutesPrice - manualRefuelPrice - serviceVisitsPrice1;totalPrice2 = drivingPrice + parkingPrice - bonusMinutesPrice - manualRefuelPrice - serviceVisitsPrice2;(,

"\nTOTAL usage:\n"

"%d driving minutes, driving price = %.2f EUR\n"

"%d parking minutes, parking price = %.2f EUR\n"

"%d bonus minutes, bonus minutes price = %.2f EUR\n"

"%d empty cars, manuel refuel price = %.2f EUR\n"

"%d service visits, service visits price = %.2f EUR\n"

"%d service visits, bonus minutes price for service visits = %.2f EUR\n"

"total: %.2f EUR\n"

"total: %.2f EUR\n",, drivingPrice,, parkingPrice,, bonusMinutesPrice,, manualRefuelPrice,, serviceVisitsPrice1,, serviceVisitsPrice2,,);(outputFileDescriptor, "\ndone.\n");(outputFileDescriptor);0;

}

*************************************************

Похожие работы на - Усовершенствование системы краткосрочной аренды

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!