Автор работы: Пользователь скрыл имя, 15 Ноября 2012 в 16:09, дипломная работа
Разработка программного обеспечения для автоматизации работы тендерных закупок для фонда государтсвенного имущества.
ВВЕДЕНИЕ
1 ПОСТАНОВКА ЗАДАЧИ РАЗРАБОТКИ СИСТЕМЫ ПОДДЕРЖКИ ПРИНЯТИЯ РЕШЕНИЙ ДЛЯ ФОРМИРОВАНИЯ ЗАКАЗА НА ТОРГОВО-ЗАКУПОЧНОМ ПРЕДПРИЯТИИ
Описание предметной области
Деятельность торгово-закупочного предприятия и общие подходы к ее оптимизации
Понятие коммерческой организации
Работа с посредниками
Практическое применение маркетинга
Размещение заказов через торги
Информационный обмен на торгово-закупочном предприятии
1.1.2. Территориальный фонд ОМС – организация, осуществляющая деятельность во многом аналогичную деятельности торгово-закупочного предприятия
Техническое задание к разработке системы поддержки принятия решений для формирования заказа на торгово-закупочном предприятии
Цель разработки и ее назначение
Постановка задачи
Требования к программному и аппаратному обеспечению
Основные требования к разрабатываемому программному обеспечению
Выбор и обоснование математического метода решения задачи
Аналитический обзор состояния проблемы
Генетические алгоритмы
Возможные случаи применения генетического алгоритма
Символьная модель генетического алгоритма
Работа генетического алгоритма
2 РАЗРАБОТКА СИСТЕМЫ ПОДДЕРЖКИ ПРИНЯТИЯ РЕШЕНИЙ ДЛЯ ФОРМИРОВАНИЯ ЗАКАЗА НА ТОРГОВО-ЗАКУПОЧНОМ ПРЕДПРИЯТИИ
Обоснование выбора инструментальных и аппаратных средств
2.1.1 Языки программирования
2.1.1.1 Язык Turbo Pascal
2.1.1.2 Язык Turbo С
2.1.1.3 Язык Delphi Client/Server Suite
2.1.1.4 Язык C++ Builder
2.1.2 Системы управления базами данных
СУБД Paradox и dBase
СУБД InterBase
2.1.3 Выбор аппаратных средств
2.2 Выбор алгоритма решения задачи формирования заказа
2.3 Инженерное решение задач дипломного проекта
Общая структура проекта
Представление проекта в модульных диаграммах
Базы данных системы.
Справочники для автоматического занесения входной информации
База входных данных
База выходных данных
2.3.4 Подсистема конвертирования и наполнения базы входных данных
Подсистема формирования заказов на товары
2.4 Методы уменьшения затрат машинного времени, методы отладки и тестирования
3 ЭКСПЕРИМЕНТАЛЬНАЯ ОЦЕНКА РАЗРАБОТАННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
3.1.Испытание системы
3.2. Оценка надежности
4 ОЦЕНКА ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ ПРОЕКТА
Выводы по главе
ЗАКЛЮЧЕНИЕ
СПИСОК ЛИТЕРАТУРЫ
ПРИЛОЖЕНИЕ
данных
Входными данными для решения задачи нахождения оптимального заказа являются заявки заказчиков на необходимые им партии товаров и прайс-листы фирм, предлагающих товары. Входные данные могут поставляться в виде файлов таких форматов, как *.xls (Excel), *.doc, *.rtf (Word), *.html, *.dbf (dBase) и txt, а также на бумажных бланках. Информация, имеющаяся на бумажных бланках, должна быть занесена в базу входных данных вручную. Информация, имеющаяся в виде файлов, обрабатывается автоматизированно и заносится в базу входных данных автоматически. Автоматизированная обработка состоит в том, что файлы преобразовываются в текстовый формат (txt) и приводятся к единой структуре с использованием конвертора файлов. А затем информация из полученных файлов заносится в базу входных данных автоматически. За нехваткой времени данная подсистема осталась недоработанной.
2.3.5 Подсистема формирования заказов на товары
Основными, несущими наибольшую смысловую нагрузку и решающими основную задачу СППР для формирования заказа на торгово-закупочном предприятии, модулями являются модули, представленные на рис. 2.5 в п. 2.3.2 :
" Формирование заказа
простыми методами " и " Формирование
заказа с помощью
Рассмотрим функционирование модуля "Формирование заказа простыми методами ".
Сначала пользователь
указывает дату прайс-листов
После нажатия кнопки <Выбрать> в модуле обрабатывается событие нажатия кнопки. Обработка события состоит в следующем: осуществляется выборка данных из базы данных прайс-листов и базы данных листов заказа.
К данным, выбираемым из прайс-листов относятся:
Данными, выбираемыми из листов заказа являются:
На основе выбранных данных из листов заказа рассчитывается итоговое количество упаковок по каждому лекарственному средству, которое надо закупить.
Далее функционирование модуля " Формирование заказа простыми методами " рассмотрим в рамках подсистемы: на рисунке 2.9 представлена блок-схема функционирования подсистемы формирования заказов на товары. Выборку информации в блок-схему решено не вносить, так как она производится для увеличения быстродействия программы – считывание при работе алгоритма формирования заказа информации из базы данных сильно замедляет работу алгоритма.
После окончания выборки входной информации пользователь настраивает систему: отмечает, надо ли при формировании заказа учитывать территорию поставщиков, их условия поставки, производителей лекарственных средств, товары на складе.
Далее пользователь вводит наименование и код заказа, который надо сформировать. А затем уже выбирает один из методов формирования заказа:
Первые три из указанных методов выполняются в этом же модуле, откуда он и получил свое название: "Формирование заказа простыми методами ".
На рисунке 2.10 показано окно модуля "Формирование заказа простыми методами ".
Приведем список основных подпрограмм
модуля.
В секции private класса TForm1 находятся следующие методы:
Процедура BringToArrs – занесение данных прайс-листов в динамические массивы.
Процедура SetSellMatr – заполнение матрицы SellMatr. В матрице элемент равен 0, если в i-ом прайс-листе не предлагается товар j, и 1, если в i-ом прайс-листе товар j предлагается.
Функция SupplSell – проверка, предлагает ли указанный поставщик (соответствующий ему прас-лист) указанный товар. Если да, то функция возвращает true, иначе – false.
Процедура Calc_BringToDB – вычисляет сумму закупки по всему заказу с учетом скидок и общую скидку на эту сумму, а также другие необходимые значения и заносит все результаты в базу выходных данных.
Процедура SolverForOne – формирование заказа на закупку товаров для одного указанного поставщика.
В секции public класса TForm1 находятся следующие методы
Функция SuDiscountCost – возвращает стоимость закупки с учетом скидки у поставщика, которому соответствует указанный прайс-лист.
Процедура MinMaxSolver(min:boolean . . .) -- формирование заказа на закупку товаров по минимальной цене, если min=true, или по максимальной цене, если min=false.
Рассмотрим теперь функционирование модуля "Формирование заказа с помощью генетического алгоритма ".
После выбора в окне модуля "Формирование заказа простыми методами " метода формирования заказа "Генетический алгоритм по минимальной стоимости" и нажатия кнопки <Сформировать> появляется окно модуля "Формирование заказа с помощью генетического алгоритма ", которое показано на рисунке 2.11.
В этом окне пользователь должен настроить генетический алгоритм:
После нажатия кнопки <Старт ГА> генетический алгоритм начинает свою работу в соответствии с выбранными установками.
На рисунке 2.12 показана блок-схема работы генетического алгоритма.
Приведем список основных подпрограмм модуля.
В секции private класса TForm2 находятся следующие методы:
1) Методы для преобразования кода Грея в десятичное число:
Процедура SetGraySeq– генерация последовательности переходов
Функция IntToBin – преобразование числа (0..127) в двоичный код
Функция GrayToDec – Код Грея --> Десятичное число
2) Методы реализации генетического алгоритма (ГА)
Функция SupplSellDrug – проверка, предлагает ли указанный поставщик (значение гена -- порядковый номер соотвествующий номеру прайс-листа поставщика) данный товар локус -- номер гена в хромосоме, соответствующий номеру товара);
Функция SetFirstPopulat – генерация хромосомного набора начальной популяции, удовлетворяющего требованиям, предъявляемым к символьной модели задачи;
Функция SupplierCost -- возвращает
стоимость закупки данного
Функция OneFtnDegree – преобразование строки в коде Грея в соответствующий ей вектор управляемых переменных и вычисление общей скидки,стоимости с учетом скидок и степени приспособленности особи;
Функция GetAvgDegree – вычисление средней степени приспособленности по популяции;
Функция RemoveBeforeSkresch –
предварительное отстранение
Процедура SetSelectVerSect – вычисление отрезков распределения вероятностей выбора особей, которые могут участвовать в скрещивании, на интервале [0,1];
Процедура SetOneVerSect – разбиение интервала [0,1] на 2 отрезка: Р и 1-Р , где Р -- указанная вероятность;
Процедура SetEquipVerSect – формирование отрезков распределения равных вероятностей на [0,1];
Функция Select – выбор объекта (особи, гена, точки) на основе отрезков распределения вероятностей выбора;
Функция Elit – стратегия элитизма: возвращает индекс особи в популяции, степень приспособленности которой максимальна;
Процедура Interchange – обмен хромосом участками, состоящими из одного или более генов (один участок первой хромосомы ßà один участок второй хромосомы);
Процедура OnePntCrossover – размножение по схеме "Одноточечный кроссовер";
Функция SetGeterList – формирует список номеров гетерозиготных генов в родительских хромосомах и возвращает порядковый номер в списке последнего номера гетерозиготного гена;
Процедура Dominant – вычисляет для аллельных форм каждого гетерозиготного гена указанного родителя вероятность доминантности, равную частоте данной аллельной формы в текущей популяции;
Процедура GenosRecomb – размножение по схеме "Рекомбинация генов";
Функция PntMutatInGen – точечная мутация в конкретном гене (Если мутированный ген в указанном локусе удовлетворяет требованиям, предъявляемым к символьной модели задачи (см. описание предыдущей функции), то функция возвращает true, иначе мутация производится в каком-либо другом бите гена и т.д., до тех пор, пока мутированный ген не станет удовлетворять требованиям задачи или, пока не будет пройдено предельное число шагов. Если требования задачи так и не будут удовлетворены, то выдается false, и значение переданного через параметр гена остается неизменным.);
Процедура PntMutation – Точечная мутация производится в случайно выбранном гене хромосомы до тех пор, пока мутированный ген не станет удовлетворять требованиям задачи (см. функцию PntMutatInGen); Если требования задачи так и не будут удовлетворены, то у особи останется старый (немутированный) ген;
Процедура GenMutation – генная мутация;
Процедура MacroPntMut -- макромутация точечная (использует функцию PntMutation);
Процедура MacroGenMut – макромутация генная (использует функцию GenMutation);
Процедура Inverse – инверсно-точечная мутация (Если ген в новом локусе не удовлетворяет требованиям задачи, то он подвергается точечной мутации до тех пор, пока не станет удовлетворять им (см. функцию PntMutatInGen). Если требования задачи так и не будут удовлетворены, то он заменяется на старый ген.);
Функция SetReprodGroup – формирование репродуктивной группы по второй селекционной схеме (в репродуктивную группу попадают те особи, у которых степень приспособленности больше или равна средней);
Процедура NatureSelect – Естественный отбор в (t_+1)-ю популяцию из репродуктивной группы по жесткой" схеме, если isElit=false, иначе членами (t_+1)-й популяции будут все произведенные особи плюс 1 элитная. Размер всех популяций одинаков, равен размеру первой.
Функция AllelDifference – функция возвращает аллельное разнообразие популяции (граничные случаи: если все хромосомы равны, то результат -- 0; если все аллели всех хромосом различны, то результат -- 1);
Функция WorldLimToGraphic – возвращает значение итоговой стоимости заказа с учетом скидок для графика эволюции минимальной стоимости;
Функция ConvertFitness – преобразование особи в вектор управляемых переменных;
Процедура BringToDB – занесение результатов одного заказа (одного вектора управляемых переменных) в базу данных;
2.4 Методы уменьшения
затрат машинного времени,
Реальные данные для разработанного программного обеспечения занимают большие объемы: в одном рпайс-листе может быть около пяти тысяч записей, листы заказов также могут содержать до тысячи записей. Количество прайс-листов, хранимых в базе данных также велико – около двухсот набирается несколько месяцев эксплуатации программы. Количество листов заказа примерно такое же. Кроме того сформированные заказы и разнарядки имеют большие объемы, так как они сохраняются для сравнения сформированных заказов между собой.
Входными данными программы являются прайс-листы и листы заказов. В процессе своей работы программа должна получать информацию из листов заказа о потребностях в том или ином медикаменте и прайс-листов – о наличии медикамента в листе и о цене медикамента, а также происходит обращение к прайс-листам для того, чтобы узнать скидки, предоставляемые поставщиком в прайс-листе. В процессе работы генетического алгоритма обращений к базе данных особенно много, так как существующих решений во много раз больше, чем для других рассматриваемых в работе методов, потому что генетический алгоритм работает со скидками.
Для того, чтобы сократить затраты машинного времени при работе программы был применен следующий подход – после запуска программы пользователь указывает необходимые для рассмотрения прайс-листы и листы заказа, и они перекачиваются в динамические массивы. В результате этого программе не надо будет при поиске оптимального решения обращаться к базе данных, что значительно увеличивает быстродействие программы.
Для отладки и тестирования программы были применены следующие методы: установка контрольных точек в программе, прогон программы по шагам на тестовых данных.
Тестовые данные для отладки и тестирования небольшие: четыре прайс-листа, в каждом из которых предлагается по пять медикаментов, причем цены в первом прайс-листе у всех товаров равны 1,1; во втором – 2,2; в третьем – 3,3; в четвертом – 4,4; в атрибутах прайс-листов установлены скидки; ;количество листов заказа равно четырем и суммарная потребность -- четыре медикамента в различных количествах.
Информация о работе Автоматизация тендерных закупок фонда гос имущества