03/10/18 06:35:53 C:\Users\CESARE\_WEBSITES\myweb\SourceCode\RETE NEURALE Codice Sorgente.txt

Attenzione!

Questa è una copia HTML (utilizzabile a soli fini di visualizzazione nel browser)
del codice sorgente dell'esempio di rete neurale con sintassi color-highlighted per
facilitare la lettura. Naturalmente, il file con la versione VBA della procedura
NON è questo... - Questa versione HTML serve solo per visualizzare
le complesse sintassi della procedura cosí come apparirebbero in SUBLIME TEXT.
In particolare, le linee di commento sono visualizzate IN ROSSO

    1 
Option Compare Database
    2 
Option Explicit
    3 
'===========================================================
    4 
' Quanto segue attiene la creazione di una rete neurale così
    5 
' concepita:
    6 
' -----------------------------------------
    7 
' STRATO DATI UNO - INPUT - matrice 10 x 10 = 100 nodi (CELLE)
    8 
' PRIMO STRATO collegamenti - matrice tridimensionale 10 x 10 x 4 = 400 collegamenti
    9 
' STRATO DATI DUE - HIDDEN LAYER - vettore unidimensionale 4 nodi (=CELLE)
   10 
' SECONDO STRATO collegamenti - matrice bidimensionale 4 x 4 = 16 collegamenti
   11 
' STRATO DATI TRE - OUTPUT - vettore unidimensionale 4 nodi (=CELLE)
   12 
' "TERZO STRATO collegamenti" - 4 collegamenti tra celle hidden layer ed
   13 
'                               i rispettivi BIAS NODES
   14 
' "QUARTO STRATO collegamenti" - 4 collegamenti tra celle strato output ed
   15 
'                               i rispettivi BIAS NODES
   16 
'============================================================
   17 
Public Const NumCelleStratoInput As Integer = 10
   18 
Public Const NumCelleHiddenLayer As Integer = 4
   19 
Public Const NumCelleStratoOutput As Integer = 4
   20 
Public Const LearningRate As Double = 0.01
   21 
Public Const ValoreArbitrario As Double = 0.9 'ValoreArbitrario "momentum"=0.9
   22 
 
   23 
Public M_INPUT(NumCelleStratoInput, NumCelleStratoInput) As Integer
   24 
Public M_Strato1(NumCelleStratoInput, NumCelleStratoInput, NumCelleHiddenLayer) As Double
   25 
Public M_HIDDEN(NumCelleHiddenLayer) As Double
   26 
Public M_Strato2(NumCelleHiddenLayer, NumCelleStratoOutput) As Double
   27 
Public M_OUTPUT(NumCelleStratoOutput) As Double
   28 
'la matrice con i BIAS NODES per le celle di HIDDEN LAYER
   29 
Public M_BiasNodes_HIDDEN(NumCelleHiddenLayer) As Double
   30 
'la matrice con i BIAS NODES per le celle di STRATO OUTPUT
   31 
Public M_BiasNodes_OUTPUT(NumCelleStratoOutput) As Double
   32 
'vettore di collegamenti tra HIDDEN ed i rispettivi BIAS NODES
   33 
Public M_Strato_HID_BIAS(NumCelleHiddenLayer) As Double
   34 
'vettore di collegamenti tra OUTPUT ed i rispettivi BIAS NODES
   35 
Public M_Strato_OUT_BIAS(NumCelleStratoOutput) As Double
   36 
'=========================================================
   37 
'Per RETROPROPAGAZIONE ERRORI
   38 
'=========================================================
   39 
'cosa mi aspetto di ottenere in output
   40 
Public M_OUTPUT_DESIDERATI(NumCelleStratoOutput) As Double
   41 
'errori in output rispetto alle mie aspettative
   42 
Public M_ERRORI_OUTPUT(NumCelleStratoOutput) As Double
   43 
'errori in hidden layer come calcolati da backward propagation
   44 
Public M_ERRORI_HIDDEN(NumCelleHiddenLayer) As Double
   45 
'ultimi delta applicati ai pesi strato 1
   46 
Public M_ULTIMI_DELTAW_S1(NumCelleStratoInput, NumCelleStratoInput, NumCelleHiddenLayer)  As Double
   47 
'ultimi delta applicati ai pesi strato 2
   48 
Public M_ULTIMI_DELTAW_S2(NumCelleHiddenLayer, NumCelleStratoOutput)  As Double
   49 
'ultimi delta applicati ai pesi tra HIDDEN ed i rispettivi BIAS NODES
   50 
Public M_ULTIMI_DELTAW_HB(NumCelleHiddenLayer)  As Double
   51 
'ultimi delta applicati ai pesi tra OUTPUT ed i rispettivi BIAS NODES
   52 
Public M_ULTIMI_DELTAW_OB(NumCelleStratoOutput)  As Double
   53 
 
   54 
Public dbs As Database  ' variabile database per accesso DAO
   55 
Public rst As Recordset ' variabile recordset per accesso DAO
   56 
Public strCriteri As String 'stringa criterio di ricerca
   57 
 
   58 
'===> Colori per visualizzare esiti analisi
   59 
Public Const ROSSO As Long = 255
   60 
Public Const VERDE As Long = 65408
   61 
 
   62 
 
   63 
 
   64 
 
   65 
 
   66 
 
   67 
Sub AzzeraTutteLeMatrici()
   68 
'========================> Per pulizia integrale
   69 
On Error GoTo Err_Azzera
   70 
'========================> Indici locali
   71 
Dim LocalI As Integer
   72 
Dim LocalJ As Integer
   73 
Dim LocalK As Integer
   74 
'========================> Azzera nodi strato input
   75 
For LocalI = 1 To NumCelleStratoInput
   76 
    For LocalJ = 1 To NumCelleStratoInput
   77 
        M_INPUT(LocalI, LocalJ) = 0
   78 
    Next
   79 
Next
   80 
'========================> Azzera pesi di strato collegamenti 1
   81 
'========================> Azzera ERRORI pesi di strato collegamenti 1
   82 
For LocalI = 1 To NumCelleStratoInput
   83 
    For LocalJ = 1 To NumCelleStratoInput
   84 
        For LocalK = 1 To NumCelleHiddenLayer
   85 
            M_Strato1(LocalI, LocalJ, LocalK) = 0
   86 
            M_ULTIMI_DELTAW_S1(LocalI, LocalJ, LocalK) = 0
   87 
        Next
   88 
    Next
   89 
Next
   90 
'========================> Azzera nodi hidden layer
   91 
'========================> Azzera errori in hidden layer
   92 
'========================> Azzera BIAS NODES per le celle di HIDDEN LAYER
   93 
'========================> Azzera collegamenti tra HIDDEN LAYER ed i rispettivi BIAS NODES
   94 
'========================> Azzera ultimi delta pesi tra HIDDEN LAYER ed i BIAS NODES
   95 
For LocalI = 1 To NumCelleHiddenLayer
   96 
    M_HIDDEN(LocalI) = 0
   97 
    M_ERRORI_HIDDEN(LocalI) = 0
   98 
    M_BiasNodes_HIDDEN(LocalI) = 0
   99 
    M_Strato_HID_BIAS(LocalI) = 0
  100 
    M_ULTIMI_DELTAW_HB(LocalI) = 0
  101 
Next
  102 
'========================> Azzera pesi di strato collegamenti 2
  103 
'========================> Azzera ERRORI pesi di strato collegamenti 2
  104 
For LocalI = 1 To NumCelleHiddenLayer
  105 
    For LocalJ = 1 To NumCelleStratoOutput
  106 
        M_Strato2(LocalI, LocalJ) = 0
  107 
        M_ULTIMI_DELTAW_S2(LocalI, LocalJ) = 0
  108 
    Next
  109 
Next
  110 
'========================> Azzera strato output
  111 
'========================> Azzera cosa mi aspetto di ottenere in output
  112 
'========================> Azzera errori in output rispetto alle mie aspettative
  113 
'========================> Azzera BIAS NODES per le celle di strato output
  114 
'========================> Azzera collegamenti tra OUTPUT ed i rispettivi BIAS NODES
  115 
'========================> Azzera ultimi delta pesi tra OUTPUT ed i BIAS NODES
  116 
For LocalI = 1 To NumCelleStratoOutput
  117 
    M_OUTPUT(LocalI) = 0
  118 
    M_OUTPUT_DESIDERATI(LocalI) = 0
  119 
    M_ERRORI_OUTPUT(LocalI) = 0
  120 
    M_BiasNodes_OUTPUT(LocalI) = 0
  121 
    M_Strato_OUT_BIAS(LocalI) = 0
  122 
    M_ULTIMI_DELTAW_OB(LocalI) = 0
  123 
Next
  124 
 
  125 
Exit_Azzera:
  126 
    Exit Sub
  127 
 
  128 
Err_Azzera:
  129 
     MsgBox "AzzeraTutteLeMatrici: Errore " & Str(Err.Number) & " generato da " _
  130 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  131 
    Resume Exit_Azzera
  132 
   
  133 
End Sub
  134 
Sub AzzeraTrannePesiCollegamenti()
  135 
'========================> Per pulizia dei dati ma non dei pesi collegamenti
  136 
On Error GoTo Err_AzzNocollegamenti
  137 
Dim LocalI As Integer
  138 
Dim LocalJ As Integer
  139 
'========================> Azzera nodi strato input
  140 
For LocalI = 1 To NumCelleStratoInput
  141 
    For LocalJ = 1 To NumCelleStratoInput
  142 
        M_INPUT(LocalI, LocalJ) = 0
  143 
    Next
  144 
Next
  145 
'========================> Azzera nodi hidden layer
  146 
For LocalI = 1 To NumCelleHiddenLayer
  147 
    M_HIDDEN(LocalI) = 0
  148 
Next
  149 
'========================> Azzera strato output
  150 
'========================> Azzera cosa mi aspetto di ottenere in output
  151 
For LocalI = 1 To NumCelleStratoOutput
  152 
    M_OUTPUT(LocalI) = 0
  153 
    M_OUTPUT_DESIDERATI(LocalI) = 0
  154 
Next
  155 
'========================> Non tocco i BIAS NODES, che sono inizializzati ad 1 e
  156 
'========================> tali devono rimanere!
  157 
 
  158 
Exit_AzzNocollegamenti:
  159 
    Exit Sub
  160 
 
  161 
Err_AzzNocollegamenti:
  162 
     MsgBox "AzzeraTrannePesiCollegamenti: Errore " & Str(Err.Number) & " generato da " _
  163 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  164 
    Resume Exit_AzzNocollegamenti
  165 
   
  166 
End Sub
  167 
 
  168 
 
  169 
 
  170 
 
  171 
 
  172 
 
  173 
Sub PredisponiTabellaPesoCollegamenti(Valore As Double)
  174 
 
  175 
On Error GoTo Err_PredisponiTabellacollegamenti
  176 
'===================================================================
  177 
' Vinco la tentazione di rendere totalmente parametrica questa fase
  178 
' é ovvio che potrei farmi passare come parametro tutto quanto, numero
  179 
' dello strato e dimensione dello strato. Altrettanto ovvio è che potrei
  180 
' ricorrere ad una tabella di configurazione, con un record per ogni
  181 
' strato di pesi, dalla quale leggere ogni informazione necessaria
  182 
'===================================================================
  183 
' Da consigli ricevuti (vedi commenti iniziali) pare che mi bastino
  184 
' quattro celle nell'hidden layer, oltre alle quattro dell'output
  185 
' Quindi qui predispongo brutalmente 416 celle di cui 400 nel primo
  186 
' strato di pesi, e 16 nel secondo.
  187 
' Nel PRIMO STRATO DI collegamenti la cella è localizzata come segue:
  188 
' strato di pesi = 1
  189 
' x strato di input
  190 
' y stato di input
  191 
' x "hidden layer" (fisso a 1 : è un vettore unidimensionale)
  192 
' y "hidden layer" (da 1 a 4)
  193 
'=========================> Totale primo strato: 400 collegamenti
  194 
' Nel SECONDO STRATO DI collegamenti la cella è localizzata come segue:
  195 
' strato di pesi = 2
  196 
' x "hidden layer" (fisso a 1 : è un vettore unidimensionale)
  197 
' y "hidden layer" (da 1 a 4)
  198 
' x strato di output (fisso a 1 : è un vettore unidimensionale)
  199 
' y strato di output (da 1 a 4)
  200 
'=========================> Totale secondo strato: 16 collegamenti
  201 
' SONO PREVISTI DUE ULTERIORI STRATI
  202 
' UNO PER MEMORIZZARE IL PESO DEI COLLEGAMENTI "UNO A UNO" TRA LE CELLE
  203 
' DI HIDDEN LAYER ED I RISPETTIVI BIAS NODES
  204 
' UNO PER MEMORIZZARE IL PESO DEI COLLEGAMENTI "UNO A UNO" TRA LE CELLE
  205 
' DI OUTPUT LAYER ED I RISPETTIVI BIAS NODES
  206 
' Sebbene tecnicamente il significato non sia  esattamente identico a
  207 
' quello degli altri strati, nulla naturalmente impedisce di memorizzare
  208 
' e gestire questi collegamenti esattamente come gli altri
  209 
'======================================================================
  210 
' Nel TERZO STRATO DI collegamenti la cella è localizzata come segue:
  211 
' strato di pesi = 3
  212 
' x "hidden layer" (fisso a 1 : è un vettore unidimensionale)
  213 
' y "hidden layer" (da 1 a 4)
  214 
' x fisso a 00 - uniscono le singole celle alla singola cella di BIAS NODE
  215 
' y fisso a 00 - uniscono le singole celle alla singola cella di BIAS NODE
  216 
'=========================> Totale terzo strato: 4 collegamenti
  217 
' Nel QUARTO STRATO DI collegamenti la cella è localizzata come segue:
  218 
' strato di pesi = 4
  219 
' x strato di output (fisso a 1 : è un vettore unidimensionale)
  220 
' y strato di output (da 1 a 4)
  221 
' x fisso a 00 - uniscono le singole celle alla singola cella di BIAS NODE
  222 
' y fisso a 00 - uniscono le singole celle alla singola cella di BIAS NODE
  223 
'=========================> Totale terzo strato: 4 collegamenti
  224 
 
  225 
'===================================================================
  226 
'Previa eliminazione di tutti i records eventualmente esistenti,
  227 
'corredo la tabella PESO_COLLEGAMENTI di un adeguato numero di records,
  228 
'La chiave è una stringa del tipo "SIIJJiijj"
  229 
'dove:
  230 
'S è il numero dello strato di collegamenti
  231 
'II e JJ sono gli indici posizionali dello strato "di provenienza"
  232 
'ii e jj sono gli indici posizionali dello strato "di destinazione"
  233 
'==================> Indici Locali
  234 
Dim LocalItop As Integer
  235 
Dim LocalJtop As Integer
  236 
Dim LocalIbottom As Integer
  237 
Dim LocalJbottom As Integer
  238 
'==================> Numero strato
  239 
Dim LocalS As Integer
  240 
'==================> Chiave di ricerca
  241 
Dim Chiave As String
  242 
'==================> Random Seed
  243 
Dim RND_SEED As Integer
  244 
'==================> SORTEGGIO SEGNO
  245 
Dim PIUOMENO As Double
  246 
'==================> Chiedo conferma della cancellazione
  247 
'==================> del contenuto corrente della tabella PESO_COLLEGAMENTI
  248 
If MsgBox("Confermate l'azzeramento della tabella PESO_COLLEGAMENTI?", vbYesNo, "PredisponiTabellacollegamenti") = vbNo Then
  249 
    Exit Sub
  250 
End If
  251 
'==================> Svuoto tabella collegamenti
  252 
DoCmd.RunSQL "Delete * from PESO_COLLEGAMENTI"
  253 
 
  254 
' Restituisce il riferimento al database corrente.
  255 
Set dbs = CurrentDb
  256 
' Apre la tabella collegamenti come oggetto Recordset di tipo dynaset.
  257 
Set rst = dbs.OpenRecordset("PESO_COLLEGAMENTI", dbOpenTable)
  258 
' Attiva l'indice associato COORDINATE
  259 
rst.Index = "COORDINATE"
  260 
'==================================================================================
  261 
'Forzo in associazione ad ogni collegamento un valore random in un range - X / + X
  262 
'(X è il valore di inizializzazione passatomi nel parametro VALORE).
  263 
'==================================================================================
  264 
'=========================
  265 
'Inizializzo RANDOM SEED
  266 
'=========================
  267 
RND_SEED = 1
  268 
'=========================
  269 
' PRIMO STRATO - 400 COLLEGAMENTI
  270 
' mettono in contatto una matrice 10 x 10
  271 
' con una matrice 1 x 4
  272 
'=========================
  273 
LocalS = 1
  274 
'per ogni riga strato sopra
  275 
For LocalItop = 1 To 10
  276 
    'per ogni colonna strato sopra
  277 
    For LocalJtop = 1 To 10
  278 
        'per ogni riga strato sotto
  279 
        For LocalIbottom = 1 To 1
  280 
            'per ogni colonna strato sotto
  281 
            For LocalJbottom = 1 To 4
  282 
                'Compongo la chiave da salvare
  283 
                Chiave = LTrim$(Str$(LocalS)) + Format$(LocalItop, "00") + Format$(LocalJtop, "00") + Format$(LocalIbottom, "00") + Format$(LocalJbottom, "00")
  284 
                ' AGGIUNGO NUOVO RECORD
  285 
                rst.AddNew
  286 
                ' salvo chiave
  287 
                rst!Posizione = Chiave
  288 
                '===\
  289 
                '====> Devo assegnare un peso RANDOM nel range - Valore / + Valore
  290 
                '===/
  291 
                '=======================> "SORTEGGIO" il segno
  292 
                RND_SEED = RND_SEED + 1
  293 
                Randomize RND_SEED
  294 
                PIUOMENO = Rnd
  295 
                '=======================> "SORTEGGIO" il VALORE
  296 
                RND_SEED = RND_SEED + 1
  297 
                Randomize RND_SEED
  298 
                '================================================
  299 
                ' salvo valore calcolato con il segno sorteggiato
  300 
                '================================================
  301 
                If PIUOMENO > 0.5 Then
  302 
                    rst!Peso = (Int(100 * Rnd + 1) / 100) * 10 * Valore
  303 
                Else
  304 
                    rst!Peso = ((Int(100 * Rnd + 1) / 100) * 10 * Valore) * -1
  305 
                End If
  306 
                ' salvo il record
  307 
                rst.Update
  308 
            Next
  309 
        Next
  310 
    Next
  311 
Next
  312 
'=======================================
  313 
' SECONDO STRATO - 16 COLLEGAMENTI
  314 
' mettono in contatto una matrice 1 x 4
  315 
' con una matrice 1 x 4
  316 
'=======================================
  317 
LocalS = 2
  318 
'per ogni riga strato sopra
  319 
For LocalItop = 1 To 1
  320 
    'per ogni colonna strato sopra
  321 
    For LocalJtop = 1 To 4
  322 
        'per ogni riga strato sotto
  323 
        For LocalIbottom = 1 To 1
  324 
            'per ogni colonna strato sotto
  325 
            For LocalJbottom = 1 To 4
  326 
                'Compongo la chiave da salvare
  327 
                Chiave = LTrim$(Str$(LocalS)) + Format$(LocalItop, "00") + Format$(LocalJtop, "00") + Format$(LocalIbottom, "00") + Format$(LocalJbottom, "00")
  328 
                ' AGGIUNGO NUOVO RECORD
  329 
                rst.AddNew
  330 
                ' salvo chiave
  331 
                rst!Posizione = Chiave
  332 
                '=======================> "SORTEGGIO" il segno
  333 
                RND_SEED = RND_SEED + 1
  334 
                Randomize RND_SEED
  335 
                PIUOMENO = Rnd
  336 
                '=======================> "SORTEGGIO" il VALORE
  337 
                RND_SEED = RND_SEED + 1
  338 
                Randomize RND_SEED
  339 
                '===\
  340 
                '====> Devo assegnare un peso RANDOM nel range - Valore / + Valore
  341 
                '===/
  342 
                '================================================
  343 
                ' salvo valore calcolato con il segno sorteggiato
  344 
                '================================================
  345 
                If PIUOMENO > 0.5 Then
  346 
                    rst!Peso = (Int(100 * Rnd + 1) / 100) * 10 * Valore
  347 
                Else
  348 
                    rst!Peso = ((Int(100 * Rnd + 1) / 100) * 10 * Valore) * -1
  349 
                End If
  350 
                ' salvo il record
  351 
                rst.Update
  352 
            Next
  353 
        Next
  354 
    Next
  355 
Next
  356 
 
  357 
'=========================
  358 
' TERZO STRATO - 4 COLLEGAMENTI
  359 
' mettono in contatto quattro celle di un vettore 1 x 4
  360 
' con le rispettive celle di BIAS NODE senza incroci
  361 
'=========================
  362 
For LocalItop = 1 To NumCelleHiddenLayer
  363 
    'Compongo la chiave da salvare
  364 
    Chiave = "301" + Format$(LocalItop, "00") + "0000"
  365 
    ' AGGIUNGO NUOVO RECORD
  366 
    rst.AddNew
  367 
    ' salvo chiave
  368 
    rst!Posizione = Chiave
  369 
    '=======================> "SORTEGGIO" il segno
  370 
    RND_SEED = RND_SEED + 1
  371 
    Randomize RND_SEED
  372 
    PIUOMENO = Rnd
  373 
    '=======================> "SORTEGGIO" il VALORE
  374 
    RND_SEED = RND_SEED + 1
  375 
    Randomize RND_SEED
  376 
    '===\
  377 
    '====> Devo assegnare un peso RANDOM nel range - Valore / + Valore
  378 
    '===/
  379 
    '================================================
  380 
    ' salvo valore calcolato con il segno sorteggiato
  381 
    '================================================
  382 
    If PIUOMENO > 0.5 Then
  383 
        rst!Peso = (Int(100 * Rnd + 1) / 100) * 10 * Valore
  384 
    Else
  385 
        rst!Peso = ((Int(100 * Rnd + 1) / 100) * 10 * Valore) * -1
  386 
    End If
  387 
    ' salvo il record
  388 
    rst.Update
  389 
Next
  390 
'=========================
  391 
' QUARTO STRATO - 4 COLLEGAMENTI
  392 
' mettono in contatto quattro celle di un vettore 1 x 4
  393 
' con le rispettive celle di BIAS NODE senza incroci
  394 
'=========================
  395 
 
  396 
'========================> Legge pesi collegamenti strato 4 tra Output e Bias Nodes
  397 
For LocalItop = 1 To NumCelleStratoOutput
  398 
    'Compongo la chiave da salvare
  399 
    Chiave = "401" + Format$(LocalItop, "00") + "0000"
  400 
    ' AGGIUNGO NUOVO RECORD
  401 
    rst.AddNew
  402 
    ' salvo chiave
  403 
    rst!Posizione = Chiave
  404 
    '=======================> "SORTEGGIO" il segno
  405 
    RND_SEED = RND_SEED + 1
  406 
    Randomize RND_SEED
  407 
    PIUOMENO = Rnd
  408 
    '=======================> "SORTEGGIO" il VALORE
  409 
    RND_SEED = RND_SEED + 1
  410 
    Randomize RND_SEED
  411 
    '===\
  412 
    '====> Devo assegnare un peso RANDOM nel range - Valore / + Valore
  413 
    '===/
  414 
    '================================================
  415 
    ' salvo valore calcolato con il segno sorteggiato
  416 
    '================================================
  417 
    If PIUOMENO > 0.5 Then
  418 
        rst!Peso = (Int(100 * Rnd + 1) / 100) * 10 * Valore
  419 
    Else
  420 
        rst!Peso = ((Int(100 * Rnd + 1) / 100) * 10 * Valore) * -1
  421 
    End If
  422 
    ' salvo il record
  423 
    rst.Update
  424 
Next
  425 
'Chiudo recordset
  426 
rst.Close
  427 
'Azzero variabile Database
  428 
Set dbs = Nothing
  429 
 
  430 
Exit_PredisponiTabellacollegamenti:
  431 
    Exit Sub
  432 
 
  433 
Err_PredisponiTabellacollegamenti:
  434 
     MsgBox "PredisponiTabellaPesoCollegamenti: Errore " & Str(Err.Number) & " generato da " _
  435 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  436 
    Resume Exit_PredisponiTabellacollegamenti
  437 
   
  438 
End Sub
  439 
 
  440 
 
  441 
 
  442 
 
  443 
 
  444 
 
  445 
Sub SalvaPesoCollegamento(Strato As Integer, RTop As Integer, CTop As Integer, RBottom As Integer, CBottom As Integer, Valore As Double)
  446 
On Error GoTo Err_SalvaPesoCollegamento
  447 
'=========================================
  448 
'Salvo nella apposita tabella PESO_COLLEGAMENTI
  449 
'il valore DOUBLE del peso collegamento passatomi.
  450 
'La chiave è una stringa del tipo "SIIJJiijj"
  451 
'dove
  452 
'S è il numero dello strato di collegamenti
  453 
'II e JJ sono gli indici posizionali della cella "di provenienza"
  454 
'ii e jj sono gli indici posizionali della cella "di destinazione"
  455 
'--------------------------------------------------------------
  456 
'NEL CASO DEI COLLEGAMENTI CON BIAS NODES IL DISCORSO NON VALE!
  457 
'--------------------------------------------------------------
  458 
'"301010000" è il collegamento tra la prima cella hidden ed il suo bias node
  459 
'"301020000" è il collegamento tra la seconda cella hidden ed il suo bias node
  460 
'........
  461 
'"401010000" è il collegamento tra la prima cella output ed il suo bias node
  462 
'"401020000" è il collegamento tra la seconda cella output ed il suo bias node
  463 
'........
  464 
'=========================================
  465 
'==================> Chiave di ricerca
  466 
Dim Chiave As String
  467 
'Compongo la chiave da cercare
  468 
Chiave = LTrim$(Str$(Strato)) + Format$(RTop, "00") + Format$(CTop, "00") + Format$(RBottom, "00") + Format$(CBottom, "00")
  469 
' Restituisce il riferimento al database corrente.
  470 
Set dbs = CurrentDb
  471 
' Apre la tabella collegamenti come oggetto Recordset di tipo dynaset.
  472 
Set rst = dbs.OpenRecordset("PESO_COLLEGAMENTI", dbOpenTable)
  473 
' Attiva l'indice associato COORDINATE
  474 
rst.Index = "COORDINATE"
  475 
'Mi porto su record corrispondente alla chiave
  476 
rst.Seek "=", Chiave
  477 
'Prevedo l'eventualità di un errore
  478 
If rst.NoMatch Then
  479 
    MsgBox "SalvaPesoCollegamento - Chiave di ricerca " & Chiave & "non trovata"
  480 
    'Chiudo recordset
  481 
    rst.Close
  482 
    'Azzero variabile Database
  483 
    Set dbs = Nothing
  484 
    Exit Sub
  485 
End If
  486 
'Ricerca riuscita - mi porto in modalità EDIT
  487 
rst.Edit
  488 
'salvo nel campo peso il VALORE passato come parametro
  489 
rst!Peso = Valore
  490 
'Salvo il record
  491 
rst.Update
  492 
'Chiudo recordset
  493 
rst.Close
  494 
'Azzero variabile Database
  495 
Set dbs = Nothing
  496 
 
  497 
Exit_SalvaPesoCollegamento:
  498 
    Exit Sub
  499 
 
  500 
Err_SalvaPesoCollegamento:
  501 
     MsgBox "SalvaPesoCollegamento: Errore " & Str(Err.Number) & " generato da " _
  502 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  503 
    Resume Exit_SalvaPesoCollegamento
  504 
   
  505 
End Sub
  506 
 
  507 
 
  508 
 
  509 
 
  510 
 
  511 
Function LeggiPesoCollegamento(Strato As Integer, RTop As Integer, CTop As Integer, RBottom As Integer, CBottom As Integer) As Double
  512 
On Error GoTo Err_LeggiPesoCollegamento
  513 
'=========================================
  514 
'Leggo dalla apposita tabella peso_collegamenti
  515 
'il valore DOUBLE del peso del collegamento passatomi.
  516 
'La chiave è una stringa del tipo "SIIJJiijj"
  517 
'dove
  518 
'S è il numero dello strato di collegamenti
  519 
'II e JJ sono gli indici posizionali della cella "sopra"
  520 
'ii e jj sono gli indici posizionali della cella "sotto"
  521 
'--------------------------------------------------------------
  522 
'NEL CASO DEI COLLEGAMENTI CON BIAS NODES IL DISCORSO NON VALE!
  523 
'--------------------------------------------------------------
  524 
'"301010000" è il collegamento tra la prima cella hidden ed il suo bias node
  525 
'"301020000" è il collegamento tra la seconda cella hidden ed il suo bias node
  526 
'........
  527 
'"401010000" è il collegamento tra la prima cella output ed il suo bias node
  528 
'"401020000" è il collegamento tra la seconda cella output ed il suo bias node
  529 
'........
  530 
'=========================================
  531 
'==================> Chiave di ricerca
  532 
Dim Chiave As String
  533 
'==================> Valore da restituire
  534 
Dim Ridai As Double
  535 
 
  536 
'Compongo la chiave da cercare
  537 
Chiave = LTrim$(Str$(Strato)) + Format$(RTop, "00") + Format$(CTop, "00") + Format$(RBottom, "00") + Format$(CBottom, "00")
  538 
' Restituisce il riferimento al database corrente.
  539 
Set dbs = CurrentDb
  540 
' Apre la tabella PESO_COLLEGAMENTI come oggetto Recordset di tipo dynaset.
  541 
Set rst = dbs.OpenRecordset("PESO_COLLEGAMENTI", dbOpenTable)
  542 
' Attiva l'indice associato COORDINATE
  543 
rst.Index = "COORDINATE"
  544 
'Mi porto su record corrispondente alla chiave
  545 
rst.Seek "=", Chiave
  546 
'Prevedo l'eventualità di un errore
  547 
If rst.NoMatch Then
  548 
    MsgBox "LeggiPesoCollegamento - Chiave di ricerca " & Chiave & "non trovata"
  549 
    Ridai = 0
  550 
Else
  551 
    'Ricerca riuscita - salvo nel campo RIDAI il valore dato
  552 
    Ridai = rst!Peso
  553 
End If
  554 
'Chiudo recordset
  555 
rst.Close
  556 
'Azzero variabile Database
  557 
Set dbs = Nothing
  558 
 
  559 
LeggiPesoCollegamento = Ridai
  560 
 
  561 
Exit_LeggiPesoCollegamento:
  562 
    Exit Function
  563 
 
  564 
Err_LeggiPesoCollegamento:
  565 
     MsgBox "LeggiPesoColegamento: Errore " & Str(Err.Number) & " generato da " _
  566 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  567 
    Resume Exit_LeggiPesoCollegamento
  568 
   
  569 
End Function
  570 
 
  571 
 
  572 
 
  573 
Sub LeggiTuttiIPesiCollegamenti()
  574 
On Error GoTo Err_LeggiTutticollegamenti
  575 
'=========================================
  576 
'Leggo dalla apposita tabella PESO_COLLEGAMENTI
  577 
'tutti i pesi relativi ai collegamenti, e li
  578 
'metto nelle apposite matrici
  579 
'=========================================
  580 
'========================> Indici locali
  581 
Dim LocalI As Integer
  582 
Dim LocalJ As Integer
  583 
Dim LocalK As Integer
  584 
'==================> Chiave di ricerca
  585 
Dim Chiave As String
  586 
'==================> Nome Tabella PESO_COLLEGAMENTI
  587 
Dim NomeTabella As String
  588 
Dim Trovata As Boolean
  589 
Dim tdfCiclo As TableDef
  590 
 
  591 
'==================> Chiedo il nome della Tabella PESO_COLLEGAMENTI da usare
  592 
NomeTabella = UCase(InputBox(Prompt:="Da che tabella leggo il peso dei collegamenti (Tipicamente, da tabella PESO_COLLEGAMENTI)?", Title:="Scelta tabella peso collegamenti", XPos:=2000, YPos:=2000))
  593 
 
  594 
'==================> verifico l'esistenza della tabella
  595 
' Restituisce il riferimento al database corrente.
  596 
Set dbs = CurrentDb
  597 
' Per ora, non so se esiste
  598 
Trovata = False
  599 
' Spazzo tutte le TableDefs
  600 
For Each tdfCiclo In dbs.TableDefs
  601 
    If tdfCiclo.name = NomeTabella Then
  602 
        Trovata = True
  603 
    End If
  604 
Next
  605 
'=========================> Se la tabella peso collegamenti indicata non esiste, non proseguo
  606 
If Trovata = False Then
  607 
    Beep
  608 
    MsgBox "La tabella " & NomeTabella & " non esiste! Sospendo l'esecuzione."
  609 
    Exit Sub
  610 
End If
  611 
'==================> Accedo a tabella
  612 
' Apre la tabella peso collegamenti indicata come oggetto Recordset di tipo dynaset.
  613 
Set rst = dbs.OpenRecordset(NomeTabella, dbOpenTable)
  614 
' Attiva l'indice associato COORDINATE
  615 
rst.Index = "COORDINATE"
  616 
 
  617 
' PRIMO STRATO collegamenti - matrice tridimensionale 10 x 10 x 4 = 400 collegamenti
  618 
' SECONDO STRATO collegamenti - matrice bidimensionale 4 x 4 = 16 CELLE
  619 
' TERZO STRATO collegamenti HIDDEN LAYER / BIAS NODES - vettore unidimensionale 4 CELLE
  620 
' QUARTO STRATO collegamenti STRATO OUTPUT / BIAS NODES - vettore unidimensionale 4 CELLE
  621 
'========================> Legge pesi collegamenti strato 1 tra INPUT e HIDDEN
  622 
For LocalI = 1 To NumCelleStratoInput
  623 
    For LocalJ = 1 To NumCelleStratoInput
  624 
        For LocalK = 1 To NumCelleHiddenLayer
  625 
            'Compongo la chiave da cercare
  626 
            Chiave = "1" + Format$(LocalI, "00") + Format$(LocalJ, "00") + "01" + Format$(LocalK, "00")
  627 
            'Mi porto su record corrispondente alla chiave
  628 
            rst.Seek "=", Chiave
  629 
            'Prevedo l'eventualità di un errore
  630 
            If rst.NoMatch Then
  631 
                MsgBox "LeggiTuttiIPesiCollegamenti - Chiave di ricerca " & Chiave & "non trovata"
  632 
            Else
  633 
                M_Strato1(LocalI, LocalJ, LocalK) = rst!Peso
  634 
            End If
  635 
        Next
  636 
    Next
  637 
Next
  638 
'========================> Legge pesi collegamenti strato 2 tra hidden e output
  639 
For LocalI = 1 To NumCelleHiddenLayer
  640 
    For LocalJ = 1 To NumCelleStratoOutput
  641 
            'Compongo la chiave da cercare
  642 
            Chiave = "201" + Format$(LocalI, "00") + "01" + Format$(LocalJ, "00")
  643 
            'Mi porto su record corrispondente alla chiave
  644 
            rst.Seek "=", Chiave
  645 
            'Prevedo l'eventualità di un errore
  646 
            If rst.NoMatch Then
  647 
                MsgBox "LeggiTuttiIPesiCollegamenti - Chiave di ricerca " & Chiave & "non trovata"
  648 
            Else
  649 
                M_Strato2(LocalI, LocalJ) = rst!Peso
  650 
            End If
  651 
    Next
  652 
Next
  653 
 
  654 
'========================> Legge pesi collegamenti strato 3 tra hidden e Bias Nodes
  655 
For LocalI = 1 To NumCelleHiddenLayer
  656 
    'Compongo la chiave da cercare
  657 
    Chiave = "301" + Format$(LocalI, "00") + "0000"
  658 
    'Mi porto su record corrispondente alla chiave
  659 
    rst.Seek "=", Chiave
  660 
    'Prevedo l'eventualità di un errore
  661 
    If rst.NoMatch Then
  662 
        MsgBox "LeggiTuttiIPesiCollegamenti - Chiave di ricerca " & Chiave & "non trovata"
  663 
    Else
  664 
        M_Strato_HID_BIAS(LocalI) = rst!Peso
  665 
    End If
  666 
Next
  667 
 
  668 
'========================> Legge pesi collegamenti strato 4 tra Output e Bias Nodes
  669 
For LocalI = 1 To NumCelleStratoOutput
  670 
    'Compongo la chiave da cercare
  671 
    Chiave = "401" + Format$(LocalI, "00") + "0000"
  672 
    'Mi porto su record corrispondente alla chiave
  673 
    rst.Seek "=", Chiave
  674 
    'Prevedo l'eventualità di un errore
  675 
    If rst.NoMatch Then
  676 
        MsgBox "LeggiTuttiIPesiCollegamenti - Chiave di ricerca " & Chiave & "non trovata"
  677 
    Else
  678 
        M_Strato_OUT_BIAS(LocalI) = rst!Peso
  679 
    End If
  680 
Next
  681 
 
  682 
'Chiudo recordset
  683 
rst.Close
  684 
'Azzero variabile Database
  685 
Set dbs = Nothing
  686 
 
  687 
'============> Avviso di avere provveduto
  688 
MsgBox "Tutti i pesi dei collegamenti sono stati letti dalla tabella " & NomeTabella
  689 
 
  690 
 
  691 
Exit_LeggiTutticollegamenti:
  692 
    Exit Sub
  693 
 
  694 
Err_LeggiTutticollegamenti:
  695 
     MsgBox "LeggiTuttiIPesiCollegamenti: Errore " & Str(Err.Number) & " generato da " _
  696 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  697 
    Resume Exit_LeggiTutticollegamenti
  698 
   
  699 
End Sub
  700 
 
  701 
 
  702 
 
  703 
 
  704 
Sub ScriviTuttiIPesiCollegamenti()
  705 
On Error GoTo Err_ScriviTutticollegamenti
  706 
'=========================================
  707 
'Leggo dalle apposite matrici tutti i valori
  708 
'relativi al peso dei collegamenti, e li
  709 
'metto nella apposita tabella
  710 
'=========================================
  711 
'========================> Indici locali
  712 
Dim LocalI As Integer
  713 
Dim LocalJ As Integer
  714 
Dim LocalK As Integer
  715 
'==================> Chiave di ricerca
  716 
Dim Chiave As String
  717 
'==================> Nome Tabella PESO_COLLEGAMENTI
  718 
Dim NomeTabella As String
  719 
Dim Trovata As Boolean
  720 
Dim tdfCiclo As TableDef
  721 
'==================> Chiedo il nome della Tabella PESO_COLLEGAMENTIcollegamenti da usare
  722 
NomeTabella = UCase(InputBox(Prompt:="In che tabella scrivo il peso dei collegamenti (Tipicamente, in tabella PESO_COLLEGAMENTI)?", Title:="Scelta tabella peso collegamenti", XPos:=2000, YPos:=2000))
  723 
'==================> verifico l'esistenza della tabella
  724 
' Restituisce il riferimento al database corrente.
  725 
Set dbs = CurrentDb
  726 
' Per ora, non so se esiste
  727 
Trovata = False
  728 
' Spazzo tutte le TableDefs
  729 
For Each tdfCiclo In dbs.TableDefs
  730 
    If tdfCiclo.name = NomeTabella Then
  731 
        Trovata = True
  732 
    End If
  733 
Next
  734 
'=========================> Se la tabella peso collegamenti indicata non esiste, non proseguo
  735 
If Trovata = False Then
  736 
    Beep
  737 
    MsgBox "La tabella " & NomeTabella & " non esiste! Sospendo l'esecuzione."
  738 
    Exit Sub
  739 
End If
  740 
'==================> Accedo a tabella
  741 
' Restituisce il riferimento al database corrente.
  742 
Set dbs = CurrentDb
  743 
' Apre la tabella PESO_COLLEGAMENTI come oggetto Recordset di tipo dynaset.
  744 
Set rst = dbs.OpenRecordset(NomeTabella, dbOpenTable)
  745 
' Attiva l'indice associato COORDINATE
  746 
rst.Index = "COORDINATE"
  747 
 
  748 
' PRIMO STRATO collegamenti - matrice tridimensionale 10 x 10 x 4 = 400 collegamenti
  749 
' STRATO DATI DUE - HIDDEN LAYER - vettore unidimensionale 4 celle
  750 
' SECONDO STRATO collegamenti - matrice bidimensionale 4 x 4 = 16 collegamenti
  751 
 
  752 
 
  753 
'========================> Scrive pesi collegamenti strato 1 - tra Input e Hidden
  754 
For LocalI = 1 To NumCelleStratoInput
  755 
    For LocalJ = 1 To NumCelleStratoInput
  756 
        For LocalK = 1 To NumCelleHiddenLayer
  757 
            'Compongo la chiave da cercare
  758 
            Chiave = "1" + Format$(LocalI, "00") + Format$(LocalJ, "00") + "01" + Format$(LocalK, "00")
  759 
            'Mi porto su record corrispondente alla chiave
  760 
            rst.Seek "=", Chiave
  761 
            'Prevedo l'eventualità di un errore
  762 
            If rst.NoMatch Then
  763 
                MsgBox "ScriviTuttiIcollegamenti - Chiave di ricerca " & Chiave & "non trovata"
  764 
            Else
  765 
                '=============> Mi porto in modalità modifica record
  766 
                rst.Edit
  767 
                '=============> Salvo il peso della cella corrente
  768 
                rst!Peso = M_Strato1(LocalI, LocalJ, LocalK)
  769 
                '=============> Salvo il record
  770 
                rst.Update
  771 
            End If
  772 
        Next
  773 
    Next
  774 
Next
  775 
'========================> Scrive pesi collegamenti strato 2 - tra Hidden e Output
  776 
For LocalI = 1 To NumCelleHiddenLayer
  777 
    For LocalJ = 1 To NumCelleStratoOutput
  778 
            'Compongo la chiave da cercare
  779 
            Chiave = "201" + Format$(LocalI, "00") + "01" + Format$(LocalJ, "00")
  780 
            'Mi porto su record corrispondente alla chiave
  781 
            rst.Seek "=", Chiave
  782 
            'Prevedo l'eventualità di un errore
  783 
            If rst.NoMatch Then
  784 
                MsgBox "ScriviTuttiIPesiCollegamenti - Chiave di ricerca " & Chiave & "non trovata"
  785 
            Else
  786 
                '=============> Mi porto in modalità modifica record
  787 
                rst.Edit
  788 
                '=============> Salvo il peso della cella corrente
  789 
                rst!Peso = M_Strato2(LocalI, LocalJ)
  790 
                '=============> Salvo il record
  791 
                rst.Update
  792 
            End If
  793 
    Next
  794 
Next
  795 
 
  796 
'=========================
  797 
' TERZO STRATO - 4 COLLEGAMENTI
  798 
' mettono in contatto quattro celle di un vettore 1 x 4
  799 
' con le rispettive celle di BIAS NODE senza incroci
  800 
'=========================
  801 
For LocalI = 1 To NumCelleHiddenLayer
  802 
    'Compongo la chiave da cercare
  803 
    Chiave = "301" + Format$(LocalI, "00") + "0000"
  804 
    'Mi porto su record corrispondente alla chiave
  805 
    rst.Seek "=", Chiave
  806 
    'Prevedo l'eventualità di un errore
  807 
    If rst.NoMatch Then
  808 
        MsgBox "ScriviTuttiIcollegamenti - Chiave di ricerca " & Chiave & "non trovata"
  809 
    Else
  810 
        '=============> Mi porto in modalità modifica record
  811 
        rst.Edit
  812 
        '=============> Salvo il peso della cella corrente
  813 
        rst!Peso = M_Strato_HID_BIAS(LocalI)
  814 
        '=============> Salvo il record
  815 
        rst.Update
  816 
    End If
  817 
Next
  818 
'=========================
  819 
' QUARTO STRATO - 4 COLLEGAMENTI
  820 
' mettono in contatto quattro celle di un vettore 1 x 4
  821 
' con le rispettive celle di BIAS NODE senza incroci
  822 
'=========================
  823 
 
  824 
'========================> Legge pesi collegamenti strato 4 tra Output e Bias Nodes
  825 
For LocalI = 1 To NumCelleStratoOutput
  826 
    'Compongo la chiave da cercare
  827 
    Chiave = "401" + Format$(LocalI, "00") + "0000"
  828 
    'Mi porto su record corrispondente alla chiave
  829 
    rst.Seek "=", Chiave
  830 
    'Prevedo l'eventualità di un errore
  831 
    If rst.NoMatch Then
  832 
        MsgBox "ScriviTuttiIcollegamenti - Chiave di ricerca " & Chiave & "non trovata"
  833 
    Else
  834 
        '=============> Mi porto in modalità modifica record
  835 
        rst.Edit
  836 
        '=============> Salvo il peso della cella corrente
  837 
        rst!Peso = M_Strato_OUT_BIAS(LocalI)
  838 
        '=============> Salvo il record
  839 
        rst.Update
  840 
    End If
  841 
Next
  842 
 
  843 
 
  844 
 
  845 
 
  846 
'Chiudo recordset
  847 
rst.Close
  848 
'Azzero variabile Database
  849 
Set dbs = Nothing
  850 
 
  851 
Exit_ScriviTutticollegamenti:
  852 
    Exit Sub
  853 
 
  854 
Err_ScriviTutticollegamenti:
  855 
     MsgBox "ScriviTuttiIPesiCollegamenti: Errore " & Str(Err.Number) & " generato da " _
  856 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  857 
    Resume Exit_ScriviTutticollegamenti
  858 
   
  859 
End Sub
  860 
 
  861 
 
  862 
 
  863 
 
  864 
Sub FillMatriceInput(matricedati() As Integer)
  865 
'==================================================
  866 
'Trasferisco una matrice di dati 10 x 10 in M_INPUT
  867 
'==================================================
  868 
On Error GoTo Err_FillMatriceInput
  869 
'========================> Indici locali
  870 
Dim LocalI As Integer
  871 
Dim LocalJ As Integer
  872 
'========================> Azzera strato input
  873 
For LocalI = 1 To NumCelleStratoInput
  874 
    For LocalJ = 1 To NumCelleStratoInput
  875 
        M_INPUT(LocalI, LocalJ) = matricedati(LocalI, LocalJ)
  876 
    Next
  877 
Next
  878 
 
  879 
Exit_FillMatriceInput:
  880 
    Exit Sub
  881 
 
  882 
Err_FillMatriceInput:
  883 
     MsgBox "FillMatriceInput: Errore " & Str(Err.Number) & " generato da " _
  884 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  885 
    Resume Exit_FillMatriceInput
  886 
   
  887 
End Sub
  888 
 
  889 
 
  890 
 
  891 
 
  892 
 
  893 
 
  894 
=================================
  895 
=================================
  896 
====  F O R M ===================
  897 
=================================
  898 
=================================
  899 
 
  900 
Option Compare Database
  901 
Option Explicit
  902 
'============> Matrice che contiene quanto visualiuzzato sul display
  903 
'============> 10 x 10 a video - metodologicamente non attiene alla
  904 
'============> rete neurale, ma è un semplice stratagemma per rappresentare
  905 
'============> un problema a video
  906 
Dim MatriceVideo(10, 10) As Integer
  907 
'============> queste righe sono uno stratagemma che metodologicamente
  908 
'============> non attiene alla rete neurale, per riempire rapidamente
  909 
'============> il display 10 x 10 su video con una figura (pattern) da
  910 
'============> usare come input per la analisi o l'addestramento
  911 
Dim Righevideo(10) As String
  912 
 
  913 
 
  914 
Public Sub ColoraCella(quale As String)
  915 
'Error trap
  916 
On Error GoTo Err_ColoraCella
  917 
 
  918 
If Me(quale).BackColor = 0 Then
  919 
        Me(quale).BackColor = 16777215
  920 
Else
  921 
        Me(quale).BackColor = 0
  922 
End If
  923 
 
  924 
 
  925 
Exit_ColoraCella:
  926 
    Exit Sub
  927 
 
  928 
Err_ColoraCella:
  929 
    MsgBox "ColoraCella: Errore " & Str(Err.Number) & " generato da " _
  930 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  931 
    Resume Exit_ColoraCella
  932 
End Sub
  933 
 
  934 
 
  935 
 
  936 
 
  937 
 
  938 
Private Sub Form_Open(Cancel As Integer)
  939 
'Error trap
  940 
On Error GoTo Err_Form_Open
  941 
 
  942 
'Pulisco il riquadro video
  943 
PulisciDisplay
  944 
'Svuoto "MatriceVideo"
  945 
SvuotaMatriceVideo
  946 
 
  947 
'=========================> Tutte a "rosso" le caselle degli esiti
  948 
SvuotaEsiti
  949 
'=========================>
  950 
Me!prova.Caption = ""
  951 
 
  952 
'===========================
  953 
'Mostro spiegazione iniziale
  954 
'===========================
  955 
Me.Presentazione.Top = 0
  956 
Me.Presentazione.Left = 0
  957 
Me.Presentazione.Width = 8610
  958 
Me.Presentazione.Height = 6100
  959 
Me.Presentazione.Visible = True
  960 
 
  961 
Exit_Form_Open:
  962 
    Exit Sub
  963 
 
  964 
Err_Form_Open:
  965 
    MsgBox "FORM_OPEN: Errore " & Str(Err.Number) & " generato da " _
  966 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  967 
    Resume Exit_Form_Open
  968 
 
  969 
End Sub
  970 
 
  971 
 
  972 
 
  973 
 
  974 
Private Sub Chiudi_Click()
  975 
On Error GoTo Err_Chiudi_Click
  976 
 
  977 
    'Chiudo la form
  978 
    DoCmd.Close
  979 
 
  980 
Exit_Chiudi_Click:
  981 
    Exit Sub
  982 
 
  983 
Err_Chiudi_Click:
  984 
     MsgBox "Chiudi: Errore " & Str(Err.Number) & " generato da " _
  985 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
  986 
    Resume Exit_Chiudi_Click
  987 
   
  988 
End Sub
  989 
 
  990 
 
  991 
 
  992 
 
  993 
 
  994 
Private Sub Inizializza_Click()
  995 
On Error GoTo Err_IniClick
  996 
 
  997 
'=========================> Tutte a "rosso" le caselle degli esiti
  998 
SvuotaEsiti
  999 
 
 1000 
If MsgBox("Questa inizializzazione svuoterà gli strati della rete neurale! Procedo?", vbYesNo, "Attenzione!") = vbYes Then
 1001 
    '====================> Azzero tutte le matrici
 1002 
    AzzeraTutteLeMatrici
 1003 
    '======================================================================
 1004 
    ' Leggo da tabella PESO COLLEGAMENTI (o da altra indicata dall'utente)
 1005 
    ' i i valori da porre nelle matrici dei collegamenti
 1006 
    '======================================================================
 1007 
    '====================> Riempio i vettori dei collegamenti
 1008 
    LeggiTuttiIPesiCollegamenti
 1009 
End If
 1010 
 
 1011 
Exit_IniClick:
 1012 
    Exit Sub
 1013 
 
 1014 
Err_IniClick:
 1015 
     MsgBox "Pulsante Inizializza: Errore " & Str(Err.Number) & " generato da " _
 1016 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
 1017 
    Resume Exit_IniClick
 1018 
End Sub
 1019 
 
 1020 
Private Sub Presentazione_Click()
 1021 
On Error GoTo Err_Presentazione
 1022 
 
 1023 
'Faccio sparire il riquadro iniziale di testo
 1024 
 
 1025 
'per prima cosa, passo il "fuoco" da un'altra parte, così da
 1026 
'potere rendere invisibile il controllo corrente
 1027 
 
 1028 
Me.Chiudi.SetFocus
 1029 
Me.Presentazione.Visible = False
 1030 
 
 1031 
 
 1032 
Exit_Presentazione:
 1033 
    Exit Sub
 1034 
 
 1035 
Err_Presentazione:
 1036 
     MsgBox "Presentazione_Click: Errore " & Str(Err.Number) & " generato da " _
 1037 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
 1038 
    Resume Exit_Presentazione
 1039 
   
 1040 
End Sub
 1041 
 
 1042 
 
 1043 
 
 1044 
 
 1045 
 
 1046 
Sub PulisciDisplay()
 1047 
On Error GoTo Err_PulisciDisplay
 1048 
Dim LocalI As Integer
 1049 
Dim LocalJ As Integer
 1050 
Dim NomeCTRL As String
 1051 
 
 1052 
'============================
 1053 
' Pulisco il display 10x10
 1054 
'============================
 1055 
For LocalI = 1 To 10
 1056 
    For LocalJ = 1 To 10
 1057 
        'Compongo il nome del controllo-etichetta di cui modificare la proprietà CAPTION
 1058 
        NomeCTRL = "R" & LTrim$(Str$(LocalI)) & "C" & LTrim$(Str$(LocalJ))
 1059 
        '"Scrivo" nella CAPTION del controllo-etichetta di cui ho composto il nome il corrispettivo
 1060 
        'elemento della matrice di Score
 1061 
        Me(NomeCTRL).Caption = " "
 1062 
        Me(NomeCTRL).BackColor = 16777215
 1063 
    Next
 1064 
Next
 1065 
 
 1066 
Exit_PulisciDisplay:
 1067 
    Exit Sub
 1068 
 
 1069 
Err_PulisciDisplay:
 1070 
     MsgBox "PulisciDisplay: Errore " & Str(Err.Number) & " generato da " _
 1071 
            & Err.Source & Chr(13) & Err.Description, , "Errore", Err.HelpFile, Err.HelpContext
 1072 
     Resume Exit_PulisciDisplay
 1073 
End Sub
 1074 
 
 1075 
 
 1076 
 
 1077 
 
 1078 
 
 1079 
Private Sub R1C1_Click()
 1080 
ColoraCella ("R1C1")
 1081 
End Sub
 1082 
 
 1083 
Private Sub R1C2_Click()
 1084 
ColoraCella ("R1C2")
 1085 
End Sub
 1086 
Private Sub R1C3_Click()
 1087 
ColoraCella ("R1C3")
 1088 
End Sub
 1089 
Private Sub R1C4_Click()
 1090 
ColoraCella ("R1C4")
 1091 
End Sub
 1092 
Private Sub R1C5_Click()
 1093 
ColoraCella ("R1C5")
 1094 
End Sub
 1095 
Private Sub R1C6_Click()
 1096 
ColoraCella ("R1C6")
 1097 
End Sub
 1098 
Private Sub R1C7_Click()
 1099 
ColoraCella ("R1C7")
 1100 
End Sub
 1101 
Private Sub R1C8_Click()
 1102 
ColoraCella ("R1C8")
 1103 
End Sub
 1104 
Private Sub R1C9_Click()
 1105 
ColoraCella ("R1C9")
 1106 
End Sub
 1107 
Private Sub R1C10_Click()
 1108 
ColoraCella ("R1C10")
 1109 
End Sub
 1110 
Private Sub R2C1_Click()
 1111 
ColoraCella ("R2C1")
 1112 
End Sub
 1113 
Private Sub R2C2_Click()
 1114 
ColoraCella ("R2C2")
 1115 
End Sub
 1116 
Private Sub R2C3_Click()
 1117 
ColoraCella ("R2C3")
 1118 
End Sub
 1119 
Private Sub R2C4_Click()
 1120 
ColoraCella ("R2C4")
 1121 
End Sub
 1122 
Private Sub R2C5_Click()
 1123 
ColoraCella ("R2C5")
 1124 
End Sub
 1125 
Private Sub R2C6_Click()
 1126 
ColoraCella ("R2C6")
 1127 
End Sub
 1128 
Private Sub R2C7_Click()
 1129 
ColoraCella ("R2C7")
 1130 
End Sub
 1131 
Private Sub R2C8_Click()
 1132 
ColoraCella ("R2C8")
 1133 
End Sub
 1134 
Private Sub R2C9_Click()
 1135 
ColoraCella ("R2C9")
 1136 
End Sub
 1137 
Private Sub R2C10_Click()
 1138 
ColoraCella ("R2C10")
 1139 
End Sub
 1140 
Private Sub R3C1_Click()
 1141 
ColoraCella ("R3C1")
 1142 
End Sub
 1143 
Private Sub R3C2_Click()
 1144 
ColoraCella ("R3C2")
 1145 
End Sub
 1146 
Private Sub R3C3_Click()
 1147 
ColoraCella ("R3C3")
 1148 
End Sub
 1149 
Private Sub R3C4_Click()
 1150 
ColoraCella ("R3C4")
 1151 
End Sub
 1152 
Private Sub R3C5_Click()
 1153 
ColoraCella ("R3C5")
 1154 
End Sub
 1155 
Private Sub R3C6_Click()
 1156 
ColoraCella ("R3C6")
 1157 
End Sub
 1158 
Private Sub R3C7_Click()
 1159 
ColoraCella ("R3C7")
 1160 
End Sub
 1161 
Private Sub R3C8_Click()
 1162 
ColoraCella ("R3C8")
 1163 
End Sub
 1164 
Private Sub R3C9_Click()
 1165 
ColoraCella ("R3C9")
 1166 
End Sub
 1167 
Private Sub R3C10_Click()
 1168 
ColoraCella ("R3C10")
 1169 
End Sub
 1170 
Private Sub R4C1_Click()
 1171 
ColoraCella ("R4C1")
 1172 
End Sub
 1173 
Private Sub R4C2_Click()
 1174 
ColoraCella ("R4C2")
 1175 
End Sub
 1176 
Private Sub R4C3_Click()
 1177 
ColoraCella ("R4C3")
 1178 
End Sub
 1179 
Private Sub R4C4_Click()
 1180 
ColoraCella ("R4C4")
 1181 
End Sub
 1182 
Private Sub R4C5_Click()
 1183 
ColoraCella ("R4C5")
 1184 
End Sub
 1185 
Private Sub R4C6_Click()
 1186 
ColoraCella ("R4C6")
 1187 
End Sub
 1188 
Private Sub R4C7_Click()
 1189 
ColoraCella ("R4C7")
 1190 
End Sub
 1191 
Private Sub R4C8_Click()
 1192 
ColoraCella ("R4C8")
 1193 
End Sub
 1194 
Private Sub R4C9_Click()
 1195 
ColoraCella ("R4C9")
 1196 
End Sub
 1197 
Private Sub R4C10_Click()
 1198 
ColoraCella ("R4C10")
 1199 
End Sub
 1200 
Private Sub R5C1_Click()
 1201 
ColoraCella ("R5C1")
 1202 
End Sub
 1203 
Private Sub R5C2_Click()
 1204 
ColoraCella ("R5C2")
 1205 
End Sub
 1206 
Private Sub R5C3_Click()
 1207 
ColoraCella ("R5C3")
 1208 
End Sub
 1209 
Private Sub R5C4_Click()
 1210 
ColoraCella ("R5C4")
 1211 
End Sub
 1212 
Private Sub R5C5_Click()
 1213 
ColoraCella ("R5C5")
 1214 
End Sub
 1215 
Private Sub R5C6_Click()
 1216 
ColoraCella ("R5C6")
 1217 
End Sub
 1218 
Private Sub R5C7_Click()
 1219 
ColoraCella ("R5C7")
 1220 
End Sub
 1221 
Private Sub R5C8_Click()
 1222 
ColoraCella ("R5C8")
 1223 
End Sub
 1224 
Private Sub R5C9_Click()
 1225 
ColoraCella ("R5C9")
 1226 
End Sub
 1227 
Private Sub R5C10_Click()
 1228 
ColoraCella ("R5C10")
 1229 
End Sub
 1230 
Private Sub R6C1_Click()
 1231 
ColoraCella ("R6C1")
 1232 
End Sub
 1233 
Private Sub R6C2_Click()
 1234 
ColoraCella ("R6C2")
 1235 
End Sub
 1236 
Private Sub R6C3_Click()
 1237 
ColoraCella ("R6C3")
 1238 
End Sub
 1239 
Private Sub R6C4_Click()
 1240 
ColoraCella ("R6C4")
 1241 
End Sub
 1242 
Private Sub R6C5_Click()
 1243 
ColoraCella ("R6C5")
 1244 
End Sub
 1245 
Private Sub R6C6_Click()
 1246 
ColoraCella ("R6C6")
 1247 
End Sub
 1248 
Private Sub R6C7_Click()
 1249 
ColoraCella ("R6C7")
 1250 
End Sub
 1251 
Private Sub R6C8_Click()
 1252 
ColoraCella ("R6C8")
 1253 
End Sub
 1254 
Private Sub R6C9_Click()
 1255 
ColoraCella ("R6C9")
 1256 
End Sub
 1257 
Private Sub R6C10_Click()
 1258 
ColoraCella ("R6C10")
 1259 
End Sub
 1260 
Private Sub R7C1_Click()
 1261 
ColoraCella ("R7C1")
 1262 
End Sub
 1263 
Private Sub R7C2_Click()
 1264 
ColoraCella ("R7C2")
 1265 
End Sub
 1266 
Private Sub R7C3_Click()
 1267 
ColoraCella ("R7C3")
 1268 
End Sub
 1269 
Private Sub R7C4_Click()
 1270 
ColoraCella ("R7C4")
 1271 
End Sub
 1272 
Private Sub R7C5_Click()
 1273 
ColoraCella ("R7C5")
 1274 
End Sub
 1275 
Private Sub R7C6_Click()
 1276 
ColoraCella ("R7C6")
 1277 
End Sub