Разработка нейросетевой программы прогнозирования стоимостных показателей объектов

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,36 Мб
  • Опубликовано:
    2014-02-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка нейросетевой программы прогнозирования стоимостных показателей объектов

Содержание

Введение

. Обзор научно-технической литературы и анализ состояния проблемы

.1 Обзор научно-технической литературы и существующих программных продуктов

.2 Анализ состояния проблемы

. Техническое задание на разработку нейросетевой программы прогнозирования стоимостных показателей объектов

. Обоснование выбора наилучшей модели для прогнозирования стоимостных показателей объектов

.1 Математический аппарат

.2 Подбор наилучшей модели нейронной сети для прогнозирования стоимостных показателей объектов

. Разработка программно-алгоритмического обеспечения

.1 Обоснование выбора средств разработки

.2 Разработка структуры программы

.3 Разработка модулей программы

.4 Разработка пользовательского интерфейса

.5 Разработка алгоритма загрузки нейронной сети в проект

.6 Разработка алгоритма работы конструктора создания нейросетевой экспертной системы

.7 Разработка алгоритма загрузки данных в проект

. Организационно-экономический раздел

.1 Экономическое обоснование необходимости разработки программного обеспечения

.2 Расчёт затрат на создание программного обеспечения, цены и прибыли от его реализации

.3 Расчёт затрат, связанных с покупкой, внедрением и использованием программного обеспечения

Заключение

Список сокращений и обозначений

Библиографический список

Приложение А (обязательное). Листинг команд среды Matlab для подбора оптимальной архитектуры ИНС

Приложение Б (обязательное). Схема алгоритма загрузки нейронной сети в проект

Приложение В (обязательное). Схема алгоритма работы мастера создания НЭС

Приложение Г (обязательное). Схема алгоритма загрузки файла Excel в проект

Приложение Д (обязательное). Исходный код программы

Приложение E (обязательное). Авторская справка

Введение

Прогнозирование применяется во многих областях человеческой деятельности, таких как наука, управление, экономика, производство и множество других сфер.

Понятие прогнозирования не имеет четко очерченных границ и активно взаимодействует со смежными задачами анализа <#"701625.files/image001.gif">

Рисунок 1.1 - Окно пользовательского интерфейса программы Neuro Pro (версия 0.25)

Основные возможности программы:

работа с файлами в форматах *.dbf и *.db;

создание многослойных нейронных сетей с числом слоев до 10 и нейронов в слое до 100;

использование нелинейной сигмоидной функции;

обучение нейронной сети по алгоритму обратного распространения ошибки с применением одного из методов оптимизации (градиентный спуск, модифицированный ParTan, метод сопряженных градиентов;

генерация вербального описания нейронной сети [7].

К достоинствам программы можно отнести то, что она является бесплатной, имеется графический интерфейс пользователя на русском языке, подходит для решения учебных задач и позволяет изменять множество параметров при создании и обучении нейронных сетей.

Среди недостатков следует выделить следующие:

отсутствие поддержи ОС Windows старше Windows XP;

поддержка единственного вида сетей - многослойного персептрона;

ограниченный набор методов оптимизации;

для использования программы необходимо знание нейронных сетей;

бесплатная версия программы не поддерживается разработчиком уже несколько лет.Forecasting Software - коммерческое нейросетевое программное обеспечение для Windows 9x/2000/XP/Vista.

Позволяет выполнять финансовые и бизнес - прогнозы, а также анализировать данные с использованием технологии нейронных сетей [13]. На рисунке 1.2 приведено изображение окна пользовательского интерфейса программы.

Рисунок 1.2 - Окно пользовательского интерфейса программы Alyuda Forecasting Software

Основные возможности программы:

мастер-подобный интерфейс;

возможность работы в трёх режимах: базовом, стандартном, а также в режиме для экспертов;

возможность автоматической и ручной предварительной обработки данных;

автоматический и ручной выбор архитектуры сети и параметров обучения;

возможность создания отчетов;

включены примеры решения финансовых, маркетинговых, научных задач и задач оценки недвижимости;

работа с нейронными сетями типа «многослойный персептрон»

обучение нейронной сети по алгоритму обратного распространения ошибки с применением наиболее эффективных методов оптимизации (метод сопряженных градиентов, «Quick-propagation», алгоритм Левенберга-Маркардта) [14].

Достоинства программы определены её широкими возможностями, из которых следует особенно выделить возможность применения наиболее эффективных на сегодняшний день методов оптимизации, работа в трёх различных пользовательских режимах, что позволяет использовать программу широкому кругу пользователей.

Недостатками данного продукта являются:

поддержка единственного вида сетей - многослойного персептрона;

продукт не русифицирован;

относительно высокая стоимость продукта (1297 долларов США) [14].Predict - коммерческое нейросетевое программное обеспечение для ОС семейства Windows, Linux, Oracle/SUN Sparc/Solaris.Predict является современным инструментов для быстрого создания и развертывания приложений для решения задач прогнозирования и классификации.

Данный продукт сочетает в себе технологии нейронных сетей с использованием генетических алгоритмов, статистические методы, инструменты для работы с нечеткой логикой для автоматического поиска оптимальных или близких к оптимальным решений для широкого круга задач. не требует предварительных знаний о нейронных сетях. При минимальном участии пользователя, он решает все вопросы, связанные с созданием надежных математических моделей на основе доступных эмпирических данных. Для продвинутых пользователей предусмотрен доступ ко всем ключевым параметрам обучения сети. На рисунке 1.3 приведено изображение окна пользовательского интерфейса программы.

Рисунок 1.3 - Окно пользовательского интерфейса программы NeuralWorks Predict

Основные преимущества программы:

возможность визуализации процесса обучения;

возможность интеграции с Microsoft Excel;

встроен инструмент кластеризации данных на основе самоорганизующихся карт Кохонена;

поддержка различных операционных систем [15].

К недостаткам программы следует отнести следующие:

продукт не русифицирован;

на официальном сайте заявлена относительно высокая стоимость продукта (2495 долларов США для ОС Linux/Windows, 4995 долларов США для других ОС) [15].NeuroSolutions - коммерческое нейросетевое программное обеспечение для ОС Windows XP/Vista/7/8.является простым в использовании инструментом создания и обучения нейронных сетей для ОС Microsoft Windows. Продукт поддерживает расширенные процедуры обучения и оптимизации с использованием генетических алгоритмов. Имеются возможности для кластерного анализа, прогнозирования продаж, спортивных прогнозов и решения других задач.

На рисунке 1.4 приведено изображение окна пользовательского интерфейса программы.

Основные преимущества программы:

возможность визуализации процесса обучения;

возможность интеграции с Microsoft Excel;

возможность интеграции с Mathworks Matlab;

поддержка режимов работы программы как с продвинутыми пользователями, так и с пользователями, не знакомыми с технологиями нейронных сетей;

поддержка различных архитектур и типов нейронных сетей;

широкие возможности распараллеливания вычислений с использованием GPU видеокарт nVidia (технология CUDA) [16].

Рисунок 1.4 - Окно пользовательского интерфейса программы NeuroSolutions

К недостаткам программы следует отнести следующие:

продукт не русифицирован;

относительно высокая стоимость продукта (1338 долларов США) [17].NeuralNetworks for Windows - коммерческое нейросетевое программное обеспечение для ОС Windows XP/Vista/7/8.

Данный продукт предоставляет разнообразные функциональные возможности, для работы с очень сложными задачами, включающие не только новейшие архитектуры нейронных сетей и алгоритмы обучения, но также и новые подходы в отборе входных данных и построении сети. На рисунке 1.5 приведено изображение пользовательского интерфейса программы.

Возможности и достоинства продукта:

пре- и пост-процессирование, включая выбор данных, кодирование номинальных значений, шкалирование, нормализация, удаление пропущенных данных с интерпретацией для классификации, регрессия и задачи временных рядов;

мощные разведочные и аналитические технологии, в том числе анализ главных компонент и понижение размерности для выбора нужных входных переменных в разведочном (нейросетевом) анализе данных;

самые современные, оптимизированные и мощные алгоритмы обучения сети (включая методы сопряженных градиентов и Левенберга-Маркардта);

полный контроль над всеми параметрами, влияющими на качество сети, такими как функции активации и ошибок, сложность сети;

поддержка ансамблей нейросетей и нейросетевых архитектур неограниченного размера, созданных в наборах сетей;

выборочное обучение нейросетевых сегментов, объединение, и сохранение наборов сетей в отдельных файлах;

полная интеграция с системой STATISTICA: все результаты, графики, отчеты и т.д. могут быть в дальнейшем модифицированы с помощью мощных графических и аналитических инструментов STATISTICA;

поддержка различных архитектур и типов нейронных сетей (в т.ч. RBF, рекурсивных сетей и др.);

программное обеспечение полностью русифицировано [18].

Рисунок 1.5 - Окно пользовательского интерфейса программы STATISTICA NeuralNetworks for Windows

Недостатки продукта:

для работы в среде необходимы как минимум начальные знания нейросетевых технологий;

стоимость продукта достаточно высока для небольших предприятий (1997 долларов США) [19].Neural Networks Simulator - нейросетевое программное обеспечение для Unix - подобных систем.

Программное обеспечение разработано в Институте параллельных и распределенных высокопроизводительных систем (IPVR) в Университете Штутгарта, Германия. Целью проекта является создание эффективной и гибкой среды моделирования для исследования и применения нейронных сетей. На рисунке 1.6 приведено изображение пользовательского интерфейса программы.

Рисунок 1.6 - Окно пользовательского интерфейса программы Stuttgart Neural Networks Simulator

Программное обеспечение предоставляет возможность моделирования и применения следующих типов нейронных сетей:

многослойный персептрон;

сети встречного распространения;

сети RBF;

сети АРТ-1;

сети АРТ-2;

сети ARTMAP;

сети каскадной корреляции;

рекуррентные сети каскадной корреляции;

сети LVQ;

карты Кохонена;

сети с временными задержками;

ассоциативная память;

сети Элмана и расширенные иерархические сети Элмана;

сети Джордана [20].

Имеются широкие возможности визуализации, в том числе трехмерной. Данное программное обеспечение распространяется по лицензии LGPL и является бесплатным для научных и исследовательских целей. Несмотря на то, что данное ПО является мощным и гибким инструментом для работы с нейронными сетями, у него есть следующие недостатки:

данное программное обеспечение не русифицировано;

для работы с SNNS требуются достаточно глубокие знания в сфере информационных технологий, в частности знания нейросетевых технологий и высокий профессионализм пользователя;

наиболее эффективно SNNS работает в системах с большим количеством процессоров под управлением Unix - подобных операционных систем.

.2 Анализ состояния проблемы

Несмотря на то, что на сегодняшний день для решения задач прогнозирования существует множество программных продуктов, все они имеют определенные недостатки, которые препятствуют широкому применению нейросетевых программ для решения задач прогнозирования в небольших огранизациях.

Программа NeuroPro v.0.25, хотя и является бесплатной, не поддерживается современными операционными системами, такими как Windows 7, к тому же, имеет сложный для непрофессионального пользователя интерфейс.

Программа SNNS, преимуществом которой является её свободное распространение, оказывается непригодной для использования в небольших организациях по причие сложного неруссифицированного интерфейса, а также по причине того, что наилучшим образом она работает только в Unix-подобных операционных системах. Для небольших организаций оплата труда специалистов, имеющих знание Unix-подобных систем, нейросетевых технологий и иностранного языка, перекрывает преимущества открытости данного программного продукта.

Продукты NeuroSolutions, NeuralWorks Predict, Alyuda Forecaster являются неруссифицированными и к тому же распространяются по относительно высокой цене.

Программа STATISTICA NeuralNetworks for Windows, несмотря на преимущества полностью руссифицированного интерфейса и большого набора возможностей, является относительно дорогой даже для средних по величине организаций.

Таким образом, можно сделать вывод, что существующие на сегодняшний день решения не лишены недостатков: недостатком большинства коммерческих продуктов является их относительно высокая цена для небольших компаний, а также отсутствие руссифицированных версий (за исключением продукта STATISTICA NeuralNetworks for Windows). Бесплатное же программное обеспечение является либо устаревшим (как NeuroPro v.0.25), либо не подходящим для использования специалистами, не знакомыми с технологиями нейронных сетей и сложное в освоении (как SNNS). Поэтому необходимо разработать простой, удобный в использовании, полностью руссифицированный и недорогой инструмент для прогнозирования стоимостных показателей объектов с использованием нейронных сетей.

Выводы

Обзор научно-технической литературы показал, что выбранная предметная область дипломного проекта является актуальной, что подтверждается множеством опубликованных статей. Также было показано, что нейронные сети успешно применяются для прогнозирования различных показателей во многих областях. Произведенный обзор аналогов выявил, что существующие на сегодняшний день решения не лишены недостатков: недостатком большинства коммерческих продуктов является их относительно высокая цена для небольших компаний, а также отсутствие русифицированных версий. Бесплатное же программное обеспечение является либо устаревшим, либо не подходящим для использования специалистами, не знакомыми с технологиями нейронных сетей и сложное в освоении.

2. Техническое задание на разработку нейросетевой программы прогнозирования стоимостных показателей объектов.

.1 Назначение

Целью дипломного проектирования является создание удобного и простого в использовании инструмента прогнозирования стоимостных показателей объектов, предназначенного для использования в небольших коммерческих и некоммерческих организациях.

Задачей является разработка программного продукта для прогнозирования стоимостных показателей объектов с использованием нейронных сетей.

Разрабатываемая программа предназначена для получения прогнозов на основе обученных искусственных нейронных сетей.

.2 Функциональные возможности программного продукта

Продукт должен обладать следующими функциональными возможностями.

.2.1 Программный продукт должен включать в себя следующие модули:

модуль работы с нейронными сетями, созданными в среде Matlab;

модуль работы с нейронными сетями, созданными в программе;

модуль работы с проектами программы;

модуль работы с данными;

модуль отображения результатов;

справочный модуль.

Модуль работы с нейронными сетями, созданными в среде Matlab должен предоставлять возможности:

загрузка нейронных сетей и проверка совместимости загружаемой сети с программным продуктом;

получение выходных результатов обработки нейронной сетью на основе входных данных.

Модуль работы с проектами программы должен предоставлять возможность загрузки и сохранение проекта программы.

Модуль работы с данными должен предоставлять возможности:

загрузка файлов формата Excel и его проверка на совместимость с программным продуктом;

сохранение отредактированных файлов;

нормализация и денормализация обучающей выборки;

проверка загружаемых данных на соответствие требуемому типу.

Модуль работы с данными должен предоставлять возможности:

загрузка файлов формата Excel и его проверка на совместимость с программным продуктом;

сохранение отредактированных файлов;

нормализация и денормализация обучающей выборки;

проверка загружаемых данных на соответствие требуемому типу.

Модуль отображения результатов должен выполнять функцию формирования оконных форм для отображения работы с вышеперечисленными модулями программы.

Представление входных данных:

возможность загрузки данных из файла типа *.xls;

возможность загрузки нейронных сетей, созданных в среде Matlab из файлов типа *.mat;

возможность загрузки нейронных сетей, созданных в программе из файлов типа *.ncnet;

возможность редактирования и сохранения данных.

Требования к модулю справочной информации

Предусмотреть разработку руководства пользователя по работе с программой.

.3 Требования к программным и аппаратным средствам

Разрабатываемая программа предназначена для использования на персональной ЭВМ, обладающей следующими минимальными характеристиками, позволяющими работать с программой более эффективно:

центральный процессор Intel Pentium 4 - 1,9 ГГц или аналогичный и выше;

оперативная память не менее 1 Гб;

монитор с разрешением от 1024*768 пикс;

видеокарта SVGA с объемом памяти не менее 32 Мб;

установленная ОС Microsoft Windows XP/Vista/7 и выше;

установленный Microsoft .NET Framework версии 4.0 (распространяется бесплатно);

установленная среда Matlab Compiler Runtime v.413 32 bit (распространяется бесплатно) для возможности работы с нейронными сетями, созданными в среде Matlab;

манипулятор типа «мышь»;

клавиатура.

2.4 Выбор критериев качества разрабатываемого программного продукта

Разрабатываемый программный продукт должен отвечать показателям качества, которые определены в [27].

Показателем надежности является работоспособность - способность программы функционировать в заданных режимах и объемах обрабатываемой информации в соответствии с программными документами при отсутствии сбоев технических средств.

Показателем удобства применения является доступность эксплуатационных программных документов - понятность, наглядность и полнота описания взаимодействия пользователя с программой в эксплуатационных программных документах.

К показателям корректности относятся:

полнота реализации - полнота реализации заданных функций ПС и достаточность их описания в программной документации.

согласованность - однозначное, непротиворечивое описание и использование тождественных объектов, функций, терминов, определений, идентификаторов и т.д. в различных частях программных документов и текста программы.

логическая корректность - функциональное и программное соответствие процесса обработки данных при выполнении задания общесистемным требованиям.

проверенность - полнота проверки возможных маршрутов выполнения программы в процессе тестирования.

.5 Меню программы

Предусмотреть следующие пункты меню программы:

файл:

загрузить проект;

сохранить проект как;

сохранить проект;

выход;

режим работы:

упрощенный;

продвинутый;

НЭС:

мастер создания НЭС;

данные:

загрузить данные для обучения;

загрузить данные для тестирования;

нейронная сеть:

импортировать из MatLab;

загрузить готовую нейронную сеть;

создать новую нейронную сеть;

помощь:

справка;

о программе.

.6 Стадии и этапы разработки

Стадии и этапы разработки программного продукта приведены в таблице 2.1.

Таблица 2.1 Этапы разработки приложения

Содержание работы

Срок

Исполнитель

Исследование подходов к созданию приложений для прогнозирования с использованием нейронных сетей, а также имеющихся на сегодняшний день решений

1-2 недели

Неведицин Н.А.

Разработка технического задания

3-я неделя

Неведицин Н.А.

Разработка .NET библиотеки в среде Matlab для работы с нейронными сетями

4-я неделя

Неведицин Н.А.

Разработка структуры программы (иерархии классов, модулей)

5-6 недели

Неведицин Н.А.

Создание интерфейса и модуля для работы с нейронными сетями, импортированными из Matlab

7-я неделя

Неведицин Н.А.

Разработка графического интерфейса пользователя для создания инструментов прогнозирования с использованием нейронных сетей, созданных в среде Matlab

8-12 недели

Неведицин Н.А.

Объединение разработанных частей в единое приложение

13-я неделя

Неведицин Н.А.

Разработка руководства пользователя программы

14-15 недели

Неведицин Н.А.

2.7 Порядок контроля и приемки

Испытание представленной программы и контроль качества ее работы провести на базе кафедры ЭВМ факультета автоматики и вычислительной техники ВятГУ. Во время испытаний проверить работу системы по следующим позициям:

запуск программы;

импорт нейронной сети, созданной в среде Matlab и её тестирование;

обучение нейронной сети и её тестирование;

сохранение готового проекта и его загрузка.

Выводы

Поставлено техническое задание на разработку нейросетевой программы прогнозирования стоимостных показателей объектов, определены основные функциональные возможности программного продукта, обозначены требования к программным и аппаратным средствам, поределены этапы и сроки разработки.

3. Обоснование выбора наилучшей модели для прогнозирования стоимостных показателей объектов

В данном разделе проанализирован математический аппарат искусственных нейронных сетей и проведен эксперимент по подбору наилучшей модели для прогнозирования стоимостных показателей объектов.

.1 Математический аппарат

В данном подразделе рассматриваются нейронные сети типа многослойный персептрон и РБФ. Способность нейронных сетей типа многослойный персептрон решать задачи регрессии и прогнозирования неоднократно подтверждалась различными исследованиями, например [3,4,5], причем ИНС данного типа справляются с решением задач этого класса, как правило, эффективнее, чем модель множественной линейной регрессии благодаря тому, что обладают большей чувствительностью к изменению параметров [3,4,5]. Способность РБФ сетей успешно решать задачи регрессии и прогнозирования также неоднократно доказывалась рядом исследований, например [21,22]. К тому же, в среде Matlab существует даже специальный класс сетей, предназначенных специально для этих целей - обобщенные регрессионные сети (general regression networks), которые, в сущности, являются РБФ сетями.

.1.1 Искусственная нейронная сеть типа многослойный персептрон

Изучение искусственной нейронной сети следует начать с рассмотрения модели искусственного нейрона.

На рисунке 3.1 изображена модель простого искусственного нейрона.

Рисунок 3.1 - Модель простого нейрона

На вход искусственного нейрона поступает некоторое множество сигналов pi, которые, умножаясь на соответствующие веса w1i, суммируются друг с другом. К этой сумме прибавляется смещение b и результат n подается в качестве аргумента активационной функции f, значение которой при данном аргументе является выходом a нейрона. Таким образом, модель простого искусственного нейрона можно описать следующей формулой

 ,(3.1)

где w1i - веса нейронов;- множество входных сигналов;- смещение;- активационная функция.

В качестве активационной функции могут выступать следующие функции:

линейная функция f(x) = tx, где t - параметр функции;

пороговая функция или функция Хевисайда - представляет собой «перепад»: до тех пор, пока взвешенный сигнал на входе нейрона не достигает некоторого уровня T, - сигнал на выходе равен нулю. Как только сигнал на входе нейрона превышает указанный уровень - выходной сигнал скачкообразно изменяется на единицу;

сигмоидальная функция f(x) = 1/(1 + е-x);

гиперболический тангенс f(x) = th(x).

Для решения практических задач, как правило, используют слоистые нейронные сети [21]. На рисунке 3.2 показан слой искусственных нейронов.

Рисунок 3.2 - Слой искусственных нейронов

Входы слоя pi одновременно являются входами для всех нейронов слоя, веса wir задаются матрицей весов W. Каждый i-й нейрон формирует выход ai , в итоге выходы слоя формируют вектор-столбец a.

Количество входов в слое может не совпадать с количеством нейронов. В каждом слое используется, как правило, одна и та же функция активации, хотя при необходимости можно выставить различные функции активации.

Более крупные и сложные нейронные сети обладают, как правило, и большими вычислительными возможностями: многослойные сети обладают большими возможностями, чем однослойные, и в последние годы были разработаны алгоритмы для их обучения [7]. На рисунке 3.3 показана модель трехслойной нейронной сети.

Рисунок 3.3 - Трехслойная нейронная сеть

Как видно из рисунка 3.3, выходы одного слоя являются входами для последующего слоя. Сети такого вида получили название «сети прямого распространения сигнала».

Следует отметить, что многослойные нейронные сети могут привести к увеличению вычислительной мощности по сравнению с однослойной сетью лишь в том случае, если активационная функция между слоями будет нелинейной. В противном случае вычисление выхода слоя заключается в умножении входного вектора на первую весовую матрицу с последующим умножением результирующего вектора на вторую весовую матрицу [7]. Поэтому активационными функциями скрытых слоёв выступают, как правило, нелинейные функции, например сигмоидальная и гиперболический тангенс [21].

Обучение многослойной искусственной нейронной сети заключается в подстройке весов и смещений искусственных нейронов таким образом, чтобы приложение некоторого множества входов приводило к требуемому множеству выходов. Для этого используется итеративный алгоритм обратного распространения ошибки, который состоит из следующих шагов:

Выбрать очередную обучающую пару из обучающего множества; подать входной вектор на вход сети.

Вычислить выход сети.

Вычислить разность между выходом сети и требуемым выходом (целевым вектором обучающей пары).

Подкорректировать веса сети так, чтобы минимизировать ошибку.

Повторять шаги с а) по г) для каждого вектора обучающего множества до тех пор, пока ошибка на всем множестве не достигнет приемлемого уровня [22].

Согласно методу наименьших квадратов [7], минимизируемой целевой функцией ошибки ИНС является следующая функция

, (3.2)

где ai - выходное значение i-го нейрона;- желаемое выходное значение i-го нейрона;- средний квадрат ошибки.

Классический алгоритм обратного распространения ошибки использует метод градиентного спуска для подстройки весов после каждого обучающего примера и, таким образом, обеспечивается «движение» в многомерном пространстве весов [23]. Чтобы добраться до минимума ошибки, необходимо «двигаться» в сторону, противоположную градиенту, то есть, на основании каждой группы правильных ответов, добавлять к каждому весу приращение, которое вычисляется по формуле

 (3.3)

где 0< η <1 - множитель, задающий «скорость» движения;- средний квадрат ошибки;- вес соответствующего нейрона.

Таким образом, за конечное число шагов веса всех нейронов сети подстраиваются так, чтобы обеспечить минимальную ошибку обучения. Недостатком данного алгоритма является большая вероятность попадания в локальный минимум, медленная работа, а также заранее неизвестное число циклов обучения [21].

Существуют ускоренные алгоритмы обучения многослойных нейронных сетей, базирующиеся на вычислении матрицы Гессе вторых частных производных функции ошибки по настраиваемым параметрам. К таким алгоритмам относятся квазиньютовоские алгоритмы, алгоритм Левенберга-Маркарта и другие. Работа данных алгоритмов требует больших аппаратных ресурсов, чем классический алгоритм обратного распространения ошибки. В руководстве к среде Matlab рекомендуется использовать алгоритм Левенберга-Маркарта, так как он на сегодняшний день является наиболее эффективным и быстрым.

3.1.2 Искусственная нейронная сеть типа РБФ

Радиально-базисные сети состоят из большего количества нейронов, чем стандартные сети с прямой передачей сигналов и обучением методом обратного распространения ошибки, но на их создание требуется значительно меньше времени. Эти сети особенно эффективны, если доступно большое количество обучающих векторов[24].

На рисунке 3.4 представлена модель нейрона, используемого в сетях РБФ, одновременно эта модель является простейшей РБФ-сетью с R входами.

Рисунок 3.4 - Модель нейрона, используемого в сетях РБФ

Модуль разности вектора входов p и вектора весов w умножается на значение смещения b. Результирующее произведение подается в качестве аргумента активационной функции РБФ-нейрона, значение которой при данном аргументе является выходом a нейрона. Таким образом, модель РБФ-нейрона можно описать следующей формулой

,  (3.4)

где  - вектор весов;

 - вектор входных сигналов;- смещение;- активационная радиально-базисная функция.

Активационной функцией РБФ-нейрона является радиально-базисная функция. Характерным свойством класса радиально-базсисных функций является то, что отклик функции монотонно убывает (возрастает) с удалением от центральной точки. Примером радиально-базисных функций служит функция Гаусса, которая в скалярном виде может быть описана следующей формулой

,(3.5)

где с и r - некоторые константы;- аргумент функции.

В векторном виде данная функция может быть описана как

,(3.6)

где - вектор некоторых констант;

 - вектор аргументов функции;- некоторая константа.

График этой функции с параметрами с=0 и r=1 представлен на рисунке 3.5

Рисунок 3.5 - График Гауссовой функции при c=0 и r=1

Эта функция имеет максимум, равный единице, когда вход равен 0. Таким образом, РБФ-нейрон действует как индикатор, который формирует значение 1, когда вектор входов идентичен вектору весов. Смещение b позволяет корректировать чувствительность нейрона.

На рисунке 3.6 изображена двухслойная РБФ-сеть, состоящая из слоя РБФ и линейного слоя.

Рисунок 3.6 - Двухслойная РБФ-сеть

Входами блока dist являются вектор входа p и матрица весов IW, а выходом - вектор, состоящий из S элементов, которые определяются расстоянием между i-м вектором входа p и i-й и вектором весов i-го нейрона матрицы весов IW. При задании вектора входа каждый нейрон РБФ-слоя выдает значение в соответствии с тем, как близок вектор входа к вектору весов каждого нейрона. Таким образом, РБФ-нейроны с векторами весов, значительно отличающимися от вектора входа, будут иметь выходы, близкие к нулю, и их влияние на выходы линейных нейронов будет незначительным [7].

Обучение РБФ-сети является аппроксимационной задачей нахождения многомерной поверхности, обеспечивающей наилучшее совпадение с набором тренировочных данных. В процессе обучения подбираются веса и смещения РБФ-нейронов. В отличие от многослойных перcептронов, которые глобально аппроксимируют нелинейное преобразование вход-выход, РБФ-сети строят локальную аппроксимацию. Из-за экспоненциального убывания активационных функций нейронов скрытого слоя выход РБФ-сети для входных данных, лежащих вдали от тренировочных шаблонов, стремится к нулю. Такая локальность обеспечивает быстрое обучение сети и снижает типичную для многослойных персептронов зависимость качества обучения от последовательности подачи тренировочных данных. С другой стороны, это приводит к необходимости использования большего числа скрытых нейронов [25].

В простейшем случае, если параметры функции Гаусса с и r фиксированы, то задача нахождения весов решается методом псевдообратных матриц, который минимизирует средний квадрат ошибки. Суть метода заключается в последовательности этапов.

На первом этапе находится интерполяционная матрица H

(3.7)

где m - число нейронов в скрытом слое;- размер обучающей выборки;­- вектор, состоящий из входных компонентов, число которых равно числу входов сети.

На втором этапе вычисляется инверсия произведения матрицы H на транспонированную матрицу H

,(3.8)

где Н - интерполяционная матрица;

НT - транспонированная интерполяционная матрица.

На третьем этапе рассчитывается вектор весов по следующей формуле

,(3.9)

где A-1 - инверсия произведения матрицы H на транспонированную матрицу H;

НT - транспонированная интерполяционная матрица;

- целевой вектор выходов.

Если предыдущее предположение о фиксированных параметрах функции активации не выполняется, то есть помимо весов необходимо настроить параметры активационной функции каждого нейрона (смещение функции и ее радиус), задача становится нелинейной. И решать ее приходится с использованием итеративных численных методов оптимизации, например, градиентных методов [26].

3.2 Подбор наилучшей модели нейронной сети для прогнозирования стоимостных показателей объектов

Для подбора наилучшей модели для прогнозирования стоимостных показателей объектов приведем обучающее множество, представленное на сайте Университета Калифорнии [28] и подберем для него наилучшую регрессионную модель. Данное множество представляет собой статистические данные по стоимости жилья в пригородах Бостона в 1978 году и состоит из 506 элементов, каждый из которых представляет собой следующий набор переменных:

параметр CRIM: уровень преступности в пригороде на душу населения;

параметр ZN: доля земли, занятая жилыми домами в пригороде (для участков более 25000 кв.футов), %;

параметр INDUS: доли земли, занятая не розничным бизнесом в пригороде, %;

параметр CHAS: фиктивная переменная (да/нет) (= 1, если дом граничит с рекой; 0 в противном случае);

параметр NOX: концентрация оксида азота в пригороде, частей на 10 млн.;

параметр RM: средне число комнат в жилище;

параметр AGE: доля домов, построенных до 1940 года;

параметр DIS: показатель взвешенного расстояния до пяти ключевых центров в Бостоне, в которых больше всего работы;

параметр RAD: индекс доступности до магистралей;

параметр TAX: ставка налога на имущество на каждые 10000 долларов, долл.;

параметр PTRATIO: отношение количества учеников к количеству учителей в пригороде;

параметр B: = 1000*(Bk - 0.63) ^ 2, где Bk - доля афроамериканцев в пригороде;

параметр LSTAT: показатель, отражающий, насколько процентов плотность населения в пригороде ниже, чем в среднем по стране;

параметр MEDV: среднее значение стоимости жилых домов, долл..

Для подбора наилучшей модели для прогнозирования стоимостных показателей объектов была взята именно данная выборка, по следующим причинам:

дано неплохое количество обучающих векторов (506);

предоставлены реальные статистические данные;

это хороший пример для решения задачи регрессии.

Подбор модели будет произведен в среде Matlab с использованием функций пакетов Neural Network Toolbox и Statistics Toolbox.

Сравнение моделей будет осуществлено на основе сравнения показателя среднего квадрата ошибки (MSE), который вычисляется по формуле

(4.1)

где MSE - средний квадрат ошибки;, Y^i - реальный показатель и спрогнозированный показатель

соответственно;- количество случаев.

Первой из сравниваемых моделей выбрана множественная линейная регрессия. Для построения множественной линейной регрессии в среде Matlab используется функция b = regress(y,X). Данная функция принимает параметры y - выходной вектор и X - множество входных векторов (матрица) и возвращает параметр b - полученные коэффициенты регрессии.

Для создания и обучения искусственных нейронный сетей типа многослойный персептрон в среде Matlab сущесвует ряд функций. Для создания новой ИНС типа многослойный персептрон сущесвует функция newff(P,T,[S1 S2...S(N-l)],{TF1 TF2...TFNl}, BTF,BLF,PF,IPF,OPF,DDF). Данная функция возвращает новую необученную ИНС типа «многослойный персептрон» и принимает следующие параметры:

параметр P: матрица R х Q1 (Q1 образцов входных векторов R);

параметр T: матрица SN х Q2 (Q2 образцов целевых (выходных) векторов SN);

параметр Si: Размер i-го слоя, N-1 слоев, по умолчанию = [] (Выходной слой размером SN определяется из T);

параметр TFi: Передаточная функция i-го слоя (По умолчанию = «tansig» (гиперболический тангенс) для скрытых слоев и «purelin» (линейная) для выходного слоя);

параметр BTF: функция обратного распространения ошибки обучения сети (по умолчанию = «trainlm» (Левенберга - Маркарта));

параметр BLF: функция подбора весов / смещений (по умолчанию = «learngdm» (градиентный спуск));

параметр PF: функция производительности сети (По умолчанию = «MSE» (Средний квадрат ошибки));

параметр IPF: функции для обработки входных данных. (По умолчанию = {«fixunknowns»(фиксировать неизвестные), «removeconstantrows» (удалить постоянные ряды), «mapminmax» (нормализация) })

параметр OPF: функции обработки выходных данных. (По умолчанию = {'removeconstantrows', 'mapminmax'});

параметр DDF: функция для разделения входных данных на обучающее, тестовое и контрольное подмножества (по умолчанию = «dividerand»(случайно)).

Большинство параметров по умолчанию являются оптимальными параметрами и менять их не имеет смысла, так, алгоритм Левенберга-Маркарта для обучения сети, как сказано в руководстве по использованию пакета Matlab Neural Network Toolbox, является наиболее быстрым и производительным, использовать вместо него другие алгоритмы рекомендуется только если компьютер имеет небольшой размер оперативной памяти.

Для обучения ИНС типа многослойный персептрон в среде Matlab сущесвует функция train(net,P,T,Pi,Ai). Данная функция возвращает объект обученной ИНС, а также ряд информационных параметров, таких как, за сколько итераций была обучена сеть, массив ошибок обучения и так далее. Функция принимает следующие параметры:

параметр net: обучаемая ИНС;

параметр P: обучающие векторы;

параметр T: целевые векторы;

параметр Pi и Ai - параметры задержек (для ИНС с задержками времени, по умолчанию равны нулю).

В среде Matlab имеется возможность работы с обобщенными регрессионными сетями. Это вид РБФ-сети, используемый для решения задач регрессии.

Для обучения обобщенной регрессионной сети в среде Matlab используется функция newgrnn(P,T,spread). Данная функция возвращает объект обученной ИНС и принимает следующие параметры:

параметр P: матрица P х Q1 (Q1 входных (обучающих) векторов P);

параметр T: матрица T х Q2 (Q2 целевых (выходных) векторов T);

параметр spread: по умолчанию = 1,0, чем больше значение данного параметра, тем функция аппроксимации является более гладкой, тем приближение осуществляется более «плавно».

Для создания и обучения искусственной нейронной сети типа РБФ в среде Matlab сущесвует функция newrbe(P,T,spread). Данная функция возвращает объект обученной ИНС типа «РБФ» и принимает следующие параметры:

параметр P: матрица P х Q1 (Q1 входных (обучающих) векторов P);

параметр T: матрица T х Q2 (Q2 целевых (выходных) векторов T);

параметр spread: параметр РБФ spread (по умолчанию = 1,0).

Создать и обучить нейронную сеть типа РБФ можно также при помощи функции newrb(P,T,goal,spread,MN,DF). Данная функция возвращает объект обученной ИНС типа РБФ и принимает помимо параметров, принимаемых функцией newrbe(P,T,spread), следующие параметры:

параметр goal: целевой средний квадрат ошибки обучения (по умолчанию = 0,0);

параметр MN: Максимальное число нейронов (по умолчанию Q);

параметр DF: Число нейронов, добавляемое после каждой итерации (по умолчанию = 25).

Для вычисления среднего квадрата ошибки используется функция среды Matlab MSE(E), которая принимает параметр E - вектор ошибок и возвращает средний квадрат ошибок.

Разделим общую выборку случайным образом на 2 части:

Обучающая выборка - 450 примеров;

Тестовая выборка - 56 примеров.

Первые 13 переменных представим в качестве входного вектора, а переменную MEDV в качестве выходного значения (прогнозируемого показателя).

Оценка модели состоит из следующих этапов:

Обучение нейронной сети с помощью обучающей выборки (или вычисление коэффициентов регрессии из обучающей выборки);

Применение модели к обучающей выборке;

Применение модели к тестовой выборке;

Вычисление среднего квадрата ошибки обучающей выборки;

Вычисление среднего квадрата ошибки тестовой выборки.

Преимущество функций обучения сетей типа «многослойный персептрон» пакета Matlab состоит в том, что при обучении сети, программа контролирует процесс обучения для того, чтобы избежать эффекта «бабушкиного воспитания», автоматически выделяя из обучающего множества контрольное подмножество, которое используется для проверки качества обучения сети.

Для того, чтобы избежать эффекта «бабушкиного воспитания» при подборе оптимальной РБФ-сети, будем изменять параметр «spread», а также целевой средний квадрат ошибки при создании новой сети.

При применении множественной линейной регрессии применим функцию regress(y,X) к обучающей выборке, а полученные коэффициенты используем для прогнозирования параметра MEDV тестовой выборки.

В таблице 3.1 приведены результаты оценки используемых моделей. Листинг оценки моделей в Matlab приведен в приложении А. Поля MSE(L), MSE(T), MSESUM таблицы 3.1 означают средние квадраты ошибок обучающей выборки, тестовой выборки и сумму средних квадратов ошибок обучающей и тестовой выборок соответственно.

Из таблицы видно, что, несмотря на неплохие результаты прогнозирования, множественная линейная регрессия проигрывает подобранной искусственной нейронной сети.

Вначале созданы и протестированы три четырёхслойных нейронных сети типа «многослойный персептрон». Результаты их применения к тестовой выборке оказались хуже, чем результаты множественной линейной регрессии, однако результаты их применения к обучающей выборке дали лучшие по сравнению с множественной регрессией результаты, но эти результаты представляют второстепенный интерес при подборе модели, так как минимизация ошибок именно в тестовой выборке наиболее важна с практической точки зрения.

Таблица 3.1 - Сравнение моделей нейронных сетей

Модель

MSE(L)

MSE(T)

MSESUM

Доп. параметры сети

1

2

3

4

5

Множ. линейная регрессия

2,542E+07

1,520E+07

4,061E+07


Обобщенна регрессионная сеть

8,029E+04

2,058E+08

2,059E+08


Многослойный персептрон

1,032E+07

1,755E+07

2,786E+07

13:10:10:1, умолч.

Многослойный персептрон

6,51E+06

2,44E+07

3,089E+07

13:12:8:1, умолч.

Многослойный персептрон

6,66E+06

3,21E+07

3,874E+07

13:7:7:1, умолч.

Многослойный персептрон

6,042E+06

2,946E+07

3,550E+07

13:30:1, умолч.

Многослойный персептрон

2,086E+07

1,469E+07

3,555E+07

13:20:1, умолч.

Многослойный персептрон

1,673E+07

3,455E+07

5,128E+07

13:19:1, умолч.

Многослойный персептрон

7,108E+06

1,486E+08

1,558E+08

13:17:1, умолч.

Многослойный персептрон

9,668E+06

7,286E+07

8,253E+07

13:15:1, умолч.

Многослойный персептрон

7,982E+06

2,340E+07

3,138E+07

13:21:1, умолч.

Многослойный персептрон

1,107E+07

2,790E+07

3,897E+07

13:22:1, умолч.

Многослойный персептрон

1,589E+07

3,130E+07

4,719E+07

13:23:1, умолч..

Многослойный персептрон

1,19E+07

7,71E+07

8,901E+07

13:24:1, умолч.

РБФ-сеть

6,06E-21

1,43E+07

1,427E+07

spread = 1.0

РБФ-сеть

8,67E-19

3,74E+08

3,744E+08

spread = 0.1

РБФ-сеть

2,13E-20

5,58E+07

5,581E+07

spread = 1.5

РБФ-сеть

4,83E-20

8,08E+07

8,083E+07

spread = 0.75

РБФ-сеть

4,82E-21

2,54E+07

2,539E+07

spread = 1.1

РБФ-сеть

5,02E-21

1,85E+07

1,853E+07

spread = 1.25

РБФ-сеть

3,14E-21

1,85E+07

1,850E+07

spread = 2.0

РБФ-сеть

1,63E-16

3,73E+11

3,730E+11

spread = 20.0

Многослойный персептрон

2,00E+07

9,78E+06

2,982E+07

13:20:1, max_fail = 10

Многослойный персептрон

2,09E+07

1,47E+07

3,555E+07

13:20:1, max_fail = 9

Многослойный персептрон

2,09E+07

1,47E+07

3,555E+07

13:20:1, max_fail = 8

Далее были созданы и протестированы девять трёхслойных нейронных сетей типа многослойный персептрон, из которых наилучший результат при заданных по умолчанию параметрах обучения показала сеть с архитектурой «13:20:1». Создание сетей с количеством нейронов в скрытом слое более 30 не имеет смысла по причине ограничения, следуемого из теории Вапника-Червоненкиса.

Созданные с различными параметрами «spread» РБФ - сети показали почти нулевую ошибку применительно к обучающей выборке, однако результаты применения к тестовой выборке оказались несколько хуже, чем у сети типа «многослойный персептрон» с архитектурой 13:20:1.

Изменение параметра обучения «max_fail» нейронной сети с архитектурой «13:20:1» дало положительные результаты. Увеличение данного параметра до значения 10 уменьшило среднюю ошибку прогноза в тестовой выборке в полтора раза.

Выводы

Анализ математического аппарата показал, что существует алгоритмы, способные за конечное число шагов обучить искусственную нейронную сеть. Эмпирическое сравнение моделей показало, что наилучшие результаты прогнозирования обеспечила трехслойная нейронная сеть типа «многослойный персептрон» с двадцатью нейронами в скрытом слое. Нейронные сети типа «RBF» также показывают относительно неплохие результаты, в особенности если учитывать практически нулевую ошибку прогнозирования обучающей выборки. Нейронная сеть типа «RBF» хорошо подойдет для прогнозирования в том случае, если необходимо подобрать модель в сжатые сроки, когда времени на поиск оптимальной архитектуры ИНС типа «многослойный персептрон» недостаточно. Таким образом, в приложении по прогнозированию стоимостных показателей объектов для построения моделей будут использованы искусственные нейронные сети типа «многослойный персептрон», а также РБФ-сети.

4. Разработка программно-алгоритмического обеспечения

В данном разделе приведено обоснование средств разработки, разработана структура программы, основные модули программы и основные алгоритмы работы программы.

.1 Обоснование выбора средств разработки

На сегодняшний день существует широкий выбор средств разработки приложений с оконным графическим интерфейсом пользователя - как с открытым, так и с закрытым кодом. Среди них наиболее популярными являются:

фреймворк Qt;

среда разработки Embarcadero RAD Studio;

среда разработки Microsoft Visual Studio 2010.

Кросс-платформенный инструментарий разработки ПО на языке программирования C++ Qt позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Фреймворк Qt включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования. Преимуществом среды является её легкая переносимость из одной ОС в другую благодаря максимальному отделению средств визуализации от программного кода. Недостатком является то, что среда является платной для коммерческих разработок, а также то, что язык С++, несмотря на его высокую производительность, обладает достаточно сложным синтаксисом, а также требует ручного управления памятью, что затрудняет отладку приложений и отрицательно влияет на время написания приложения.

Среда быстрой разработки приложений Embarcadero RAD Studio для Microsoft Windows фирмы Embarcadero Technologies, текущей версией которой является Embarcadero RAD Studio XE3, объединяет Delphi XE3 и C++ Builder XE3, Delphi Prism XE3 и HTML5 Builder в единую интегрированную среду разработки. Преимуществом среды является наличие мощных средств отладки и удобство использования. Главными недостатками можно назвать высокую стоимость лицензии, а также недостатки самих языков программирования, поддерживаемых данной средой: недостатки языка С++ перечислены выше, а язык Delphi в настоящее время используется всё реже для разработки новых продуктов.

Microsoft Visual Studio 2010 - продукт компании Майкрософт, включающий интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данный продукт позволяют разрабатывать как консольные приложения <https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BA%D0%BB%D0%B0%D0%B4%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5>, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, .NET Compact Framework и Microsoft Silverlight. Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода, добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов процесса разработки программного обеспечения. Основным недостатком среды является высокая стоимость лицензии, тем не менее, существует облегченная версия Express, которая является бесплатной для разработки как коммерческих, так и некоммерческих приложений.

Исходя из анализа средств разработки, принято решение в качестве средства разработки использовать интегрированную среду разработки Microsoft Visual Studio 2010 Express, включающую редактор исходных текстов, компилятор, компоновщик и отладчик. Программу решено написать на объектно-ориентированном языке программирования высокого уровня C# с применением интерфейса прикладного программирования Windows Forms. Данная среда является современной, бесплатной, удобной в использовании и позволяет разрабатывать сложные приложения в относительно короткий срок. Язык программирования высокого уровня C# создавался параллельно с каркасом .Net Framework и в полной мере учитывает все его возможности. Сохранив основные черты своего прародителя - C++ , язык стал проще и надежнее. Простота и надежность, главным образом, связаны с тем, что в C# хотя и допускаются, но не поощряются такие опасные свойства С++ как указатели, адресация, разыменование, адресная арифметика. Существенным преимуществом языка C# является также автоматическое управление памятью.

Динамическая библиотека для работы с нейронными сетями, созданными в среде Matlab, должна быть скомпилирована в среде Matlab r2010a с использованием инструментов dotnetbuilder и deploytool. Существует среда исполнения Matlab Compiler Runtime, которая является свободно распространяемой и которая позволяет приложениям вызывать функции среды Matlab без необходимости установки самой среды.

4.2 Разработка структуры программы

Программа представляет собой приложение SDI (single document interface) - программа с интерфейсом единого документа. Структура программы определяется структурой приложений SDI, а также системой модулей, созданных разработчиком.

При разработке программы используется метод нисходящего проектирования: вначале формируется общая структура программы, затем производится детализация и реализация каждого из модулей.

На рисунке 4.1 приведена общая структура программы в виде модулей.

Рисунок 4.1 - Структура программы

Модуль работы с данными подразделяется на два модуля: модуль работы с файлами Excel и модуль контроля формата данных. Функции, выполняемые модулем работы с данными, обусловлены функциями, выполняемыми модулем работы с файлами Excel и модулем контроля формата данных.

Модуль работы с файлами Excel обеспечивает выполнение следующих функций:

загрузка файлов формата Excel;

возбуждение исключений при несоответствии расширения файла Excel его формату, а также при возникновении ошибок прав доступа к файлу;

сохранение отредактированных файлов;

визуальное представление файлов формата Excel.

Модуль контроля формата данных обеспечивает проверку загруженных данных на выполнение требований, выставленных к этим данным перед их обработкой (обучением или тестированием) нейронной сетью. Например, если в какой-либо ячейке таблицы вместо числа записаны буквы какого-либо алфавита, модуль предупреждает пользователя об этом несоответствии и при необходимости записывает вместо букв заранее определенные цифры.

Модуль работы с проектами программы обеспечивает выполнение следующих функций:

сохранение проектов программы в формате xml;

загрузка проектов программы;

создание проектов программы с помощью мастера;

проверка файлов проектов на корректность.

Проект программы представляет собой совокупность нейронных сетей, пользовательского интерфейса для работы с этими сетями, а также связанных с вышеназванными нейронными сетями данных (опционально).

Модуль работы с нейронными сетями подразделяется на два модуля: модуль работы с нейронными сетями, созданными в среде Matlab и модуль работы с нейронными сетями, созданными в рамках приложения. Функции, выполняемые модулем работы с нейронными сетями, обусловлены функциями, выполняемыми модулем работы с нейронными сетями, созданными в среде Matlab и модулем работы с нейронными сетями, созданными в рамках приложения.

Модуль работы с нейронными сетями, созданными в среде Matlab, обеспечивает выполнение следующих функций:

загрузка нейронных сетей, созданных в среде Matlab;

возбуждение исключений при несоответствии расширения файла нейронной сети Matlab его формату, возбуждение исключений при попытке загрузки нейронной сети, не предназначенной для использования в приложении, а также при возникновении ошибок совместимости с различными версиями Matlab;

определение параметров загруженной нейронной сети (количество слоёв, количество входов, количество выходов и т.д.);

непосредственная работа с нейронной сетью (прогнозирование).

Модуль работы с нейронными сетями, созданными в рамках приложения, обеспечивает выполнение следующих функций:

создание новой нейронной сети типа «многослойный персептрон» или «РБФ»;

обучение созданной нейронной сети;

сохранение созданной нейронной сети в файле;

загрузка ранее созданной нейронной сети из файла;

непосредственная работа с нейронной сетью (прогнозирование).

В качестве элементов ввода и отображения в дочерних окнах программы используются стандартные визуальные компоненты Microsoft .NET Framework: Label, Button, TextBox, ComboBox, CheckBox, GroupBox, ListBox, ToolStripMenu, tabControl. Для формы ввода и вывода данных используется компонент DataGridView.

4.3 Разработка модулей программы

нейросетевая программа интерфейс модуль

Модуль работы с данными реализован в виде класса public class DataSets, который находится в файле DataSets.cs. Данный класс имеет следующие поля:list<double[]> _data - все данные, с которыми в итоге работают нейронные сети в программе, являются числовыми данными;string[] _headers - массив заголовков отдельно взятого набора (таблицы) данных;

В классе DataSets реализованы следующие методы:void FillGridView (DataGridView gridView) - реализует заполнение компонента DataGridView данными из полей _data и _headers.void GetDataFromGridView (DataGridView gridView) - реализует заполнение полей _data и _headers данными, считываемыми из компонента DataGridView.

Модуль работы с файлами Excel реализован методом public list<string[][]> LoadDataFromExcelFile (string filename) класса DataSets Данный метод принимает строковый параметр, указывающий путь к файлу Excel в системе и возвращает коллекцию (список), состоящую из двумерного строкового массива. Каждый элемент возвращаемой коллекции является строковым представлением таблицы, а каждый элемент двумерного строкового массива представляет собой отдельную ячейку таблицы. Данный метод находится в файле DataSets.cs.

Модуль контроля формата данных реализован как вспомогательный метод public <list<double[]>> ParseTable (string[][] table), который отвечает за преобразование строковых данных из таблиц (Excel или компонента DataGridView) в список массивов чисел.

Модуль работы с нейронными сетями реализован в виде иерархии классов, изображенных на рисунке 4.2.

Рисунок 4.2 - Диаграмма классов модуля работы с нейронными сетями

Данные классы расположены в файле NeuralNet.cs.- абстрактный класс, содержащий следующие основные поля:

protected string _netName - имя сети;

protected list<int> Layers - количество элементов списка - количество слоев сети, значение элемента списка - количество нейронов в слое;int _numInputs - количество входов сети;int _numOutputs - количество выходов сети;

protected int type - тип сети.

Все эти поля доступны из программы только для чтения, что реализуется с помощью соответствующих геттеров.

В абстрактном классе NeuralNet определена следующая чистая виртуальная функция public abstract DataSets simulateNetwork(DataSets inputData) - получает данные для прогнозирования, возвращает набор ответов(прогнозов) для этих данных.

Модуль работы с нейронными сетями Matlab реализуется в виде динамической библиотеки matnets.dll, скомпилированной в среде Matlab, а также в виде класса MatlabNeuralNet, который реализует чистые виртуальные функции базового класса и ряд вспомогательных функций. Библиотека matnets.dll предоставляет интерфейс для работы с нейронными сетями, созданными в среде Matlab.

Модуль работы с нейронными сетями приложения реализуется в виде класса CustomNeuralNet, который реализует чистые виртуальные функции базового класса, а также методы для создания, обучения и настройки параметров нейронных сетей типа «РБФ» и «Многослойный персептрон» и ряд вспомогательных методов. К модулю работы с нейронными сетями приложения относится также свободно распространяемая библиотека Encog (encog-core-cs.dll), которая предоставляет функции для создания, обучения и использования нейронных сетей.

Модуль работы с проектами программы реализован в видe класса public class NesProject, который находится в файле NesProject.cs. Данный класс имеет следующие поля:

поле public List<Column> Columns;

поле public List<Netwok> Networks;

поле Column является структурой с полями:

public string Header - заголовок столбца;

public int type - тип столбца: «1» - числовой, «2» - «да/нет», «3» - выпадающий список;является структурой с полями:string Path - путь к нейронной сети в файловой системе;

public string Name - имя нейронной сети;int Type - тип нейронной сети.

Поля класса NesProject и вспомогательные структуры Column и Network имеют достаточно простые типы данных для обеспечения удобства и простоты сериализации экземпляров класса NesProject в xml-файлы.

Класс NesProject реализует следующие методы:void FillGridColumnHeaders(DataGridView dataGrid, List<Column> columns) - заполнеяет заголовки полей и определяет типы полей компонента DataGridView (расположенный в главном окне программы на вкладке «НЭС») на основе информации, взятой из поля Columns; void LoadNetworks() - загружает нейронные сети в среду программы из файлов, путь к которым содержится в поле Networks;static void SerializeProjectToXML(NesProject nesProject, string path) - статический метод, обеспечивающий сериализацию экземпляра класса NesProject в xml-файл, создаваемый в файловой системе в директории, определяемой параметром path.static NesProject DeserializeFromXML(string path) - статический метод, обеспечивающий получение экземпляра класса NesProject из xml-файла, путь к которому указан в параметре path. Текст программы представлен в приложении Д.

Модули программы, обеспечивающие графический интерфейс пользователя, реализованы стандартными средствами .NET Framework. Эти модули расположены в файлах:.cs - файл компонента главной экранной формы;.cs - файл компонента окна с отображаемыми выборками данных;.cs - файл компонента первого окна «Мастера создания НЭС»;.cs - файл компонента окна редактирования и добавления входных и выходных параметров «Мастера создания НЭС»;.cs - файл компонента окна загрузки данных для обучения нейронной сети и сопоставления данных с созданными входными и выходными параметрами «Мастера создания НЭС»;.cs - файл компонента окна обучения нейронной сети;.cs - файл компонента окна с информацией об обучении нейронной сети;.cs - файл компонента окна сопоставления элементов параметра типа «выпадающий список» с их числовыми значениями;.cs - файл компонента окна загрузки нейронной сети в проект Мастера создания НЭС».

.4 Разработка пользовательского интерфейса

Пользовательский интерфейс программы реализован как оконный интерфейс. Оконный интерфейс приложения реализуется в графическом режиме с использованием стандартных средств Windows Forms - части Microsoft .NET Framework. На рисунке 4.3 показано основное окно программы в расширенном режиме работы.

Пункт меню файл состоит из подпунктов загрузить проект НЭС, сохранить проект НЭС как, выход.

При выборе подпункта загрузить проект НЭС появляется диалоговое окно с предложением загрузить проект программы из выбранной пользователем папки.

При выборе подпункта сохранить проект НЭС как появляется диалоговое окно с предложением сохранить проект программы в выбранной пользователем папке.

При выборе подпункта выход программа завершает свою работу.

Пункт меню режим работы состоит из подпунктов НЭС упрощенный и продвинутый.

Рисунок 4.3 - Основное окно программы в продвинутом режиме

При выборе режима работы НЭС упрощенный пункты меню данные и нейронная сеть становятся недоступными, также становятся недоступными вкладки данные и нейронная сеть. На рисунке 4.4 показано основное окно программы в упрощенном режиме работы.

Рисунок 4.4 - основное окно программы в упрощенном режиме

Пункт меню НЭС содержит подпункт мастер создания НЭС. При его выборе запускается мастер создания НЭС, который состоит из ряда диалоговых окон.

В первом диалоговом окне предлагается ответить на вопрос, существует ли уже созданная и обученная нейронная сеть для целей прогнозирования. Диалоговое окно с вопросом относительно наличия нейронной сети показано на рисунке 4.5.

Рисунок 4.5 - Первое диалоговое окно мастера создания НЭС

Если пользователь выбирает пункт «Да, нейронная сеть уже обучена», открывается окно с выбором нейронной сети. Окно с выбором нейронной сети изображено на рисунке 4.6.

Рисунок 4.6 -Диалоговое окно выбора нейронной сети мастера создания НЭС

В данном диалоговом окне предлагается выбрать нейронную сеть из уже имеющихся. Нейронная сеть может храниться на любом используемом носителе информации. При нажатии на кнопку «Загрузить НЭС» появляется диалоговое окно выбора файла нейронной сети (рисунок 4.6).

Если выбранный файл успешно прошел проверки на корректность, появляется окно с информацией об успешной загрузке сети (рисунок 4.7).

Рисунок 4.7 - Окно с информацией об успешном импортировании нейронной сети Matlab

При нажатии на кнопку «Далее» информация о выбранной из списка нейронной сети сохраняется в свойстве текущего проекта и вызывается окно ввода параметров мастера создания НЭС, изображенное на рисунке 4.8.

Рисунок 4.8 - Окно ввода характеристик объекта мастера создания НЭС

Окно ввода характеристик объекта мастера создания НЭС вызывается с уже предустановленным набором входных и выходных параметров по умолчанию. Количество входных и выходных параметров в данном наборе обусловлено количеством входов и выходов выбранной нейронной сети. Имена входных и выходных параметров, а также тип поля каждого входного параметра можно редактировать нажатием на соответствующие кнопки «Редактировать». При её нажатии открывается окно редактирования параметра (рисунок 4.9).

Рисунок 4.9 - Окно редактирования параметра

При нажатии на кнопку «Список» если тип поля задан как «Список параметров», открывается окно добавления и сопоставления элементов списка с числовыми параметрами (рисунок 4.10).

Рисунок 4.10 - Окно добавления и сопоставления элементов списка с числовыми параметрами

После редактирования параметров при нажатии на кнопку «Далее» окна ввода характеристик объекта мастера создания НЭС, мастер создания завершает свою работу и на вкладке НЭС (рисунок 4.3) предлагается ввести параметры для прогнозирования и предоставляется возможность непосредственно спрогнозировать нужный показатель.

Если в первом диалоговом окне мастера создания НЭС выбран пункт «Нет, нейронной сети нет», открывается окно ввода характеристик объекта мастера создания НЭС с пустыми значениями характеристик. Пользователь сам должен определить количество, имена и типы входных характеристик объекта, а также имена выходных параметров. Типы выходных параметров предустановленны как «числовые (количественные)», так как разрабатываемая программа имеет целью прогнозирование именно количественных характеристик.

После того, как все характеристики заданы и нажата кнопка «Далее» окна ввода характеристик объекта мастера создания НЭС, открывается окно выбора данных для обучения нейронной сети мастера создания НЭС (рисунок 4.12) с пустыми полями параметр и имя столбца в таблице. При нажатии на кнопку «Загрузить» появляется диалоговое окно выбора файла формата Excel. Первый ряд листа файла Excel должен содержать наименования столбцов, а остальные ряды должны содержать соответствующие числовые данные, относящиеся к тому или иному столбцу. При несоответствии файла Excel вышеописанному шаблону в программе возникает исключение и выводится окно с информацией о несоответствии загружаемого файла Excel требуемому шаблону. Предлагается заново загрузить другой файл Excel. Если файл успешно загружен, открывается окно с загруженными данными для обучения (рисунок 4.11). Данное окно может быть закрыто и впоследствии восстановлено нажатием на кнопку «Просмотр данных».

Рисунок 4.11 - Окно с загруженными данными для обучения

Данные для обучения при необходимости могут быть подкорректированы вручную.

Рисунок 4.12 - Окно выбора данных для обучения

После того, как данные из файла загружены, в окне выбора данных для обучения нейронной сети мастера создания НЭС, пользователю необходимо для каждого параметра объекта выбрать соответствующий столбец из загруженной таблицы с данными. После того, как все параметры выбраны, при нажатии на кнопку «Далее» закрывается окно выбора данных и открывается окно обучения нейронной сети мастера создания НЭС (рисунок 4.13).

Значения полей количество входных параметров и количество выходных параметров формируются на основе информации о заранее определенных параметрах.

В поле тип сети предлагается выбрать один из двух типов искусственной нейронной сети: RBF-сеть или сеть типа многослойный персептрон.

В поле имя сети предлагается задать имя нейронной сети, которое будет видно в программе.

В поле макс. циклов задается максимальное количество циклов обучения нейронной сети (Бесконечно или положительное целое число).

В поле макс. ошибка задается максимальная среднеквадратическая ошибка обучения нейронной сети.

Кнопка сохранить сеть служить для вызова диалогового окна сохранения файла нейронной сети. Кнопка «Просмотр данных» служит для вызова окна с данными для обучения.

Рисунок 4.13 - Окно обучения нейронной сети

Можно также настроить дополнительные параметры, специфические для каждого типа сети при нажатии на кнопку «Дополнительные параметры» (например, выбор алгоритма обучения и архитектуры для искусственной нейронной сети типа многослойный персептрон). После настройки всех параметров можно обучить искусственную нейронную сеть нажатием кнопки «Обучить сеть», при этом появляется окно с информацией об обучении (рисунок 4.14).

Рисунок 4.14 - Окно с информацией об обучении нейронной сети

Можно остановить обучение сети, нажав кнопку «СТОП», отменить обучение, нажав кнопку «ОТМЕНА». Возможность нажать кнопку «ОК» появляется только при достижении заданной ошибки обучения или максимального цикла (как критериев останова).

После обучения нейронной сети при нажатии на кнопку «Далее» окна ввода характеристик объекта мастера создания НЭС, мастер создания завершает свою работу и на вкладке НЭС (рисунок 4.3) предлагается ввести параметры для прогнозирования и предоставляется возможность непосредственно спрогнозировать нужный показатель.

Пункт меню данные состоит из подпунктов загрузить данные для обучения и загрузить данные для тестирования (пункт доступен только в продвинутом режиме).

При выборе одного из подпунктов появляется диалоговое окно с предложением выбрать один из заранее подготовленных файлов Excel для загрузки. При успешной загрузке файла, открывается дополнительное окно, в котором отображается содержимое файла. Первый ряд листа файла Excel должен содержать наименования столбцов, а остальные ряды должны содержать соответствующие числовые данные, относящиеся к тому или иному столбцу. При несоответствии файла Excel вышеописанному шаблону в программе возникает исключение и выводится окно с информацией о несоответствии загружаемого файла Excel требуемому шаблону.

Пункт меню нейронная сеть (доступен только в продвинутом режиме) состоит из подпунктов импортировать из Matlab, загрузить готовую нейронную сеть, создать новую нейронную сеть.

При выборе подпункта импортировать из Matlab появляется диалоговое окно с предложением выбрать один из доступных .mat файлов, содержащих созданную и обученную в среде Matlab нейронную сеть типа многослойный персептрон или РБФ. Если нейронная сеть Matlab не может быть импортирована по какой-либо причине (например, если нейронная сеть была создана и обучена в версии Matlab, отличной от 2010a и является несовместимой с данной версией или если в выбранном .mat файле не может быть найдена нейронная сеть с именем «network»), в программе возникает исключение и выводится окно с информацией об ошибке.

При выборе подпункта «Загрузить готовую нейронную сеть» появляется диалоговое окно с предложением выбрать один из доступных .ncnet файлов, содержащих созданную и обученную в разработанном приложении нейронную сеть типа «многослойный персептрон» или «РБФ».

При выборе подпункта «Создать новую нейронную сеть» появляется окно с предложением создать новую нейронную сеть, в котором можно задать тип сети, количество слоёв сети и количество нейронов в каждом из слоев (только для ИНС типа «многослойный персептрон»), предпочитаемый алгоритм обучения сети, максимальное количество циклов обучения, желаемая ошибка обучения (рисунок 4.13) .

Пункт меню справка состоит из подпунктов руководство пользователя и о программе.

При выборе подпункта руководство пользователя появляется окно с необходимой информацией для работы с программой.

При выборе подпункта о программе появляется окно с информацией об авторе программы.

В режиме работы НЭС упрощенный доступна только одна вкладка НЭС. На ней располагается компонент DataGridView с возможностью ввода параметров одного или нескольких объектов для получения некоторого множества ответов (прогнозов) относительно его стоимостных показателей, например, предлагается заполнить такие параметры как «Количество этажей в доме», «Далеко ли от центра расположен дом», «Год постройки дома», «Количество квадратных метров» для прогнозирования стоимости квартиры в зависимости от этих параметров. Параметры и типы параметров задаются в процессе работы «мастера создания НЭС».

Также на этой вкладке расположена кнопка «Получить ответы», которая передает заполненные данные на выбранную в раскрывающемся списке «ИНС» нейронную сеть и выдает окно с полученными ответами.

Кнопки «Очистить параметры», «Загрузить параметры» и «Сохранить параметры» производят соответствующие действия с заполненными ячейками таблицы DataGridView.

В режиме работы «Продвинутый» помимо вкладки НЭС доступны вкладки «Данные» и «Нейронная сеть».

Вкладка «Данные» (рисунок 4.15) содержит информацию о загруженных данных для обучения и тестирования и предоставляет возможность нормализации данных в одном из следующих интервалов: [-1;1], [0;1], [-0,5;0,5].

Рисунок 4.15 - Вкладка «Данные» основного окна программы

На вкладке «Данные» имеется возможность вызова окна для просмотра и редактирования данных (если это окно закрыто) нажатием на кнопку «Просмотр данных». Также предлагается возможность настройки количества выходных параметров в выборке (если выбран один параметр, выходных столбцов выбирается один последний столбец, если два параметра, то выбирается два последних столбца и так далее). Значения поля «количество обучающих векторов» определяется как (количество рядов в листе Excel - один) (так как первый ряд должен содержать заголовки).

Вкладка «Нейронная сеть» (рисунок 4.16) содержит информацию о загруженных и созданных нейронных сетях.

Рисунок 4.16 - Вкладка «Нейронная сеть» основного окна программы

Предоставляется возможность тестирования и удаления выбранной нейронной сети (тестовыми данными считаются выбранные данные для тестирования на вкладке «Данные»). При нажатии на кнопку «Удалить сеть» удаляется выбранная из списка искусственная нейронная сеть. При нажатии на кнопку «Тестирование» появляется окно со списком ответов для каждого тестируемого входного вектора.

.5 Разработка алгоритма загрузки нейронной сети в проект

Алгоритм загрузки нейронной сети в проект представляет собой последовательность действий, необходимых для добавления нейронной сети, созданной в программной среде Matlab, или пользовательской нейронной сети в «проект НЭС».

Процесс загрузки состоит из взаимосвязанных, последовательных этапов.

На первом этапе в диалоговом окне загрузки файлов выбирается файл с расширением .mat или .ncnet (задается маской в стандартном компоненте OpenFileDialog). Если файл с таким расширением не выбран, работа алгоритма прекращается. Если выбран файл с расширением .mat или .ncnet, выполняется попытка открытия файла для чтения. Если попытка открытия файла для чтения оказалось неудачной по каким-либо причинам, выдается сообщение пользователю о невозможности открыть файл, и работа алгоритма прекращается. Если файл был успешно открыт, переходим ко второму этапу.

На втором этапе выполняется проверка содержания открытого файла. Если был открыт файл с расширением .mat, выполняется предположение о том, что загружается нейронная сеть, созданная и обученная в программной среде Matlab. Вызывается функция созданной в среде Matlab динамической библиотеки matnets.dll, которая открывает загруженный .mat файл как проект Matlab, в котором выполняется поиск переменной с именем «network». Если переменная с именем «network» не найдена, функция возбуждает исключение, которое перехватывается в программе и выводится сообщение о невозможности загрузки нейронной сети с описанием причины неудачи, работа алгоритма прекращается. Если переменная с именем «network» найдена, выполняется предположение о том, что данная переменная представляет собой объект нейронной сети и у него средствами библиотеки matnets.dll запрашивается ряд свойств (количество слоев, нейронов и т.п.). Если функция, запрашивающая свойства нейронной сети возбуждает исключение, оно перехватывается и выводится сообщение о невозможности загрузки нейронной сети с описанием причины неудачи, в случае же успешного вызова функции, нейронная сеть добавляется в проект. Работа алгоритма прекращается.

Если был открыт файл с расширением .ncnet, то средствами библиотеки Encog выполнятся преобразование файла к объекту типа object. При успешном преобразовании файла к объекту, у объекта вызывается метод GetType(). Если тип объекта соответствует типу BasicNetwork или RBFNetwork, выполняется приведение типа и определение параметров сети, сеть добавляется в проект, работа алгоритма завершается. Если любое из вышеперечисленных действий возбуждает исключение или не выполняется одно из условий, то выдается сообщение о невозможности загрузки нейронной сети с описанием причины неудачи, работа алгоритма завершается. Схема данного алгоритма представлена в приложении Б.

.6 Разработка алгоритма работы конструктора создания нейросетевой экспертной системы

Алгоритм работы мастера создания НЭС представляет собой последовательность действий, необходимых для создания работоспособного проекта программы, в рамках которого имеется возможность непосредственного прогнозирования стоимостных показателей. Процесс работы мастера состоит из взаимосвязанных, последовательных этапов.

На первом этапе пользователю предлагается ответить на вопрос, имеется ли в наличии уже готовая обученная искусственная нейронная сеть. Если нейронная сеть имеется, переходим к этапу выбора нейронной сети. Если нейронной сети нет, переходим к этапу ввода параметров (характеристик) объекта. Если нажата кнопка «Отмена», то мастер создания НЭС завершает работу без сохранения результатов.

На этапе выбора нейронной сети в диалоговом окне предлагается выбрать нейронную сеть из уже имеющихся искусственных нейронных сетей. Нейронная сеть может храниться на любом используемом носителе информации. При нажатии на кнопку «Загрузить НЭС» появляется диалоговое окно выбора файла нейронной сети, и дальнейшие действия происходят по алгоритму загрузки нейронной сети в проект. Если выбранный файл успешно прошел проверки на корректность и нажата кнопка «Далее», переходим к этапу ввода характеристик объекта с заранее предустановленными следующими параметрами: количество входных параметров, количество выходных параметров. Если нажата кнопка «Отмена», то мастер создания НЭС завершает работу без сохранения результатов.

На этапе ввода характеристик объекта мастера создания НЭС задаются имена входных и выходных параметров, а также тип поля каждого входного параметра. Количество входных и выходных параметров можно задать только в том случае, если не была выбрана соответствующая искусственная нейронная сеть, определяющая количество входных и выходных параметров. После того, как все характеристики заданы, если имеется загруженная нейронная сеть, завершается работа мастера создания НЭС, предварительно сохранив параметры объекта и нейронную сеть в переменной проекта. Если нейронная сеть не была задана, переходим к этапу выбора данных для обучения нейронной сети мастера создания НЭС. Если нажата кнопка «Отмена», то мастер создания НЭС завершает работу без сохранения результатов.

На этапе создания и обучения искусственной нейронной сети мастера создания НЭС выполняется настройка параметров и обучение нейронной сети. После успешного обучения нейронной сети при нажатии кнопки «ОК» завершается работа мастера создания НЭС, предварительно сохранив параметры объекта и нейронную сеть в переменной проекта. Если нажата кнопка «Отмена», то мастер создания НЭС завершает работу без сохранения результатов. Схема данного алгоритма представлена в приложении В.

.7 Разработка алгоритма загрузки данных в проект

Алгоритм загрузки данных в проект представляет собой последовательность действий, необходимых для извлечения необходимых для проекта данных из файла Excel.

Процесс загрузки состоит из взаимосвязанных, последовательных этапов.

На первом этапе в диалоговом окне загрузки файлов выбирается файл с расширением .xls или .xlsx (задается маской в стандартном компоненте OpenFileDialog). Если файл с таким расширением не выбран, работа алгоритма прекращается. Если выбран файл с расширением .xls или .xlsx выполняется попытка открытия файла для чтения. Если попытка открытия файла для чтения оказалось неудачной по каким-либо причинам, выдается сообщение пользователю о невозможности открыть файл, и работа алгоритма прекращается. Если файл был успешно открыт, переходим ко второму этапу.

На втором этапе выполняется проверка содержания открытого файла. Средствами интерфейса прикладного программирования библиотеки ExcelLibrary запрашивается количество листов в загружаемом Excel файле. Если функция, запрашивающая количество листов в загружаемом Excel файле возбуждает исключение, оно перехватывается и выводится сообщение о невозможности чтения файла с описанием причины неудачи. Работа алгоритма прекращается. Если запрос количества листов прошел успешно и в открытом файле имеется один лист, переходим к этапу чтения листа Excel. Если в открытом файле имеется несколько листов, пользователю предлагается выбрать один из этих листов для продолжения работы.

На этапе чтения листа файла Excel выполняется циклическое последовательное чтение рядов в таблице пока не будет прочитан последний ряд. Первый ряд таблицы считывается без проверок. Количество считанных непустых ячеек в первом ряде принимается как количество заголовков столбцов в документе, а значения считанных ячеек принимаются как наименования столбцов. В каждом последующем считываемом ряде количество считываемых ячеек определяется данными о количестве столбцов, полученными при считывании первого ряда. Следующие ряды считываются с соответствующей проверкой. Если в считываемом ряде имеются ячейки, данные в которых являются нечисловыми (строковыми, дата-время и т.д.), то выдается сообщение о наличии нечисловых данных в ячейках и предлагается исправить файл вручную средствами установленного программного обеспечения для редактирования таблиц Excel. Работа алгоритма завершается. Если в считываемом ряде нет нечисловых ячеек, проверяется, есть ли в считываемом ряде пустые ячейки. Если пустые ячейки имеются, значения пустых ячеек считывается как нуль, значение флага «есть пустые ячейки» устанавливается в «1», создается числовой массив размером, равным количеству считанных, туда записываются значения ячеек, массив добавляется в список массивов. Если прочитаны все ряды, работа алгоритма прекращается c открытием окна для просмотра и редактирования данных. Схема данного алгоритма представлена в приложении Г.

Выводы

Обзор основных средств разработки и языков программирования показал, что для решения поставленной задачи наилучшим образом подходит бесплатная среда разработки Microsoft Visual Studio 2010 Express и современный объектно-ориентированный язык программирования C#. Разработана структура программы с использованием нисходящего метода проектирования. Реализованы основные модули программы. При разработке пользовательского интерфейса программы решено выбрать оконный интерфейс, реализованный в графическом режиме с использованием стандартных средств Windows Forms - части Microsoft .NET Framework. Также произведена разработка основных алгоритмов работы программы.

5. Организационно-экономический раздел

В данном разделе производится экономическое обоснование разработки программы: выполняется расчет затрат на её разработку, внедрение и использование, а также расчёт прибыли от её реализации и цены продукта.

.1 Экономическое обоснование необходимости разработки программного обеспечения

В настоящее время большинство организаций, в особенности коммерческих, нуждаются в эффективном прогнозе для принятия управленческих решений, что позволит им повысить эффективность своей деятельности. Существуют различные методы прогнозирования. Те методы, которые требуют участия высококвалифицированных экспертов, часто оказываются неприменимыми в небольших организациях по причине высокой стоимости услуг профессиональных экспертов. Для таких организаций наиболее приемлемым методом является приобретение программного обеспечения для осуществления прогнозов.

Программное обеспечение, используемое для осуществления прогнозов, можно условно разделить на два класса: реализующее статистические методы прогнозирования и использующее технологии нейронных сетей. Рядом научных исследований было доказано, что использование нейронных сетей для прогнозирования дает некоторые преимущества относительно статистических прогнозов, так как нейронные сети являются более чувствительными к параметрам. Способности нейронной сети к прогнозированию напрямую следуют из ее способности к обобщению и выделению скрытых зависимостей между входными и выходными данными. После обучения сеть способна предсказать будущее значение некой последовательности на основе нескольких предыдущих значений и/или существующих в настоящий момент факторов.

В соответствии с заданием на дипломное проектирование приводится разработка программы прогнозирования стоимостных показателей объектов с использованием нейронных сетей, предназначенной для использования в небольших коммерческих и некоммерческих организациях.

Потенциальными покупателями ПО могут являться небольшие риэлторские компании, коммерческие организации, которым необходимо осуществление прогнозов стоимостных показателей, а также некоммерческие организации, деятельность которых напрямую или косвенно связана с осуществлением прогнозов в практических или исследовательских целях.

Далее будет обоснована целесообразность создания такой системы с экономической точки зрения.

5.2 Расчёт затрат на создание программного обеспечения, цены и прибыли от его реализации

В основе проекта лежит разработка программного обеспечения. Поэтому необходимо произвести расчет затрат на создание программного обеспечения, проектной цены создания и реализации программы, предполагаемой выручки, выручка от продаж программного продукта.

Исходя из предположительного объема работ по созданию программного обеспечения, необходимо создать временную рабочую группу, состоящую из руководителя проекта и инженера-программиста. Профессионально-квалификационный состав разработчиков программного обеспечения приведен в таблице 5.1.

Таблица 5.1 - Профессионально-квалификационный состав разработчиков

 Наименование должности

Численность, чел

Месячный оклад, руб

Руководитель проекта

1

15000

Ведущий инженер-программист

1

12500

Инженер-программист

1

10000


Вопрос оплаты труда во внебюджетных организациях регулируются коллективными договорами, соглашениями, локальными нормативными актами организаций, трудовыми договорами. Это означает полное отсутствие реального регулирования оплаты труда (за исключением установленного минимального размера оплаты труда) для подавляющей части работников, так как коллективные договоры в значительной части организаций отсутствуют, а нормативные акты есть нормотворчество самих организаций и их руководства. Поэтому размер месячного оклада был выбран, исходя из средней заработной платы начинающего специалиста в области информационных технологий в г. Кирове. Во внимание взято и то, что разработкой данного продукта может заняться студент старших курсов университета или выпускник без опыта работы.

Время участия в создании программного обеспечения каждого специалиста определяется на основе перечня работ и трудоёмкости их выполнения. Трудоемкость выполнения работ рассчитывается на основе экспертных оценок по формуле

,(5.1)

где Тp - расчетная трудоемкость выполнения работы;- минимальное время, необходимое для выполнения работы;- максимальное время, необходимое для выполнения работы.

Результаты расчетов трудоемкости выполнения работ приведены в таблице 5.2.

Таблица 5.2 - Трудоёмкость выполнения работ

Наименование работы

Tmin, час

Tmax, час

Tp, час

В том числе





руково-дитель

ведущий прог- раммист

прог- раммист

Изучение технического задания

13

17

15

10

3

2

Подбор и изучение литературы, выбор прототипов

15

25

20

15

5

0

Анализ проблемы и существующих алгоритмов

30

60

45

25

10

10

Разработка структуры ПО, выбор инструментальных средств

35

55

45

25

12

8

Разработка входных и выходных форм

30

50

40

10

15

15

Разработка алгоритмов

40

70

50

25

15

10

Написание программы

200

300

205

5

50

150

Ввод программы в ЭВМ, ее отладка и тестирование

80

120

80

0

30

50

Разработка документации и чертежей

20

50

35

0

30

5

Написание инструкций для пользователя

12

20

16

0

8

8

Финансово-экономическое обоснование разработки ПО

6

10

8

8

0

0

Оформление документации с использованием ЭВМ

24

32

29

0

24

5

Маркетинговые исследования

12

20

16

16

0

0

Всего:

517

829

604

129

212

263


Для удобства и точности проведения дальнейших расчетов работы приведенные в таблице 5.2 данные целесообразно сгруппировать по комплексам и записать их по форме, указанной в таблице 5.3.

Таблица 5.3 - Комплексы работ по созданию программного обеспечения

Наименование  комплекса работ

Обозна­чение

Tp, час

В том числе занят




руково-дитель

ведущий программист

програм-мист

Создание математического обеспечения и написание программы

Вмо

356

65

100

191

Ввод программы в ЭВМ, редактирование, трансляция, отладка и тестирование программы

Вм

80

0

30

50

Прочие затраты по разработке программы

Впр

88

58

18

12

Оформление программного продукта

Воф

64

0

64

10

Маркетинговые исследования

Вми

16

16

0

0

Всего:

Впо

604

129

212

263


Данные таблицы 5.3 служат исходной базой для расчета затрат на создание ПО.

Общие затраты на создание ПО определяются по формуле

,  (5.2)

где Зсп - общие затраты на создание ПО;

Зрп - затраты на разработку ПО;

Нсп - налоги, включаемые в затраты по созданию ПО;

Зоф - затраты на оформление программного продукта и подготовку его к продаже, принимаются в размере 15 % от Зрп;

Зми - затраты на маркетинговые исследования, принимаются в размере 10 % от Зрп.

Величины налогов, включаемые в затраты по созданию ПО, рассчитываются укрупненно по формуле

,(5.3)

где ФОТоб - общий фонд оплаты труда работников, участвующих в создании ПО;

Сн - взносы в фонды ПФР (22%), ФСС (2,9%), ФОМС (5,1%), итого: 30%.

Общий фонд оплаты труда работников, участвующих в создании программного обеспечения, определяется по формуле

,(5.4)

где  - время участия специалиста определённой квалификации в создании программного обеспечения, в часах;

Р - число специалистов определённой квалификации, участвующих в создании программного обеспечения;

 - месячный оклад работника;- длительность смены (восемь часов);

Др - среднее число рабочих дней в месяце (21 день);

П - премия, предусмотренная для работников, участвующих в создании программного продукта (25 % от Зпоб);

Врк - выплаты по районному коэффициенту (установлены для г. Кирова в размере 15 % от (ЗПоб + П)).

Затраты на разработку программного обеспечения рассчитываются по формуле

 Зрп = Змо + Зком + Зпр , 

(5.5)

где Змо - затраты на создание математического обеспечения и написание программы;

Зком - затраты, связанные с работой компьютера при разработке ПО (ввод программы в ЭВМ, ее трансляция и редактирование, отладка, тестирование, корректировка и выполнение ПО);

Зпр - прочие затраты, связанные с разработкой ПО (изучение задания, литературы, патентов, анализ проблемы и существующих алгоритмов, проведение экономических расчетов и др.), принимаются 40 % от Змо.

Затраты на создание математического обеспечения и написание программы определяются по формуле

Змо = ЗПмо + П + Врк + Ссн · ФОТмо + Нр,(5.6)



где ЗПмо - затраты на выплату заработной платы работникам, участвующим в создании математического обеспечения и написании программы;

Ссн - общая ставка отчислений на социальные нужды (30 % от ФОТмо );

ФОТмо - фонд оплаты труда работников, участвующих в создании математического обеспечения и написании программы;

Нр - накладные расходы организации, где разрабатывается ПО (затраты на отопление, освещение, на содержание административно-управленческого персонала и др.), принимается в размере 100 % от ЗПмо.

Фонд оплаты труда работников, участвующих в создании ма­тематического обеспечения и написании программы, вычисляется по формуле

ФОТмо = ЗПмо + П + Врк.(5.7)



Затраты на заработную плату работников, участвующих в создании математического обеспечения и написании программы, определяются по формуле

, (5.8)

где Р - число работников определенной квалификации, участвующих в разработке математического обеспечения и написании программы;

Вмо - время участия работника определенной квалификации в разработке математического обеспечения и написании программы, в час.

Затраты, связанные с работой компьютера при разработке ПО, можно рассчитать укрупненно по формуле:

,(5.9)



гдеЗе - затраты на электроэнергию, потребляемую компьютерами;

За - амортизационные отчисления от стоимости парка компьютеров.

Затраты на электроэнергию, потребляемую компьютерами определяются по формуле

Зе = N*T*C,(5.10)



гдеN - установленная мощность одного компьютера, кВт (0,7 кВт);- время работы компьютеров, используемых при разработке ПО, час;

С - стоимость одного кВт/час, руб.

= 212 + 263 = 475 часов

Зе = 0,7*475*2,57 = 854,53 руб.

Затраты на амортизационные отчисления определяются по формуле

За = Tпр*n*S/Tам,(5.11)



гдеTпр - продолжительность осуществления проекта, месяц;- число компьютеров, используемых при разработке ПО, штук;- стоимость одного компьютера, руб;ам - срок полезного использования компьютеров, месяцев.

               263пр = ¾¾¾¾¾¾ = 1,565 месяца

                8*21

      1,565 *3*20000

Зa = ¾¾¾¾¾¾ = 2608,33 руб.

                  36

Зком = 854,53 + 2608,33 = 3462,86 руб.

Таким образом, согласно формуле (5.8), затраты на заработную плату работников, участвующих в создании математического обеспечения и написании программы равны


Фонд оплаты на создание математического обеспечения определяется по формуле (5.7)

ФОТмо = (25524,69+ 25524,69 × 0,25)(1 + 0,15) = 36691,74 руб.

Затраты на создание математического обеспечения и написание программы вычисляются по формуле (5.6) и составляют

Змо = 36691,74 ×(1+0,30)+ 25524,69= 73223,95 руб.

Затраты на разработку программного обеспечения определяются по формуле (5.5)

Зрп = 73223,95 × (1 + 0,4) + 3462,86 = 105976,4 руб.

Фонд оплаты труда по созданию программы определяется по формуле (5.4)

ФОТоб =×(1 + 0,25)×(1 + 0,15)= 64021,99 руб.

Налоги, включаемые в затраты, согласно формуле (5.3), равны

Нсп = 64021,99 × 0,30 = 19206,6 руб.

Общие затраты на создание программного обеспечения вычисляются по формуле (5.2)

Зсп = 105976,4 × (1 + 0,15 + 0,1) + 19206,6 = 151677,1 руб.

Смета затрат на создание программного обеспечения приведена в таблице 5.4.

Таблица 5.4 - Смета затрат на создание программного обеспечения

Наименование статьи затрат

Обозначение

Сумма, руб

Итого зарплаты, израсходованной на создание математического обеспечения и написание программы

ЗПмо

25524,69

Премия

П

6381,17

Выплаты по районному коэффициенту

Врк

4785,88

Отчисления на социальные нужды

Ссн

9539,85

Накладные расходы

Нр

25524,69

Итого затрат на создание МО и написание программы

Змо

73223,95

Затраты, связанные с работой ЭВМ при разработке программного обеспечения

Зком

3462,86

Прочие затраты, связанные с разработкой программного обеспечения

Зпр

29289,59

Итого затрат на разработку программного обеспечения

Зрп

105976,40

Налоги, включаемые в затраты на создание программы

Нсп

19206,60

Затраты на оформление программного продукта

Зоф

15896,46

Затраты на маркетинговые исследования

Зми

10597,64

Всего затрат на создание программного обеспечения

Зсп

151677,10


После расчёта общих затрат на создание программного обеспечения определяются его проектные цены:

цена создания Цс;

розничная цена (цена реализации) Цр.

Цена создания определяется по формуле

Цс = Зсп + Пр,(5.12)

где Пр - размер прибыли.

Величина прибыли рассчитывается следующим образом

Пр = Зсп × Ур,(5.13)

где Ур - уровень рентабельности программного продукта, принимается в размере 0,2.

Прибыль определяется по формуле (6.13)

Пр = 151677,1× 0,2 =30335,42 руб.

Цена создания определяется по формуле (6.12)

Цс = 151677,1+30335,42 =182012,52 руб.

Розничную цену программного обеспечения можно определить по формуле

Цр = Цс + НДС + Тн, (5.14)

где НДС - налог на добавленную стоимость (18 %);

Тн - торговая наценка при реализации ПО через специализированные магазины (торговых посредников), принимается в размере 15% от Цс.

Розничная цена определяется по формуле (5.14)

Цр = 182012,52 × (1 + 0,18 + 0,15) = 242076,65 руб.

При разработке и продаже только одного экземпляра расчет проектируемых цен на программное обеспечение представлен в таблице 5.5.

Таблица 5.5 - Расчет цены программного обеспечения

Наименование статьи затрат

Буквенное обозначение

Сумма, руб

 Затраты на создание программного обеспечения

Зсп

151677,10

 Прибыль от продажи одной копии программного обеспечения

Пр

30335,42

 Цена создания одной копии программного обеспечения

Цс

182012,52

Налог на добавленную стоимость

НДС

 32762,25

Торговая наценка

Тн

27301,88

Цена реализации (рыночная цена)

Цр

242076,65


Цена созданного программного обеспечения в расчете на несколько реализуемых копий определяется по формуле

,(5.15)

где Nкоп - количество копий, снимаемых с оригинала ПО;

Затраты на одно копирование рассчитываются по формуле

,(5.16)

где tкоп - время одного копирования программного обеспечения;под - время подготовки носителя информации;

См - стоимость одной минуты копирования;

Цн - розничная цена носителя информации, используемого под копию программного обеспечения;

Здок - затраты на копирование или печатание сопроводительной до­кументации (инструкции для пользователя и др.) и приобретение упаковки для хранения этой документации и носителя информации (принимается в размере 2305,5 рублей).

Минимальную розничную цену ПО следует определить по формуле

Цр = Цс × (1 + Сндс) × (1 + Стн),(5.17)

где Сндс - ставка налога на добавленную стоимость (18 %);

Стн - ставка торговой наценки.

Зкоп = + 15 + 2305,5 = 2321,17 руб.

Минимальная цена создания программного обеспечения (в расчете на десять копий продаваемого программного обеспечения) определяется по формуле (5.15)

Цс =  = 20986,66 руб.

В расчете на десять копий продаваемого программного обеспечения, цена реализации одной копии

Цр = 20986,66 ×(1 + 0,18) × (1 + 0,15) = 28478,9 руб.

Далее определяется цена создания и розничная цена программного обеспечения при различных количествах реализации его копий. Зависимость цен программного обеспечения от объемов продаж представлена в таблице 5.6.

Таблица 5.6 - Зависимость между минимальной ценой и числом реализуемых копий программного обеспечения

Количество реализуемых копий

Цена создания, руб

Розничная цена, руб

1

184797,90

250770,80

10

20986,66

28478,90

20

11886,03

16129,34

50

6425,65

8719,61

100

4605,53

6249,70


Величина выручки от реализации программного обеспечения по рыночной цене определяется по формуле

ВРбр = Цр × Nкоп,

(5.18)


где ВРбр - величина выручки от реализации программного обеспечения по рыночной цене (выручка брутто);

Цр - цена реализации разработанного программного обеспечения без учёта торговой наценки;коп - количество копий программного обеспечения, которые предполагается реализовать.

В расчете на реализацию 10 копий программного обеспечения

ВРбр = 28478,9 × 10 =284789 руб.

Объём выручки от продажи программного обеспечения по цене создания рассчитывается по формуле

ВРн = Цс × Nкоп,(5.19)



где ВРн - величина выручки от продажи программного обеспечения по цене создания (выручка нетто);

Цс - цена создания программного обеспечения.

В расчете на 10 копий продаваемого программного обеспечения

ВРн = 20986,66 × 10 = 209866,6 руб.

Величина прибыли от продажи всех копий программного продукта определяется следующим образом

,(5.20)



где Пр - прибыль от продажи программного обеспечения по цене производства.

В расчете на 10 реализуемых копий программного обеспечения

34977,8 руб.

Далее следует определить прибыль до налогообложения, которую может получить фирма, разрабатывающая и реализующая программное обеспечение, по формуле

Пб = Пр + Vд - Vр,(5.21)



где Пб - прибыль до налогообложения;

Vд - прочие доходы (3 % от Пр);р - прочие расходы (1 % от Пр);

Пб = 34977,8 * (1 + 0,03 - 0,01) = 35677,36 руб.

Налог на прибыль определяется по формуле

Нпр = Пб × Снп,(5.22)



где Снп - ставка налога на прибыль (20 %).

Нпр = 35677,36 * 0,20 = 7135,47 руб.

Оставшаяся прибыль после уплаты налогов и других платежей называется чистой прибылью фирмы, которую следует определить по формуле

Пч = Пб - Нпр ,(5.23)



где Пч - чистая прибыль фирмы.

Пч = 35677,36 - 7135,47 = 28541,89 руб.

Чистая прибыль расходуется фирмой по следующим направлениям:

на техническое развитие отчисляется 45 % чистой прибыли, что значительно сокращает время создания программного обеспечения на более совершенной технике, что в свою очередь окажет влияние на величину прибыли;

на оказание материальной помощи работникам отчисляется 30 % прибыли;

на благотворительные и экологические цели отчисляется 15 % прибыли;

на прочие цели отчисляется 10 % прибыли.

Итоговый расчёт формирования и использования выручки приводится в таблице 5.7.

Таблица 5.7 - Формирование и использование выручки и прибыли

Наименование показателя

Буквенное обозначение

Сумма, руб

Валовая выручка от реализации программного обеспечения

ВРбр

 209866,60

Налог на добавленную стоимость

НДС

37775,99

Выручка от продажи программного обеспечения по цене создания

ВРн

209866,60

Общие затраты на создание и копирование всех реализуемых ПО

Зсп

151677,10

Прибыль от продажи программного обеспечения

Пр

35677,36

Доходы от прочих операций

1049,33

Расходы от прочих операций

349,78

Прибыль до налогообложения

Пб

35677,36

Налог на прибыль

Нпр

7135,47

«Чистая» прибыль:

Пч

28541,89


.3 Расчёт затрат, связанных с покупкой, внедрением и использованием программного обеспечения

Капитальные затраты на приобретение и внедрение разрабатываемого программного обеспечения рассчитываются по формуле

Кпо = Цпо+Крм+Ктех+Кпр,(5.24)

где Цпо - затраты на покупку программного обеспечения;

Крм - капитальные вложения на создание рабочего места пользователя;

Ктех - капитальные вложения на техническое оснащение рабочего места пользователя;

Кпр - прочие капитальные затраты, связанные с внедрением программного обеспечения (принимаются в размере 15 % от Цпо).

Капитальные вложения на создание рабочего места пользователя программного обеспечения (без учёта износа), следует рассчитать по формуле

,(5.25)

где S - необходимая под рабочее место оператора площадь (4 м2);

Цпл - стоимость одного квадратного метра площади (12 минимальных зарплат - 62460 руб.);

Змеб - затраты на приобретение мебели (компьютерный стол, кресло для пользователя и др.) принимаются равными 15 % от Цком;

Тм - время использования ЭВМ в течение года для решения всех задач с помощью купленного программного обеспечения;

Тоб - общее время эксплуатации ЭВМ пользователем в течение года, можно рассчитать следующим образом

Тоб = ds×S×Др×Нм×Кис, (5.26)

где ds - длительность смены (восемь часов);- число смен работы компьютера (одна);

Др - среднее число рабочих дней в месяце (двадцать один день);

Нм - число месяцев в году (двенадцать);

Кис - средний коэффициент использования компьютера в течение года (0,8).

Время использования ЭВМ в течение года для решения всех задач с помощью купленного программного обеспечения определяется как

Тм = tз × Д, (5.27)

где tз - время решения задач с помощью приобретаемого программного обеспечения в течение дня (четыре часа);

Д - количество дней использования программного обеспечения в течение года (сто дней).

Тм = 6 × 100 = 300 часов.

Тоб = 8 × 1 × 21 × 12 × 0,8 = 1612,8 часов.

Крм = (4 * 62460 + 0,15 * 10000) * 300 / 1612,8 =46752,23 руб.

Капитальные затраты на техническое оснащение рабочего места пользователя программного обеспечения рассчитываются по формуле

,(5.28)

где Цком - рыночная цена ЭВМ на момент покупки программы (цена ЭВМ принимается равной 10000 рублей);

Цтех - цена дополнительного технического оснащения компьютера (принимается равной 30 % от Цком);

Ктр - коэффициент, учитывающий затраты на транспортировку и установку компьютера и других технических средств, так как используется действующий компьютер, то Ктр = 0;

Киз - коэффициент, учитывающий степень износа действующего компьютера, на котором будут выполняться задачи с помощью купленного программного обеспечения, Киз = 0,3.

Ктех = (10000 + 0,3 * 10000)*(1 + 0) * (1 - 0,3) * 300 / 1612,8 = 1693,54 руб.

Кпо = 28478,9+ 1693,54 + 46752,23 + 0,15*28478,9= 81196,51 руб.

Общая величина капитальных затрат на внедрение программного обеспечения и их состав приведены в таблице 5.8.

Таблица 5.8 - Капитальные затраты на покупку и внедрение программного обеспечения

Наименование затрат

Обозначение

Сумма, руб

Затраты на покупку программного обеспечения

Цпо

28478,90

Затраты на создание рабочего места

Крм

46752,23

Затраты на техническое оснащение рабочего места

Ктех

1693,54

Прочие затраты

Кпр

4271,80

Итого

Кпо

81196,51


Годовые текущие затраты пользователя, связанные с использованием программного обеспечения, рассчитываются по формуле

,(5.29)

где Зтек - годовые текущие затраты пользователя, связанные с применением программного обеспечения;

Тм - время занятости компьютера решением задач с помощью купленного программного обеспечения, часов;

См - стоимость одного часа работы ЭВМ определённой модели у пользователя программного обеспечения (без учёта амортизационных отчислений от стоимости приобретенного программного обеспечения примем 0,01 от минимальной заработной платы);

Цпо - рыночная цена купленного программного обеспечения;

Тс - предполагаемый срок использования программного обеспечения (пять лет).

Зтек = 300 × 52,05 + 28478,9/5 = 35747,83 руб.

Разрабатываемое программное обеспечение предназначено для внутренних задач предприятия. Поэтому рассчитывать годовую экономию от его реализации не представляется возможным.

Годовую экономию на текущих расходах, которую может получить фирма от применения программного обеспечения, определяют по формуле

Эг = Зр - Зт,

(5.30)


где Эг - предполагаемая годовая экономия на текущих расходах у пользователя в результате применения компьютерной программы;

Зр - затраты на решение задач, действующим способом;

Зт - затраты на решение задач, новым способом.

Зр = Р * Вуч * (Ом + П + Врк + Осн ) , ds * Др(5.31)



где Р - число работников, участвующих в решении задач ручным спо­собом;

Вуч - время участия каждого работника в решении задач ручным спо­собом в течение года, в часах.

Профессионально-квалификационный состав пользователей ПО приведен в таблице 5.9.

Таблица 5.9 - Профессионально-квалификационный состав пользователей ПО

Наименование должности

Численность, чел

Месячный оклад, руб

Время работы с программой в месяц, часы

Аналитик

1

15000

63


Срок окупаемости капитальных затрат на покупку и внедрение компь­ютерной программы рассчитывается по формуле

Ток = Кпо / Эг ,

(5.32)


где Ток - расчетный срок окупаемости капитальных затрат.

Зр = 1 * 2016 / (8 * 21) * (15000 + 0,25 * 5205+ 0,15 * (5205+ 0,25 * 5205) + (0,30) * 5205) = 226064,25 руб.

Эг = 226064,25 - 35747,83 = 190316,42 руб.

Ток = 81196,51/ 190316,42 = 0,43 года.

Перечень экономических показателей, характеризующих эффективность создания разработанного ПО для фирмы-разработчика программного обеспечения, и их значений приведены в таблице 5.10.

Таблица 5.10 - Финансово-экономические показатели создания программного обеспечения

Наименование показателя

Единица измерения

Значение показателя

Число специалистов, участвующих в разработке программы

чел

3

Время создания программного обеспечения

час

604

Затраты на создание ПО

руб

20986,66

Розничная цена

руб

28478,90

Уровень рентабельности

%

20

Прибыль до налогообложения

руб

35677,36

Чистая прибыль

руб

28541,89


Перечень экономических показателей, характеризующих эффективность использования разработанного ПО для фирмы-покупателя программного обеспечения, и их значений приведены в таблице 5.11.

Таблица 5.11 - Финансово-экономические показатели использования программного обеспечения

Наименование показателя

Единица измерения

Значение показателя

Капитальные затраты на покупку и внедрение программного обеспечения

руб

81196,51

Текущие расходы, связанные с использованием программного обеспечения

руб

35747,83

Расчетный срок окупаемости капи­тальных затрат

год

0,43


Выводы

В данном разделе были произведены экономические расчеты затрат, связанных с разработкой, внедрением и эксплуатацией программного обеспечения.

Для разработки программного обеспечения была создана группа из трех человек: руководитель группы, ведущий инженер-программист и инженер-программист. Произведенные расчеты показали, что розничная цена программного продукта при реализации десяти копий составляет 28478,9 рублей, а при реализации 100 копий - 6249,70 рубля. Данный проект является рентабельным (20 %), все вложения являются обоснованными и оправданными. Чистая прибыль от реализации 10 копий составляет 28541,89 рублей, что говорит о том, что данный проект является экономически выгодным.

Заключение

В данном дипломном проекте была разработана нейросетевая программа прогнозирования стоимостных показателей объектов.

Проведенный обзор научно-технической литературы показал, что выбранная предметная область дипломного проекта является актуальной, что подтверждается множеством опубликованных статей. Было показано, что нейронные сети успешно применяются для прогнозирования различных показателей во многих областях.

Обзор аналогов выявил, что cсуществующие на сегодняшний день решения не лишены недостатков: недостатком большинства коммерческих продуктов является их относительно высокая цена для небольших компаний, а также отсутствие русифицированных версий, а бесплатное программное обеспечение является либо устаревшим, либо не подходящим для использования специалистами, не знакомыми с технологиями нейронных сетей и сложное в освоении.

Анализ математического аппарата показал, что существует алгоритмы, способные за конечное число шагов обучить искусственную нейронную сеть. Эмпирическое сравнение моделей показало, что наилучшие результаты прогнозирования обеспечила трехслойная нейронная сеть типа «многослойный персептрон», но нейронные сети типа «RBF» также показывают относительно неплохие результаты без необходимости подбора оптимальной архитектуры сети. Нейронная сеть типа «RBF» хорошо подойдет для прогнозирования в том случае, если необходимо подобрать модель в сжатые сроки, когда времени на поиск оптимальной архитектуры ИНС типа «многослойный персептрон» недостаточно.

Обзор основных средств разработки и языков программирования показал, что для решения поставленной задачи наилучшим образом подходит бесплатная среда разработки Microsoft Visual Studio 2010 Express и современный объектно-ориентированный язык программирования C#.

Разработана структура программы с использованием нисходящего метода проектирования. Реализованы основные модули программы. При разработке пользовательского интерфейса программы решено выбрать оконный интерфейс, реализованный в графическом режиме с использованием стандартных средств Windows Forms - части Microsoft .NET Framework. Также произведена разработка основных алгоритмов работы программы.

Для разработки программного обеспечения была создана группа из трех человек: руководитель группы, ведущий инженер-программист и инженер-программист. Произведенные расчеты показали, что розничная цена программного продукта при реализации десяти копий составляет 28478,9 рублей, а при реализации 100 копий - 6249,70 рубля. Данный проект является рентабельным (20 %), все вложения являются обоснованными и оправданными. Чистая прибыль от реализации 10 копий составляет 27854,22 рублей, что говорит о том, что данный проект является экономически выгодным.

Таким образом, разработанный программный продукт обладает следующими возможностями:

Загрузка нейронных сетей, созданных в среде Matlab и проверка совместимости загружаемой сети с программным продуктом;

Создание и обучение нейронных сетей типа РБФ и «многослойный персептрон» в рамках программы;

Получение выходных результатов обработки нейронной сетью Matlab или пользовательской сетью на основе входных данных;

Возможность сохранения текущего окружения в проект и загрузки окружения из проекта;

Полностью русифицированный пользовательский интерфейс;

Наличие удобного и простого в использовании «Мастера создания НЭС» для пользователей, не знакомых с технологиями нейронных сетей.

Дальнейшие исследования и доработки могут проводиться по следующим направлениям:

оптимизация реализованных алгоритмов;

разработка алгоритмов для автоматического подбора оптимальной нейронной сети;

интеграция с другими инструментами, предоставляемыми средой Matlab.

Список сокращений и обозначений

РБФ - радиальная базисная сеть;

ИНС - искусственная нейронная сеть;

ЭВМ - электронная вычислительная машина;

ПО - программное обеспечение;

ПК - персональный компьютер.

Библиографический список

Тейл, Г. Прикладное экономическое прогнозирование [Текст]: учебник/ Генри Тейл: Пер. под ред. Э.Б. Ершова. - М.: Прогресс, 1970 . - 509 с.

Громова, Н. М. Основы экономического прогнозирования [Текст] : учеб. пособие / Н. М. Громова, Н. И. Громова. - М.:Академия Естествознания, 2007. - 112 с.

Poli, I. A neural net model for prediction [Текст] / I. Poli, R.D. Jones // Journal of American Statistical Association. - 1994. - Vol. 89 (425). - P. 117- 121., T. Artificial Neural network versus multiple linear regression: predicting P/B ratios from empirical data [Текст] / T. Brey, A. Jarre-Teichmann, O. Borlich // Marine ecology progress series. - 1996. - Vol. 140. - P.251-256.Tien Pao, A comparison of neural network and multiple regression analysis in modeling capital structure [Текст] / Hsiao-Tien Pao // Expert Systems with Applications. - 2008. - № 35. - P.720-727., M. How Effective are Neural Networks at Forecasting and Prediction? A Review and Evaluation [Текст] / M. Adya, F. Collopy // Journal of Forecasting. ­­- 1998. - Vol. 17. - P.481-495.

Ростовцев, В. С. Системы искусственного интеллекта: курс лекций [Текст] / В. С. Ростовцев. - Киров: Изд-во ВятГУ, 2008. - 345 с.

Blonda P. RBF Networks Exploiting Supervised Data in the Adaptation of Hidden Neuron Parameters: Advances in Artificial Intelligence Lecture Notes in Computer Science [Текст] / P. Blonda, A. Baraldi, A. D’Addabbo, C. Tarantino, R. De Blasi // AI*IA. - 2001. - Vol. 2175.­ - P.51-56., J. Universal approximation using radial basis function networks [Текст] / J. Park, I.W. Sandberg // Neural Computation. - 1991. - Vol. 3. - P. 246-257., S.F.M. Gold price prediction using radial basis function neural network [Текст] / S.F.M. Hussein, M.B.N. Shah, M.R.A. Jalal, S.S. Abdullah // Australian Journal of Basic and Applied Sciences. - 2011. - Vol. 5(11). - P. 549-556.H. Fundamentals of Artificial Neural Networks [Текст] / Н. Mohamad // MIT Press. - 537 p., H. Application of Multiple Regression and Artificial Neural Network Techniques to predict Shear Wave Velocity from Wireline Log Data for Carbonate Reservoir, South-West Iran [Текст] / H. Eskandari, M.R. Rezaee, M. Mohammadnia // CSEG Recorder. - 2004. - Vol. 29, № 7. - P. 40-48.

Скупченко, А.В., Семейкин, В.Д., Стешенко, В.В. Повышение эффективности управления беспроводными сетями передачи данных на основе нейронных сетей [Текст] // Вестник Астраханского государственного технического университета. - 2011. - № 1. - С. 157-161.Forecaster ­- Neural Network Forecasting Software: официальный сайт компании Alyuda. - 2013 [Электронный ресурс]. - Режим доступа: #"701625.files/image062.gif">ё Приложение В

(обязательное)

Схема алгоритма работы мастера создания НЭС

Приложение Г

(обязательное)

Схема алгоритма загрузки файла Excel в проект

Приложение Д

(обязательное)

Исходный код программы

using System;System.Collections.Generic;System.Drawing;System.Linq;System.Windows.Forms;System.Reflection;Encog.Engine.Network.Activation;Encog.ML.Data.Basic;Encog.MathUtil.RBF;Encog.Neural.Data.Basic;Encog.Neural.Networks;Encog.Neural.Networks.Layers;Encog.Neural.Networks.Training;Encog.Neural.Networks.Training.Lma;Encog.Neural.Networks.Training.Propagation.Back;Encog.Neural.Networks.Training.Propagation.Manhattan;Encog.Neural.Networks.Training.Propagation.Quick;Encog.Neural.Networks.Training.Propagation.Resilient;Encog.Neural.Networks.Training.Propagation.SCG;Encog.Neural.NeuralData;Encog.Neural.RBF;Encog.Util.Arrayutil;Excel;

DiplPrj

{partial class fmMain : Form

{

DataSets LearnDataSet = new DataSets();DataSets TestDataSet = new DataSets();List<NeuralNet> NeuralNets = new List<NeuralNet>();NesProject NesProject = new NesProject();static fmMain FmMainptr;

fmMain()

{();(dataGridNesEnter, true);(false);= this;

}

static void SetDoubleBuffered(Control c, bool value) //двойная буферизация на датагрид

{pi = typeof(Control).GetProperty("DoubleBuffered",.SetProperty | BindingFlags.Instance |.NonPublic);(pi != null)

{.SetValue(c, value, null);

}

}void LoadDataForLearningToolStripMenuItem_Click(object sender, EventArgs e)

{(TrainingSetForm.isOpened[0] == false)

{(openFileDialog1.ShowDialog() == DialogResult.OK)

{trainingSetfm = new TrainingSetForm(0);.LoadDataFromExcelFile(openFileDialog1.FileName);.FillGridView(trainingSetfm.LearnDataGridView);.Visible = true;.Text = (LearnDataSet.data[0].Count() - Int32.Parse(TargetParamsTrainTextBox.Text.ToString())).ToString();.Text = (LearnDataSet.data.Count().ToString());1.SelectTab(1);

}

}

else

{

MessageBox.Show(@"Данные для обучения уже загружены

Для загрузки новых данных закройте окно с текущими данными", @"Внимание", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}

void ShowDataButton_Click(object sender, EventArgs e)

{(TrainingSetForm.isOpened[0] == false)

{trainingSetfm = new TrainingSetForm(0);.FillGridView(trainingSetfm.LearnDataGridView);.Visible = true;

}

{.Show(@"Окно с данными для обучения уже открыто", @"Внимание", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}

void LoadDataForTestToolStripMenuItem_Click(object sender, EventArgs e)

{(TrainingSetForm.isOpened[1] == false)

{(openFileDialog1.ShowDialog() == DialogResult.OK)

{trainingSetfm = new TrainingSetForm(1);.LoadDataFromExcelFile(openFileDialog1.FileName);.FillGridView(trainingSetfm.LearnDataGridView);.Visible = true;.Text = (TestDataSet.data[0].Count() - Int32.Parse(TargetParamsTestTextBox.Text.ToString())).ToString();.Text = (TestDataSet.data.Count().ToString());

tabControl1.SelectTab(1);

}

}

{.Show(@"Данные для тестирования уже загружены

Для загрузки новых данных закройте окно с текущими данными", @"Внимание", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}

void ShowTestDataButton_Click(object sender, EventArgs e)

{(TrainingSetForm.isOpened[1] == false)

{trainingSetfm = new TrainingSetForm(1);.FillGridView(trainingSetfm.LearnDataGridView);.Visible = true;

}

{.Show(@"Окно с данными для тестирования уже открыто", @"Внимание", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}

void ImportFromMatLabToolStripMenuItem_Click(object sender, EventArgs e)

{(openFileDialog_MatLabNet.ShowDialog() == DialogResult.OK)

{net = new MatlabNeuralNet(openFileDialog_MatLabNet.FileName);_NumLayers.Text = net.NumLayers.ToString(); _NumIn.Text = net.NumInputs.ToString(); _NumOut.Text = net.NumOutputs.ToString();_NetType.Text = @"Нейронная сеть из MatLab";.Add(net);.Networks.Add(new Network(openFileDialog_MatLabNet.FileName, net.Name, 0));_NNetList.SelectedIndex = comboBox_NNetList.Items.Add(NeuralNets.Last().Name);

MessageBox.Show(@"Нейронная сеть успешно импортирована.

Не изменяйте и не удаляйте выбранный .mat файл

до завершения работы приложения.",

@"Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);.SelectTab(2);

}

}

void comboBox_NNetList_SelectionChangeCommitted(object sender, EventArgs e)

{[] desc = NeuralNets[comboBox_NNetList.SelectedIndex].getDescription();_NumLayers.Text = desc[0].ToString();_NumIn.Text = desc[1].ToString();_NumOut.Text = desc[2].ToString();

} void button_Net_Nest_Click(object sender, EventArgs e)

{(comboBox_NNetList.SelectedIndex > -1)

{

{answDataSet = NeuralNets[comboBox_NNetList.SelectedIndex].simulateNetwork(TestDataSet);answersSetfm = new TrainingSetForm(2);.FillGridView(answersSetfm.LearnDataGridView);.Visible = true;

}(Exception)

{.Show(@"Сбой при запуске теста сети.

Проверьте, загружены ли корректные данные для тестирования.",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

{.Show(@"Выберите из списка сеть для тестирования.",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

}

void NESWizardToolStripMenuItem_Click(object sender, EventArgs e)

{wizardRb = new WizardRb();.ShowDialog();

}void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)

{(tabControl1.SelectedTab == tabPage3)

{(NeuralNets.Count > 0)

{.Columns.Clear();.Rows.Clear();numInputs = NeuralNets[comboBox_NNetList.SelectedIndex].NumInputs;(int i = 0; i < numInputs; i++)

{ .Columns.Add(@"p" + i.ToString(), @"Параметр " + (i + 1).ToString());

}

}

{.Show(

@"Не выбрана ни одна нейронная сеть для осуществления прогнозирования.

Вы можете создать новую НЭС в Мастере создания НЭС",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

}

}

}

void buttonGetAnswers_Click(object sender, EventArgs e)

{net = NeuralNets[comboBox1.SelectedIndex];

(dataGridNesEnter.Columns.Count < 1)

{.Show(@"НЭС не создана.

Сначала создайте НЭС",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);;

}inputDataSet = new DataSets();.data = new List<double[]>();(int i = 0; i < dataGridNesEnter.Rows.Count - 1; i++) //один всегда добавляется

{.data.Add(new double[net.NumInputs]);(int j = 0; j < net.NumInputs; j++)

{(dataGridNesEnter[j, i].Value != null)

{(dataGridNesEnter[j, i] is DataGridViewTextBoxCell)

{

{.data[i][j] = Double.Parse(dataGridNesEnter[j, i].Value.ToString());

}(Exception)

{.Show(@"Данные в ячейках должны быть числового типа!

Проверьте правильность ввода данных",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);

return;

}

}if (dataGridNesEnter[j, i] is DataGridViewCheckBoxCell)

{.data[i][j] = Convert.ToBoolean(dataGridNesEnter[j, i].Value) ? 1 : 0;

}if (dataGridNesEnter[j, i] is DataGridViewComboBoxCell)

{.data[i][j] = ((List<Tuple<string, int>>)dataGridNesEnter.Columns[j].Tag).Find

( a => a.Item1 == dataGridNesEnter[j, i].Value.ToString()).Item2;

}

}

{.Show(@"Все ячейки должны быть заполнены!

Заполните пустые ячейки",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);;

}

}

}answDataSet = net.simulateNetwork(inputDataSet);(answDataSet != null)

{(int i = 0; i < dataGridNesEnter.Rows.Count - 1; i++)

{(int j = dataGridNesEnter.Columns.Count - net.NumOutputs, output = 0;< dataGridNesEnter.Columns.Count;++, output++)

{[j, i].Value = answDataSet.data[i][output];

}

}

}

}

void SaveNESToolStripMenuItem1_Click(object sender, EventArgs e)

{(saveFileDialogProject.ShowDialog() == DialogResult.OK)

{.SerializeProjectToXML(NesProject,saveFileDialogProject.FileName);

}

}

void loadNESPrjToolStripMenuItem_Click(object sender, EventArgs e)

{(openFileDialogProject.ShowDialog() == DialogResult.OK)

{= FileReadWrite.DeserializeFromXML(openFileDialogProject.FileName);

}

}void выходToolStripMenuItem2_Click(object sender, EventArgs e)

{();

}void SimpleNESModeToolStripMenuItem1_Click(object sender, EventArgs e)

{(!SimpleNESModeToolStripMenuItem1.Checked)

{.Checked = true;.Checked = false;

}

{.Checked = false;(false);

}

}void AdvancedModeToolStripMenuItem_Click(object sender, EventArgs e)

{(!AdvancedModeToolStripMenuItem.Checked)

{.Checked = false;.Checked = true;

}

{.Checked = false;(true);

}

} void setAdvancedMode(bool advanced)

{(!advanced)

{.TabPages.Remove(tabPage1);.TabPages.Remove(tabPage2);.Items.Remove(данныеToolStripMenuItem);.Items.Remove(нейроннаяСетьToolStripMenuItem);

}

{.TabPages.Add(tabPage1);.TabPages.Add(tabPage2);.Items.Insert(MainMenu.Items.Count-1, данныеToolStripMenuItem);.Items.Insert(MainMenu.Items.Count - 1, нейроннаяСетьToolStripMenuItem);

}

}void FillNesEnvironment(List<Column> columnsIn, List<Column> columnsOut,net)

{.Columns.Clear();.Rows.Clear();(int i = 0; i < columnsIn.Count; i++) //заполним колонки с параметрами

{(columnsIn[i].Type)

{0:.Columns.Add(@"p" + i.ToString(), columnsIn[i].Header);;1:

{.Columns.Add(new DataGridViewCheckBoxColumn());.Columns[i].Name = @"p" + i.ToString();.Columns[i].HeaderText = columnsIn[i].Header;

};2:

{.Columns.Add(new DataGridViewComboBoxColumn());.Columns[i].Name = @"p" + i.ToString();.Columns[i].HeaderText = columnsIn[i].Header;

(Tuple<string, int> tupl in columnsIn[i].TypeComboList)

{

((DataGridViewComboBoxCell) (dataGridNesEnter.Columns[i].CellTemplate))..Add(tupl.Item1);

}.Columns[i].Tag = columnsIn[i].TypeComboList;

};

}

}(Column column in columnsOut)

{i = dataGridNesEnter.Columns.Add(column.Header, column.Header);.Columns[i].Tag = column;.Columns[i].ReadOnly = true;.Columns[i].DefaultCellStyle.BackColor = Color.LightGreen;

}.Add(net);.Items.Add(net.Name);.SelectedIndex = comboBox1.Items.Count - 1;.Text = net.NumOutputs.ToString();.Text = net.Type == typeof(MatlabNeuralNet)? "Matlab" :

"Пользовательская";.Text = net.NumLayers.ToString();

}

}

}

Приложение E

(обязательное)

Авторская справка

Я, Неведицин Никита Алексеевич, автор дипломной работы, сообщаю, что мне известно о персональной ответственности автора за разглашение сведений, подлежащих защите законами РФ о защите объектов интеллектуальной собственности.

Одновременно сообщаю, что

. При подготовке к защите (опубликованию) дипломной работы не использованы источники (документы, отчеты, диссертации, литература и т.п.), имеющие гриф секретности или “ Для служебного пользования “ ВятГУ или другой организации.

. Данная работа не связана с незавершенными исследованиями или уже с завершенными, но еще официально не разрешенными к опубликованию ВятГУ или другими организациями.

. Данная работа не содержит коммерческую информацию, способную нанести ущерб интеллектуальной собственности ВятГУ или другой организации.

. Данная работа не является результатом НИР, выполняемой по договору с организацией.

. В предлагаемом к опубликованию тексте нет данных по незащищенным объектам интеллектуальной собственности других авторов.

. Согласен на использование результатов своей работы безвозмездно в ВятГУ для учебного процесса.

. Использование моей дипломной работы в научных исследованиях оформляется в соответствии с законодательством РФ о защите интеллектуальной собственности.

“ ” июня 2013 г. Подпись автора ________________

Сведения по авторской справке подтверждаю

“___ “ ___________ 2013 г. _____________________________

Зав. Кафедрой

Похожие работы на - Разработка нейросетевой программы прогнозирования стоимостных показателей объектов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!