Система поддержки принятия решений по выбору тура. Система поддержки принятия решений по выбору тура
Скачать 1.81 Mb.
|
3.1.4.3. Метод МАКСИМАКСМетод МАКСИМАКСа является противоположностью метода МАКСИМИН, в этом методе отталкиваются не от худшей, а от лучшей альтернативы. Количество альтернатив – любое, критерии – количественные. 4. Методы оценки и сравнения многокритериальных альтернатив в условиях неопределённости исходной информации4.1. Метод формирования и анализа платёжной матрицыМетод платежной матрицы используется, когда требуется узнать, какой вариант решения является более выигрышным для достижения поставленной цели. Возможное значение последствий того или иного выбора (произведение суммы ожидаемых величин и их вероятностей) надлежит определить перед тем, как составлять платежную матрицу. Платежная матрица рисков служит информационной основой для сравнения и выбора окончательной (предпочтительной) с точки зрения оптимальной альтернативой. Для осуществления такого выбора применяются некие правила для принятия решений в условиях неопределенности и риска. Такие правила включают в себя: 1. Критерий Лапласа (минимумы среднеарифметических затрат). 2. Критерий Вальда (минимальных затрат или максимальной полезности. 3. Критерий Сэвиджа (нахождение минимального риска). 4. Критерий Харвица (нацеленность на худший исход). Так же имеются и другие критерии, представляющие из себя слиянием или комбинированием двух и более вышеперечисленных критериев. Однако не один из них не обеспечивает однозначного решения проблемы. Следовательно выбор нужного для конкретной ситуации критерия лежит на плечах экспертов. Альтернативы, используемые в этом методе могут быть любыми, а критерием является затраты (прибыль) от решения. 5. Методы принятия групповых решений5.1. Метод ДельфиЭтот метод групповых решений предполагает, что эксперты, находящиеся в группе, не общаются между собой постоянно, а лишь периодически высказывают свои суждения и слушают мнения своих коллег. В методе Дельфи предполагается сменить прямой контакт участников группы опросами или заполнением анкет. Специалисты, заполняющие такие анкеты, знают лишь мнение, полученное согласованием мнения по всем предыдущим вопросам решаемой задачи. Таким способом получают наиболее точную оценку. Альтернативы не заданы, критерии не используются. 5.2. Метод ранжирования альтернативМетод ранжирования альтернатив предполагает предоставление эксперту всего многообразия вариантов решения проблемы, полученных в ходе диагностического исследования, а он ранжирует их по степени наибольшей предпочтительности и называет наиболее крайние по содержанию варианты, которые исключаются. Затем оставшиеся варианты вновь ранжируются и эксперт опять исключает крайние варианты. Так продолжается до получения определенного варианта. Количество альтернатив любое, критерии не используются. 5.3. Метод парных сравненийВ данном методе предполагается поочередно предложить экспертам пары альтернатив, рассмотрев которые эксперт должен предложить для каждой пары соответствующее решение. Далее эти решения ранжируются по предпочтительности. Если список с решения достаточно велик участникам группы предлагается сравнить по три (или более) альтернативы. Этот метод называется методом множественных сравнений. Отличается от парных сравнений лишь количеством сравниваемых альтернатив. 5.4. Метод группового принятия решения с помощью кластеризации экспертных оценок альтернативМетод основан на использовании кластеризации. Кластеризацией называется процесс объединения альтернатив в группы, по принципу схожести по какому-либо признаку, показателю или критерию. Сами же группы принято также называть кластерами. ЛПР выбирает одни из предлагаемых методов кластеризации оценок каждой альтернативы и выполняет кластеризацию поочередно по всем критериям. Производится вычисление центров масс образовавшихся кластеров. Понятие «центра масс» кластера введено для возможного учета коэффициентов компетентности экспертов, задаваемых ЛПР. Вычисляется «масса кластера». За ее величину предлагается взять сумму коэффициентов компетентности экспертов, входящих в кластер. Рассчитывается итоговая оценка каждой альтернативы по каждому из критериев. Главным достоинством данного способа является тот факт, что в итоговой оценке учтены все кластеры. Причем влияние каждого из кластеров в этом методе на итоговую оценку пропорционально его весу. Количество альтернатив и типы критериев любые. 6. Выбор методаДля решения поставленной задачи будет использоваться метод на основе аналитических иерархий. Принцип метода в том, что ЛПР оценивает по десятибалльной шкале важность критериев и их значений. Далее программа попарно составляет отношения оценок критериев. В результате получается единичная матрица.
В методе аналитических иерархий в этой таблице отношения критериев представляются 9 оценками предпочтительности: 1/9, 1/7, 1/5, 1/3, 1, 3, 5, 7, 9. В моей же программе отношения одного критерия к другому не нормировано, представляется дробным числом и не является оценкой значимости, что не позволяет производить рациональную поддержку принятия решений. Для решения этой проблемы нужно перейти от дробей к оценкам. Для этого сравниваем каждую дробь Ki/Kj с интервалами. Если значение попадает в интервал 0-0.25, то оценкой предпочтительности Ki критерия к Kj критерию будет 1/9, иначе сравнивает с другими интервалами.
Далее высчитывается цену критерия и сумму цен всех критериев. Затем посчитаем вес. По таким же формулам высчитываются веса значений критериев. Для нахождения цены альтернативы складываем произведения веса каждого критерия на вес его значения. В результате альтернатива с большей ценой является более рациональной. 7. Критерии выбора тура по РоссииТип тура: экскурсионный, семейный, пляжный, спортивный, лечебный, охота/рыбалка. Стоимость: до 5 тыс. руб., до 10 тыс. руб., до 20 тыс. руб., до 30 тыс. руб., более 30 тыс. руб. Размещение: отель 5 звезд, отель 4 звезды, отель 3 звезды, отель 2 звезды, палатка, коттедж, без размещения. Питание: все включено, полный пансион, полупансион, завтраки, без питания. Полное время тура: менее суток, 1-4 дней, 5-10 дней, от 10 дней. Время в пути: 0-3 часа, 3-6 часов, 6-12часов, 12-24 часа, более суток. Тип транспорта: поезд, самолет, машина, автобус, корабль. Основной рельеф: море, горы, лес, река, озера, пещеры, равнины. Культурные достопримечательности: есть, нет. Ресторан/бар/кафе, магазины: есть, нет. 8. Разработка ПО8.1. Обзор языков программированияС — стандартизированный процедурный язык программирования, был разработан в начале 80х годов прошлого века и используется до сих пор. Изначально разрабатывался для использования в UNIX системах, но позднее был перенесен на многие другие платформы и стан одним из наиболее популярных языков программирования и некоторое время был одним из самых используемых языков для создания системного программного обеспечения. Такую популярность С получил благодаря своей эффективности и простоте изучения, за счет чего до сих пор используется для обучения программированию. Также синтаксис С был взят за основу многих других языков программирования. Несмотря на достаточно большой объем набора операций, С довольно лаконичен. C++ — компилируемый статически типизированный язык программирования общего назначения. Поддерживает такие парадигмы программирования как процедурное программирование, объектно-ориентированное программирование, обобщенное программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно – ориентированного и обобщённого программирования. C# — объектно- риентированный язык программирования. Разработан как язык разработки приложений для платформы Microsoft.NET Framework. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков C++, Delphi, Модула, Smalltalk и в особенности Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов). Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом. Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе работа с регулярными выражениями, встроенная в синтаксис. Perl — язык программирования общего назначения, который был первоначально создан для манипуляций с текстом, но на данный момент используется для выполнения широкого спектра задач, включая системное администрирование, веб-разработку, сетевое программирование, игры, биоинформатику, разработку графических пользовательских интерфейсов. Язык можно охарактеризовать скорее как практичный (лёгкость в использовании, эффективность, полнота), чем красивый (элегантность, минималистичность). Главными достоинствами языка являются поддержка различных парадигм (процедурный, объектно-ориентированный и функциональный стили программирования), контроль за памятью (без сборщика мусора, основанного на циклах), встроенная поддержка обработки текста, а также большая коллекция модулей сторонних разработчиков. Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций. Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты - динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Питоне организовывается в функции и классы, которые могут объединяться в модули (которые в свою очередь могут быть объединены в пакеты). Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры. Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор. Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание. Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. В последнее время был внесен ряд усовершенствований, которые несколько увеличили скорость выполнения программ на Java: применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде; широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках; аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM). Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft. 8.2. Выбор языка программированияДля написания своей программы я выбрала C#. В настоящее время этот язык является одним из самых серьезных и современных языков. С# пользуется большой популярностью ввиду легкости понимания, так как из него были исключены многие лишние компоненты, встречавшиеся в С++. Также убраны отдельные модели, охарактеризовавшие себя как проблемные при разработке программных систем. Так же C# может поддерживать работу с базами данных, что отлично подходит для решения поставленной задачи. 9. Обзор систем управления базами данных (СУБД)Microsoft Access — реляционная СУБД корпорации Microsoft. Имеет широкий спектр функций, включая связанные запросы, связь с внешними таблицами и базами данных. Благодаря встроенному языку VBA, в самом Access можно писать приложения, работающие с базами данных. Основные компоненты MS Access: построитель таблиц; построитель экранных форм; построитель SQL-запросов (язык SQL в MS Access не соответствует стандарту ANSI); построитель отчётов, выводимых на печать. Они могут вызывать скрипты на языке VBA, поэтому MS Access позволяет разрабатывать приложения и БД практически «с нуля» или написать оболочку для внешней БД. SQLite — легковесная встраиваемая реляционная база данных. Старые версии SQLite были спроектированы без каких-либо ограничений, единственным условием было то, чтобы база данных умещалась в памяти, в которой все вычисления производились при помощи 32-разрядных целых чисел. Это создавало определённые проблемы. Из-за того, что верхние пределы не были определены и соответственно должным образом протестированы, то часто обнаруживались ошибки при использовании SQLite в достаточно экстремальных условиях. И поэтому, в новых версиях SQLite были введены пределы, которые теперь проверяются вместе с общим набором тестов. MySQL — свободная реляционная система управления базами данных. MySQL является решением для малых и средних приложений. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы. Firebird (FirebirdSQL — компактная, кроссплатформенная, свободная система управления базами данных (СУБД), работающая на Linux, Microsoft Windows и разнообразных Unix платформах. В качестве преимуществ Firebird можно отметить многоверсионную архитектуру, обеспечивающую параллельную обработку оперативных и аналитических запросов (это возможно потому, что читающие пользователи не блокируют пишущих), компактность (дистрибутив 5Mb), высокую эффективность и мощную языковую поддержку для хранимых процедур и триггеров. Firebird используется в различных промышленных системах (складские и хозяйственные, финансовый и государственный сектора) с 2001 г. Это коммерчески независимый проект C и C++ программистов, технических советников и разработчиков мультиплатформенных систем управления базами данных, основанный на исходном коде, выпущенном корпорацией Borland 25 июля 2000 года в виде свободной версииInterbase 6.0. Среди недостатков: отсутствие кэша результатов запросов, полнотекстовых индексов. 10. Выбор СУБДМной выбрана СУБД Microsoft Access, так как она обладает рядом преимуществ таких, как: быстрое создание таблиц без применения сложных операций управления базой данных; приложение удобно в использовании благодаря готовым шаблонам и эффективным средства; расположения всех объектов, которыми оперирует Access в одном файле. Это позволяет без труда переносить программу на другие ПК; наличие мастеров для создания тех или иных операций с программой. 11. Надежность программного обеспеченияПроцентные частоты появления ошибок в ПО по типам ошибок представлены в таблице 1. Таблица 1 – Процентные частоты появления ошибок в ПО Как видно из таблицы 1, основное количество ошибок делается из-за неверной спецификации или ТЗ. Эти ошибки, в свою очередь, могут быть разделены на следующие категории (таблица 2): Таблица 2 – Категории ошибок в ПО Из этих таблиц, кстати, следует, на что нужно обращать особое внимание при проведении валидации и верификации ПО (верификация отвечает на вопрос, правильно ли и качественно ли создана программа, а валидация (или аттестация) – на вопрос правильно ли работает программа). Способы обеспечения и повышения надежности ПО: выбор алгоритмов, не чувствительных к различного рода нарушениям вычислительного процесса (использование алгоритмической избыточности); резервирование программ; верификация и валидация программ с последующей коррекцией. Было произведено исследование отношения популярных языков программирования к случайным ошибкам. Языки со статической и/или строгой типизацией, что вполне ожидаемо, проявили себя наилучшим образом - C#, Java, С и C++ показали очень похожие результаты - около 10% не замеченных компилятором, лучший результат (8%) у C++. Немного хуже проявил себя Haskell - около 15%. У динамических языков разброс гораздо больше. Абсолютным антилидером стал PHP - в 36% случаев интерпретатор без возражений запустил некорректную программу. За ним с заметным отрывом идёт Perl с 22%, а строже всех ведут себя Ruby (16%) и Python (15%) Для подсчета надежности программы будет использоваться модель Коркорэна. Предполагает наличие в программном обеспечении многих источников программных отказов, связанных с различными типами ошибок, и разную вероятность их появления. Аргументом модели является число прогонов программы n. При этом оценка надежности программного обеспечения имеет вид: где n+ – число успешных прогонов программного обеспечения; n-j – число обнаруженных ошибок i-го типа, устраняемых с вероятностью pi; d i – коэффициент, определяемый следующим образом: Преимущества и недостатки модели. К преимуществам модели можно отнести то, что она учитывает существование в программном обеспечении нескольких источников ошибок, а также то, что расчет надежности с математической точки зрения проще, чем в других моделях. К недостаткам можно отнести необходимость определения статистическим методом вероятность того, что для очередного прогона программы будет выбран набор данных из предполагаемой области, что затрудняет расчеты. После тестирования, на этапе эксплуатации ПО при росте числа прогонов n и выполнении условий n-< Для тестирования программы были проведены 150 прогонов, 1 из которых закончился отказом. R=1-1/150=0.99333333 Надежность программы составила 99,33%. ЗаключениеВ последнее время туризм в России получил значительное развитие. С развитием туризма постепенно сформировался рынок услуг. Сегодняшние турфирмы могут предложить многообразие направлений, различные по продолжительности путешествия и поездки. При выборе тура обычно руководствуются следующими критериями: тип тура (экскурсионный, семейный, пляжный, спортивный, лечебный, охота/рыбалка); стоимость тура; размещение для проживания: (отели любых разновидностей, палатка, коттедж, без размещения); питание (система оплаты «все включено», полный пансион, полупансион, завтраки, без питания); полное время тура (менее суток, 1-4 дней, 5-10 дней, от 10 дней); время в пути; тип транспорта; основной рельеф местности (наличие водоемов, гор, леса, пещер, равнин); наличие культурных достопримечательностей; наличие ресторана/бара/кафе, магазинов. Однако для того, чтобы совершить некий выбор, человек должен сформировать множество альтернативных вариантов решения (далее - альтернатив); сформировать множество критериев оценки альтернатив; получить оценки альтернатив по критериям; выбрать лучшую альтернативу, которая и выдается системой в качестве рекомендации. Современные системы поддержки принятия решения представляют собой системы, максимально приспособленные к решению задач повседневной управленческой деятельности, и являются инструментом, призванным оказать помощь лицам, принимающим решения. В данной дипломной работе раскрыты основные понятия СППР, проведен анализ методов поддержки принятия решений. На основе метода аналитических иерархий разработан и описан новый метод, подходящий под конкретно поставленную проблему, а именно: позволяет полагаться на предпочтения одного ЛПР и поддерживает работу как с численными, так и с лингвистическими значениями большого количества критериев, а также альтернатив. В работе представлен также обзор систем управления базами данных и по результатам анализа выбрана наиболее приемлемая из СУБД - Access. Для повышения качества туристских услуг и обслуживания разработана программа, позволяющая принимать оптимальные решения по выбору тура с учетом предпочтений лица принимающего решения. Для написания программы выбран язык C#, один из самых продвинутых и современных языков программирования в настоящее время. Для подтверждения соответствия программного обеспечения требованиям технического задания разработан программный документ «Программа и методика испытаний программы поддержки принятия решений по выбору тура». По результатам тестирования рассчитана надежность программы, которая составила 99,33%. В ходе работы над дипломным проектом были разработаны следующие программные документы, содержащие сведения, необходимые для разработки, сопровождения и эксплуатации программы: техническое задание; пояснительная записка; текст программы; программа и методика испытаний; эксплуатационные документы (руководство оператора). Разработанная программа может иметь практическое применение в туристических фирмах. Литература1. Ларичев О. И., Петровский А. В. Системы поддержки принятия решений. Современное состояние и перспективы их развития. // Итоги науки и техники. Сер. Техническая кибернетика. — Т.21. М.: ВИНИТИ, 1987 2. Вишнеков А.В., Курилова Н.С., Сафонова И.Е., Штейнберг В.И.. Многоцелевые задачи принятия проектных решений: Учебное пособие. - МГИЭМ. - М., 2002. 3. Трахтенгерц Э.А. Компьютерная поддержка принятия решений. М., Синтег. 2000. 4. Мэтью А. Стэкер, Стивен Дж. Стэйн, Тони Нортроп. Разработка клиентских Windows-приложений на платформе Microsoft .Net Framework. питер 2008 5. Дейт К. Введение в системы баз данных //6-издание. - Киев: Диалектика, 1998 6. Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. - Харьков: Фолио, Ростов н/Д: Феникс, 1997. 7. Карли Ватсон – С#, Издательство "Лори", Москва, 2005. 8. Система поддержки принятия решений в человеко-машинных системах управления. Труды Института проблем управления РАН им. В.А.Трапезникова. Том VIII. М.: ИПУРАН, 2000 г. 9. http://www.gorskiy.ru/Articles/Dmss 10. http://ru.wikipedia.org 11. http://www.citforum.ru 12. http://www.microsoft.com Федеральное государственное автономное образовательное учреждение высшего профессионального образования НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ВЫСШАЯ ШКОЛА ЭКОНОМИКИ МОСКОВСКИЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ НАЦИОНАЛЬНОГО ИССЛЕДОВАТЕЛЬСКОГО УНИВЕРСИТЕТА «ВЫСШАЯ ШКОЛА ЭКОНОМИКИ» КАФЕДРА ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ И СЕТИ Текст программы (приложение А) Москва 2013 using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.IO; using System.Xml; using System.Data.OleDb; using System.Data; namespace DiplomProject { public class AlternativeComparer : IComparer { public int Compare(Altarnative x, Altarnative y) { return x.Weight.CompareTo(y.Weight); } } static class Program { static List static OleDbConnection _connection = null; static List [STAThread] static void Main(string[] args) { ReadAlternatives(); // Читаем критерии для оценки из файла // ReadCriteria(); // Вводим предпочтения клиента // InputClientValues(); // Рассчитываем веса для критериев // CalculateCriteriaWeights(); // Рассчитываем веса для значений критериев // foreach (Criteria criteria in _criterias) { CalculateValueWeights(criteria); Console.WriteLine(string.Format("Вес критерия {0}: {1}", criteria.Name, criteria.Weight.ToString() + Environment.NewLine)); foreach (CriteriaValue cvalue in criteria.Values) { Console.WriteLine(string.Format("Вес значения {0}: {1}", cvalue.Name, cvalue.Weight.ToString() + Environment.NewLine)); } } _alternatives.Sort(new AlternativeComparer()); Console.WriteLine("____________________________________________________" + Environment.NewLine); for (int i = _alternatives.Count-1; i >= 0; i--) { Altarnative alt = _alternatives[i]; CalculateAlternativeWeight(alt); Console.WriteLine(string.Format("Альтернатива {0} | Вес {1}", alt.Name, alt.Weight.ToString() + Environment.NewLine)); } Console.WriteLine("Нажмите любую кнопку для выхода из программы"); Console.ReadLine(); } /// /// Посчитать вес альтернативы /// /// Альтернатива static void CalculateAlternativeWeight(Altarnative alt) { for (int i = 0; i < alt.Values.Count; i++) { Criteria criteria = _criterias[i]; decimal v = FindValue(alt.Values[i], criteria); alt.Weight += (criteria.Weight * v); } } static decimal FindValue(string alternativeValue, Criteria criteria) { foreach (CriteriaValue cv in criteria.Values) { if (cv.Name.ToUpper() == alternativeValue.ToUpper()) { return cv.Weight; } } return -1; } static string GetNameByValueForCoastAlternative(int val) { if (val > 0 && val <= 5000) return "до 5 тыс. руб."; if (val > 5000 && val <= 10000) return "до 10 тыс. руб."; if (val > 10000 && val <= 20000) return "до 20 тыс. руб."; if (val > 20000 && val <= 30000) return "до 30 тыс. руб."; if (val > 30000) return "более 30 тыс. руб."; return val.ToString(); } static string GetNameByValueForDurationAlternative(double val) { if (val > 0 && val < 1) return "менее суток"; if (val > 1 && val <= 4) return "1-4 дней"; if (val > 4 && val <= 10) return "5-10 дней"; if (val > 10) return "от 10 дней"; return val.ToString(); } static string GetNameByValueForTripDurationAlternative(int val) { if (val > 0 && val <= 3) return "0-3 часа"; if (val > 3 && val <= 6) return "3-6 часов"; if (val > 6 && val <= 12) return "6-12 часов"; if (val > 12 && val <= 24) return "12-24 часа"; if (val > 24) return "Более суток"; return val.ToString(); } /// /// Считать альтернативы из БД /// static void ReadAlternatives() { _alternatives = new List SetConnection(); if (_connection.State == ConnectionState.Open) { OleDbCommand com = new OleDbCommand("SELECT * FROM Таблица1", _connection); OleDbDataReader reader = com.ExecuteReader(); while (reader.Read()) { Altarnative alt = new Altarnative(); alt.Name = reader[1].ToString(); alt.Values.Add(reader[2].ToString()); alt.Values.Add(GetNameByValueForCoastAlternative(Int32.Parse(reader[3].ToString()))); alt.Values.Add(reader[4].ToString()); alt.Values.Add(reader[5].ToString()); alt.Values.Add(GetNameByValueForDurationAlternative(Double.Parse(reader[6].ToString()))); alt.Values.Add(GetNameByValueForTripDurationAlternative(Int32.Parse(reader[7].ToString()))); alt.Values.Add(reader[8].ToString()); alt.Values.Add(reader[9].ToString()); alt.Values.Add(reader[10].ToString()); alt.Values.Add(reader[11].ToString()); _alternatives.Add(alt); } } } /// /// Установить соединение с БД /// static void SetConnection() { _connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\альтернативы.accdb"); _connection.Open(); } /// /// Считать из файла список критериев /// static void ReadCriteria() { _criterias = new List FileStream stream = new FileStream("Criterias.xml", FileMode.Open); XmlDocument doc = new XmlDocument(); doc.Load(stream); XmlElement root = doc.DocumentElement; foreach (XmlNode node in root.ChildNodes) { Criteria criteria = new Criteria(); criteria.Name = node.Attributes[0].Value; foreach (XmlNode childNode in node.ChildNodes) { foreach (XmlAttribute attr in childNode.Attributes) { CriteriaValue criteriaValue = new CriteriaValue(); criteriaValue.Name = attr.Value; criteria.Values.Add(criteriaValue); } } _criterias.Add(criteria); } } /// /// Ввести предпочтения клиента по критериям и их значениям /// static void InputClientValues() { foreach (Criteria criteria in _criterias) { Console.WriteLine(string.Format("Введите оценку по десятибалльной шкале для критерия {0}", criteria.Name)); bool isCorrectInput = false; // Получаем значимость текущего критерия // while (!isCorrectInput) { isCorrectInput = Int32.TryParse(Console.ReadLine(), out criteria.ClientValue) && criteria.ClientValue >= 1 && criteria.ClientValue <= 10; if (!isCorrectInput) Console.WriteLine("Неверный ввод!"); } foreach (CriteriaValue val in criteria.Values) { Console.WriteLine(string.Format("Введите оценку по десятибалльной шкале для значения {0}", val.Name)); isCorrectInput = false; while (!isCorrectInput) { isCorrectInput = Int32.TryParse(Console.ReadLine(), out val.ClientValue) && val.ClientValue >= 1 && val.ClientValue <= 10; if (!isCorrectInput) Console.WriteLine("Неверный ввод!"); } } } } /// /// Произвести расчет весов критериев /// static void CalculateCriteriaWeights() { foreach (Criteria criteria in _criterias) { PreCulculateCriteriaWeight(criteria); } decimal criteriaSumm = CulculateCriteriaSumm(); if (criteriaSumm > 0) { foreach (Criteria criteria in _criterias) { criteria.Weight = criteria.TempCriteriaWeight / criteriaSumm; } } } static void CalculateValueWeights(Criteria criteria) { foreach (CriteriaValue val in criteria.Values) { PreCulculateValueWeight(criteria, val); } decimal valueSumm = CulculateValueSumm(criteria); if (valueSumm > 0) { foreach (CriteriaValue val in criteria.Values) { val.Weight = val.TempValueWeight / valueSumm; } } } /// /// Произвести расчет веса /// /// static void PreCulculateCriteriaWeight(Criteria criteria) { decimal summ = 0; foreach (Criteria c in _criterias) { summ += GetValueFromInterval(criteria.ClientValue, c.ClientValue); } criteria.TempCriteriaWeight = (decimal)Math.Pow((double)summ, (double)1 / _criterias.Count); } static void PreCulculateValueWeight(Criteria criteria, CriteriaValue val) { decimal summ = 0; foreach (CriteriaValue v in criteria.Values) { summ += GetValueFromInterval(val.ClientValue, v.ClientValue); } val.TempValueWeight = (decimal)Math.Pow((double)summ, (double)1 / criteria.Values.Count); } static decimal CulculateCriteriaSumm() { decimal summ = 0; foreach (Criteria criteria in _criterias) summ += criteria.TempCriteriaWeight; return summ; } static decimal CulculateValueSumm(Criteria criteria) { decimal summ = 0; foreach (CriteriaValue val in criteria.Values) summ += val.TempValueWeight; return summ; } static decimal GetValueFromInterval(int k1, int k2) { double res = k1 / k2; if (res >= 0 && res < 0.25) return 1 / 9; if (res >= 0.25 && res < 0.45) return 1 / 7; if (res >= 0.45 && res < 0.65) return 1 / 5; if (res >= 0.65 && res < 0.85) return 1 / 3; if (res >= 0.85 && res < 1.5) return 1; if (res >= 1.5 && res < 3.5) return 3; if (res >= 3.5 && res < 5.5) return 5; if (res >= 5.5 && res < 7.5) return 7; if (res >= 7.5 && res < 10) return 9; return -1; } } } // ----------------------------------------------------------------------- // // TODO: Update copyright text. // // ----------------------------------------------------------------------- namespace DiplomProject { using System; using System.Collections.Generic; using System.Linq; using System.Text; /// /// TODO: Update summary. /// public class Criteria { public string Name; public List public int ClientValue; public decimal TempCriteriaWeight; public decimal Weight; } } // ----------------------------------------------------------------------- // // TODO: Update copyright text. // // ----------------------------------------------------------------------- namespace DiplomProject { using System; using System.Collections.Generic; using System.Linq; using System.Text; /// /// TODO: Update summary. /// public class CriteriaValue { public string Name; public int ClientValue; public decimal TempValueWeight; public decimal Weight; } } Федеральное государственное автономное образовательное учреждение высшего профессионального образования НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ВЫСШАЯ ШКОЛА ЭКОНОМИКИ МОСКОВСКИЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ НАЦИОНАЛЬНОГО ИССЛЕДОВАТЕЛЬСКОГО УНИВЕРСИТЕТА «ВЫСШАЯ ШКОЛА ЭКОНОМИКИ» КАФЕДРА ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ И СЕТИ Программа и методика испытаний Программы поддержки принятия решений по выбору тура (Приложение Б) Москва 2013 Содержание Аннотация 8 Введение 12 1. Система поддержки принятия решений 13 1.1. Задачи системы поддержки принятия решений 13 1.2. Основные понятия СППР 14 1.3. Структурирование множества альтернатив 15 1.4. Условия и ситуации принятия решений 17 1.5. Групповые решения 18 1.6. Системы поддержки принятия решений 20 1.7. Архитектуры систем поддержки принятия решений 21 1.7.1. Функциональная СППР 21 1.7.2. СППР с использованием независимых витрин данных 22 1.7.3. СППР на основе двухуровневого хранилища данных 23 1.7.4. СППР на основе трехуровневого хранилища данных 24 2. Выбор критериев отбора методов 25 3. Описание методов поддержки принятия решений 26 3.1. Методы сравнения и оценки многокритериальных альтернатив в условиях определённости исходной информации 26 3.1.1. Методы иерархического упорядочивания альтернатив на заданном множестве альтернатив и критериев 26 3.1.1.2. Попарное сравнение 26 3.1.1.3. Лексикографический метод 26 3.1.1.4. Метод лексикографического полуупорядочивания 26 3.1.1.5. Метод перестановок 27 3.1.2. Методы, основанные на количественном выражении предпочтений ЛПР на множестве критериев 27 3.1.2.1. Метод простых приращений 27 3.1.2.2. Метод ELECTRE I 27 3.1.2.3. Метод ELECTRE II 28 3.1.2.4. Метод ELECTRE III 28 3.1.2.5. Метод аналитических иерархий 29 3.1.3. Методы, основанные на информации о допустимых значениях критериев 30 3.1.3.1. Задание минимально допустимых значений критериев 30 3.1.3.2. Анализ альтернатив только по критериям, для которых достигаются «наилучшие» 30 3.1.4. Методы, не требующие ранжирования критериев 30 3.1.4.1. Критерий Харвица 30 3.1.4.2. Метод МАКСИМИН 31 3.1.4.3. Метод МАКСИМАКС 31 4. Методы оценки и сравнения многокритериальных альтернатив в условиях неопределённости исходной информации 32 4.1. Метод формирования и анализа платёжной матрицы 32 5. Методы принятия групповых решений 33 5.1. Метод Дельфи 33 5.2. Метод ранжирования альтернатив 33 5.3. Метод парных сравнений 33 5.4. Метод группового принятия решения с помощью кластеризации экспертных оценок альтернатив 34 6. Выбор метода 35 7. Критерии выбора тура по России 37 8. Разработка ПО 38 8.1. Обзор языков программирования 38 8.2. Выбор языка программирования 42 9. Обзор систем управления базами данных (СУБД) 43 10. Выбор СУБД 45 11. Надежность программного обеспечения 46 Заключение 51 Литература 53 1. Объект испытаний 76 2. Цель испытаний 76 3. Состав предъявляемой документации 76 4. Технические требования 76 5. Порядок проведения испытаний 76 6. Порядок проверки работоспособности 77 7. Меры, обеспечивающие безопасность и безаварийность проведения испытаний 77 Аннотация 82 1. Область применения 83 2. Описание возможностей 83 3. Требования к уровню подготовки пользователя 83 4. Требования для работы с приложением 83 5. Настройка рабочего места пользователя 83 6. Выполнение программы 84 7. Внесение изменений в базу туров 85 Обратно симметричная матрица отношения оценок критериев (значений критериев) 98 Настоящий документ является программой и методикой испытаний программы для поддержки принятия решений по выбору тура. Документ предназначен для установления данных, обеспечивающих получение и проверку проектных решений, выявление причин сбоев, определение качества работ, показателей качества функционирования программы и отдельных подпрограмм, проверку соответствия программы требованиям техники безопасности, продолжительность и режим испытаний. 1. Объект испытаний Объектом испытания является программа, предназначенная для поддержки принятия решения по выбору тура. |