Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования

advertisement
Санкт-Петербургский Государственный Университет
Математико-механический факультет
Кафедра системного программирования
Выпускная дипломная работа
на тему:
«Реализация сервисов
многоцелевого поиска и заказа группы товаров»
Научный руководитель ........................................ к. ф.-м. н., доц. Н.Г. Графеева
Рецензент ...............................................................................................М.В. Кисин
“Допустить к защите” ........................................... д.ф.-м.н., проф. А.Н. Терехов
заведующий кафедрой
Санкт-Петербург
2011 г.
Saint-Petersburg State University
Mathematics and Mechanics Faculty
Software Engineering Department
Implementation of services of multipurpose
search and product group order
Graduate paper by
Ksenia Tsypan
461 group
Scientific advisor Natalia Grafeeva
Reviewer Mikhail Kisin
“Approved by” Head of Department Professor A. N. Terekhov
Saint-Petersburg
2011
2
Оглавление
Введение ................................................................................................................... 5
Обзор интернет-каталогов товаров ....................................................................... 6
Постановка задачи................................................................................................... 9
Выбор программного обеспечения для создания сайта ...................................... 9
Open SLAED ....................................................................................................... 10
Drupal ................................................................................................................... 10
Joomla! ................................................................................................................. 11
WordPress ............................................................................................................ 12
Magnolia .............................................................................................................. 13
Обоснование выбора CMS ................................................................................ 13
Общая информация ............................................................................................... 14
Особенности реализации. Исходные данные ..................................................... 14
Типизация продуктов ............................................................................................ 14
Организация поиска по заданному критерию .................................................... 16
Необходимые данные для нахождения товаров по минимальной стоимости
.............................................................................................................................. 16
Необходимые данные для задачи максимизации любимых брендов .......... 17
Необходимые данные для задачи Минимальной отдалённости ................... 18
Необходимые данные от магазинов ................................................................ 18
Описание интерфейсов ......................................................................................... 19
Главная страница сайта ..................................................................................... 19
Поиск интересующего рецепта ......................................................................... 20
Поиск ингредиентов по минимальной стоимости .......................................... 21
Поиск ингредиентов по минимальной отдалённости .................................... 22
Поиск ингредиентов по любимым брендам .................................................... 23
Особенности реализации. Алгоритмы ................................................................ 25
Поиск штрих-кодов ингредиентов ...................................................................... 25
Реализация сервисов ............................................................................................. 26
Алгоритмы реализации сервисов ........................................................................ 26
Реализация карт ..................................................................................................... 29
3
Структура базы данных ........................................................................................ 29
Необходимые таблицы ......................................................................................... 29
Заключение ............................................................................................................ 30
Список литературы ............................................................................................... 31
4
Введение
Рынок продуктовых товаров в Российской Федерации имеет много
сфер для развития. В первую очередь это касается веб-интерфейсов данного
сегмента рынка.
Скажем, мы задались целью приготовить греческий салат. Что нам для
этого надо? Где брать ингредиенты? Большинство современных людей
пойдёт на поисковый сайт, где наверняка наберёт запрос «Сайт кулинарных
рецептов», или «Как приготовить греческий салат». Что они там увидит?
Везде примерно одинаковая картина.
Максимум информации, которую мы можем получить из современных
сайтов кулинарных рецептов, это список ингредиентов и руководство по
приготовлению. А что, если мы хотим больше? Мы хотим знать, где можно
приобрести все нужные нам ингредиенты.
В связи с этим, родилась идея создать сайт кулинарных рецептов, но не
такой как все, а с дополнительными сервисами. Помимо набора рецептов
данный ресурс будет предоставлять информацию о продуктах питания,
которые входят в каждое отдельное блюдо. Таким образом, пользователь
5
будет иметь перед глазами не просто указания по тому, как приготовить, но
ещё и где приобрести все составляющие рецепта в зависимости от его
запросов. Ресурс будет предоставлять информацию о том, в каком
ближайшем от месторасположения пользователя магазине он может
приобрести продукты. Если для пользователя важно приобрести продукты с
минимальными затратами, данный ресурс предоставит информацию о ценах
продуктов. Ну а если наш пользователь привередлив на бренды, он может
следовать своей прихоти и получить всю нужную ему информацию о том,
где и за какую цену он может приобрести продукты конкретной фирмы. Ну а
для совсем ленивых на сайте будет возможность заказать всю продукцию на
дом.
И того, данный сайт может быть полезен
1.
2.
3.
4.
Домохозяйкам;
Холостякам;
Бедным студентам;
Молодым девушкам.
И, наконец, гораздо более важно, что такой сайт может помочь людям на
специальных диетах: диабетикам, аллергикам, сердечникам и прочим людям
с лечебными диетами. Помимо того, что сайт поможет разнообразить меню,
он также поможет раздобыть ингредиенты, которые таким людям тяжело
найти в обычных магазинах рядом с домом. И кстати, в таких случаях они,
скорее всего не будут скупиться на доставку. Если следовать этой тематике,
то сюда же можно отнести и детское питание, а оно бывает довольно
специфично, возможно здесь тоже можно сделать свой подраздел.
Обзор интернет-каталогов товаров
Итак, нам нужно найти продукты, требуемые для приготовления
блюда. Что же могут предоставить существующие интернет-каталоги
товаров? Введём в поисковике запрос «Интернет-каталог товаров». Первый
на сайте google.ru, второй на yandex.ru в спиcке результатов является сайт
http://goodsmatrix.ru , где есть каталог товаров разных категорий, но что более
существенно, есть выход на их штрих-коды. Мы можем найти не просто
какие-то абстрактные ингредиенты, а выбрать те, что нам нравятся,
ориентируясь на наши вкусы и предпочтения. Итак, мы нашли на данном
6
сайте нужные нам ингредиенты, нашли их штрих-коды, осталось только
понять, где можно приобрести нужные нам продукты и сколько они стоят.
Информация, имеющаяся на сайте http://goodsmatrix.ru предоставляет
нам много возможностей, ведь все товары в магазинах идентифицируется
именно штрих-кодами и ничем другим. Имея шртих-код, мы можем узнать,
что это за товар и его цену. Но во всех магазинах разные цены, и для того,
чтобы их знать, нам нужен выход к каждому конкретному магазину. Как
правило, у больших сетевых магазинов есть свой сайт, где они выкладывают
какую-то информацию о своих товарах. Для примера, посмотрим на сайт
хорошо всем знакомого сетевого магазина «Лента».
Этот сайт предоставляет информацию лишь о тех товарах, которые
участвуют в акции, а ведь в действительности спектр продукции, который
представлен на полках магазина «Лента» более широк. Значит тут мы не
получаем всю нужную нам информацию о продуктах и ценах. Посмотрим на
7
другие сетевые магазины, такие как «О’КЕЙ» и «Карусель». Опять же, на
сайтах можем обнаружить цены только тех товаров, которые участвуют в
акциях.
Но это не единственная проблема, связанная с рынком продуктов
питания. Важную роль тут играет типизация названий продуктов. Сайт
http://goodsmatrix.ru является на данный момент единственным ресурсом,
8
который хоть как-то попытался решить эту проблему. В дереве товаров все
товары разнесены по папкам, т.е. каждый товар относится к какой-то группе.
Но в названиях товаров одной группы всё ещё нет никаких строгих правил.
Так, например, в БД продуктов есть очень разные названия яиц. Есть
куриные яйца 1ой категории, 2ой категории, высшей категории, есть
перепелиные яйца и т.д. Более того где-то они называются яйца, где-то яйцо.
Итак, для того, чтобы найти нужный набор товаров, сколько он стоит,
надо решить следующие задачи:
1. Найти источники цен продуктов
2.Решить проблему с типизацией продуктов
Найдя решения этих задач, у пользователей интернета появляется
масса новых возможностей, реализацией одной из которых я решила
посвятить свой диплом.
Постановка задачи
Моя задача состоит в том, чтобы создать сайт кулинарных рецептов со
следующими сервисами: предоставление информации о том, где можно
приобрести ингредиенты по минимальной стоимости, с минимальной
отдалённостью от дома, а также ингредиенты конкретных брендов. Если
говорить более детально, то данную задачу можно разбить на несколько:
 Разработка дизайна, структуры сайта;
 Реализация сайта;
 Реализация сервисов.
Выбор программного обеспечения для создания сайта
Очевидно, что создавать сайт нужно с использованием CMS. CMS
(Content Management System) – это система управления контентом
(содержимым) сайта. В настоящее время существует большое количество
CMS, имеющих различную функциональность и предназначение. Ниже
приведен краткий обзор некоторых из них.
9
Open SLAED
Open SLAED – CMS, написанная на языке PHP и работающая с базой
данных MySQL. Защищена лицензией GPL.
Предоставляет следующие возможности:
 Управление пользователями и администраторами сайта.
 Управление информационными блоками сайта, такими как новости,
документы, тексты разделов.
 Управление локализациями, т.е. языковыми версиями сайта.
 Создание опросов.
 Управление RSS-каналом.
 Контроль безопасности сайта.
CMS Open SLAED построена на следующих базовых принципах:
 Удаленная работа с помощью глобальной сети и веб-браузера.
 Использование динамической модели данных.
 Процедуры разработки дизайна сайта и его информационного
наполнения – независимые процессы.
Система решает следующие задачи:
 Управление сайтом с любого компьютера, подключенного к сети
Интернет, с учетом требований безопасности.
 Независимая работа с дизайном и информационным наполнением
сайта.
 Публикация информации с использованием разграничения прав
доступа к информации пользователей системы.
 Размещение любых типов информации: текстов, иллюстраций,
таблиц, графиков.
 Представление информации в системе в том же виде, в каком она
будет представлена на интернет-сайте.
 Целостность и сохранность информации.
Drupal
Drupal – CMS с открытым исходным кодом, написанная на языке PHP и
работающая с базами данных MySQL, PostgreSQL и другими. Защищена
лицензией GPL.
Основные возможности CMS Drupal:
 Создание общих книг.
 Настройка адресов документов.
10
 Разработка
и
использование
дополнительных
модулей,
расширяющих возможности сайта.
 Персонализация – пользователь может настроить содержание CMS
и его представление так, как ему будет удобно.
 Администратор Drupal может группировать пользователей по
определенным ролям и назначать права доступа группам
пользователей.
 Все содержание в Drupal индексируется и доступно для поиска.
 Распределенная идентификация пользователей на сайтах, созданных
на основе Drupal.
 Опросы пользователей на сайте.
 Создание шаблонов с использованием HTML и PHP.
 Организация
обсуждений
для
публикуемых
документов,
иерархические комментарии.
 Управление версиями документов, возможность «отката»
изменений.
 Ведение блогов, в том числе с использованием внешних программ.
 Экспорт содержания в RDF/RSS-формате.
 Все содержание имеет постоянные ссылки.
 Поддержка Apache, IIS, Unix, Linux, BSD, Solaris, Windows, Mac OS
X.
 Независимость от базы данных.
 Средства разработки сайтов, поддерживающих несколько
национальных языков.
 Автоматическое формирование отчетов с информацией о переходах,
популярности содержания и данных о действиях пользователей.
 Вся важная активность в системе отслеживается, записывается и
может быть в дальнейшем просмотрена.
 Сайт, созданный на основе Drupal, управляется из браузера; для
управления сайтом не требуется установка специального ПО.
 Кэширование.
Joomla!
Joomla представляет собой набор скриптов, написанных на языке
программирования PHP. В CMS встроена поддержка БД MySQL.
11
Основные арактеристики Joomla!:

Полностью основанный на БД движок с использованием PHP/MySQL.

Модуль безопасности для многоуровневой аутентификации
пользователей/администраторов.
Секции новостей, продукции или услуг легко редактируемы и управляемы.
Разделы тем могут быть добавлены авторами.
Полностью настраиваемые схемы расположения элементов, включая левый,
правый и центральный блоки меню.
Закачка изображений при помощи браузера в вашу собственную библиотеку
- для последующего использования с любого места сайта.
Форум/Опросы/Голосования для эффективной обратной связи.
Работа под Linux, FreeBSD, MacOSX, Solaris, AIX, SCO, WinNT, Win2K.






Возможности администрирования:











Начало и окончание публикации материалов можно запрограммировать по
календарю
Возможность ограничить доступ к определенным разделам сайта только для
зарегистрированных пользователей
Полностью настраиваемые схемы расположения элементов по 5 областям,
Возможность создания не одной, а нескольких форм обратной связи для
каждого контакта.
Генератор показа случайной новости.
Модуль приёма от удалённых авторов новостей, статей и ссылок.
Иерархия объектов .
Библиотека изображений.
Менеджер рассылки новостей.
Менеджер архива.
Экономное использование места на сервере за счет использование базы
данных MYSQL.
WordPress
WordPress — CMS с открытым исходным кодом, распространяемая под GNU
GPL. Написан на PHP, в качестве базы данных использует MySQL.
Возможности WordPress :




возможность публикации с помощью сторонних программ и сервисов;
простота установки, настройки;
поддержка RSS, Atom, trackback, pingback;
подключаемые модули (плагины) с уникальной простой системой их
взаимодействия с кодом;
12





поддержка так называемых «тем», позволяющих легко менять как
внешний вид, так и способы вывода данных;
«темы» реализованы как наборы файлов-шаблонов на PHP, что
положительно сказывается на скорости и гибкости;
громадные библиотеки «тем» и «плагинов»;
заложенный потенциал архитектуры позволяет легко реализовывать
сложные решения;
наличие русских переводов.
Magnolia
Magnolia – система управления контентом, написанная на языке Java и
работающая на базе сервера Tomcat 5.0. Выпускается в 2х вариантах:
Community Edition и Enterprise Edition. Community Edition – бесплатная
версия с открытым кодом, поддерживающая лицензию LGPL. Основные
компоненты:
 HTTP-сервер Tomcat 5.0.
 Среда управления и редактирования сайта.
 Среда сайта.
CMS Magnolia работает на всех распространенных операционных
системах. Для работы требуется JDK 1.4.1 или старше; дополнительное ПО
или база данных не требуются.
Анонсированные возможности:
 Поиск по сайту.
 Документооборот.
 Версионирование.
 Подтверждение публикации.
 Репликация.
Обоснование выбора CMS
При выборе CMS я руководствовалась следующими критериями:
 Удобство пользователя.
 Соответствие возможностей CMS задачам создаваемого сайта.
 Доступность CMS.
По совокупности критериев из упомянутых CMS предпочтение было
отдано CMS Magnolia.
13
Общая информация
В идеале данный проект это сайт кулинарных рецептов с
предоставлением сервисов доставки ингредиентов, а также многоцелевого
поиска продукции в магазинах. Безусловно, на настоящий день недостаточно
данных для его реализации, но общественность должна двигаться в данном
направлении.
Особенности реализации. Исходные данные
Типизация продуктов
Основной проблемой в реализации данного проекта является типизация
продуктов, описанная в обзоре интернет-каталогов товаров. Рассмотрим эту
проблему подробнее.
Кроме того, что есть проблема с неоднозначным названием продуктов, также
есть проблема, связанная с единицами измерения. Например, если это мука,
то упаковки бывают по 1 килограмму, бывают по 500 грамм и т.д. И вес
упаковки отображается в названии, где-то в скобках, где-то через запятую, а
где-то вес следует просто сразу после названия, т.е. у продукта нет
отдельного поля с единицами измерения.
Для предоставления пользователю полноценной информации об
ингредиентах, нам необходимо знать единицы измерения каждого продукта,
т.к. в рецептах, как правило, указывают нужное количество каждого
ингредиента. Можем убедиться в этом, посмотрев во введении на скриншот
стандартного кулинарного сайта. В связи с этим появляются новые вопросы,
как например, где взять эти единицы измерения? Мы обязаны сообщить
пользователю, что эта цена за какое-то конкретное количество продукта. Но
дело в том, что вряд ли магазины будут организованно этим заниматься. Повидимому, данную информацию надо искать на сайте http://goodsmatrix.ru,
но, к сожалению, на данной стадии, сайт также
не предоставляет
информацию о единицах измерения.
Давайте убедимся на том же примере с яйцами. Введём в строке поиска
«яйца» и выберем критерий поиска – по наименованию.
14
Вот результат нашего запроса:
Проанализируем полученные результаты:
 Первый элемент списка – майонез, который не вписывается в критерии
нашего поиска.
 Второй результат поиска – нужные нам яйца. Единица измерения
фигурирует в наименовании, через запятую, а именно: «Яйца куриные
«Рябушка» отборные свежие деревенские, 10 шт.»
 Далее в списке «Яйца куриные пищевые столовые «Счастливая
курица»», как видно, количество яиц в упаковке не фигурирует в
названии, но мы пойдём дальше, посмотрим на описание, где мы
также не найдём никаких указаний.
15

А вот в следующих яйцах «Омега-3 Актив», в описании есть пометка:
«Фасовка по 6 шт.».
Таким образом, можно сделать вывод, что на сайте http://goodsmatrix.ru
получить информацию о единицах измерения и количестве, в общем случае,
невозможно.
Кроме того, возникает вопрос, как нам рассчитывать стоимость? Ведь если
для рецепта нам надо 2 кг огурцов, значит, цену надо умножить на два, но
если в рецепте нам указано 2 яйца, а яйца не продаются поштучно, только в
упаковках, как поступить со стоимостью? Так как если мы можем купить
400 грамм огурцов, когда цена указана за килограмм, то купить 2 яйца, когда
цена указана за упаковку, в которой 10 штук, мы не можем. То есть нам надо
каким-то образом различать делимые и неделимые продукты.
Очевидно, что решением этой проблемы должен заниматься администратор
сайта. Его задача состоит в том, чтобы для каждого продукта определить,
делим он, или неделим, а также в БД для каждого продукта внести данные по
его единицам измерения, чтобы было ясно, за какое количество товара
указана цена. Или это 1 кг, или это 1 упаковка, 100 грамм и т.д.
Организация поиска по заданному критерию
В данном проекте планируется реализовать три типа поиска. Для реализации
каждого из них нам нужны какие-то данные.
Необходимые данные для нахождения товаров по минимальной
стоимости
Для организации поиска по минимальной стоимости, нам необходимо знать
цену каждого конкретного товара. Для того чтобы узнать цену товара, нам
недостаточно одного названия продукта, для этой цели был придуман штрихкод. Значит, нам надо знать штрих-код каждого продукта, чтобы выяснить
его цену в каждом конкретном сетевом магазине. На этом шаге нам очень
помогает сайт http://goodsmatrix.ru. На этом сайте мы можем для каждого
продукта найти его штрих-код. Без этого, наша задача была бы совсем не
16
решаема. В таком случае, вносим в БД продуктов их штрих-коды и уже по
ним мы делаем запросы по магазинам. Там, где есть товар с запрашиваемым
штрих-кодом, узнаём его цену, находим минимальную и выдаём результат.
Итак, для решения данной задачи нам необходимы:





Штрих-коды товаров
Доступ к веб-сервисам магазинов
Данные о ценах товаров по их штрих-кодам
Название магазина
Адрес магазина
Необходимые данные для задачи максимизации любимых брендов
Для организации поиска по брендам, для начала нам надо понять, где взять
эти бренды? И тут опять нам очень помогает сайт http://goodsmatrix.ru. На
сайте есть страница со списком брендов. Заведём БД с этими брендами, а
также соответствие бренду продуктов. На сайте http://goodsmatrix.ru кликнув
на конкретный бренд, мы переходим к списку представителей этого бренда.
Более того, необходимо понять, к какому типу ингредиентов относится
каждый конкретный бренд. Для того чтобы произошло пересечение
любимых брендов и ингредиентов, необходимо выяснить, какие из
ингредиентов являются представителями брендов. Для этого, каждому
бренду припишем тот тип ингредиентов, которые соответствуют данному
бренду. В этом случае, задача решаема.
Итак, для решения данной задачи необходимы:







Список существующих брендов
Соответствия между брендами и товарами
Штрих-коды товаров
Доступ к URL-сервисам магазинов
Данные о ценах товаров по их штрих-кодам
Название магазина
Адрес магазина
17
Необходимые данные для задачи Минимальной отдалённости
Для решения данной задачи нам необходимо знать координаты пользователя.
Заставлять пользователя вводить свой адрес не совсем удобно. На
сегодняшний день существуют сервисы, которые автоматически могут
определить положение пользователя, сообщить координаты его
местонахождения (Например http://www.ip2location.com/). Поэтому каждый
раз просить пользователя вводить свой адрес не гуманно при наличии таких
сервисов. Конечно, они не бесплатные. Но для лучшей функциональности
нашего сайта, представим, что мы имеем доступ к такому сервису. Для
организации поиска по минимальному расстоянию от адреса пользователя,
мы ищем ближайший к пользователю магазин, запрашиваем у него набор
штрих-кодов, который имеется в списке ингредиентов по всем синонимам.
Итак, для решения данной задачи необходимы:






Название магазина
Адрес магазина
Штрих-коды товаров
Доступ к веб-сервисам магазинов
Данные о ценах товаров по их штрих-кодам
Сервис, который определяет местонахождение пользователя
Необходимые данные от магазинов
Безусловно, ни один сетевой магазин не предоставит нам доступ к своей БД
товаров. Но для того, чтобы данный сайт заработал, нам необходимы
следующие сведения от сетевых магазинов:
1.
2.
3.
4.
Название магазина
Адрес магазина
Доступ к веб-сервисам магазинов
Данные о ценах товаров по их штрих-кодам
В таком случае, если сетевые магазины нам будут просто предоставлять вебсервис, где будут все необходимые для наших задач данные, то проблема
18
будет решена. Будем предполагать, что у нас есть URL-сервис, где есть эти
данные.
Описание интерфейсов
В этом разделе будут описаны интерфейсы страниц с точки зрения
конечных пользователей.
Главная страница сайта
Главная страница сайта представляет собой список с подгруппами Рецептов,
а также ссылки на интересные статьи по данной тематике
19
Поиск интересующего рецепта
Выбрав нужный подраздел рецептов, пользователь видит страницу со
списком рецептов:
Каждый рецепт представляет из себя в первую очередь перечень
ингредиентов, рекомендации по приготовлению, большую красивую
картинку с итоговым блюдом, а также пара кнопок «Ингредиенты по
минимальной стоимости», «Ингредиенты с минимальной отдалённостью»,
«Ингредиенты конкретных брендов».
20
Поиск ингредиентов по минимальной стоимости
Нажав на кнопку «Где купить ингредиенты по минимальной
стоимости?» пользователь переходит на следующую страницу:
Нажав на «Показать результаты поиска на карте», пользователь переходит на
страницу с изображением карты, на которой изображаем магазин, написано
21
его название, адрес, стоимость ингредиентов, а также телефон магазина, по
которому пользователь может заказать данный набор ингредиентов:
Поиск ингредиентов по минимальной отдалённости
В случае если пользователю необходимо найти продукты с минимальной
отдалённостью от его места расположения, мы пользуемся сервисом,
который сам определяет координаты пользователя, поэтому нам не надо
просить его ввести адрес. Мы сразу предлагаем увидеть карту с ближайшим
к нему магазином:
22
Далее пользователь видит карту с ближайшим к нему магазином
Поиск ингредиентов по любимым брендам
23
Нажав на «Ингредиенты … конкретных брендов» пользователь
переходит на страницу, где ему предлагают выбрать бренды
После того, как пользователь выбрал бренды, нажав на «Показать
результат поиска на карте» пользователь переходит на страницу с картой, на
которой изображён магазин, написано его название, адрес, суммарная
стоимость ингредиентов, а также телефон по которому пользователь может
заказать данный комплект продуктов на дом.
24
Особенности реализации. Алгоритмы
Поиск штрих-кодов ингредиентов
Чтобы строго типизировать продукты, мы предварительно должны создать
список синонимов для каждого продукта.
Поиск штрих-кодов ингредиентов происходит на сайте http://goodsmatrix.ru.
Там мы в графе поиска товаров выбираем товаров по наименованию.
Название товара берём из списка синонимов. Далее объединяем результаты
поисков по каждому синониму и получаем конечный список штрих-кодов.
Т.к. набор продуктов ограничен, мы можем оптимизировать поиск штрихкожов. Во многих рецептах ингредиенты повторяются. В таком случае мы
можем в каждом рецепте, где присутствуют яйца, отображать название
«яйца» и не запрашивать каждый раз по названиям всех синонимов штрихкоды, а уже иметь базу данных, которая бы по названию ингредиента
выдавала бы сразу множество штрих-кодов, элементы которого мы бы уже
искали через сервисы магазинов. В таком случае нам не надо каждый раз
посылать запрос на http://goodsmatrix.ru, что увеличит скорость поиска, т.к.
мы избавились от одного шага поиска. Для этого надо составить БД штрих25
кодов по продуктам. Если на рынке появляется новый товар, его просто надо
занести в список синонимов и его штрих-код добавить к штрих-кодам
остальных синонимов. Этим должен заниматься администратор.
Реализация сервисов
В данном проекте необходимо решить следующие сервисы:
1. Минимизировать затраты на покупку набора продуктов
2. Минимизировать расстояние до магазина
3. Максимизировать количество брендов в наборе продуктов
Алгоритмы реализации сервисов
1. Есть множество подмножеств ингредиентов. Подмножество –
продукты, соответствующие одному ингредиенту. Посылаем запрос по
магазинам в виде множества подмножеств штрих-кодов. На первой
стадии проверяем, чтобы в магазинах было хотя бы по одному
представителю из каждого подмножества. Если есть магазины, для
которых это условие не выполняется, прекращаем работу с ними. Далее
в каждом подмножестве ищем минимальный по стоимости элемент.
Суммируем минимальные по стоимости элементы каждого
подмножества. Получаем результат по каждому магазину. Сравниваем
результаты, выдаём минимальный. Результат пользователь видит на
карте с указанием на магазин, его адрес и стоимостью полной корзины
ингредиентов.
26
Множество
штрих-кодов по
первому
ингредиенту
Recipes
Id
Name
BarCodes
StoreGoods
Id
RecipeIngredients
Множество
штрих-кодов по
второму
ингредиенту
IngredientID
Id
Id
StoreId
BarCode
RecipeID
Price
IngredientID
Множество
штрих-кодов по
третьему
ингредиенту
Сравниваем
конечные суммы по
каждому магазину.
Выбираем
минимальную.
Минимальный
представитель
первого ингредиента
+
Минимальный
представитель
второго ингредиента
+
Минимальный
представитель
третьего ингредиента
Поиск минимального
по стоимости
элемента в каждом
множестве штрихкодов
в пределах одного
магазина
Поиск магазинов, в
которых есть хотя бы
по одному
представителю из
каждого множества
штри-кодов
2. Пробегаемся по имеющимся сетевым магазинам. Проверяем, есть ли в
каждом магазине хотя бы по одному представителю из каждого
подмножества ингредиентов. Рассчитываем расстояние от адреса
пользователя до каждого из таких магазинов. В качестве результата
выдаём тот, у которого удалённость наименьшая. Результат пользователь
видит на карте с указанием на магазин, его адрес и стоимостью полной
корзины ингредиентов.
Множество
штрих-кодов по
первому
ингредиенту
Recipes
Id
Name
StoreGoods
BarCodes
Множество
штрих-кодов по
второму
ингредиенту
Id
RecipeIngredients
IngredientID
Id
Id
StoreId
BarCode
Price
RecipeID
Множество
штрих-кодов по
третьему
ингредиенту
IngredientID
В качестве
результата выдаём
магазин, у которого
удалённость
наименьшая..
Рассчитываем
расстояние от адреса
каждого магазина до
пользователя.
27
Поиск магазинов, в
которых есть хотя бы
по одному
представителю из
каждого множества
штри-кодов
3. Для решения задачи максимизации брендов встаёт стандартная
задача минимакса (минимизация функции по одной группе
переменных и максимизация по другой). Нам необходимо
максимизировать количество брендов при минимальных затратах. Для
решения данной задачи были рассмотрены алгоритмы решения
стандартных минимаксных задач:
 Smooth
optimization
methods
for
minimax
problems
(http://cs.gmu.edu/~sho/polyak_paper/SmoothOptimizationMethods.p
df);
 de
la
Vallee-Poussin
Algorithm
(http://leimingqian.tripod.com/data/minimax.pdf);
 A
non-parametric
transformation
(http://www.jstor.org/stable/2582765?seq=1).
Но в данном контексте задача оптимальнее всего решается следующим
алгоритмом: находим пересечение ингредиентов с любимыми
брендами пользователя. Для этого ищем каждый ингредиент рецепта в
списке любимых брендов. Получаем множество приоритетных
ингредиентов. Если это приоритетный ингредиент, то составляем
множество штрих-кодов (в пределах любимых), которые ему
соответствуют. Но сначала ищем магазины, в которых есть все
ингредиенты, не взирая на их бренды. Так мы получили список
магазинов, где есть все представители ингредиентов рецепта. Но нам
нужны конкретные продукты в данной задаче (конкретные штрихкоды). Так, в каждом магазине осуществляем поиск любимых
продуктов.
Ищем
пресечение
найденных
ингредиентов
с
приоритетными. Суммируем количество найденных приоритетных
ингредиентов в рамках нужного рецепта в одном магазине. В итоге
получаем отсортированный список магазинов по количеству любимых
ингредиентов. Берём те магазины, в которых количество приоритетных
ингредиентов максимально. Рассчитываем стоимость корзины товаров
по следующему алгоритму: По умолчанию ясно, что мы берём
любимые товары в качестве представителей подмножеств
ингредиентов, не взирая на их стоимость. Ищем минимальные по
стоимости продукты оставшихся подмножеств товаров, в которые не
вошли любимые продукты. Суммируем все стоимости. Минимальную
по стоимости корзину товаров выдаём в качестве результата
пользователю. Результат пользователь видит на карте с указанием на
магазин, его адрес и стоимостью полной корзины ингредиентов.
28
Множество
штрих-кодов по
первому
ингредиенту
Recipes
Id
Name
StoreGoods
BarCodes
Множество
штрих-кодов по
второму
ингредиенту
Id
IngredientID
RecipeIngredients
Id
StoreId
BarCode
Id
Price
RecipeID
Множество
штрих-кодов по
третьему
ингредиенту
IngredientID
BrandIngredient
Brands
Id
Id
BrandID
Name
IngredientID
BarCode
В качестве
результата выдаём
магазин, у которого
стоимость корзины
наименьшая
Минимизируем
стоимость конечной
корзины товаров в
магазинах, где
максимальное
количество брендов
Сортируем магазины
по количеству
приоритетных
ингредиентов
Поиск магазинов, в
которых есть хотя бы
по одному
представителю из
каждого множества
ингредиентов
Реализация карт
Для отображение карт на сайте, я решила воспользоваться сервисом
Yandex карты. Для того, чтобы поместить карту на свой сайт, было
необходимо получить свой API-ключ. Для этого надо быть
зарегистрированным на сайте yandex.ru, а также указать адрес Вашего сайта.
Подробнее об этом сервисе можно почитать по ссылке, указанной в списке
литературы (Яндекс. Карты на Вашем сайте)
Структура базы данных
В ходе реализации была создана БД с несколькими таблицами.
Необходимые таблицы
1. Рецепты (id, название);
2. Бар-коды (id, ингредиент);
3. Бренды(id, название бренда);
29
4. Сетевые магазины (id, название магазина, адрес магазина, широта
месторасположения магазина, долгота месторасположения магазина);
5. Ингредиенты(id, название ингредиента);
6. Магазин-товары(id, id магазина, бар-код, цена);
7. Бренд-ингредиент(id, id бренда, id ингредиента, бар-код);
8. Рецепт-ингредиенты(id, id рецепта, id ингредиента).
Stores
BarCodes
Brands
Ingredients
Recipes
Id
Id
Id
Id
Id
Name
IngredientID
Name
Name
Name
Address
AdressLength
AdressWidth
StoreGoods
BrandIngredient
RecipeIngredients
Id
Id
Id
StoreId
BrandID
RecipeID
BarCode
IngredientID
IngredientID
Price
BarCode
Заключение
В ходе данной дипломной работы были достигнуты следующие
результаты
 При помощи CMS Magnolia разработан сайт;
 Написаны все необходимые БД
 Реализованы сервисы многоцелевого поиска и заказа группы товаров
30
Список литературы
1. Интернет-каталог товаров GoodsMatrix: http://goodsmatrix.ru;
2. SharePont 2010: Professional Developer Evaluation Guide and
Walkthroughts:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=cffb
14e8-88a9-43bd-87aa-4792ab60d320&displaylang=en;
3. Многопараметрическая
gti.ru/works_lectures/2.htm;
оптимизация:
http://mm.lti-
4. Техника оптимизации и некоторые критерии выбора рабочих
параметров эксперта: http://articles.mql4.com/ru/884;
5. R.A.Polyak “Smooth optimization methods for minimax problems”:
http://cs.gmu.edu/~sho/polyak_paper/SmoothOptimizationMethods.p
df;
6. Leiming
Qia
“Introduction
to
http://leimingqian.tripod.com/data/minimax.pdf;
Minimax”
:
7. C.Jorgensen and S. Powell “Solving 0-1 Minimax Problems”:
http://www.jstor.org/stable/2582765?seq=1;
8. CMS Magnolia: http://www.magnolia-cms.com/;
9. Яндекс. Карты на Вашем сайте: http://api.yandex.ru/maps/;
10.Навигация без GPS: как определить свои координаты по IP,
GSM/UMTS и Wi-Fi: http://www.xakep.ru/post/48378/;
11.Определение местонахождения по IP: http://www.ip2location.com/.
31
Download