Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KR_IIS.doc
Скачиваний:
12
Добавлен:
11.03.2016
Размер:
354.3 Кб
Скачать

4 Описание интерфейса

Основное окно программы изображено на рисунке 3.

Рисунок 3 – Главное окно программы

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

Рисунок 4 – Работа генетического алгоритма

Рисунок - 5 Работа генетического алгоритма окончание

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1) Microsoft Developer Network(MSDN) [Электронный ресурс]. – Режим доступа: msdn.microsoft.com, свободный, русский;

2) Алешко Р.А., Бачурин И.В. Методические указания по выполнению лабораторных работ и курсового проекта по дисциплине «Интеллектуальные информационные системы». [Электронный ресурс]. – Режим доступа: serv\\ForAll, свободный, русский;

3) Стариков А. Генетические алгоритмы – математический аппарат. [Электронный ресурс].- Режим доступа: www.basegroup.ru, свободный, яз: рус.;

ПРИЛОЖЕНИЕ А

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

Листинг программы

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication2

{

public partial class Form1 : Form

{

string[] hromosoms = new string[9];

int[] prisposoblennosts = new int[9];

double[] veroyatnosts = new double[9];

double[] ruletkas = new double[9];

int[] rozigrish = new int[9];

string[] parents = new string[9];

string[] child = new string[9];

public Form1()

{

InitializeComponent();

}

private void btnDo_Click(object sender, EventArgs e)

{

hromosoms[1] = textBox1.Text;

hromosoms[2] = textBox2.Text;

hromosoms[3] = textBox3.Text;

hromosoms[4] = textBox4.Text;

hromosoms[5] = textBox5.Text;

hromosoms[6] = textBox6.Text;

hromosoms[7] = textBox7.Text;

hromosoms[8] = textBox8.Text;

for (int i = 1; i < prisposoblennosts.Length; i++)

{

prisposoblennosts[i] = GetPrisposoblennost(hromosoms[i]);

}

for (int i = 1; i < veroyatnosts.Length; i++)

{

veroyatnosts[i] = GetVeroyatnost(prisposoblennosts[i]);

tBLog.Text += hromosoms[i] + " - " + prisposoblennosts[i] + " - "+ veroyatnosts[i]+ "\r\n";

}

GetParents();

GetMutaciya();

GetScrewiv(1, 2);

GetScrewiv(3, 4);

GetScrewiv(5, 6);

GetScrewiv(7, 8);

tBLog.Text += "Новое поколение:" + "\r\n";

for (int i=1; i< child.Length; i++)

{

tBLog.Text += child[i] + "\r\n";

}

textBox1.Text = child[1];

textBox2.Text = child[2];

textBox3.Text = child[3];

textBox4.Text = child[4];

textBox5.Text = child[5];

textBox6.Text = child[6];

textBox7.Text = child[7];

textBox8.Text = child[8];

tBLog.Text += "---------------------------------" + "\r\n";

}

private int GetPrisposoblennost(string str)

{

int count = 0;

for (int i = 0; i < str.Length; i++)

{

if (str[i] == '1')

{

count++;

}

}

return count;

}

private double GetVeroyatnost(int prispos)

{

double all = 0;

for (int i = 1; i < prisposoblennosts.Length; i++)

{

all += prisposoblennosts[i];

}

return prispos * 100 / all;

}

private void GetParents()

{

ruletkas[1]=veroyatnosts[1];

for (int i = 2; i < ruletkas.Length; i++)

{

ruletkas[i] = ruletkas[i - 1] + veroyatnosts[i];

}

Random rnd = new Random();

tBLog.Text += "Розыгрыш:";

for (int i = 1; i < rozigrish.Length; i++)

{

rozigrish[i] = rnd.Next(101);

tBLog.Text += rozigrish[i] + " ";

}

tBLog.Text += "\r\n" + "Родительский пул:" + "\r\n";

for (int i = 1; i < rozigrish.Length; i++)

{

if ((rozigrish[i]>=0)&& (rozigrish[i]<ruletkas[1]))

{

parents[i] = hromosoms[1];

}

else if ((rozigrish[i] >= ruletkas[1]) && (rozigrish[i] < ruletkas[2]))

{

parents[i] = hromosoms[2];

}

else if ((rozigrish[i] >= ruletkas[2]) && (rozigrish[i] < ruletkas[3]))

{

parents[i] = hromosoms[3];

}

else if ((rozigrish[i] >= ruletkas[3]) && (rozigrish[i] < ruletkas[4]))

{

parents[i] = hromosoms[4];

}

else if ((rozigrish[i] >= ruletkas[4]) && (rozigrish[i] < ruletkas[5]))

{

parents[i] = hromosoms[5];

}

else if ((rozigrish[i] >= ruletkas[5]) && (rozigrish[i] < ruletkas[6]))

{

parents[i] = hromosoms[6];

}

else if ((rozigrish[i] >= ruletkas[6]) && (rozigrish[i] < ruletkas[7]))

{

parents[i] = hromosoms[7];

}

else if ((rozigrish[i] >= ruletkas[7]) && (rozigrish[i] <= 100))

{

parents[i] = hromosoms[8];

}

tBLog.Text += parents[i] + "\r\n";

}

}

private void GetMutaciya()

{

Random rnd = new Random();

double ver = rnd.NextDouble();

if ((ver >= 0.05)&& (ver<=0.1))

{

int hromos = rnd.Next(1, 9);

int gen = rnd.Next(1, 12);

parents[hromos] = Convert(parents[hromos], gen);

tBLog.Text += "Мутировал " + gen + " ген в " + hromos+ " хромосоме" + "\r\n";

}

else tBLog.Text += "Ни один ген не мутировал" + "\r\n";

}

private string Convert(string str, int position)

{

if (str[position] == '0')

{

str = str.Remove(position, 1).Insert(position, '1'.ToString());

}

else str = str.Remove(position, 1).Insert(position, '0'.ToString());

return str;

}

private void GetScrewiv(int par1, int par2)

{

Random rnd = new Random();

int pos = rnd.Next(1, 11);

tBLog.Text += "Пара:" + parents[par1] + " - " + parents[par2]+ "\r\n";

tBLog.Text += "Точка скрещивания:" + pos + "\r\n";

child[par1] = parents[par1].Remove(pos) + parents[par2].Remove(0, pos);

child[par2] = parents[par2].Remove(pos) + parents[par1].Remove(0, pos);

tBLog.Text += "Потомки:" + child[par1] + " - " + child[par2] + "\r\n";

}

Random rnd = new Random();

private string Rand(string str)

{

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

{

str += rnd.Next(0, 2).ToString();

}

return str;

}

}

}

24

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]