Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Выбор языка программирования и среды разработкиСодержание книги
Поиск на нашем сайте
В качестве языка программирования был выбран C++, поскольку он содержит в себе большую стандартную библиотеку, включающую в себя необходимые для реализации классы, контейнеры, алгоритмы. Он является кроссплатформенным, что позволяет выполнять код на системах с различной архитектурой. Помимо этого, в тестирующей программе необходимо взаимодействие с файлами для извлечения информации, что так же просто реализуется на данном языке. Средой разработки был выбран Microsoft Visual Studio, так как он является бесплатным инструментом, включающим в себя редактор исходного кода, встроенный отладчик, а также имеет возможность создавать или добавлять дополнительные библиотеки для расширения функциональности. Программная реализация Входные и выходные данные В первой строке входного файла содержится следующая информация: K – количество тестов, M – число машин и N – число задач в одном тесте. В последующих K строках содержится информация для каждого теста. В них содержится N чисел, которые являются временем выполнения задачи. На Рис. 2.1 изображен пример входного файла. В первой строке указано: 8 тестов, 5 машин и 10 задач в одном тесте. В последующих 8 строках находится по 10 чисел, которые являются временем выполнения задачи. Эти 10 чисел будут распределены между 5 машинами.
Во время выполнения тестирования результаты работы записываются в текстовый файл. В файле содержится: период обработки после балансировки каждым алгоритмом, время выполнения одного теста для каждого алгоритма и суммарное время выполнения всех тестов у каждого алгоритма. Пример выходного файла изображён на Рис. 2.2: количество строк (кроме последней) соответствует количеству тестов. В последней строке написано общее время работы каждого алгоритма. В первом столбце записаны периоды обработки после работы GreedyBalance алгоритма, во втором столбце записано время выполнения балансировки GreedyBalance. В последующих столбцах находится аналогичная информация для SortedBalance, GreedyBalanceModified и SortedBalanceModified алгоритмов. Так, в первом тесте GreedyBalance алгоритмы выполнили балансировку с периодом обработки равному 73, а SortedBalance алгоритмы выполнили балансировку с периодом обработки 49. Стоит отметить, что столбцы 1–5 и 3–7 одинаковые, поскольку они используют одинаковые алгоритмы, но с разной реализацией и разными структурами данных.
Структура программы Программы разделена на 3 модуля: 1) AlgorithmTester.cpp – главный файл программы, содержащий основную функцию консольного приложения int main(). 2) Balancer.h – заголовочный файл, содержащий описание класса Balancer. Для удобства все алгоритмы из первой главы были вынесены в этот класс, поскольку они работают с одинаковыми наборами данных. Все данные также содержатся в классе. 3) Balancer.cpp – файл исходного кода, содержащий код для всех методов, описанных в заголовочном файле. В главной функции int main(), находящейся в файле AlgorithmTester.cpp, выполняется чтение названия файла с входными данными, после чего вызывается процедура void startTesting(string & testName), в которой аргументом является название файла. Происходит проверка на наличие этого файла. Если файл существует, то в цикле считываются исходные данные и вызываются алгоритмы балансировки, вычисляя время работы алгоритма. Результаты балансировки и время работы записываются в файл, как было описано ранее. Внутри класса Balancer описаны две структуры данных: · struct Task – структура данных, в которой хранится информация о задаче. Полями структуры являются: int id – номер задачи, int processingTime – время выполнения задачи; · struct Machine – структура данных, в которой хранится информация о машине. Полями являются: int totalTime – общее время работы машины, int id – номер машины, vector<Task> assignedTasks – множество задач, назначенных на машину. Полями класса являются: · int numberOfTasks – число задач, которые необходимо распределить; · int numberOfMachines – число машин, между которыми необходимо распределить задачи; · queue<Task> tasks; – множество задач для алгоритмов без сортировки; · vector<Task> sortedTasks; – множество задач для алгоритмов с сортировкой; · vector<Machine> machines – множество машин, между которыми требуется распределить задачи; · vector<int> priorityList – список номеров машин для очереди с приоритетом, основанной на двоичной куче. Первым в списке всегда будет номер машины с минимальной нагрузкой. Все поля и структуры имеют модификатор доступа private, то есть доступ к ним есть только внутри класса. Алгоритмы балансировки из первой главы вынесены в следующие методы: · void greedyBalance(); – процедура Greedy Balance алгоритма; · void sortedBalance(); – процедура Sorted Balance алгоритма; · void greedyBalanceModified(); – процедура модифицированного Greedy Balance алгоритма. Используется очередь с приоритетом на основе двоичной кучи; · void sortedBalanceModified(); – процедура Sorted Balance алгоритма с использованием очереди с приоритетом; Прочими методами класса являются: · int getProcessingPeriod(); – функция получения периода обработки; · void startBalancing(int type = 0); – процедура запуска балансировки с указанным в параметрах алгоритмом; · void addTask(int _processingTime); – процедура добавления задачи в множество задач с указанным временем выполнения; · void setNumberOfMachines(int numberOfMachines_); – процедура установки балансировщику числа машин; · void updateQueue(); – процедура обновления порядка в очереди с приоритетом; · Balancer(); – конструктор класса; · ~Balancer(); – деконструктор класса; · static bool compareMachines(const Machine &a, const Machine &b); – функция сравнения двух машин; · static bool compareTasks(const Task &a, const Task &b); – функция сравнения двух задач. Все методы работают с данными, описанными внутри класса. В программной реализации используются следующие директивы: · iostream – заголовочный файл для работы с вводом/выводом, используется для вывода информации в окно консоли; · vector – контейнер для эмуляции массива, используется в качестве множеств машин и задач; · queue – контейнер для реализации очереди в Greedy и Sorted Balance функциях. · algorithm – заголовочный файл с набором функций для работы с контейнерами, используется для сортировки множества задач и поиска машины с минимальным временем работы; · fstream – заголовочный файл для работы с файлами, используется для чтения тестов из файлов и вывода информации в файл; · string – класс для организации работы со строками; · ctime – заголовочный файл для работы с временем, используется для вычисления времени работы. Листинг программы приведён в Приложении 1. Интерфейс программы В качестве интерфейса программы используется консольное приложение. Пользователь вводит название файла с тестами, откуда будут считываться входные данные для балансировки. В случае, если файл не был найден, программа сообщит об этом. После выполнения всех тестов, приложение сообщает о завершении работы. На Рис. 2.3 и Рис. 2.4 приведены скриншоты окна консоли. Выходные данные записываются в файл “result_{название теста}.txt”.
Тестирование программы Чтобы убедиться в правильности работы программной реализации был сгенерирован специальный тестовый файл, изображённый на Рис. 2.5. Всего будет 5 тестов, в которых между 5 машинами будут распределены 10 заданий. Время выполнения задания варьируется от 1 до 30.
В Таблице 1 приведены результаты правильной балансировки для данных тестов. Все результаты получены путём ручной трассировки алгоритмов.
Подробная информация с временем работы и назначенными заданиями для каждой машины находится в Приложении 2. Результат работы программы приведён на Рис. 2.6.
Чтобы убедиться в верности полученных результатов, сравним ответы в столбцах 1-3 с ответами из Таблицы 1. Кроме того, столбцы 1-5 и 3-7 должны также содержать одинаковые ответы. Результат работы программной реализации полностью идентичен результату, полученного при ручной трассировке. Алгоритмы реализованы верно.
|
|||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-07-18; просмотров: 102; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.249.84 (0.007 с.) |