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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 24.06.2013
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

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

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

Цс = Зсп + Пр,(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коп - время одного копирования программного обеспечения;

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)

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

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

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

В расчете на реализацию 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 % от Пр);

Vр - прочие расходы (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

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

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

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

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

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

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

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

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

,(5.25)

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

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

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

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

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

Тоб = dsSДрНмКис, (5.26)

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

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

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

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

Кис - средний коэффициент использования компьютера в течение года (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.

Brey, 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.

Hsiao-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.

Adya, 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.

Park, J. Universal approximation using radial basis function networks [Текст] / J. Park, I.W. Sandberg // Neural Computation. - 1991. - Vol. 3. - P. 246-257.

Hussein, 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.

Mohamad H. Fundamentals of Artificial Neural Networks [Текст] / Н. Mohamad // MIT Press. - 537 p.

Eskandari, 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.

Alyuda Forecaster -- Neural Network Forecasting Software: официальный сайт компании Alyuda. - 2013 [Электронный ресурс]. - Режим доступа: http://www.alyuda.com/forecasting-software.htm (дата обращения: 25.02.2013).

The NeuralWare Team: официальный сайт компании NeuralWare. - 2013 [Электронный ресурс]. - Режим доступа: http://www.neuralware.com/products.jsp (дата обращения: 25.02.2013).

NeuroDimension NeuroSolutions Software: официальный сайт компании NeuroDimension. - 2013 [Электронный ресурс]. - Режим доступа: http://www.neurosolutions.com/ (дата обращения: 25.02.2013).

Интернет-магазин программного обеспечения SoftLine: официальный сайт компании ЗАО «СофтЛайн Трейд». - 2013 [Электронный ресурс]. - Режим доступа: http://store.softline.ru/ (дата обращения: 25.02.2013).

Статистический портал StatSoft: официальный сайт компании StatSoft Russia. - 2013 [Электронный ресурс]. - Режим доступа: http://www.statistica.ru/ (дата обращения: 25.02.2013).

Системный софт - лицензионное программное обеспечение: официальный сайт компании «СИССОФТ». - 2013 [Электронный ресурс]. - Режим доступа: http://www.системныйсофт.рф (дата обращения: 25.02.2013).

University of Tuebingen: Cognitive systems: официальный сайт Тюбингенского университета, Германия. - 2013 [Электронный ресурс]. - Режим доступа: http://www.ra.cs.uni-tuebingen.de/SNNS/ (дата обращения: 25.02.2013).

Медведев, В.С., Потемкин, В.Г. Нейронные сети Matlab 6 [Текст]/ под общ. ред. к.т.н. В. Г. Потемкина. - М.:Диалог-МИФИ, 2002. - 496 с.

Уоссерман, Ф. Нейрокомпьютерная техника - Теория и практика [Текст]/ Перевод с англ. Ю. А. Зуев, В. А. Точенов. - М.:Мир, 1992. - 184 с.

Википедия - свободная энциклопедия. - 2013 [Электронный ресурс]. - Режим доступа: http://www.wikipedia.org (дата обращения: 15.03.2013).

Chen, S. Orthogonal Least Squares learning algorithm for radial basis function networks [Текст] /S. Chen, C.F.N. Cowan, P.M. Grant // IEEE Transactions on Neural Networks. - 1991. - vol. 2, № 2. - P. 302-209.

Махотило, К.В. Разработка методик эволюционного синтеза нейросетевых компонентов систем управления [Текст] // диссертация на соискание ученой стемени кандидата технических наук. - Харьков.: ХГПУ, 1998. - 179 с.

Некипелов, Н. Введение в РБФ-сети. - 2013 [Электронный ресурс]. - Режим доступа: http://www.basegroup.ru/library/analysis/neural/rbf/ (дата обращения: 18.03.2013).

ГОСТ 28195-89 Оценка качества программных средств [Текст]. - Введ. с 01.07.90. - Москва: Изд-во стандартов, 1989. - 30 с..

UCI Machine Learning Repository: Housing Data Set [Электронный ресурс]. - Режим доступа: http://archive.ics.uci.edu/ml/datasets/Housing (дата обращения: 10.03.2013).

Приложение А

(обязательное)

Листинг команд среды Matlab для подбора оптимальной архитектуры ИНС

-----------

>> b = regress (targHousingTo450, housingTo450)

>> rTargsTo450 = housingTo450 * b

>> mse (targHousingTo450 - rTargsTo450 )

>> rTargsFrom450 = housingFrom450 * b

>> mse (targHousingFrom450, rTargsFrom450 )

-----------

>> ffnet1010 = newff (ihousingTo450, itargHousingTo450, [10,10])

>> ffnet1010 = train(ffnet1010, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet1010,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet128 = newff (ihousingTo450, itargHousingTo450, [12,8])

>> ffnet128 = train(ffnet128, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet128,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet77= newff (ihousingTo450, itargHousingTo450, [7,7])

>> ffnet77 = train(ffnet77, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet77,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet30 = newff (ihousingTo450, itargHousingTo450, [30])

>> ffnet30 = train(ffnet30, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet30,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet20 = newff (ihousingTo450, itargHousingTo450, [26])

>> ffnet20 = train(ffnet20, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet20,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet19 = newff (ihousingTo450, itargHousingTo450, [25])

>> ffnet19 = train(ffnet19, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet19,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet17 = newff (ihousingTo450, itargHousingTo450, [23])

>> ffnet17 = train(ffnet17, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet17,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet15 = newff (ihousingTo450, itargHousingTo450, [21])

>> ffnet15 = train(ffnet15, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet15,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet21 = newff (ihousingTo450, itargHousingTo450, [27])

>> ffnet21 = train(ffnet21, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet21,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet22 = newff (ihousingTo450, itargHousingTo450, [28])

>> ffnet22 = train(ffnet22, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet22,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet23 = newff (ihousingTo450, itargHousingTo450, [23])

>> ffnet23 = train(ffnet23, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet23,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet24 = newff (ihousingTo450, itargHousingTo450, [24])

>> ffnet24 = train(ffnet24, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet24,ihousingFrom450), itargHousingFrom450')

>> ffnet20 = newff (ihousingTo450, itargHousingTo450, [26])

>> ffnet20p1 = ffnet20

>> ffnet20p1.trainParam.max_fail = 10

>> ffnet20p1 = train(ffnet20p1, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet20p1,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet20p2 = ffnet20

>> ffnet20p2.trainParam.max_fail = 8

>> ffnet20p2 = train(ffnet20p2, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet20p2,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet20p3 = ffnet20

>> ffnet20p3.trainParam.max_fail = 11

>> ffnet20p3 = train(ffnet20p3, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet20p3,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet20p4 = ffnet20

>> ffnet20p4.trainParam.max_fail = 12

>> ffnet20p4 = train(ffnet20p4, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet20p4,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet20p5 = ffnet20

>> ffnet20p5.trainParam.max_fail = 15

>> ffnet20p5 = train(ffnet20p5, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet20p5,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>> ffnet20p6 = ffnet20

>> ffnet20p6.trainParam.max_fail = 9

>> ffnet20p6 = train(ffnet20p6, ihousingTo450, itargHousingTo450)

>> mse(sim(ffnet20p6,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet1p0 = newrbe(ihousingTo450, itargHousingTo450, 1.0)

mse(sim(rbenet1p0,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet0p1 = newrbe(ihousingTo450, itargHousingTo450, 0.1)

mse(sim(rbenet0p1,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet0p5 = newrbe(ihousingTo450, itargHousingTo450, 0.5)

mse(sim(rbenet0p5,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet0p75 = newrbe(ihousingTo450, itargHousingTo450, 0.75)

mse(sim(rbenet0p75,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet1p1 = newrbe(ihousingTo450, itargHousingTo450, 1.1)

mse(sim(rbenet1p1,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet1p25 = newrbe(ihousingTo450, itargHousingTo450, 125)

mse(sim(rbenet1p25,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet1p6 = newrbe(ihousingTo450, itargHousingTo450, 1.6)

mse(sim(rbenet1p6,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet20p0 = newrbe(ihousingTo450, itargHousingTo450, 20.0)

mse(sim(rbenet20p0,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>rbenet2p0 = newrbe(ihousingTo450, itargHousingTo450, 2.0)

mse(sim(rbenet2p0,ihousingFrom450), itargHousingFrom450')

--------------------------------------

>>grnn1 = newgrnn(ihousingTo450, itargHousingTo4500)

mse(sim(grnn1,ihousingFrom450), itargHousingFrom450')

Приложение Б

(обязательное)

Схема алгоритма загрузки нейронной сети в проект

ё Приложение В

(обязательное)

Схема алгоритма работы мастера создания НЭС

Приложение Г

(обязательное)

Схема алгоритма загрузки файла Excel в проект

Приложение Д

(обязательное)

Исходный код программы

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Linq;

using System.Windows.Forms;

using System.Reflection;

using Encog.Engine.Network.Activation;

using Encog.ML.Data.Basic;

using Encog.MathUtil.RBF;

using Encog.Neural.Data.Basic;

using Encog.Neural.Networks;

using Encog.Neural.Networks.Layers;

using Encog.Neural.Networks.Training;

using Encog.Neural.Networks.Training.Lma;

using Encog.Neural.Networks.Training.Propagation.Back;

using Encog.Neural.Networks.Training.Propagation.Manhattan;

using Encog.Neural.Networks.Training.Propagation.Quick;

using Encog.Neural.Networks.Training.Propagation.Resilient;

using Encog.Neural.Networks.Training.Propagation.SCG;

using Encog.Neural.NeuralData;

using Encog.Neural.RBF;

using Encog.Util.Arrayutil;

using Excel;

namespace DiplPrj

{

public partial class fmMain : Form

{

public DataSets LearnDataSet = new DataSets();

public DataSets TestDataSet = new DataSets();

public List<NeuralNet> NeuralNets = new List<NeuralNet>();

public NesProject NesProject = new NesProject();

public static fmMain FmMainptr;

public fmMain()

{

InitializeComponent();

SetDoubleBuffered(dataGridNesEnter, true);

setAdvancedMode(false);

FmMainptr = this;

}

public static void SetDoubleBuffered(Control c, bool value) //двойная буферизация на датагрид

{

PropertyInfo pi = typeof(Control).GetProperty("DoubleBuffered",

BindingFlags.SetProperty | BindingFlags.Instance |

BindingFlags.NonPublic);

if (pi != null)

{

pi.SetValue(c, value, null);

}

}

private void LoadDataForLearningToolStripMenuItem_Click(object sender, EventArgs e)

{

if (TrainingSetForm.isOpened[0] == false)

{

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

var trainingSetfm = new TrainingSetForm(0);

LearnDataSet.LoadDataFromExcelFile(openFileDialog1.FileName);

LearnDataSet.FillGridView(trainingSetfm.LearnDataGridView);

trainingSetfm.Visible = true;

InParamsTrainTextBox.Text = (LearnDataSet.data[0].Count() - Int32.Parse(TargetParamsTrainTextBox.Text.ToString())).ToString();

InputVectorsTrainTextBox.Text = (LearnDataSet.data.Count().ToString());

tabControl1.SelectTab(1);

}

}

else

{

MessageBox.Show(@"Данные для обучения уже загружены

Для загрузки новых данных закройте окно с текущими данными", @"Внимание", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}

private void ShowDataButton_Click(object sender, EventArgs e)

{

if (TrainingSetForm.isOpened[0] == false)

{

var trainingSetfm = new TrainingSetForm(0);

LearnDataSet.FillGridView(trainingSetfm.LearnDataGridView);

trainingSetfm.Visible = true;

}

else

{

MessageBox.Show(@"Окно с данными для обучения уже открыто", @"Внимание", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}

private void LoadDataForTestToolStripMenuItem_Click(object sender, EventArgs e)

{

if (TrainingSetForm.isOpened[1] == false)

{

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

var trainingSetfm = new TrainingSetForm(1);

TestDataSet.LoadDataFromExcelFile(openFileDialog1.FileName);

TestDataSet.FillGridView(trainingSetfm.LearnDataGridView);

trainingSetfm.Visible = true;

InParamsTestTextBox.Text = (TestDataSet.data[0].Count() - Int32.Parse(TargetParamsTestTextBox.Text.ToString())).ToString();

InputVectorsTestTextBox.Text = (TestDataSet.data.Count().ToString());

tabControl1.SelectTab(1);

}

}

else

{

MessageBox.Show(@"Данные для тестирования уже загружены

Для загрузки новых данных закройте окно с текущими данными", @"Внимание", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}

private void ShowTestDataButton_Click(object sender, EventArgs e)

{

if (TrainingSetForm.isOpened[1] == false)

{

var trainingSetfm = new TrainingSetForm(1);

TestDataSet.FillGridView(trainingSetfm.LearnDataGridView);

trainingSetfm.Visible = true;

}

else

{

MessageBox.Show(@"Окно с данными для тестирования уже открыто", @"Внимание", MessageBoxButtons.OK,

MessageBoxIcon.Information);

}

}

private void ImportFromMatLabToolStripMenuItem_Click(object sender, EventArgs e)

{

if (openFileDialog_MatLabNet.ShowDialog() == DialogResult.OK)

{

var net = new MatlabNeuralNet(openFileDialog_MatLabNet.FileName);

textBox_NumLayers.Text = net.NumLayers.ToString();

textBox_NumIn.Text = net.NumInputs.ToString();

textBox_NumOut.Text = net.NumOutputs.ToString();

textBox_NetType.Text = @"Нейронная сеть из MatLab";

NeuralNets.Add(net);

NesProject.Networks.Add(new Network(openFileDialog_MatLabNet.FileName, net.Name, 0));

comboBox_NNetList.SelectedIndex = comboBox_NNetList.Items.Add(NeuralNets.Last().Name);

MessageBox.Show(@"Нейронная сеть успешно импортирована.

Не изменяйте и не удаляйте выбранный .mat файл

до завершения работы приложения.",

@"Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);

tabControl1.SelectTab(2);

}

}

private void comboBox_NNetList_SelectionChangeCommitted(object sender, EventArgs e)

{

int[] desc = NeuralNets[comboBox_NNetList.SelectedIndex].getDescription();

textBox_NumLayers.Text = desc[0].ToString();

textBox_NumIn.Text = desc[1].ToString();

textBox_NumOut.Text = desc[2].ToString();

}

private void button_Net_Nest_Click(object sender, EventArgs e)

{

if (comboBox_NNetList.SelectedIndex > -1)

{

try

{

DataSets answDataSet = NeuralNets[comboBox_NNetList.SelectedIndex].simulateNetwork(TestDataSet);

var answersSetfm = new TrainingSetForm(2);

answDataSet.FillGridView(answersSetfm.LearnDataGridView);

answersSetfm.Visible = true;

}

catch(Exception)

{

MessageBox.Show(@"Сбой при запуске теста сети.

Проверьте, загружены ли корректные данные для тестирования.",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

}

else

{

MessageBox.Show(@"Выберите из списка сеть для тестирования.",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

}

private void NESWizardToolStripMenuItem_Click(object sender, EventArgs e)

{

WizardRb wizardRb = new WizardRb();

wizardRb.ShowDialog();

}

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)

{

if (tabControl1.SelectedTab == tabPage3)

{

if (NeuralNets.Count > 0)

{

dataGridNesEnter.Columns.Clear();

dataGridNesEnter.Rows.Clear();

int numInputs = NeuralNets[comboBox_NNetList.SelectedIndex].NumInputs;

for (int i = 0; i < numInputs; i++)

{

dataGridNesEnter.Columns.Add(@"p" + i.ToString(), @"Параметр " + (i + 1).ToString());

}

}

else

{

MessageBox.Show(

@"Не выбрана ни одна нейронная сеть для осуществления прогнозирования.

Вы можете создать новую НЭС в Мастере создания НЭС",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

}

}

}

private void buttonGetAnswers_Click(object sender, EventArgs e)

{

var net = NeuralNets[comboBox1.SelectedIndex];

if (dataGridNesEnter.Columns.Count < 1)

{

MessageBox.Show(@"НЭС не создана.

Сначала создайте НЭС",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

return;

}

DataSets inputDataSet = new DataSets();

inputDataSet.data = new List<double[]>();

for (int i = 0; i < dataGridNesEnter.Rows.Count - 1; i++) //один всегда добавляется

{

inputDataSet.data.Add(new double[net.NumInputs]);

for (int j = 0; j < net.NumInputs; j++)

{

if (dataGridNesEnter[j, i].Value != null)

{

if (dataGridNesEnter[j, i] is DataGridViewTextBoxCell)

{

try

{

inputDataSet.data[i][j] = Double.Parse(dataGridNesEnter[j, i].Value.ToString());

}

catch (Exception)

{

MessageBox.Show(@"Данные в ячейках должны быть числового типа!

Проверьте правильность ввода данных",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);

return;

}

}

else if (dataGridNesEnter[j, i] is DataGridViewCheckBoxCell)

{

inputDataSet.data[i][j] = Convert.ToBoolean(dataGridNesEnter[j, i].Value) ? 1 : 0;

}

else if (dataGridNesEnter[j, i] is DataGridViewComboBoxCell)

{

inputDataSet.data[i][j] = ((List<Tuple<string, int>>)dataGridNesEnter.Columns[j].Tag).Find

( a => a.Item1 == dataGridNesEnter[j, i].Value.ToString()).Item2;

}

}

else

{

MessageBox.Show(@"Все ячейки должны быть заполнены!

Заполните пустые ячейки",

@"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);

return;

}

}

}

DataSets answDataSet = net.simulateNetwork(inputDataSet);

if (answDataSet != null)

{

for (int i = 0; i < dataGridNesEnter.Rows.Count - 1; i++)

{

for (int j = dataGridNesEnter.Columns.Count - net.NumOutputs, output = 0;

j < dataGridNesEnter.Columns.Count;

j++, output++)

{

dataGridNesEnter[j, i].Value = answDataSet.data[i][output];

}

}

}

}

private void SaveNESToolStripMenuItem1_Click(object sender, EventArgs e)

{

if (saveFileDialogProject.ShowDialog() == DialogResult.OK)

{

FileReadWrite.SerializeProjectToXML(NesProject,saveFileDialogProject.FileName);

}

}

private void loadNESPrjToolStripMenuItem_Click(object sender, EventArgs e)

{

if (openFileDialogProject.ShowDialog() == DialogResult.OK)

{

NesProject = FileReadWrite.DeserializeFromXML(openFileDialogProject.FileName);

}

}

private void выходToolStripMenuItem2_Click(object sender, EventArgs e)

{

Close();

}

private void SimpleNESModeToolStripMenuItem1_Click(object sender, EventArgs e)

{

if (!SimpleNESModeToolStripMenuItem1.Checked)

{

SimpleNESModeToolStripMenuItem1.Checked = true;

AdvancedModeToolStripMenuItem.Checked = false;

}

else

{

AdvancedModeToolStripMenuItem.Checked = false;

setAdvancedMode(false);

}

}

private void AdvancedModeToolStripMenuItem_Click(object sender, EventArgs e)

{

if (!AdvancedModeToolStripMenuItem.Checked)

{

SimpleNESModeToolStripMenuItem1.Checked = false;

AdvancedModeToolStripMenuItem.Checked = true;

}

else

{

SimpleNESModeToolStripMenuItem1.Checked = false;

setAdvancedMode(true);

}

}

private void setAdvancedMode(bool advanced)

{

if (!advanced)

{

tabControl1.TabPages.Remove(tabPage1);

tabControl1.TabPages.Remove(tabPage2);

MainMenu.Items.Remove(данныеToolStripMenuItem);

MainMenu.Items.Remove(нейроннаяСетьToolStripMenuItem);

}

else

{

tabControl1.TabPages.Add(tabPage1);

tabControl1.TabPages.Add(tabPage2);

MainMenu.Items.Insert(MainMenu.Items.Count-1, данныеToolStripMenuItem);

MainMenu.Items.Insert(MainMenu.Items.Count - 1, нейроннаяСетьToolStripMenuItem);

}

}

public void FillNesEnvironment(List<Column> columnsIn, List<Column> columnsOut,

NeuralNet net)

{

dataGridNesEnter.Columns.Clear();

dataGridNesEnter.Rows.Clear();

for (int i = 0; i < columnsIn.Count; i++) //заполним колонки с параметрами

{

switch (columnsIn[i].Type)

{

case 0:

dataGridNesEnter.Columns.Add(@"p" + i.ToString(), columnsIn[i].Header);

break;

case 1:

{

dataGridNesEnter.Columns.Add(new DataGridViewCheckBoxColumn());

dataGridNesEnter.Columns[i].Name = @"p" + i.ToString();

dataGridNesEnter.Columns[i].HeaderText = columnsIn[i].Header;

}

break;

case 2:

{

dataGridNesEnter.Columns.Add(new DataGridViewComboBoxColumn());

dataGridNesEnter.Columns[i].Name = @"p" + i.ToString();

dataGridNesEnter.Columns[i].HeaderText = columnsIn[i].Header;

foreach (Tuple<string, int> tupl in columnsIn[i].TypeComboList)

{

((DataGridViewComboBoxCell) (dataGridNesEnter.Columns[i].CellTemplate)).

Items.Add(tupl.Item1);

}

dataGridNesEnter.Columns[i].Tag = columnsIn[i].TypeComboList;

}

break;

}

}

foreach (Column column in columnsOut)

{

int i = dataGridNesEnter.Columns.Add(column.Header, column.Header);

dataGridNesEnter.Columns[i].Tag = column;

dataGridNesEnter.Columns[i].ReadOnly = true;

dataGridNesEnter.Columns[i].DefaultCellStyle.BackColor = Color.LightGreen;

}

NeuralNets.Add(net);

comboBox1.Items.Add(net.Name);

comboBox1.SelectedIndex = comboBox1.Items.Count - 1;

textBox1.Text = net.NumOutputs.ToString();

textBox2.Text = net.Type == typeof(MatlabNeuralNet)? "Matlab" :

"Пользовательская";

textBox3.Text = net.NumLayers.ToString();

}

}

}

Приложение E

(обязательное)

Авторская справка

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

Одновременно сообщаю, что

1. При подготовке к защите (опубликованию) дипломной работы не использованы источники (документы, отчеты, диссертации, литература и т.п.), имеющие гриф секретности или “ Для служебного пользования “ ВятГУ или другой организации.

2. Данная работа не связана с незавершенными исследованиями или уже с завершенными, но еще официально не разрешенными к опубликованию ВятГУ или другими организациями.

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

4. Данная работа не является результатом НИР, выполняемой по договору с организацией.

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

4. Согласен на использование результатов своей работы безвозмездно в ВятГУ для учебного процесса.

7. Использование моей дипломной работы в научных исследованиях оформляется в соответствии с законодательством РФ о защите интеллектуальной собственности.

“ ” июня 2013 г. Подпись автора ________________

Сведения по авторской справке подтверждаю

“___ “ ___________ 2013 г. _____________________________

Зав. Кафедрой

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.