Загрузка страницы..
Простой пример сети Хопфилда на C#
Реализуем сеть Хопфилда на C#
Простой пример сети Хопфилда на <span style="color: #28A84C">C#</span>
2014-03-19T14:03 19 мар 2014 14:03
Просмотров: 7644

Реализация алгоритма на C# исходя из видео.

int n = 3;
int m = 4;
int[,] mas = new int[n, m];
int[] y = new int[m];
mas[0, 0] = -1; mas[0, 1] = 1; mas[0, 2] = -1; mas[0, 3] = 1;
mas[1, 0] = 1; mas[1, 1] = -1; mas[1, 2] = 1; mas[1, 3] = 1;
mas[2, 0] = -1; mas[2, 1] = 1; mas[2, 2] = -1; mas[2, 3] = -1;
int i = 0, j = 0;
string s = "";
int[,] w = new int[m, m];//
int[,] tm = new int[m, m];//Временный массив
int k = 0;
//нахожу W
for (k = 0; k < n; k++)
{
    //Транспортирую матрицу
    for (i = 0; i < m; i++)
        for (j = 0; j < m; j++)
            tm[i, j] = mas[k, i] * mas[k, j];
    //нахожу сумму tm[i]
    for (i = 0; i < m; i++)
        for (j = 0; j < m; j++)
            w[i, j] += tm[i, j];
}
//Обнуляю главную диагональ w
for (i = 0; i < m; i++) w[i, i] = 0;
int[] a = new int[m];//ф-ия активации
bool b = false; k = 0;//Счётчик
int l = -1;//Индекс подходящей строки
while (!b && k < 200)
{
    //Вычисляю y'
    for (i = 0; i < m; i++)
        for (j = 0; j < m; j++)
            a[i] += w[i, j] * y[j];
    //Обрабатываю y' ф-ей активации
    for (i = 0; i < m; i++)
        if (a[i] >= 0) a[i] = 1;
        else a[i] = -1;
    //Сравниваю
    bool st = false;
    for (i = 0; i < n; i++)
    {
        st = true;
        for (j = 0; j < m; j++)
            if (mas[i, j] != a[j]) { st = false; break; }
        if (st) { l = i; break; }
    }
    if (l != -1)b = true;
    else
    {       
        k++;//Увеличиваю счетчик
        //Обновляем у'
        for (i = 0; i < m; i++)
            y[i] = a[i];
        //Обнуляем a
        for (i = 0; i < m; i++)
            a[i] = 0;
    }
}
if (l != -1)
{
    s += "\nнайдено совпадение с X=" + (l + 1).ToString() + "\nГлубина поиска:" + (k + 1).ToString();
}
else
{
    s += "\nнет совпадений";
}

Исходники



Комментарии: 2

комментарий Модератор
Модератор
2017-04-16T20:4116 апр 2017 20:41
Добрый вечер, Антон.
Спасибо, что заметили опечатку. Метод GenMass() был в исходном проекте, но на сайте была выложена часть.
Метод GenMass() генерирует массив mas исходя из dataGridView1. Но в данном примере mas заполняется сразу в коде.

P.S. Вы можете скачать исходник и посмотреть полный код проекта.
комментарий Антон
Антон
2017-04-14T12:1414 апр 2017 12:14
А что это за метод? GenMass();

Добавить комментарий

up
Яндекс.Метрика Яндекс.Метрик