@@ -12,6 +12,11 @@ import (
12
12
"time"
13
13
)
14
14
15
+ // see: http://blog.loadimpact.com/random-thoughts-about-go
16
+ func intn (max int ) int {
17
+ return int ((rand .Float64 () * float64 (max )) + 0.5 )
18
+ }
19
+
15
20
// FitnessFunction -
16
21
type FitnessFunction func (signal , target []float64 ) float64
17
22
@@ -483,7 +488,7 @@ func (m *Mep) Best() (float64, string) {
483
488
// PrintBest - print the best member of the population
484
489
func (m * Mep ) PrintBest () {
485
490
exp := m .parse ("" , m .pop [m .bestPop ][0 ], m .pop [m .bestPop ][0 ].bestIndex )
486
- fmt .Printf ("fitness = %f, expr='%s'\n " , m .pop [m .bestPop ][0 ].fitness , exp )
491
+ fmt .Printf ("expr='%s' # fitness = %f \n " , exp , m .pop [m .bestPop ][0 ].fitness )
487
492
}
488
493
489
494
// PrintTestData - print the testdata
@@ -616,31 +621,31 @@ func (m *Mep) eval(results [][]float64, c *chromosome) {
616
621
if results [c .program [i ].adr1 ][k ] > results [c .program [i ].adr2 ][k ] {
617
622
results [i ][k ] = 1.0
618
623
} else {
619
- results [i ][k ] = - 1 .0
624
+ results [i ][k ] = 0 .0
620
625
}
621
626
}
622
627
case - 19 : // ifblt
623
628
for k := 0 ; k < m .numTraining ; k ++ {
624
629
if results [c .program [i ].adr1 ][k ] < results [c .program [i ].adr2 ][k ] {
625
630
results [i ][k ] = 1.0
626
631
} else {
627
- results [i ][k ] = - 1 .0
632
+ results [i ][k ] = 0 .0
628
633
}
629
634
}
630
635
case - 20 : // and
631
636
for k := 0 ; k < m .numTraining ; k ++ {
632
637
if results [c .program [i ].adr1 ][k ] > 0.0 && results [c .program [i ].adr2 ][k ] > 0.0 {
633
638
results [i ][k ] = 1.0
634
639
} else {
635
- results [i ][k ] = - 1 .0
640
+ results [i ][k ] = 0 .0
636
641
}
637
642
}
638
643
case - 21 : // or
639
644
for k := 0 ; k < m .numTraining ; k ++ {
640
645
if results [c .program [i ].adr1 ][k ] > 0.0 || results [c .program [i ].adr2 ][k ] > 0.0 {
641
646
results [i ][k ] = 1.0
642
647
} else {
643
- results [i ][k ] = - 1 .0
648
+ results [i ][k ] = 0 .0
644
649
}
645
650
}
646
651
case - 22 : // pow
@@ -835,28 +840,28 @@ func (m *Mep) parse(exp string, individual chromosome, poz int) string {
835
840
exp = m .parse (exp , individual , adr1 )
836
841
exp += ">"
837
842
exp = m .parse (exp , individual , adr2 )
838
- exp += "1,-1 )"
843
+ exp += ",1,0 )"
839
844
840
845
} else if op == - 19 { // ifblt
841
846
exp += "iif("
842
847
exp = m .parse (exp , individual , adr1 )
843
848
exp += "<"
844
849
exp = m .parse (exp , individual , adr2 )
845
- exp += "1,-1 )"
850
+ exp += ",1,0 )"
846
851
847
852
} else if op == - 20 { // and
848
853
exp += "iif("
849
854
exp = m .parse (exp , individual , adr1 )
850
855
exp += ">0 &&"
851
856
exp = m .parse (exp , individual , adr2 )
852
- exp += ">0,1,-1 )"
857
+ exp += ">0,1,0 )"
853
858
854
859
} else if op == - 21 { // or
855
860
exp += "iif("
856
861
exp = m .parse (exp , individual , adr1 )
857
862
exp += ">0 ||"
858
863
exp = m .parse (exp , individual , adr2 )
859
- exp += ">0,1,-1 )"
864
+ exp += ">0,1,0 )"
860
865
861
866
} else if op == - 22 { // pow
862
867
exp += "pow("
0 commit comments