Навчання нейромережі додаванню двох цілих чисел за допомогою генетичного алгоритму
Короткі теоретичні відомості про нейромережу, її навчання за допомогою генетичного алгоритму. Програма, що навчає нейромережу додавати два цілих числа. Опис структур і методів. Приклад роботи програми. Недоліки градієнтних методів и генетичного алгоритму.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 28.04.2014 |
Размер файла | 216,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Анотація
Завданням курсової роботи є навчання нейромережі додаванню двох цілих чисел за допомогою генетичного алгоритму. Перша частина роботи містить короткі теоретичні відомості про нейромережу, її навчання за допомогою генетичного алгоритму. Друга частина описує програму, що навчає нейромережу додавати два цілих числа. Навчання виконується за допомогою генетичного алгоритму.
КЛЮЧОВІ СЛОВА: НЕЙРОМЕРЕЖА, ГЕНЕТИЧНИЙ АЛГОРИТМ, ХРОМОСОМА, МУТАЦІЯ, СХРЕЩУВАННЯ, НЕЙРОН.
Зміст
- Вступ
- Постановка задачі
- 1.Теоретична частина
- 1.1 Означення нейромережі
- 1.2 Генетичний алгоритм
- 2. Практична частина
- 2.1 Опис структур та методів
- 2.2 Приклад роботи програми.
- Висновки
- Додатки
- Вступ
- Велику кількість задач не можна розв'язати, використовуючи строгу математичну модель. Тоді виникає проблема знаходження приблизного розв'язку, що задовольняє задачу в межах певної похибки. Використання нейромереж дозволяє вирішувати задачу не за допомогою запрограмованої кількості дій над заздалегідь визначеними даними, а за допомогою аналізу задачі, знаходженні в ній певних закономірностей, певного прогнозування. Нейромережі імітують діяльність людського мозку. Навчати нейромережу аналізувати інформацію можна різними шляхами. Одним з найкращих є метод навчання за допомогою генетичних алгоритмів, який дозволяє за меншу кількість операцій достатньою мірою навчити нейромережу імітувати діяльність людського мозку. нейромережа генетичний програма градієнтний
- Постановка задачі
- Навчити нейромережу додавати 2 цілих числа. В якості методу навчання використовувати метод генетичних алгоритмів.
1. Теоретична частина
1.1 Означення нейромережі
Штучні нейронні мережі -- математичні моделі, а також їхня програмна та апаратна реалізація, побудовані за принципом функціонування біологічних нейронних мереж -- мереж нервових клітин живого організму. Системи, архітектура і принцип дії базується на аналогії з мозком живих істот. Ключовим елементом цих систем виступає штучний нейрон як імітаційна модель нервової клітини мозку -- біологічного нейрона.
Рис. 1 Діаграма простої нейронної мережі
На Рис. 1 показана типова структура штучних нейромереж. Хоча існують мережі, які містять лише один прошарок, або навіть один елемент, більшість застосувань вимагають мережі, які містять як мінімум три нормальних типи прошарків - вхідний, прихований та вихідний. Прошарок вхідних нейронів отримує дані або з вхідних файлів, або безпосередньо з електронних давачів. Вихідний прошарок пересилає інформацію безпосередньо до зовнішнього середовища, до вторинного комп'ютерного процесу, або до інших пристроїв. Між цими двома прошарками може бути багато прихованих прошарків, які містять багато нейронів у різноманітних зв'язаних структурах. Входи та виходи кожного з прихованих нейронів просто йдуть до інших нейронів.
Напрямок зв'язку від одного нейрону до іншого є важливим аспектом нейромереж. У більшості мереж кожен нейрон прихованого прошарку отримує сигнали від всіх нейронів попереднього прошарку та звичайно від нейронів вхідного прошарку. Після виконання операцій над сигналами, нейрон передає свій вихід до всіх нейронів наступних прошарків, забезпечуючи шлях передачі вперед на вихід.
Рис. 2 Мережа зі зворотнім зв'язком
При зворотному зв'язку, вихід нейронів прошарку скеровується до нейронів попереднього прошарку (Рис. 2). Шлях, яким нейрони з'єднуються між собою має значний вплив на роботу мережі. Більшість пакетів професіональної розробки програмного забезпечення дозволяють користувачу додавати, вилучати та керувати з'єднаннями як завгодно. Постійно корегуючи параметри, зв'язки можна робити як збуджуючими так і гальмуючими.
1.2 Генетичний алгоритм
Генетичний алгоритм -- це еволюційний алгоритм пошуку, що використовується для вирішення задач оптимізації і моделювання шляхом послідовного підбору, комбінування і варіації шуканих параметрів з використанням механізмів, що нагадують біологічну еволюцію.
При описі генетичних алгоритмів використовуються визначення, запозичені з генетики, такі як :
Популяція -- це кінцева множина особин;
Особини, що входять в популяцію, у генетичних алгоритмах представляються хромосомами з закодованими в них множинами параметрів задачі, тобто рішень, які інакше називаються точками в просторі пошуку (search points);
Хромосоми -- це впорядковані послідовності генів;
Ген -- це атомарний елемент генотипу, зокрема, хромосоми.
Особливістю генетичного алгоритму є використання операторів кросинговеру та мутації, які виконують пошук на множині розв'язків.
Основний (класичний) генетичний алгоритм складається з наступних кроків:
створення початкової популяції;
оцінка пристосованості хромосом в популяції;
схрещування хромосом;
мутації хромосом;
Рис 3 - Блок-схема найпростішого алгоритму
2. Практична частина
2.1 Опис структур та методів
а) Структура Neuron - описує нейрон. Поле - значення нейрону value. Також наявний конструктор.
б) Структура NeuralNet - структура, що реалізує нейронну мережу. Масив input[] - масив вхідних нейронів, масив output[] - масив вихідних нейронів, масив inter[] - масив проміжних нейронів. Масив weight[] - ваговий масив. Метод FindValue виконує обчислення за заданими ваговими коефіцієнтами. Методи HelpToFind1, Transform_value є допоміжними.
в) Структура Chromosome - структура, що описує хромосому. Поля: cost - значення хромосоми, масив weight[] - набір генів, mutationPercent - ймовірність мутації хромосоми. Основні методи: Mutate - здійснює мутацію хромосоми, CrossOver - реалізує кросинговер хромосом (результатом є 2 нащадки), CalculateCost - знаходження значення хромосоми.
г) У класі Form1 використовуються методи сортування хромосом (sortChromosomes), знаходження максимального значення та інші допоміжні методи.
2.2 Приклад роботи програми
Програма демонструє додавання 2 цілих чисел за вже знайденими заздалегідь ваговими коефіцієнтами та навчання нейромережі.
Рис 4 - Додавання 2 цілих чисел
Рис 5 - Навчання нейромережі
Висновки
В ході курсової роботи була написана програма, що навчає нейромережу додавати 2 цілих числа за допомогою методу генетичного алгоритму. Генетичний алгоритм є поєднанням градієнтного і стохастичного методів оптимізації функцій. Регулюючи ймовірності кросинговеру та мутацій можна досягнути того, що алгоритм швидко знайде мінімум. Проте цей мінімум не гарантовано буде глобальним. Або ж навпаки: алгоритм буде повільно спускатись до мінімуму, але знайде глобальний мінімум.
Недоліком градієнтних методів є “застрягання” в локальних мінімумах. ГА, маючи перевагу швидкого спуску, не зупиняється в локальних мінімумах, а проводить пошук по всій множині розв'язків. Плюсом ГА є відносна простота його реалізації.
Недоліком генетичного алгоритму є велика кількість змінних параметрів для управління його роботою -- кількість осіб в поколінні, ймовірність кросинговеру, тип кросинговеру, ймовірність мутацій, тип мутацій, тип відбору та ін.
Додаток А
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Threading;
using System.Text;
using System.Windows.Forms;
namespace NeuralNet
{
public partial class Form1 : Form
{
public struct Chromosome
{
public double cost;
public double[] weight;
public double mutationPercent;
public Chromosome(double mutate, Random random)
{
mutationPercent = mutate;
weight = new double[7];
for (int i = 0; i < weight.Length; i++)
{
weight[i] = random.Next(0, 121) / 100.0;
}
cost = 0;
// cost = net.Transform(net.output);
}
public Chromosome(double[] weight_)
{
mutationPercent = 0.01;
weight = new double[7];
for (int i = 0; i < weight.Length; i++)
{
weight[i] = weight_[i];
}
cost = 0;
}
public double GetCost
{
set
{
cost = value;
}
get
{
return cost;
}
}
public void Mutate()
{
Random rand = new Random();
int position1 = 0; int position2 = 0;
position1 = (int)(rand.Next(0, 7));
position2 = (int)(rand.Next(0, 7));
double temp = 0;
temp = weight[position1];
weight[position1] = weight[position2];
weight[position2] = temp;
}
public Chromosome[] CrossOver(Chromosome neuron)
{
Chromosome[] ch = new Chromosome[2];
Random rand = new Random();
for (int i = 0; i < ch.Length; i++)
{
ch[i] = new Chromosome(0.05, rand);
}
ch[0].weight[0] = weight[0];
ch[0].weight[1] = weight[1];
ch[0].weight[2] = weight[2];
ch[0].weight[3] = weight[3];
ch[0].weight[4] = neuron.weight[4];
ch[0].weight[5] = neuron.weight[5];
ch[0].weight[6] = neuron.weight[6];
ch[1].weight[0] = neuron.weight[0];
ch[1].weight[1] = neuron.weight[1];
ch[1].weight[2] = neuron.weight[2];
ch[1].weight[3] = neuron.weight[3];
ch[1].weight[4] = weight[4];
ch[1].weight[5] = weight[5];
ch[1].weight[6] = weight[6];
return ch;
}
public void CalculateCost()
{
NeuralNet net = new NeuralNet();
//net.FindValue(weight);
cost = net.Transform(net.output);
}
}
public struct Neuron
{
public double value;
//public Neuron[] neighbours;
public Neuron(double value_)
{
value = value_;
}
}
public struct NeuralNet
{
public int[] Transform_value(int a)
{
int[] mas1 = new int[60];
for (int i = 0; i < mas1.Length; i++)
{
mas1[i] = a % 2;
a = a / 2;
}
return mas1;
}
public int HelpToFind1(Neuron[] input, double[] w, int i)
{
inter[8 + 12 * i].value = inter[15 + 12 * i].value = -1;
inter[7 + 12 * i].value = inter[14 + 12 * i].value = 1;
inter[11 + 12 * i].value = inter[16 + 12 * i].value = -1.5;
inter[5 + 12 * i].value = (int)(w[0] * input[2 * i].value + w[1] * input[2 * i + 1].value);
inter[6 + 12 * i].value = (int)(-w[5] * input[2 * i].value - w[6] * input[2 * i + 1].value);
inter[5 + 12 * i].value = Teta_Function(inter[5 + 12 * i].value + inter[8 + 12 * i].value);
inter[6 + 12 * i].value = Teta_Function(inter[6 + 12 * i].value + inter[7 + 12 * i].value);
//Console.WriteLine(inter[5].value);
inter[9 + 12 * i].value = Teta_Function(w[2] * inter[5 + 12 * i].value + w[3] * inter[6 + 12 * i].value + inter[11 + 12 * i].value);
for (int j = i - 1; j > -1; j--)
{
inter[10 + 12 * i].value += (w[4] * (input[2 * j].value + input[2 * j + 1].value) / (Math.Pow(2, i - j - 1)));
}
inter[10 + 12 * i].value = (int)inter[10 + 12 * i].value;
inter[12 + 12 * i].value = (int)(w[0] * inter[9 + 12 * i].value + w[1] * inter[10 + 12 * i].value);
inter[13 + 12 * i].value = (int)(-w[5] * inter[9 + 12 * i].value - w[6] * inter[10 + 12 * i].value);
inter[12 + 12 * i].value = Teta_Function(inter[12 + 12 * i].value + inter[15 + 12 * i].value);
inter[13 + 12 * i].value = Teta_Function(inter[13 + 12 * i].value + inter[14 + 12 * i].value);
return Teta_Function(w[2] * inter[12 + 12 * i].value + w[3] * inter[13 + 12 * i].value + inter[16 + 12 * i].value);
}
public int Teta_Function(double a)
{
if (a >= 0)
return 1;
else
return 0;
}
public NeuralNet(int n1, int n2, int n3)
{
input = new Neuron[n1];
output = new Neuron[n2];
inter = new Neuron[n3];
weight = new double[400];
}
public Neuron[] input;
public Neuron[] output;
public Neuron[] inter;
public double[] weight;
public double Transform(Neuron[] output)
{
double Res = 0;
for (int i = output.Length - 1; i > -1; i--)
{
Res += output[i].value * Math.Pow(2, i);
}
return Res;
}
public void FindValue(double[] w)
{
inter[2].value = -1;
inter[3].value = 1;
inter[4].value = -1.5;
for (int i = 5; i < inter.Length; i++)
{
inter[i].value = 0;
}
inter[0].value = (int)(w[0] * input[0].value + w[1] * input[1].value);
inter[1].value = (int)(-w[5] * input[0].value - w[6] * input[1].value);
inter[0].value = Teta_Function(inter[0].value + inter[2].value);
inter[1].value = Teta_Function(inter[1].value + inter[3].value);
output[0].value = Teta_Function(w[2] * inter[0].value + w[3] * inter[1].value + inter[4].value);
for (int i = 1; i < input.Length / 2; i++)
{
output[i].value = HelpToFind1(input, w, i);
}
inter[29 * 12 + 6].value = 0;
for (int j = output.Length - 2; j > -1; j--)
{
inter[29 * 12 + 6].value += (w[4] * (input[2 * j].value + input[2 * j + 1].value) / (Math.Pow(2, output.Length - j - 1)));
}
inter[29 * 12 + 6].value = (int)(inter[29 * 12 + 6].value);
output[30].value = inter[29 * 12 + 6].value;
}
}
public Form1()
{
InitializeComponent();
}
static int value = 560078186;
private void button1_Click(object sender, EventArgs e)
{
int a1 = int.Parse(textBox1.Text);
int a2 = int.Parse(textBox2.Text);
NeuralNet net1 = new NeuralNet(60, 31, 457);
int[] mas = net1.Transform_value(a1);
int k = 0;
for (int i = 0; i < net1.input.Length; i += 2)
{
net1.input[i] = new Neuron(mas[k]);
k++;
}
mas = net1.Transform_value(a2);
k = 0;
for (int i = 1; i < net1.input.Length; i += 2)
{
net1.input[i] = new Neuron(mas[k]);
k++;
}
double[] w = new double[7] { 1.04, 1.05, 1.14, 1.0, 0.51, 0.98, 1.19 };
net1.FindValue(w);
double Res1 = 0;
for (int i = net1.output.Length - 1; i > -1; i--)
{
Res1 += net1.output[i].value * Math.Pow(2, i);
}
textBox3.Text = Res1.ToString();
}
private void textBox1_TextChanged_1(object sender, EventArgs e)
{
uint k, z;
try
{
k = uint.Parse(textBox1.Text);
z = uint.Parse(textBox2.Text);
if (k < 200000 && z < 200000)
button1.Enabled = true; //перевірка на невірний ввід
else
{
button1.Enabled = false;
}
}
catch
{
button1.Enabled = false;
}
}
private void textBox2_TextChanged_1(object sender, EventArgs e)
{
uint k, z;
try
{
k = uint.Parse(textBox2.Text);
z = uint.Parse(textBox1.Text); //перевірка на невірний ввід
if (k < 200000 && z < 200000)
button1.Enabled = true;
else
{
button1.Enabled = false;
}
/*if (textBox2.Text == "")
button1.Enabled = false;*/
}
catch
{
button1.Enabled = false;
}
}
public static Chromosome[] sortChromosomes(Chromosome[] chromosomes, int num, NeuralNet net)
{
int j = 0;
Chromosome ch;
Chromosome[] result = new Chromosome[chromosomes.Length];
//Thread[] t = new Thread[4];
for (int i = 0; i < num; i++)
{
int min = findMin(chromosomes, num, i);
result[j] = new Chromosome(chromosomes[min].weight);
ch = new Chromosome(chromosomes[i].weight);
chromosomes[i] = new Chromosome(chromosomes[min].weight);
chromosomes[min] = new Chromosome(ch.weight);
net.FindValue(chromosomes[i].weight);
chromosomes[i].GetCost = net.Transform(net.output);
net.FindValue(chromosomes[min].weight);
chromosomes[min].GetCost = net.Transform(net.output);
j++;
}
return result;
}
public static int findMax(Chromosome[] chromosomes, int num, int num1)
{
int etalon = num1;
double max = Math.Abs(chromosomes[num1].GetCost - value) / (value * 1.0);
for (int i = num1; i < num; i++)
{
if (max < Math.Abs(chromosomes[i].GetCost - value) / value * 1.0)
{
etalon = i;
max = Math.Abs(chromosomes[i].GetCost - value) / value * 1.0;
}
}
return etalon;
}
public static int findMin(Chromosome[] chromosomes, int num, int num1)
{
int etalon = num1;
double min = Math.Abs(chromosomes[num1].GetCost - value) / value * 1.0;
for (int i = num1; i < num; i++)
{
if (min > Math.Abs(chromosomes[i].GetCost - value) / value * 1.0)
{
etalon = i;
min = Math.Abs(chromosomes[i].GetCost - value) / value * 1.0;
}
}
return etalon;
}
static double accuracy;
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Text = "";
int a1 = 255336678;
int a2 = 304741508;
NeuralNet net = new NeuralNet(60, 31, 457);
int[] mas = net.Transform_value(a1);
int k = 0;
for (int i = 0; i < net.input.Length; i += 2)
{
net.input[i] = new Neuron(mas[k]);
k++;
}
mas = net.Transform_value(a2);
k = 0;
for (int i = 1; i < net.input.Length; i += 2)
{
net.input[i] = new Neuron(mas[k]);
k++;
}
Chromosome[] ch = new Chromosome[20];
Random rand = new Random();
/*
for (int i = 0; i < ch.Length; i++)
{
ch[i] = new Chromosome(0.05,rand);
}
*/
Thread[] t = new Thread[2];
for (int j = 0; j < t.Length; j++)
{
int start =j==0?0:ch.Length/t.Length;
int end = j == 0 ? ch.Length / t.Length : ch.Length;
t[j] = new Thread(delegate()
{
for (int i = start; i < end; i++)
{
ch[i] = new Chromosome(0.05, rand);
}
});
}
foreach (Thread tt in t) tt.Start();
foreach (Thread tt in t) tt.Join();
//*/
for (int i = 0; i < ch.Length; i++)
{
net.FindValue(ch[i].weight);
ch[i].GetCost = net.Transform(net.output);
}
richTextBox1.Text += (Math.Abs(ch[0].GetCost - value) / value * 1.0).ToString();
richTextBox1.Text += "\n";
sortChromosomes(ch, ch.Length, net);
for (int i = 0; i < ch.Length; i++)
{
net.FindValue(ch[i].weight);
ch[i].GetCost = net.Transform(net.output);
}
accuracy = 0.7 * Math.Pow(10, -9);
int count = 0;
while (Math.Abs(ch[0].GetCost - value) / value * 1.0 > accuracy)
{
//textBox4.Text+=textBox4.Lines
richTextBox1.Text += (Math.Abs(ch[0].GetCost - value) / value * 1.0).ToString();
richTextBox1.Text += "\n";
count++;
if (count > 1000)
{
MessageBox.Show("1000 steps done");
return;
}
//MessageBox.Show((Math.Abs(ch[0].GetCost - value) / value * 1.0).ToString());
richTextBox1.Refresh();
int label1 = 0;
int label2 = 1;
for (int i = 0; i < ch.Length; i++)
{
Random random = new Random();
if ((1 - Math.Abs(ch[i].GetCost - value) / value * 1.0) > random.Next(9, 11) / 10.0)
{
label1 = i;
break;
}
}
for (int i = label1 + 1; i < ch.Length; i++)
{
Random random = new Random();
if ((1 - Math.Abs(ch[i].GetCost - value) / value * 1.0) > random.Next(9, 11) / 10.0)
{
label2 = i;
break;
}
}
if (label1 == label2)
{
label1 = 0;
}
Chromosome[] temp = ch[label1].CrossOver(ch[label2]);
for (int i = 0; i < temp.Length; i++)
{
net.FindValue(temp[i].weight);
temp[i].GetCost = net.Transform(net.output);
}
if (Math.Abs(ch[findMax(ch, 0, ch.Length - 1)].GetCost - value) / value * 1.0 > Math.Abs(temp[0].GetCost - value * 1.0) / value * 1.0)
{
ch[findMax(ch, 0, ch.Length - 1)] = new Chromosome(temp[0].weight);
}
if (Math.Abs(ch[findMax(ch, 0, ch.Length - 1)].GetCost - value) / value * 1.0 > Math.Abs(temp[1].GetCost - value) / value * 1.0)
{
ch[findMax(ch, 0, ch.Length - 1)] = new Chromosome(temp[1].weight);
}
for (int i = 1; i < ch.Length; i++)
{
if (ch[i].mutationPercent > rand.NextDouble())
{
ch[i].Mutate();
}
}
for (int i = 0; i < ch.Length; i++)
{
net.FindValue(ch[i].weight);
ch[i].GetCost = net.Transform(net.output);
}
sortChromosomes(ch, ch.Length, net);
for (int i = 0; i < ch.Length; i++)
{
net.FindValue(ch[i].weight);
ch[i].GetCost = net.Transform(net.output);
}
}
MessageBox.Show("Done successfully!");
//textBox4.Text += "\n";
//textBox4.Text += "\n";
richTextBox1.Text += (Math.Abs(ch[0].GetCost - value) / value * 1.0).ToString();
StreamWriter f = new StreamWriter("output.txt");
for (int i = 0; i < ch[0].weight.Length; i++)
{
f.WriteLine(ch[0].weight[i]);
}
f.Close();
}
}
Размещено на Allbest.ru
...Подобные документы
Теоретичні відомості про язик С++. Розробка програми, що виконує основні арифметичні дії над простими та складними числами на язику С++. Опис алгоритму програми та її код. Інструкція по користуванню. Обгрунтовування вибору та складу технічних засобів.
курсовая работа [852,8 K], добавлен 30.11.2011Сутність емерджентного навчання, основаного на біологічних принципах закону природного відбору. Моделювання умов біологічної еволюції за рахунок взаємодії кінцевих автоматів, заданих наборами станів, і правил переходу. Етапи роботи генетичного алгоритму.
реферат [59,8 K], добавлен 01.12.2015- Розроблення алгоритму і програми а NASM асемблері для додавання / множення чисел з плаваючою крапкою
Розробка алгоритму роботи програми, її загальна характеристика та функціональні особливості, умови ефективного використання. Способи виклику та адреса завантаження, відомості про використання оперативної пам'яті. Посібник системного програміста.
курсовая работа [182,6 K], добавлен 07.06.2016 Сімейство процесорів ADSP-2100 та їх характеристика. Аналіз ресурсів та структурна схема обчислювального модуля ALU. Призначення регістра ASTAT. Блок-схема алгоритму та програма реалізації ділення цілих чисел на мові Асемблера поточного процесора ADSP.
курсовая работа [463,2 K], добавлен 04.01.2014Основні теоретичні відомості про метод знаходження значення функції у міжвузловій точці за допомогою інтерполяційної формули Бесселя та приклад його застосування. Розробка алгоритму за даним методом. Опис програми, лістинг та результати тестування.
курсовая работа [70,3 K], добавлен 03.12.2009Побудова блок-схеми алгоритму проста вставка. Програмна реалізація алгоритму, опис результатів. Особливості обліку ітерації масивів. Відсортування даних за допомогою програми Turbo Pascal. Аналітична оцінка трудомісткості, графічне представлення.
контрольная работа [570,1 K], добавлен 21.05.2014Дослідження етапів розробки програмної реалізації криптографічного алгоритму RC5. Опис об'єкту, що потребує захисту: операційне середовище, тип програмного забезпечення. Блок-схема алгоритму функціонування програми криптозахисту. Листінг тесту програми.
курсовая работа [4,4 M], добавлен 28.10.2010Алгоритм покриття за методом "мінімальній стовпець - максимальний рядок". Підпрограми основного алгоритму. Розробка програми сортування методом простих включень (бульбашковим методом). Словесний опис алгоритму, його контрольний приклад та ефективність.
курсовая работа [36,4 K], добавлен 06.03.2013Розробка програми автоматизації роботи з матрицями. Оформлення даних у вигляді матриць цілих чисел. Перелік операцій над матрицями, які реалізуються у програмі. Програмне забезпечення, мови програмування. Опис логічної структури та алгоритм програми.
курсовая работа [312,2 K], добавлен 01.04.2016Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.
курсовая работа [1,3 M], добавлен 23.06.2010Програмна реалізація алгоритму пошуку найкоротшого шляху між двома будь-якими вершинами графа. Загальні відомості про графи. Особливості роботи в середовищі. Опис структури програми та програмних засобів. Схема програмної реалізації алгоритму Дейкстри.
курсовая работа [676,7 K], добавлен 20.03.2011Призначення ігрової програми "Змійка" для розвитку уваги та логічного мислення гравців. Розробка програми в середовищі C++ Builder 6, її функціонування в ОС Windows. Опис алгоритму та основних функцій програми. Основні переваги та недоліки мови С++.
реферат [1,7 M], добавлен 17.12.2014Розробка програмних модулів базових операцій обробки на підставі розрядно-логарифмічного кодування. Дослідження алгоритму розв'язку системи лінійних алгебраїчних рівнянь. Реалізація алгоритму Гауса. Покращення точності розрахунків за допомогою рл-чисел.
курсовая работа [427,2 K], добавлен 20.11.2013Опис методів і алгоритмів вирішення задачі в середовищі розробки Myeclipse. Основні функції програмного продукту, його структура. Розробка алгоритму та програми, інструкція користувачу. Результати тестування, лістинг основних блоків. Вікно головного меню.
курсовая работа [1,8 M], добавлен 24.02.2014Характеристики методів стискання інформації. Дворівневе кодування, алгоритм Лемпеля-Зіва. Блок-схема алгоритму кодування. Вибір мови, середовища програмування. Опис інтерфейсу, тестування програми. Бібліотеки, які використовуються при написанні програми.
курсовая работа [728,9 K], добавлен 17.01.2014Отримання компонентів вектора із квадратної матриці відповідно до заданого алгоритму. Обчислення значення функції. Базова програма реалізації алгоритму. Модуль глобальних описів. Сервісний модуль обслуговування матриці. Результати роботи програми.
курсовая работа [19,5 K], добавлен 30.01.2013Порядок проведення операцій по розробці програмного модуля для роботи над множинами і їх елементами. Організація правильної структури при визначенні властивостей і методів модуля, що розробляється, з умовою цілих чисел як структури елементів множини.
контрольная работа [61,9 K], добавлен 08.10.2010Створення програми для роботи з веб-камерою з автоматичним визначенням встановленої камери на комп'ютері. Характеристика апаратної конфігурації програми. Опис мови і середовища програмування. Розробка алгоритму, інструкції для програміста та користувача.
курсовая работа [1,2 M], добавлен 26.07.2013Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.
курсовая работа [991,4 K], добавлен 06.08.2013Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "Microsoft Visual Studio C++ 2008 Express Edition". Лістинг програми та загальний опис її роботи, аналіз отриманих результатів та оцінка практичної ефективності.
курсовая работа [762,8 K], добавлен 03.05.2015