Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



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

Рис 4.2 – Главное окно

Пользователь должен подготовить персептрон, нажав кнопку «Создать A и L» или «Готовые A и L» и загрузить базу изображений, с которыми будет в дальнейшем работать генетический алгоритм и персептрон. Результат выполнения приведен на рисунке 4.3.

 

 

Рис 4.3 – Изображения загружены в главное окно

 

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

 

 

Рис 4.4 – Результат автоматического выполнения

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

 

 

Рис 4.5 – Результат распознавания

 

 

ЗАКЛЮЧЕНИЕ

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

Было разработано приложение под OS Windows с помощью среды разработки Visual Studio 2015 на объектно-ориентированном языке программирования C#. Проанализировав полученные результаты, можно сделать вывод о том, что данная программа позволяет оптимизировать весовые коэффициенты персептрона.

Тестирование приложения позволило сделать следующие выводы:

1. Алгоритм обучения персептрона без учета правильности ответа дает 100% распознавание изображений.

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

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

 

 

ЛИТЕРАТУРА

- Конспект лекций по дисциплине «Оптимизация проектных решений». Ковалёва И.Л., 2016 г.

- Конспект лекций по дисциплине «Методы распознавания образов». Ковалёва И.Л., 2015 г.

-Методические указания к лабораторным работам «ПЕРСЕПТРОННЫЕ НЕЙРОСЕТИ» Ковалёва И.Л., 2009 г.

- Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы, 2006 г.

 

Алгоритмы обработки
5 классов изображений
Оптимизация весовых коэффициентов персептрона
Параметрические ограничения
Windows приложение
Приложение 1. Схема IDEF двух уровней и UML диаграмма классов.

       
 
   
Оптимальное решение
 

 


Рис. 1 – Схема IDEF (первый уровень)

 


Рис. 2 – Схема IDEF (второй уровень)

Рис. 3 — UML диаграмма классов

 

Приложение 2. Исходный код класса Genetic

public class Genetic

{

 

private List< Person> _naturesList = new List< Person> ();

private readonly List< Person> _naturesList2Gth = new List< Person> ();

private readonly List< Person> _naturesListCrossed = new List< Person> ();

private readonly List< Person> _naturesListMutated = new List< Person> ();

 

private int LeftLimit;

private int RightLimit;

private int CountNatures1Gth;

private int CountNaturesForSelection;

private double CoeffMutation;

private int _numberOfGeneration = 1;

private Random _rnd = new Random();

private DataGridView _currentData;

 

public Genetic(string count, string Lx1, string Rx1, string naturesForSelect, string coeffMutation)

{

int.TryParse(count, out CountNatures1Gth);

int.TryParse(Lx1, out LeftLimit);

int.TryParse(Rx1, out RightLimit);

int.TryParse(naturesForSelect, out CountNaturesForSelection);

CoeffMutation = double.Parse(coeffMutation, System.Globalization.CultureInfo.InvariantCulture);

}

 

public void Dispose()

{

_naturesList.Clear();

_naturesList2Gth.Clear();

_naturesListCrossed.Clear();

_naturesListMutated.Clear();

_currentData.Rows.Clear();

CountNatures1Gth = 0;

Person.Count = 0;

}

public void GetChromosoma(DataGridView data, DataGridView table3, int row) {…}

public void Create1Gth(DataGridView data, Bitmap[] bmp, int[][] A) {…}

public int[][] GetRandomNumber(int minimum, int maximum, Random rnd) {…}

public void DisplayNaturesDefault() {…}

public void Selection() {…}

private void Crossing(Bitmap[] bmp, int[][] A) {…}

public void ManyPointedCrossing(Bitmap[] bmp, int[][] A) {…}

private void CrossingTwoNaturesDouble(Person rhsNature, Person lhsNature, Bitmap[] bmp, int[][] A, out Person changedNature1, out Person changedNature2) {…}

public void DoMutation(Bitmap[] bmp, int[][] A) {…}

}

Приложение 3. Исходный код класса Person

public class Person

{

public static int Count { get; set; }

 

public int Number { get; set; }

public int[][] Lambda { get; set; }

public string Сhromosome { get; set; }

public double ResultOfFunc { get; set; }

public double RouletteValue { get; set; }

 

public Person(Bitmap[] bmp, int[][] A, string chr)

{

Lambda = CreateLambda(chr);

ResultOfFunc = GetResultOfFunc(bmp, A);

Сhromosome = chr;

Number = Count;

Count++;

}

 

public Person(Bitmap[] bmp, int[][] A, int[][] L)

{

Lambda = L;

ResultOfFunc = GetResultOfFunc(bmp, A);

Сhromosome = CreateСhromosome(L);

Number = Count;

Count++;

}

 

private int[][] CreateLambda(string chr)

{

string[] temp = chr.Split(' ');

int[][] L = new int[5][];

int k = 0;

 

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

{

L[i] = new int[50];

for (int j = 0; j < 50; j++)

{

L[i][j] = Convert.ToInt32(temp[k]);

k++;

}

}

 

return L;

}

 

private string CreateСhromosome(int[][] L)

{

string chromosoma = " ";

 

foreach (var item in L)

{

foreach (var it in item)

{

chromosoma += it.ToString() + " ";

}

}

return chromosoma;

}

 

private double GetResultOfFunc(Bitmap[] bmp, int[][] A)

{

return FitnessFunction.GetResult(bmp, A, Lambda);

}

}

Приложение 4. Исходный код класса FitnessFunction

public class FitnessFunction

{

private const int LA = 50;

private static Random rnd = new Random();

 

public static double GetResult(Bitmap[] bmp, int[][] Ael, int[][] Lel)

{

int[] A = YesNo(bmp[rnd.Next(0, 9)], Ael, Lel);

int[] B = YesNo(bmp[rnd.Next(10, 19)], Ael, Lel);

int[] C = YesNo(bmp[rnd.Next(20, 29)], Ael, Lel);

int[] D = YesNo(bmp[rnd.Next(30, 39)], Ael, Lel);

int[] E = YesNo(bmp[rnd.Next(40, 49)], Ael, Lel);

 

int FA = (A[0] - A[1]) + (A[0] - A[2]) + (A[0] - A[3]) + (A[0] - A[4]);

int FB = (B[1] - B[0]) + (B[1] - B[2]) + (B[1] - B[3]) + (B[1] - B[4]);

int FC = (C[2] - C[0]) + (C[2] - C[1]) + (C[2] - C[3]) + (C[2] - C[4]);

int FD = (D[3] - D[0]) + (D[3] - D[1]) + (D[3] - D[2]) + (D[3] - D[4]);

int FE = (E[4] - E[0]) + (E[4] - E[1]) + (E[4] - E[2]) + (E[4] - E[3]);

 

return FA + FB + FC + FD + FE;

}

 

private static int[] YesNo(Bitmap bmp, int[][] A, int[][] L)

{

int p = 0;

int[] temp = new int[400];

for (byte i = 0; i < bmp.Height; i++)

{

for (byte j = 0; j < bmp.Width; j++)

{

if (bmp.GetPixel(i, j).R == 0)

{

temp[j + p] = 1;

}

else

{

temp[j + p] = 0;

}

}

p += 20;

}

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

{

int summ = 0;

for (int j = 0; j < 400; j++)

summ += temp[j] * A[j][i];

A[405][i] = summ;

if (summ > = 1)

A[406][i] = 1;

else A[406][i] = 0;

}

int[] summs = new int[5];

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

summs[0] += L[0][i] * A[406][i];

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

summs[1] += L[1][i] * A[406][i];

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

summs[2] += L[2][i] * A[406][i];

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

summs[3] += L[3][i] * A[406][i];

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

summs[4] += L[4][i] * A[406][i];

return summs;

}

}

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-14; Просмотров: 464; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.059 с.)
Главная | Случайная страница | Обратная связь