Implementation of a McCulloch-Pitts neuron

From wiki.network-crawler.de
Jump to: navigation, search
 1 /* Implementierung einer McCulloch-Pitts-Zelle mit relativ hemmenden Leitungen
 2  * von Beyer Philipp (www.network-crawler.de)
 3  */
 4
 5 #include <stdio.h>
 6 /* define _DEBUG 1 */
 7
 8 int McCullochPittsZelle (int stimulLeitungen[], int anzstimulLeitungen, int hemmenLeitungen[], int anzhemmenLeitungen, int schwellwert) {
 9   int i;
10   int shigh = 0, hhigh = 0;
11
12 #ifdef _DEBUG
13   printf ("\nSchwellwert: %d\n\n", schwellwert);
14   printf ("Stimulierende Leitungen:  ");
15 #endif
16
17   for (i = 0; i < anzstimulLeitungen; i++) {
18 #ifdef _DEBUG
19           printf ("%d ", stimulLeitungen[i]);
20 #endif
21     if (stimulLeitungen[i] == 1) shigh++;
22   }
23 #ifdef _DEBUG
24   printf ("\n\n-> gesetzte stimulierende Leitungen: %d", shigh);
25
26   printf ("\n\nHemmende Leitungen:  ");
27 #endif
28
29   for (i = 0; i < anzhemmenLeitungen; i++) {
30 #ifdef _DEBUG
31           printf ("%d ", hemmenLeitungen[i]);
32 #endif
33     if (hemmenLeitungen[i] == 1) hhigh++;
34
35   }
36 #ifdef _DEBUG
37   printf ("\n\n-> gesetzte hemmende Leitungen: %d\n\n", hhigh);
38 #endif
39
40   if ((shigh - schwellwert) >= hhigh ) return 1;
41   else return 0;
42 }
43
44
45 int main (void) {
46   int stimulLeitungen[] = {
47     0
48   };
49   int hemmenLeitungen[] = {
50     0, 0
51   };
52
53   /* Beispiele:
54    *
55    * Monotone logische Funktionen
56    * ----------------------------
57    * Konjunktion - AND Funktion:
58    *
59    *     0  1
60    * ---------
61    * 0 | 0  0   ->  Hemmende Leitungen alle 0
62    *   |            Schwellwert auf 2
63    * 1 | 0  1
64    *
65    * Disjunktion - OR Funktion:
66    *
67    *     0  1
68    * ---------
69    * 0 | 0  1   ->  Hemmende Leitungen alle 0
70    *   |            Schwellwert auf 1
71    * 1 | 1  1
72    *
73    * Nichtmonoton
74    * ------------
75    * Negation - NOT - Funktion
76    *
77    * -> Eine hemmende Leitung 1 od. 0
78    *    Stimulierende Leitungen alle 0
79    *    Schwellwert 0
80    *
81    * NOR - Funktion
82    *     0  1
83    * ---------
84    * 0 | 1  0   ->  Eingänge hemmende Leitungen
85    *   |            Stimulierende Leitungen alle 0
86    * 1 | 0  0       Schwellwert auf 0
87    */
88
89   int anzstimulLeitungen = sizeof(stimulLeitungen) / sizeof(int);
90   int anzhemmenLeitungen = sizeof(hemmenLeitungen) / sizeof(int);
91
92   printf ("\nAufruf McCullochPittsZelle (relativ hemmende Leitungen!):\n\n");
93
94   printf ("\nAusgabe: %d\n\n", McCullochPittsZelle (stimulLeitungen, anzstimulLeitungen, hemmenLeitungen, anzhemmenLeitungen, 0));
95
96   return 0;
97 }