Sieć hopfielda

0

Witam. Mam problem siecią hopfielda uzupełnić program. Tylko nie wiem jak w miejsce #### (kratki wstawić odpowiedni kod). To jest cały program macierzy. na samym koncu jest siec hopfielda do zupełnienia. Pomoże ktoś mi???


Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SSNMacierz;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//-------------------------------------------------------1
// Macierz Siec4x4 = new Macierz(new double[,] { { 0,-1, 1,-1},
// {-1, 0,-1, 1},
// { 1,-1, 0,-1},
// {-1, 1,-1, 0}});

      *  Macierz wejscie = new Macierz(new double[,]  {  { 1, -1, 1, 1} } ); * wektor
    // wejscie.WypiszWektor();

     //   Macierz wyjscie = new Macierz(1, wejscie.LiczbaKolumn);
    //  wyjscie = MacierzMat.PomnozMacierze(wejscie, Siec4x4);
     //   wyjscie.WypiszWektor();

       Macierz wzorzec=new Macierz(new double[,]{{1,1,1,1,-1}});
       wzorzec.WypiszWektor();
      Macierz Siec24x4 = new Macierz(5, 5);
       Macierz trans = MacierzMat.Transponuj(wzorzec);
      Siec24x4 = MacierzMat.PomnozMacierze(trans, wzorzec);
      

        Macierz jedno =  MacierzMat.Jednostkowa(5);

        Siec24x4 = MacierzMat.OdejmijMacierze(Siec24x4, jedno);

    Siec24x4.WypiszWektor();

      Macierz wejscie = new Macierz(new double[,] { { 1, 1, 1, 1 ,-1} }); 

       wejscie.WypiszWektor();
        Macierz wyjscie = new Macierz(1, wejscie.LiczbaKolumn);
      wyjscie = MacierzMat.PomnozMacierze(wejscie, Siec24x4);
     wyjscie.WypiszWektor();

 Console.ReadKey();
        
    

    }
}

}


Macierz.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SSNMacierz
{

[Serializable]
public class Macierz
{


    double[,] macierz;
    
    public double this[int row, int col]
    {
        get
        {

            return this.macierz[row, col];
        }
        set
        {
            if (double.IsInfinity(value) || double.IsNaN(value))
            {
               ///error
            }
            this.macierz[row, col] = value;
        }
    } 

    //utworz Macierz o podanych rozmiarach
    public Macierz(int rows, int cols)
    {
        this.macierz = new double[rows, cols];
    }

    //utworz Macierz z podanej tablicy
    public Macierz(double[,] wejsciowaMacierz)
    {
        this.macierz = new double[wejsciowaMacierz.GetUpperBound(0) + 1, wejsciowaMacierz.GetUpperBound(1) + 1];
        for (int r = 0; r < this.LiczbaWierszy; r++)
        {
            for (int c = 0; c < this.LiczbaKolumn; c++)
            {
                this[r, c] = wejsciowaMacierz[r, c];
            }
        }
    }

   
    
    public void Zeruj()
    {
        for (int r = 0; r < this.LiczbaWierszy; r++)
        {
            for (int c = 0; c < this.LiczbaKolumn; c++)
            {
                this[r, c] = 0.0;
            }
        }
    }
  
   
    public int LiczbaKolumn
    {
        get
        {
            return this.macierz.GetUpperBound(1) + 1;
        }
    }   
   
    public int LiczbaWierszy
    {
        get
        {
            return this.macierz.GetUpperBound(0) + 1;
        }
    }

    public void WypiszWektor()
    {
        for (int i = 0; i < this.LiczbaKolumn; i++)
        {
            if (this[0, i] > 0)
                Console.Write("#");
            else
                Console.Write(".");
        }
        Console.WriteLine();
    }

    public void WypiszWektor2D()
    {
        int imax = (int)(Math.Sqrt(this.LiczbaKolumn));
        for (int j = 0; j < imax; j++)
        {
            for (int i = 0; i < imax; i++)
            {
                if (this[0, i + j * imax] > 0)
                    Console.Write("#");
                else
                    Console.Write(".");
            }
            Console.WriteLine();
        }
        Console.WriteLine();
    }
}

}


MacierzMat.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SSNMacierz
{

    public class MacierzMat
    {
        
        public static Macierz DodajMacierze(Macierz a, Macierz b)
        {
            
            double[,] wynik = new double[a.LiczbaWierszy, a.LiczbaKolumn];

            for (int iWiersz = 0; iWiersz < a.LiczbaWierszy; iWiersz++)
            {
                for (int jKolumna = 0; jKolumna < a.LiczbaKolumn; jKolumna++)
                {
                    wynik[iWiersz, jKolumna] = a[iWiersz, jKolumna]
                            + b[iWiersz, jKolumna];
                }
            }

            return new Macierz(wynik);
        }

        public static Macierz OdejmijMacierze(Macierz a, Macierz b)
        {


            double[,] wynik = new double[a.LiczbaWierszy, a.LiczbaKolumn];

            for (int iWiersz = 0; iWiersz < a.LiczbaWierszy; iWiersz++)
            {
                for (int jKolumna = 0; jKolumna < a.LiczbaKolumn; jKolumna++)
                {
                    wynik[iWiersz, jKolumna] = a[iWiersz, jKolumna]
                            - b[iWiersz, jKolumna];
                
            }
        }
            return new Macierz(wynik);
        }
        //utworz Macierz Jednostkowa
        public static Macierz Jednostkowa(int rozmiar)
        {
          

            Macierz wynik = new Macierz(rozmiar, rozmiar);

            for (int i = 0; i < rozmiar; i++)
            {
               wynik[i,i]=1; 
                //#######
            }

            return wynik;
        }

        //tworzy Macierz jako iloczyn 2 macierzy
        public static Macierz PomnozMacierze(Macierz a, Macierz b)
        {
            
            double[,] wynik = new double[a.LiczbaWierszy, b.LiczbaKolumn];

            for (int iWiersz = 0; iWiersz < a.LiczbaWierszy; iWiersz++)
            {
                for (int jKolumna = 0; jKolumna < b.LiczbaKolumn; jKolumna++)
                {
                    double value = 0.0;

                    for (int k = 0; k < a.LiczbaKolumn; k++)
                    {

                      value+= a[iWiersz, k]* b[k, jKolumna]; 
                    }
                    wynik [iWiersz, jKolumna]=value;

                }
            }

            return new Macierz(wynik);
        }

        //utworz nowa Macierz transponujac Macierz "a"
        public static Macierz Transponuj(Macierz a)
        {
            double[,] macierzTransp = new double[a.LiczbaKolumn, a.LiczbaWierszy];

            for (int r = 0; r < a.LiczbaWierszy; r++)
            {
                for (int c = 0; c < a.LiczbaKolumn; c++)
                {
                    macierzTransp[c, r] = a[r,c]; 
                }
            }

            return new Macierz(macierzTransp);
        }

        
        // Prywatny konstruktor.
        private MacierzMat()
        {
        }

    }

}


Hopfield.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SSNMacierz;

namespace SSN1
{
public class SiecHopfielda
{

    private Macierz macierzWag;
    public Macierz  MacierzWag
    {
        get
        {
            return this.macierzWag;
        }
    }

   
    public int Rozmiar
    {
        get
        {
            return this.macierzWag.LiczbaWierszy;
        }
    }

    //--Konstruktor 1-- tworzy SiecHopfielda o podanym rozmiarze (Macierz zer) 
    public SiecHopfielda(int rozmiar)
    {
        this.macierzWag = new Macierz(rozmiar, rozmiar);

    }

    //--Konstruktor 2-- tworzy SiecHopfielda na podstawie juz utworzonej Macierzy  
    public SiecHopfielda(Macierz mm)
    {
        this.macierzWag = mm;

    }

    
    public Macierz Sprawdz(Macierz probka)
    {

        Macierz wynik = ################

        return wynik;
    }

   
    public void NauczSie(Macierz wzor)
    {
        Macierz wzorT = #############
	//.#########

        this.macierzWag = MacierzMat.DodajMacierze(this.macierzWag, macierzWzoru);

    }

    
}

}

0

a na jakie pytanie mamy właściwie odpowiedzieć?

0
notexists napisał(a)

a na jakie pytanie mamy właściwie odpowiedzieć?

Sorki pytanie

  1. Uzupełnij procedury NauczSie oraz Sprawdz.
  2. Zmień program główny wykorzystując klasę SiecHopfielda.
0

a co te procedury mają robić?;D

0
notexists napisał(a)

a co te procedury mają robić?;D

Takie zadanka zostaliśmy. Tam jest oddzeilnie program kazdy oddzielony. Chce zrobić siechopfielda.cs

Zadanie 2. Klasa MacierzMat zawiera procedury podstawowych operacji na macierzach:
public static Macierz DodajMacierze(Macierz a, Macierz b)

public static Macierz OdejmijMacierze(Macierz a, Macierz b)

//utworz Macierz Jednostkowa
public static Macierz Jednostkowa(int rozmiar)

//tworzy Macierz jako iloczyn 2 macierzy
public static Macierz PomnozMacierze(Macierz a, Macierz b)

//utworz nowa Macierz transponujac Macierz "a"
public static Macierz Transponuj(Macierz a)

Żeby móc korzystać z tej klasy w kolejnych zadaniach uzupełnij najpierw procedury zawarte w klasie MacierzMat w zbiorze MacierzMat.cs tak żeby poprawnie działały.

Zadanie 3. Poniżej mamy zdefiniowaną siec połączeń pomiędzy neuronami zapisaną w postaci Macierzy wag w Siec4x4:
Macierz Siec4x4 = new Macierz(new double[,] { { 0,-1, 1,-1},
{-1, 0,-1, 1},
{ 1,-1, 0,-1},
{-1, 1,-1, 0}});
Korzystając z procedur zawartych w MacierzMat sprawdź jakie wektory ona rozpoznaje, tzn. na wyjściu otrzymujemy to co na wejściu (lub podobnie). Program powinien wyglądać tak:
Macierz wejscie = new Macierz(new double[,] { { 1, 1, 1, 1} } ); // wektor
wejscie.WypiszWektor();
Macierz wyjscie = new Macierz(1, wejscie.LiczbaKolumn); // wektor
……… // tutaj przepuszcza „wejscie” przez siec otrzymując „wyjscie”
wyjscie.WypiszWektor();
Console.ReadKey();

Zadanie 4. Wszystko to co do tej pory Państwo robili na Macierzach proszę przenieść do klasy SiecHopfielda w zbiorze Hopfield.cs.
public class SiecHopfielda
{

//--Konstruktor 1-- tworzy SiecHopfielda o podanym rozmiarze (Macierz zer)
public SiecHopfielda(int rozmiar)
{
this.macierzWag = new Macierz(rozmiar, rozmiar);
}
//--Konstruktor 2-- tworzy SiecHopfielda na podstawie juz utworzonej Macierzy
public SiecHopfielda(Macierz mm)
{
this.macierzWag = mm;
}
public Macierz Sprawdz(Macierz probka)
{
Macierz wynik = new Macierz(probka.Liczba##, ##) ;
wynik = #### ; // przemnóż probke przez macierz wag
return wynik;
}
public void NauczSie(Macierz wzor)
{
Macierz wzorT = ######; //pomnoz "wzorT" i "wzor"
Macierz macierzWzoru = #####; //pomnoz "wzorT" i "wzor"
Macierz macierzJednostkowa = #### ; // utworz macierz jednostkowa o rozmiarze "Rozmiar"
macierzWzoru = ##### ; //od macierzWzoru odejmij macierzJednostkowa
this.macierzWag = #####; // macierz wag staje się macierzą wzoru
}
}

  1. Uzupełnij procedury NauczSie oraz Sprawdz.
  2. Zmień program główny wykorzystując klasę SiecHopfielda.
0
dominic223 napisał(a)

(...)Pomoże ktoś mi???(...)

Nie widzisz różnicy pomiędzy "pomoże mi ktoś", a "zrobi ktoś to za mnie"?

0
areksum napisał(a)
dominic223 napisał(a)

(...)Pomoże ktoś mi???(...)

Nie widzisz różnicy pomiędzy "pomoże mi ktoś", a "zrobi ktoś to za mnie"?

Chce tylo to sieć hopfileda zrobić wpisanie procedur, może ktoś zrobić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1