From cdc2b357a6ddca172950039358223aebccd0f7cc Mon Sep 17 00:00:00 2001 From: Pablo Date: Sat, 19 Mar 2022 08:12:44 -0300 Subject: [PATCH] New functions. --- grsp0.scm | 9 ++++++- grsp2.scm | 14 ++++++++--- grsp3.scm | 75 ++++++++++++++++++++++++++++++++++++++----------------- grsp8.scm | 60 ++++++++++++++++++++++++++------------------ 4 files changed, 106 insertions(+), 52 deletions(-) diff --git a/grsp0.scm b/grsp0.scm index 9bd5e8d..64c7d4c 100644 --- a/grsp0.scm +++ b/grsp0.scm @@ -153,7 +153,8 @@ (newlines 100)) -;;;; pres - Display results. +;;;; pres - Display results with areference string or title and an equal sign +;; preceeding the results string. ;; ;; Keywords: ;; - console, strings. @@ -162,6 +163,9 @@ ;; - p_s1: reference, string. ;; - p_s2: result, string. ;; +;; Notes: +;; - See pres2. +;; (define (pres p_s1 p_s2) (let ((res1 " ")) @@ -179,6 +183,9 @@ ;; - p_s1: reference, string. ;; - p_s2: result. ;; +;; Notes: +;; - See pres. +;; (define (pres2 p_s1 p_s2) (newline) (display p_s1) diff --git a/grsp2.scm b/grsp2.scm index 7293d74..56eeb9e 100644 --- a/grsp2.scm +++ b/grsp2.scm @@ -327,6 +327,7 @@ (b1 #f) (i1 2)) + ;; Cycle. (while (eq? b1 #f) (cond ((= 0 (remainder p_n1 i1)) (set! res1 #f) @@ -334,6 +335,7 @@ (set! i1 (+ i1 1)) (cond ((>= i1 p_n1) (set! b1 #t)))) + (cond ((grsp-getles p_n1 -1 1) (set! res1 #f))) @@ -886,6 +888,7 @@ (set! res1 (+ (/ (expt p_k1 p_n1) (grsp-fact p_k1)))) (set! i1 (+ i1 1))))))) + (set! res1 (* res1 (/ 1 (grsp-e)))) res1)) @@ -962,8 +965,8 @@ (let ((res1 0)) (set! res1 (+ p_y1 (* (- p_x3 p_x1) - (/ (- p_y2 p_y1) - (- p_x2 p_x1))))) + (/ (- p_y2 p_y1) + (- p_x2 p_x1))))) res1)) @@ -1020,6 +1023,8 @@ (set! v4 (/ 1 v7)) (set! v3 (* v4 v6)) (set! v5 (* v2 v7)))) + + ;; Compose results. (set! res1 (list v3 v4 v5)) res1)) @@ -1715,7 +1720,7 @@ ;; - [30]. ;; (define (grsp-intifint p_b1 p_z1 p_z2) - (let ((res1 p_z2) ; 0 + (let ((res1 p_z2) (z1 p_z1)) (cond ((equal? p_b1 #t) @@ -1809,7 +1814,8 @@ (set! n2 (+ n2 1))) ((equal? s1 "#tr") (set! n3 (+ n2 1)))))) - + + ;; Compose results. (set! res1 (list n2 n3)) res1)) diff --git a/grsp3.scm b/grsp3.scm index 9503c28..2b1396d 100644 --- a/grsp3.scm +++ b/grsp3.scm @@ -2,7 +2,7 @@ ;; ;; grsp3.scm ;; -;; Matrices. +;; Relational matrices and databases. ;; ;; ============================================================================= ;; @@ -2298,6 +2298,7 @@ (set! ln1 (grsp-matrix-esi 3 p_a1)) (set! hn1 (grsp-matrix-esi 4 p_a1)) + ;; Cycle. (set! i1 lm1) (while (<= i1 hm1) (set! j1 ln1) @@ -2306,6 +2307,7 @@ (set! res1 (+ res1 1)))) (set! j1 (+ j1 1))) (set! i1 (+ i1 1))) + res1)) @@ -2361,6 +2363,7 @@ (set! ln1 (grsp-matrix-esi 3 p_a1)) (set! hn1 (grsp-matrix-esi 4 p_a1)) + ;; Cycle. (set! i1 lm1) (while (<= i1 hm1) (set! res2 (grsp-matrix-subcpy p_a1 i1 i1 ln1 hn1)) @@ -2368,6 +2371,7 @@ (set! k1 (+ k1 (grsp-matrix-opio "#+" res2 0)))) (else (set! res3 #f))) (set! i1 (+ i1 1))) + (cond ((equal? res3 #t) (cond ((equal? (/ k1 (+ (- hm1 lm1) 1)) 1) (set! res1 #t))))) @@ -2568,6 +2572,8 @@ (set! hn1 (grsp-matrix-esi 4 p_a1)) (cond ((equal? (grsp-matrix-is-square p_a1) #t) + + ;; Cycle. (set! i1 lm1) (set! res1 #t) (while (<= i1 hm1) @@ -2661,6 +2667,7 @@ ;; Create vector. (set! res1 (grsp-matrix-create 0 1 (grsp-matrix-total-elements p_a1))) + ;; Cycle. (set! i1 lm1) (while (<= i1 hm1) (set! j1 ln1) @@ -2868,6 +2875,7 @@ (set! q1 (strings-append (list "INSERT INTO " p_t1 " (Vm, Vn, Vr, Vi) VALUES (" q2 ");") 0)) (system (strings-append (list "./sqlp " p_d1 " \"" q1 "\"") 0)) (set! j1 (+ j1 1))) + (set! i1 (+ i1 1))))) @@ -3012,7 +3020,7 @@ ;;;; grsp-mc2dbc-gnuplot1 - Creates a gnuplot data (.data) table from -;; matrix p_a1. data format is identical to grsp csv tables except that +;; matrix p_a1. Data format is identical to grsp csv tables except that ;; commas are replaced by spaces. ;; ;; Keywords: @@ -3462,7 +3470,7 @@ (set! ln1 (grsp-matrix-esi 3 p_a1)) (set! hn1 (grsp-matrix-esi 4 p_a1)) - ;; Eval + ;; Cycle and eval. (set! i1 lm1) (while (<= i1 hm1) (set! j1 ln1) @@ -3665,8 +3673,8 @@ ;; Create intermediate matrices. (set! res2 (grsp-matrix-create 0 1 (+ (- hn1 ln1) 1))) (set! res3 res2) - - ;; Eval + + ;; Cycle and eval. (set! i1 lm1) (while (<= i1 hm1) @@ -3881,7 +3889,8 @@ ;; Create seed matrix. (set! res1 (grsp-matrix-create 0 1 (+ hn1 1))) - + + ;; Cycle. (set! i1 lm1) (set! i2 hm1) (set! i3 1) @@ -3958,14 +3967,14 @@ ;; Cycle p_a2. (set! i2 lm2) - (while (<= i2 hm2);; + (while (<= i2 hm2) ;; Get the key for each row of p_a2. (set! n2 (array-ref p_a2 i2 p_j1)) ;; Cycle p_a1. (set! i1 lm1) - (while (<= i1 hm1);; + (while (<= i1 hm1) ;; Get the key for each row of p_a1. (set! n1 (array-ref p_a1 i1 p_j1)) @@ -3974,7 +3983,7 @@ ;; then copy data from p_a2 into p_a1. (cond ((equal? n1 n2) (set! j2 ln2) - (while (<= j2 hn2);; + (while (<= j2 hn2) (array-set! p_a1 (array-ref p_a2 i2 j2) i1 j2) (set! j2 (+ j2 1))))) @@ -4033,7 +4042,8 @@ ;; Seed matrix. (set! res1 (grsp-matrix-create 0 1 (+ (- hn3 ln3) 1))) - + + ;; Cycle, main. (set! j2 ln2) (while (<= j2 hn2) @@ -4826,8 +4836,8 @@ ;;;; grsp-matrix-col-total-element - Counts the number of ocurrences of elements -;; in column p_j1 of matrix p_a1 for which relationship p_s1 is fulfilled with -;; regards to p_n1. +;; in column p_j1 of matrix p_a1 for which relationship p_s1 is fulfilled with +;; regards to p_n1. ;; ;; Keywords: ;; - function, algebra, matrix, matrices, vectors, relational. @@ -4885,6 +4895,7 @@ ((equal? p_s1 "#!=") (cond ((equal? (= n2 p_n1) #f) (set! res1 (+ res1 1)))))) + (set! i1 (+ i1 1))) res1)) @@ -4917,6 +4928,7 @@ (set! ln1 (grsp-matrix-esi 3 res1)) (set! hn1 (grsp-matrix-esi 4 res1)) + ;; Cycle. (set! i1 lm1) (while (<= i1 hm1) (set! j1 ln1) @@ -4930,6 +4942,7 @@ (set! hm1 (grsp-matrix-esi 2 res1)) (set! j1 (+ j1 1))) + (set! i1 (+ i1 1))) res1)) @@ -5040,6 +5053,7 @@ ;; Seed matrix. (set! res6 (grsp-matrix-create 0 1 (+ tc1 tc2))) + ;; Extract matrix info- (set! lm6 (grsp-matrix-esi 1 res6)) (set! hm6 (grsp-matrix-esi 2 res6)) (set! ln6 (grsp-matrix-esi 3 res6)) @@ -5070,8 +5084,8 @@ ;; Add the col appended rows. (set! res6 (grsp-matrix-subrep res6 res5 hm6 ln6)) - ;; Increment counters. (set! i2 (+ i2 1))) + (set! i1 (+ i1 1))) ;; Compose results. @@ -5133,7 +5147,7 @@ ;; Expand res1. (set! res1 (grsp-matrix-subexp res1 am1 tn2)) - ;; Append res2 to res1. + ;; Compose results. (set! res1 (grsp-matrix-subrep res1 res2 lm1 (+ hn1 1))) res1)) @@ -5179,9 +5193,11 @@ ;; Perform the selection and then read the value of col p_j1 row 0. (set! i1 1) (while (<= i1 n1) + (cond ((> i1 1) (set! res1 (grsp-matrix-row-select s1 res1 p_j1 res2)))) (set! res2 (array-ref res1 0 p_j1)) + (set! i1 (+ i1 1))) res2)) @@ -5355,7 +5371,7 @@ ;; Mutate res2. (set! res2 (grsp-matrix-mutation res2 p_n1 p_s1 p_u1 p_v1 p_s2 p_u2 p_v2)) - ;; Copy res2 back to res1. + ;; Compose results. (set! res1 (grsp-matrix-subrep res1 res2 lm1 p_n2)) res1)) @@ -5390,7 +5406,6 @@ ;; (define (grsp-matrix-col-lmutation p_a1 p_n1 p_s1 p_u1 p_v1 p_s2 p_u2 p_v2 p_l1) (let ((res1 0) - ;;(j1 1) (j1 0) (j2 0) (hn1 0) @@ -5399,12 +5414,21 @@ ;; Create safety matrix. (set! res1 (grsp-matrix-cpy p_a1)) + ;; Cycle. (set! l1 p_l1) (set! hn1 (length l1)) (while (< j1 hn1) (set! j2 (list-ref l1 j1)) - (set! res1 (grsp-matrix-col-mutation res1 p_n1 p_s1 p_u1 p_v1 p_s2 p_u2 p_v2 j2)) + (set! res1 (grsp-matrix-col-mutation res1 + p_n1 + p_s1 + p_u1 + p_v1 + p_s2 + p_u2 + p_v2 + j2)) (set! j1 (in j1))) @@ -5469,6 +5493,7 @@ ;; If conditions b1 and b2 are met. (cond ((equal? (and (equal? b1 #t) (equal? b2 #t))) + ;; Extract boundaries. (set! lm1 (grsp-matrix-esi 1 res1)) (set! hm1 (grsp-matrix-esi 2 res1)) @@ -5599,7 +5624,7 @@ ;; - p_v1: standard deviation for fitness rate. ;; ;; Notes: -;; - This is justa convenience fitness function. You may want to create your +;; - This is just a convenience fitness function. You may want to create your ;; own for your specific task. ;; (define (grsp-matrix-fitness-rprnd p_a1 p_m1 p_n1 p_n2 p_s1 p_u1 p_v1) @@ -5729,6 +5754,7 @@ (set! i1 ln1) (set! h1 hn1))) + ;; Cycle. (cond ((equal? b1 #t) (while (<= i1 h1) @@ -5767,6 +5793,7 @@ (set! lm1 (grsp-matrix-esi 1 res1)) (set! hm1 (grsp-matrix-esi 2 res1)) + ;; Cycle. (while (<= i1 hm1) (array-set! res1 p_n2 i1 p_n1) @@ -5824,7 +5851,7 @@ ;; Find the complementary set. (set! res3 (grsp-matrix-row-select s2 p_a1 p_j1 p_n1)) - ;; Build results. + ;; Compose results. (set! res1 (list res2 res3)) res1)) @@ -5840,7 +5867,7 @@ ;; - p_a1: matrix. ;; (define (grsp-matrix-is-empty p_a1) - (let ((res1 #t)) ;; *** t f + (let ((res1 #t)) (cond ((> (grsp-matrix-total-elements p_a1) 0) (set! res1 #f))) @@ -5897,7 +5924,7 @@ (set! j1 (in j1))) (set! i1 (in i1))) - ;; Compose result. + ;; Compose results. (set! res2 b1) res2)) @@ -5953,6 +5980,7 @@ (set! ln1 (grsp-matrix-esi 3 res2)) (set! hn1 (grsp-matrix-esi 4 res2)) + ;; Cycle. (set! i1 lm1) (while (<= i1 hm1) @@ -6049,7 +6077,6 @@ (set! n2 0) (while (<= j3 hn3) (set! n1 (array-ref res3 lm3 j3)) - ;;(set! n2 (grsp-matrix-col-total-element "#!=" res3 j3 n1)) (cond ((> n2 0) (array-set! res1 0 0 j3)) (else (array-set! res1 n1 0 j3))) @@ -6113,6 +6140,7 @@ (set! hm1 (grsp-matrix-esi 2 res1)) (set! m1 hm1))) + ;; Compose results. (set! res1 (grsp-matrix-subrep res1 res2 m1 ln1)) res1)) @@ -6229,6 +6257,7 @@ (set! ln1 (grsp-matrix-esi 3 res1)) (set! hn1 (grsp-matrix-esi 4 res1)) + ;; Cycle. (set! i1 lm1) (while (<= i1 hm1) (set! j1 ln1) @@ -6280,7 +6309,7 @@ (set! res2 (grsp-matrix-cpy p_a2)) (set! res3 (grsp-matrix-cpy res1)) - ;; Extract the boundaries of the first matrix.*** + ;; Extract the boundaries of the first matrix. (set! lm1 (grsp-matrix-esi 1 res1)) (set! hm1 (grsp-matrix-esi 2 res1)) (set! ln1 (grsp-matrix-esi 3 res1)) diff --git a/grsp8.scm b/grsp8.scm index 2ae0d6a..b4c2397 100644 --- a/grsp8.scm +++ b/grsp8.scm @@ -2,7 +2,7 @@ ;; ;; grsp8.scm ;; -;; Neural networks. +;; Neural networks and network functions in general. ;; ;; ============================================================================= ;; @@ -260,7 +260,8 @@ grsp-ann-conns-nodes)) -;;;; grsp-ann-net-create-000 - Creates an empty neural network. +;;;; grsp-ann-net-create-000 - Creates an empty neural network as a list data +;; data structure with basic, empty matrices. ;; ;; Keywords: ;; - function, ann, neural network. @@ -308,7 +309,7 @@ (set! datai (grsp-ann-matrix-create "datai" 1)) (set! datao (grsp-ann-matrix-create "datao" 1)) - ;; Rebuild the list. + ;; Rebuild the list and compose results. (cond ((equal? p_b1 #t) (set! res1 (list nodes conns count idata odata specs))) (else (set! res1 (grsp-ann-net-preb nodes conns count idata odata specs odtid datai datao)))) @@ -330,7 +331,15 @@ ;; nodes, conns, count, idata, odata and empty specs. ;; - #f if you want to return also the associated matrix created during the ;; process as the sixth of the ann list, meaning that this option returns -;; full nodes, conns, count, idata, odata and specs matrices. +;; full matrices: +;; - nodes. +;; - conns. +;; - count. +;; - idata. +;; - odata. +;; - specs. +;; - datai. +;; - datao. ;; - p_n2: number of mutation iterations desired. ;; - p_nl: number of nodes in layer 0. ;; - p_nm: number of intermediate layers. @@ -346,6 +355,9 @@ ;; - See "Format of matrices used in grsp8" on top of this file for details ;; on each matrix used. ;; - A standard distribution is used for grsp-ann-net-mutate also. +;; - Further configuration of the ann might have to be done after using +;; this function to change parameters such as activation functions per node, +;; weights, etc. ;; ;; Output: ;; - A list with elements combining the results provided by: @@ -367,7 +379,7 @@ (set! res3 (grsp-ann-net-create-ffn specs)) (set! odtid (grsp-ann-matrix-create "odtid" 1)) - ;; Mutate in order to randomize values, as many tumes as defined by argument + ;; Mutate in order to randomize values as many tumes as defined by argument ;; p_n2. In order not t mutate the network, set p_n2 = 0 so that the ;; following cycle gets ignored entirely. (while (<= i1 p_n2) @@ -712,9 +724,8 @@ ;; connection to be created. (list-set! l3 0 cn) (list-set! l3 4 cc) - - ;;(set! conns (grsp-ann-item-create nodes conns count 1 (list-ref p_l3 i1))) (set! conns (grsp-ann-item-create nodes conns count 1 l3)) + (set! i1 (in i1))))) ;; Compose results. @@ -890,7 +901,7 @@ (datai 0) (datao 0)) - ;; Copy argument matrix. + ;; Safe copy of argument matrix. (set! res2 (grsp-matrix-cpy p_a1)) ;; Create matrices with just one row. @@ -959,7 +970,7 @@ (set! res4 (grsp-matrix-cpy nodes)) (set! res4 (grsp-matrix-row-sort "#des" res4 3)) (while (equal? b1 #t) - ;;(set! res4 (grsp-matrix-row-sort "#des" res4 3)) + (set! y1 (array-ref res4 0 3)) ;; If the layer number is zero, it means that we are dealing with the @@ -967,6 +978,7 @@ ;; created. Othewise, every node of the layer will be connected to ;; every node of the prior layer. (cond ((> y1 0) + ;; Separate the corrent res4 into two parts: ;; - One will contain the rows (nodes) whose column 3 (layer) ;; equals y1. This will be table res3. @@ -1069,8 +1081,6 @@ ;; Calculate number of rows based on total number of ann layers. (set! m1 (+ 2 p_nm)) - - ;; Find id number of activation function. ;; Create empty matrix (set! res1 (grsp-matrix-create 0 m1 n1)) @@ -1623,8 +1633,6 @@ (set! hn1 (grsp-matrix-esi 4 nodes)) ;; Evaluate nodes and their input and output connections. - ;; *** - (cond ((equal? p_b3 #t) (display "\n + 1.0 Evaluating nodes: \n") (display "\n"))) @@ -1738,7 +1746,7 @@ (set! l1 (list 5 9)) (set! l3 (list 5 7)) - ;; Apply mutation. + ;; Perform mutation. (cond ((equal? b1 #f) (set! res1 (grsp-ann-net-mutate res1 0.5 "#normal" 0.0 0.15 "#normal" 0.0 0.15 l1 l3))) ((equal? b1 #t) @@ -1937,8 +1945,6 @@ (array-set! idata (array-ref odata cd1 3) i6 2) (array-set! idata 0 i6 3))) - ;; Set col 0 (id) of idata. - (set! i6 (in i6))) ;; Compose results. @@ -2487,6 +2493,7 @@ (set! datai (grsp-ann-get-matrix "datai" p_l1)) (set! datao (grsp-ann-get-matrix "datao" p_l1)) + ;; Cycle. (set! i1 0) (while (equal? b1 #f) @@ -3027,7 +3034,7 @@ res1)) -;;;; grsp-ann-node-conns - Find the connections (edges) connected to node p_n1 +;;;; grsp-ann-node-conns - Finds the connections (edges) linking to node p_n1 ;; of network p_l1. ;; ;; Keywords: @@ -3056,7 +3063,8 @@ ;; Select edges going out of p_n1 (FROM). (set! fr (grsp-matrix-row-select "#=" conns 3 p_n1)) - + + ;; Compose results. (set! res1 (list to fr)) res1)) @@ -3098,7 +3106,7 @@ (set! i2 (grsp-matrix-te1 lm1 hm1)) (set! res1 (make-list i2)) - ;; Cycle. + ;; Cycle and compose results. (set! i1 lm1) (while (<= i1 hm1) @@ -3146,7 +3154,7 @@ (nodes 0) (conns 0)) - ;; Create empty matrix. + ;; (1) Create empty matrix. (set! res6 (grsp-matrix-create 0 0 0)) (set! res4 res6) (set! res5 res6) @@ -3167,14 +3175,18 @@ (set! b2 #t) (set! fr (array-ref res5 0 0)))) - ;; Select node record (row) from matrix nodes which p_n1 goes (TO). + ;; (2) and (3) help guarantee that the correct type (matrix) will be + ;; returned as result considering how res6 was configured at (1). + + ;; (2) Select node record (row) from matrix nodes which p_n1 goes (TO). (cond ((equal? b1 #t) (set! res2 (grsp-matrix-row-select "#=" nodes 0 to)))) - ;; Select node record (row) from matrix nodes which p_n1 comes (FROM). + ;; (3) Select node record (row) from matrix nodes which p_n1 comes (FROM). (cond ((equal? b2 #t) (set! res3 (grsp-matrix-row-select "#=" nodes 0 fr)))) - + + ;; Compose results. (set! res1 (list res2 res3)) res1)) @@ -3222,7 +3234,7 @@ (set! i2 (grsp-matrix-te1 lm1 hm1)) (set! res1 (make-list i2)) - ;; Cycle. + ;; Cycle and compose results. (set! i1 lm1) (while (<= i1 hm1)