Томас Кормен Алгоритмы Построение И Анализ Формат Doc Word
- Томас Кормен Алгоритмы Построение И Анализ Формат Doc Wordpress
- Томас Кормен Алгоритмы Построение И Анализ Формат Doc Words
Читать ONLINE Использование алгоритма муравья для решения задачи коммивояжера Содержание Введение. Структура данных cityType: - X - координата X; - Y - координата X; Глобальная структура данных - Distance - массив расстояний между городами и узлами препятствий; - Cities - массив с координатами городов и координатами узлов препятствий; - ants - массив, в котором записана информация про каждого агента. Элемент массива содержит минимальный путь; - Obstacles - массив, содержащий информацию о графе видимости; - pheromone: массив, в котором записана информация о количестве феромонов на видимых ребрах графа; - best - наименьшая длина маршрута; - bestIndex - номер агента с наименьшей длиной маршрут - curTime - счетчик итераций; - denom - используется для расчета формулы (4.1); - Inf:array - массив, содержащий информацию о количестве городов, о количества препятствий и о количестве их ребер.
Структура cityType используется для определения координат городов и узлов препятствий. Структура antType представляет одного муравья. Кроме отслеживания текущего и следующего города на пути (поля curCity и nextCity) каждый муравей также должен учитывать города, которые уже были посещены (массив tabu), узлы, которые можно посетить, находясь в текущем узле (учесть массив obstacles), а также длину пройденного пути. Наконец, общая длина пуп сохраняется в поле tourLength. Структуры данных в алгоритме включают также специальный двумерный массив distance, который содержит предварительно рассчитанные расстояния от одного города до всех других.
И естественно, что кандидатов на такие вакансии достаточно Теперь пара вопросов. Doc 9377 AN/915 Руководство по координации между органами обслуживания воздушного движения, службами аэронавигационной информации и авиационными. Секреты Word для Windows 95:Лоу Дуг. Алгоритмы: построение и анализ:Кормен Томас, Лейзерсон Чарльз, Ривест Рональд.
Уровни фермента сохраняются в массиве pheromone. Каждый двумерный массив в алгоритме использует первый индекс в качестве начала ребра, то есть исходного города, а второй - в качестве конечного.4.5 Использование графа видимости в алгоритме муравья Как уже отмечалось выше, в стандартной постановке задачи коммивояжера при движении по графу на агента накладывается только одно ограничение: каждый город может быть посещен только один раз. В дополнение к этому, в задаче, поставленной в данной дипломной работе, необходимо учесть наличие препятствий. Для этого используется массив obstacles. О том, как этот массив заполняется, было подробно написано выше. В данном пункте рассмотрим то, как использовать граф видимости в алгоритме муравья.
В Приложении 1 расположен исходный код программы на Delphi, сейчас же остановимся на основных этапах построения алгоритма движения муравья. Сначала функция init выполняет три базовых действия, которые требуются для подготовки алгоритма муравья. Первое действие - это считывание координат городов. Кроме того, во время считывания городов одновременно очищаются массивы distance и pheromone. Далее, немного оптимизируя алгоритм, выполняется предварительный расчет расстояний между всеми городами и узлами препятствий. Расстояния вычисляется с помощью обычной двумерной геометрии координат (теорема Пифагора).
Наконец, инициализируется массив ant. Муравьи должны быть равномерно распределены по всем городам.
Для этого используется переменная to1 в качестве счетчика псевдоцикла. Когда значение переменной to1 становится равным номеру последнего города, она возвращается к первому городу, и процесс повторяется. Поле curcity в структуре ant устанавливается в значение текущего города (первого города для муравья). Затем очищаются списки tabu и path. Ноль в массиве tabu обозначает, что город еще не был посещен; единица свидетельствует, что город уже включен в путь муравья.
В массив path помещается номер текущего города для муравья, и очищается поле tourLength (длина пути). После завершения пути каждый муравей должен быть повторно инициализирован, а затем распределен по графу. Это выполняет функция restartAnts.
Во время повторной инициализации самая оптимальная длина пути сохраняется, чтобы можно было оценить прогресс муравьев. Затем структура алгоритма очищается и повторно инициализируется - начинается следующее путешествие. Функция selectNextCity позволяет выбрать следующий город для составления пути. Она вызывает функцию antProduct, которая используется для расчета уравнения (5). Функция selectNextCity вызывается для заданного муравья и определяет, которую из граней можно выбрать в соответствии со списком tabu.
На этом шаге список tabu уже включает в себя информацию обо всех видимых и невидимых гранях. Выбор грани основывается на вероятностном уравнении (5), которое вычисляет коэффициент заданного пути от суммы других путей. Первой задачей функции selectNextCity является расчет знаменателя выражения. После этого все ребра, которые агент может посетить из данного узла, проверяются с помощью уравнения (5), чтобы муравей мог выбрать путь. Как только ребро найдено, функция определяет город, к которому перейдет муравей.
Следующая функция, simulateAnts, рассчитывает движения муравьев по графу. Функция simulateAnts добавляет в список tabu, который содержит информацию о посещенных городах, информацию о видимых из текущего узла ребрах графа из массива obstacles. Затем функция проверяет, есть ли для агента, находящегося в текущем узле, следующий ход.
Если агенту некуда идти, то есть в списке tabu нет, то функция рассматривает следующего агента. Если списке tabu есть хотя бы один, значит, муравей может совершить еще один ход. Если муравей еще не посетил все города, то есть если переменная pathIndexcity не равна MAXCITIES, то в этом случае вызывается функция selectNextCity, которая определяет следующую грань. Затем выбранный узел сохраняется в переменной nextcity, а также в массивах path и tabu. Увеличивается на единицу переменная pathIndex, а если выбранный узел оказался городом, то увеличивается на единицу переменная pathIndexcity. Рассчитывается значение tourLength, чтобы сохранить длину пути.
Один вызов функции simulateAnts позволяет каждому муравью перейти от одного узла к другому. Функция simulateAnts возвращает нуль, если посещены все города, в противном случае - значение, отличное от нуля. После завершения пути выполняется процесс обновления путей. Он включает не только обновление путей по количеству фермента, оставленного агентами, но и существующего фермента, часть которого испарилась.
Эту часть алгоритма выполняет функция updateTrails. Первая задача функции updateTrails заключается в том, чтобы испарить часть фермента, который уже находится на пути. Она выполняется на всех видимых ребрах графа с помощью уравнения (8). Следующая задача - получение нового фермента на путях, пройденных муравьями во время последних перемещений. Для этого необходимо пройти по элементам массива ant и, руководствуясь значением поля path, «распылить» новый фермент на посещенной муравьем грани в соответствии с уравнением (6).
Затем следует применить параметр RHO, чтобы снизить интенсивность фермента, который выделяют муравьи. После инициализации генератора случайных чисел и установки начальных значений параметров алгоритма запускается симуляция для количества шагов, заданного константой MAXTIME. Когда муравей завершает путь (который он проходит с помощью функции simulateAnts), вызывается функция updateTrails для того, чтобы изменить окружающую среду. Следует обратить внимание, что каждый раз при завершении пути вызывается функция restartAnts. Это делается для того, чтобы подготовиться к следующему путешествию по графу.
Функция restartAnts не вызывается только в случае, если симуляция уже завершена. Дело в том, что функция уничтожает информацию о пути муравья, которую необходимо сохранить в самом конце, чтобы определить наилучший путь.4.6 Моделирование алгоритма муравья на ЭВМ В данном разделе представлены результаты моделирования алгоритма муравья на примере задачи коммивояжера с препятствиями.
Моделирование производилось с двумя целями: - изучение влияния параметров, на сходимость алгоритма к оптимальному решению - сравнение с алгоритмом Дейкстры. Для изучения влияния параметров было произведено моделирование алгоритма муравья при различных значениях параметров,. Тестируемые значения параметров выбирались в соответствии с рекомендациями основателя алгоритма Марко Дориго. /28/ Параметр Q не рассматривался, т.к.
Согласно данной работе величина Q не влияет на производительность алгоритма. В качестве постоянного значения Q было выбрано значение 20. Во всех экспериментах количество муравьев было равно количеству городов. Каждый муравей начинал свой путь из города, а не из вершины препятствия. Менялась величина одного параметра, при этом величина других параметров оставалась неизменной. В качестве постоянных параметров использовались следующие значения:.
В каждом эксперименте изменялась величина только одного параметра. Изменяемые значения параметров:,. Количество циклов алгоритма в каждом эксперименте менялось пропорционально количеству городов и равнялось MAXTOURS.
MAXCITIES.10. Каждая комбинация параметров тестировалась десять раз. Моделирование производилось на персональном компьютере на базе процессора Intel Core 2 Duo 2.67 GHz, с объемом оперативной памяти 2GB. Количество городов изменялось от 5 до 25 городов с шагом 5. Количество препятствий равнялось трем, конфигурация препятствий: треугольник, прямоугольник и восьмиугольник. Конфигурация препятствий, их координаты и координаты городов были заданы дипломным руководителем и представлены в Приложении 2.
Подробные результаты каждого эксперимента и все временные диаграммы, характеризующие влияние параметров, расположены в Приложении 3. Анализ полученных результатов будет произведен в следующем разделе. В данном разделе остановимся на лучших решениях, которые были получены.
Вариант задачи с пятью городами В связи с маленьким количеством городов, при всех комбинациях параметров, кроме, была найдена минимальная длина пути: 199,361. Результат работы алгоритма проиллюстрированы на рисунке (9): Рисунок 9. Результат работы алгоритма муравья для 5 городов. Вариант задачи с десятью городами В данном примере минимальная найденная длина пути составила: 262,045. Параметры, при которых она был найден:, Результат работы алгоритма проиллюстрированы на рисунке (10): Рисунок 10. Результат работы алгоритма муравья для 10 городов. Вариант задачи с пятнадцатью городами В данном примере минимальная найденная длина пути составила: 303,926.
Параметры, при которых оно был найден:, Результат работы алгоритма проиллюстрированы на рисунке (11): Рисунок 11. Результат работы алгоритма муравья для 15 городов.
Вариант задачи с двадцатью городами В данном примере минимальная найденная длина пути составила: 341,038. Параметры, при которых она была найдена:, Результат работы алгоритма проиллюстрированы на рисунке (12): Рисунок 12. Результат работы алгоритма муравья для 20 городов. Вариант задачи с двадцатью пятью городами В данном примере минимальная найденная длина пути составила: 375,068. Параметры, при которых она была найдена:, Результат работы алгоритма проиллюстрированы на рисунке (13): Рисунок 13. Результат работы алгоритма муравья для 25 городов. Для сравнения с алгоритмом Дейкстры была рассмотрена работа аспиранта 301 кафедры МАИ Чжо Мьо Хана.
/10/ В данной работе задача коммивояжера с препятствиями решена с помощью алгоритма Дейкстры. Для обхода препятствий использовалась диаграмма Вороного. Данная задача используется в качестве тестовой для сравнения её с алгоритмом муравья. Исходный код программы представлен в Приложении 4. Задача изображена на рисунке 14: Рисунок 14.
Тестовая задача, решенная с помощью алгоритма Дейкстры Минимальный путь, найденный алгоритмом Дейкстры для данной задачи, составил 170,32. Задача с такой же конфигурацией городов и препятствий была решена алгоритмом муравья. Использовались следующие параметры алгоритма:, Число муравьев равнялось количеству городов. Количество циклов алгоритма было задано равным 2400. Результаты моделирования представлены на рисунке 15: Рисунок 15.
Тестовая задача, решенная алгоритмом муравья Минимальный путь, найденный алгоритмом муравья, составил 146,165. Таким образом, можно сделать вывод, что алгоритм муравья справился с тестовой задачей лучше. 1.5 Анализ полученных результатов В данном подразделе проанализировано влияние параметров, на сходимость алгоритма муравья к оптимальному решению. В варианте задачи с пятью городами алгоритм муравья показывает наилучшие результаты (в десяти случаях из десяти) при следующих значениях параметров:,. В дальнейшем будем называть эту комбинацию параметров набором номер один. Следует отметить, что в связи с относительно малым количеством городов, алгоритм достаточно хорошо сходится к минимальному решению и при всех остальных значениях параметров, кроме следующего:,. Причина этого будет описана ниже.
С увеличением городов до десяти алгоритм муравья по-прежнему показывает наилучшие результаты при наборе параметров номер один. Средний путь составляет 256, 176. Алгоритм муравья находит близкие к этому найденному минимальному решению результаты (266, 306; 268, 173) при следующих значениях параметров:, и,. В дальнейшем будем называть их набором параметров номер два и три соответственно.
При всех остальных значениях параметров алгоритм находит решения со средним значением, отличающимся от минимального найденного, в большую сторону более чем на 10. На рисунке 16 в графическом виде представлена зависимость среднего найденного пути от нескольких наборов параметров. Влияние параметров алгоритма на среднюю длину пути. На данном рисунке: график под номером 1 ( ) соответствует набору параметров номер один:,; график под номером 2 ( ) соответствует набору параметров номер два:,; график под номером 3 ( ) соответствует набору параметров номер три:,; график под номером 4 ( ) соответствует следующему набору параметров:,; график под номером 5 ( ) соответствует следующему набору параметров:,; график под номером 6 ( ) соответствует следующему набору параметров:,.
Зависимость длины среднего найденного пути от всех протестированных наборов параметров в графическом виде представлена на рисунке 22 в Приложении 3. Как видно из рисунка 16, наилучший результат во всех пяти задачах достигается при наборе параметров номер один, затем при наборе параметров номер два и три. Следует отметить, что с увеличением количества городов увеличивается разница между длиной среднего пути, найденной при наборе параметров номер один и между длинами средних путей, найденных при всех остальных наборах параметров. При этом если для набора параметров номер и два и три эта разница не велика (не более 20), то для всех других наборов параметров (кроме нижеописанного) разница более существенна (более 50). Единственным исключением является следующий набор параметров:,. В нем с увеличением количества городов разница с минимальной найденной длиной пути уменьшается.
Это можно объяснить тем, что параметр определяет вес расстояния при расчете вероятности по формуле (5). С увеличением количества городов увеличивается и минимальное расстояние, находимое алгоритмом муравья. Следовательно, увеличивается влияние параметра на найденное решение.
Таким образом, при малом количестве городов (при пяти) влияние параметра мало и при значении алгоритм сходится к неоптимальному решению. При увеличении количества городов (более 15) влияние параметра увеличивается и разница с минимальной найденной длиной пути уменьшается. Таким образом, можно заключить, что при дальнейшем увеличении количества городов следует использовать набор параметров номер один, либо набор параметров номер 6. Время выполнения программы можно оценивать только в пределах одного варианта задачи, т.к. С увеличением количества городов пропорционально увеличивается количество циклов выполнения алгоритма. Как и следовало ожидать, при дробных значениях параметров и увеличивается время выполнения программы, т.к. Эти параметры входят в уравнение (5) в качестве степеней.
В зависимости от количества городов при дробных значениях параметров и это время увеличиваются на 30-50% по сравнению со временем выполнения программы при целых значениях. Экономическая часть.1 Определение целесообразности разработки алгоритма Целью дипломной работы является разработка алгоритма муравья для решения задачи коммивояжера. Разработка алгоритма, его применение, задание исходных данных для его работы, моделирование и анализ результатов проводятся на персональном компьютере. Для экономической эффективности разрабатываемых алгоритмов и программного продукта (ПП) необходимо: определить целесообразность выполнения разработки; определить трудоемкость и затраты на создание ПП; определить показатели экономической эффективности разработки ПП. Для того чтобы обосновать целесообразность разработки ПП, дать оценку технической прогрессивности и качеству реализации, необходимо сравнить ее с одним из существующих аналогов, который принят в качестве базового. В качестве такого аналога будем рассматривать алгоритм Дейкстры, применяемый в настоящее время для решения задачи коммивояжера. Анализируемые характеристики качества алгоритмов и программных продуктов представлены в таблице 8.
Характеристики качества алгоритмов и программных продуктов. №Характеристики качества ППЕдиница измеренияЗначения характеристик качества ППЗначимость характеристиканалогновый вариант1УниверсальностьОтносительные единицы120.22Точность11.30.23Надежность11.50.24Возможность модернизации140.4 Определим индекс технического уровня разработки по формуле: где xiН, xiБ - уровень i-ой функциональной характеристики соответственно нового и базового ПП; μi - значимость i-ой функциональной характеристики;- количество рассматриваемых функциональных характеристик. Значимость i-ой функциональной характеристики определяется экспертным путем, при этом учитывается условие:.
Таким образом, индекс технического уровня равен: Индекс технического уровня разрабатываемого ПП больше единицы, следовательно, делаем заключение о целесообразности разработки.2 Определение трудоемкости разработки алгоритма и ПП В процессе планирования разработки ПП определяется трудоемкость его создания. При традиционном программировании каждый элемент ПП содержит все этапы решения задачи, начиная с ввода исходных данных и кончая выводом результатов.
Для этого случая затраты труда в чел.-час определяются по формуле: ПП = t О + t И + t А + t К + t ОТ + t Д, где t О - затраты труда на подготовку описания задачи; И - затраты труда на изучение описания задачи; А - затраты труда на разработку алгоритма решения задачи; К - затраты труда на составление программы; ОТ - затраты труда на отладку программы; Д - затраты труда на подготовку документации по ПП. Условное количество команд в программе определяется следующим образом:, где= 1200-предполагаемое количество команд, КС - коэффициент сложности программы, характеризует относительную сложность программы по отношению к так называемой типовой задаче, реализующей стандартные методы решения, сложность которой принята равной единице (величина с лежит в пределах от 1,25 до 2).
Для программного продукта, реализующего алгоритм, сложность задачи возьмем 1,6. КК - коэффициент коррекции программы в ходе разработки, т.е. Увеличение объема работ за счет внесения изменений в алгоритм или программу по результатам уточнения постановок. В данном случае заказчик хорошо представлял себе, что он хочет получить, это не требовало многочисленных доработок.
С учетом этого возьмем коэффициент равный 0,07. Таким образом, условное количество команд в разрабатываемой программе: Составляющие затрат труда рассчитываются по формулам:;;;;, где В - коэффициент увеличения затрат труда на изучение и постановку задачи вследствие их сложности и новизны (В = 1.2 - 3.0); К=1 - коэффициент квалификации разработчика, определяется в зависимости от стажа работы и составляет: - для работающих до двух лет - 0,8; от двух до трех лет - 1,0; от трех до пяти лет - 1,1 - 1,2; от пяти до семи - 1,3 - 1,4; свыше семи лет - 1,5 - 1,6.
Томас Кормен Алгоритмы Построение И Анализ Формат Doc Wordpress
Разработчик, которому было поручено это задание, имел опыт работы по специальности 2.5 года. Цифры, находящиеся в знаменателях формул, характеризуют среднюю производительность труда программистов (число команд или операторов в час). Таким образом, составляющие трудоемкости разрабатываемого ПП (чел.-час.):;;;;; Значение tO примем равным 20 чел.-час. Acpi pnpa000 драйвер. Тогда общие затраты труда составляют:ПП= 20 + 51.8 + 129.6 + 280.8 + 561.6 + 327.6 = 1319.6 чел.-час.3 Календарное планирование Календарное планирование создания ПП производится на основе данных о трудоемкости работ по его созданию.
Производственный цикл каждого этапа определяется по формуле:; где ТЭ - трудоемкость этапа, чел.-час.;РД - продолжительность рабочего дня, ч. (tРД = 8ч.);- количество работников одновременно участвующих в выполнении работ, чел. Пересчет длительности производственного цикла, выраженной в человеко-часах, в календарные дни осуществляют умножением ее на коэффициент 1.4, т.е:. Произведем расчет длительности каждого этапа:;;;;;;;;;; Результаты расчета и директивный график представлены в таблице 9. Наименование этаповУдельный вес,%Трудоемкость этапа, чел.-час.Количество исполнителейДлительность этапа, кал. ДниКалендарные дни0изучение описания задачи3.951.824.52Разработка алгоритма9.7129.6212.19Составление программы21.5280.8149.14Отладка программы.3Подготовка документации23.9327.6157.33Всего10.4 Таблица 9.
Календарное планирование.4 Расчет заработной платы основного персонала Заработная плата разработчиков программы рассчитывается на основе трудоемкости стадий работ. Часовые ставки определяются на основе должностных окладов разработчиков и разрядов работ (часовых тарифных ставок). Расчет заработной платы представлен в таблице 10.
Томас Кормен Алгоритмы Построение И Анализ Формат Doc Words
№Стадии (этапы)Трудоемкость стадий, чел.-дн.ИсполнителиДнев. Ставка руб.Сред. Ставка руб.З/п, руб.З/п с уч.
Премий руб.ДолжностьКол-во.1Подготовка описания и изучение задачи5программист5007700ведущий специалист112002Разработка алгоритма13программист430020020ведущий специалист112003Составление программы49программистОтладка программы98программист5Подготовка документации57программист700079800Всего13500 Таблица 10. Расчет заработной платы основного персонала Премия составляет 40% от заработной платы. Заработная плата основного персонала рассчитана по формуле:, где k - количество этапов; ТЭi - трудоемкость i-го этапа; - средняя часовая тарифная ставка оплаты труда работ i-го этапа.5 Определение затрат на создание алгоритмов и ПП Затраты на создание алгоритмов и ПП определяются по следующим статьям: 1. Заработная плата основных исполнителей; 2. Отчисления на социальные нужды;. Накладные расходы;.
Прочие расходы. Заработная плата основных исполнителей Заработная плата основных исполнителей рассчитана в пункте 2.4 и, с учетом премий, составляет ЗП П = 313500 р. Отчисления на социальные службы р. Накладные расходы, р. Прочие расходы, р. Сводная таблица затрат Затраты на создание алгоритмов и ПП сведены в таблицу 11.
№Наименование статей затратЗатраты, руб.Удельный вес,%1Заработная плата основных исполнителей315500382Отчисления на социальные нужды10651912.93Накладные расходы37620045.34Прочие расходы315503.8Итого:829769100 Таблица 11.
. «» — Маркес Ольга.
«» — Васабова Д.