Free cookie consent management tool by TermsFeed Policy Generator

source: branches/2929_PrioritizedGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.PGE/3.3/go-code/go-pge/problems/benchmarks.go @ 16231

Last change on this file since 16231 was 16231, checked in by hmaislin, 6 years ago

#2929: Fixed result error

File size: 10.2 KB
Line 
1package problems
2
3import (
4  // "fmt"
5  expr "github.com_del/verdverm/go-symexpr"
6  "math"
7  "math/rand"
8)
9
10type RangeType int
11
12const (
13  _ RangeType = iota
14  Uniform
15  Equal
16)
17
18type BenchmarkVar struct {
19  Name    string
20  Index   int
21  Rtype   RangeType
22  L, H, S float64 // low,high,step of range
23}
24
25type Benchmark struct {
26  Name         string
27  TrainVars    []BenchmarkVar
28  TrainSamples int
29  TestVars     []BenchmarkVar
30  TestSamples  int
31
32  Functions []string
33  NonTrig   []string
34  FuncText  string // function as text
35
36}
37
38func GenBenchmark(b Benchmark) (p *ExprProblem) {
39  p = new(ExprProblem)
40  p.Name = b.Name
41
42  // set the function
43  varNames := make([]string, 0)
44  for _, v := range b.TrainVars {
45    // fmt.Printf("  %v\n", v)
46    varNames = append(varNames, v.Name)
47  }
48  eqn := expr.ParseFunc(b.FuncText, varNames)
49  sort := eqn.Clone()
50  rules := expr.DefaultRules()
51  rules.GroupAddTerms = false
52  sort = sort.Simplify(rules)
53  p.VarNames = varNames
54  p.FuncTree = sort
55
56  trn := new(PointSet)
57  trn.SetFN(b.Name + "_train")
58  trn.SetID(0)
59  trn.SetNumDim(len(varNames))
60  trn.SetIndepNames(varNames)
61  trn.SetDepndNames([]string{"f(xs)"})
62  trn.SetPoints(GenBenchData(eqn, b.TrainVars, b.TrainSamples))
63  p.Train = make([]*PointSet, 1)
64  p.Train[0] = trn
65
66  tst := new(PointSet)
67  tst.SetFN(b.Name + "_test")
68  tst.SetID(0)
69  tst.SetNumDim(len(varNames))
70  tst.SetIndepNames(varNames)
71  tst.SetDepndNames([]string{"f(xs)"})
72  tst.SetPoints(GenBenchData(eqn, b.TestVars, b.TestSamples))
73  p.Test = make([]*PointSet, 1)
74  p.Test[0] = tst
75
76  return p
77}
78
79func GenBenchData(e expr.Expr, vars []BenchmarkVar, samples int) (pts []Point) {
80  pts = make([]Point, 0)
81  if vars[0].Rtype == Uniform {
82    for i := 0; i < samples; i++ {
83      input := make([]float64, len(vars))
84    retry:
85      for j, v := range vars {
86        r := rand.Float64()
87        input[j] = (r * (v.H - v.L)) + v.L
88      }
89      out := e.Eval(0, input, nil, nil)
90
91      if math.IsNaN(out) || math.IsInf(out, 0) || math.Abs(out) > 100000.0 {
92        goto retry
93      }
94
95      var pnt Point
96      pnt.SetIndeps(input)
97      pnt.SetDepnds([]float64{out})
98      pts = append(pts, pnt)
99    }
100  } else { // RangeType == Equal
101    counter := make([]float64, len(vars))
102    for j, v := range vars {
103      counter[j] = v.L
104    }
105    L1, L2 := len(vars)-1, vars[len(vars)-1].L
106
107    for counter[L1] <= L2 {
108      input := make([]float64, len(vars))
109      copy(input, counter)
110
111      out := e.Eval(0, input, nil, nil)
112      var pnt Point
113      pnt.SetIndeps(input)
114      pnt.SetDepnds([]float64{out})
115      pts = append(pts, pnt)
116
117      // increment counter
118      for j, v := range vars {
119        counter[j] += v.S
120        if counter[j] > v.H {
121          counter[j] = v.L
122        } else {
123          break
124        }
125      }
126    }
127
128  }
129
130  return
131}
132
133var xU11 = BenchmarkVar{"x", 0, Uniform, -1.0, 1.0, 0.0}
134var xU22 = BenchmarkVar{"x", 0, Uniform, -2.0, 2.0, 0.0}
135var xU33 = BenchmarkVar{"x", 0, Uniform, -3.0, 3.0, 0.0}
136var xU01 = BenchmarkVar{"x", 0, Uniform, 0.0, 1.0, 0.0}
137var xU02 = BenchmarkVar{"x", 0, Uniform, 0.0, 2.0, 0.0}
138var xU04 = BenchmarkVar{"x", 0, Uniform, 0.0, 4.0, 0.0}
139var yU01 = BenchmarkVar{"y", 1, Uniform, 0.0, 1.0, 0.0}
140
141var xU5050 = BenchmarkVar{"x", 0, Uniform, -50.0, 50.0, 0.0}
142var yU5050 = BenchmarkVar{"y", 1, Uniform, -50.0, 50.0, 0.0}
143var zU5050 = BenchmarkVar{"z", 2, Uniform, -50.0, 50.0, 0.0}
144var vU5050 = BenchmarkVar{"v", 3, Uniform, -50.0, 50.0, 0.0}
145var wU5050 = BenchmarkVar{"w", 4, Uniform, -50.0, 50.0, 0.0}
146
147var korns5 = []BenchmarkVar{xU5050, yU5050, zU5050, vU5050, wU5050}
148var xyU01 = []BenchmarkVar{xU01, yU01}
149
150var xE11_01 = BenchmarkVar{"x", 0, Equal, -1.0, 1.0, 0.01}
151var xE22_01 = BenchmarkVar{"x", 0, Equal, -2.0, 2.0, 0.01}
152var xE33_01 = BenchmarkVar{"x", 0, Equal, -3.0, 3.0, 0.01}
153var xE11_001 = BenchmarkVar{"x", 0, Equal, -1.0, 1.0, 0.001}
154var xE22_001 = BenchmarkVar{"x", 0, Equal, -2.0, 2.0, 0.001}
155var xE33_001 = BenchmarkVar{"x", 0, Equal, -3.0, 3.0, 0.001}
156
157var xE55_4 = BenchmarkVar{"x", 0, Equal, -5.0, 5.0, 0.4}
158var yE55_4 = BenchmarkVar{"y", 1, Equal, -5.0, 5.0, 0.4}
159var xyE55_4 = []BenchmarkVar{xE55_4, yE55_4}
160
161var kozaFuncs = []string{"Add", "Mul", "Div", "Sin", "Cos", "Exp", "Log"}
162var kornsFuncs = []string{"Add", "Mul", "Div", "Sin", "Cos", "Exp", "Log", "Sqrt"}
163var vladiFuncsA = []string{"Add", "Mul", "Div"}
164var vladiFuncsB = []string{"Add", "Mul", "Div", "Exp"}
165var vladiFuncsC = []string{"Add", "Mul", "Div", "Sin", "Cos", "Exp"}
166
167var kozaFuncs_NT = []string{"Add", "Mul", "Div", "Exp", "Log"}
168var kornsFuncs_NT = []string{"Add", "Mul", "Div", "Exp", "Log", "Sqrt"}
169var vladiFuncsA_NT = []string{"Add", "Mul", "Div"}
170var vladiFuncsB_NT = []string{"Add", "Mul", "Div", "Exp"}
171var vladiFuncsC_NT = []string{"Add", "Mul", "Div", "Exp"}
172
173var BenchmarkList = []Benchmark{
174  Benchmark{"Koza_1", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, vladiFuncsA, vladiFuncsA_NT, "x^4 + x^3 + x^2 + x"},
175  Benchmark{"Koza_2", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, vladiFuncsA, vladiFuncsA_NT, "x^5 - 2x^3 + x"},
176  Benchmark{"Koza_3", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, vladiFuncsA, vladiFuncsA_NT, "x^6 - 2x^4 + x^2"},
177
178  Benchmark{"Nguyen_01", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, vladiFuncsA, vladiFuncsA_NT, "x^3 + x^2 + x"},
179  Benchmark{"Nguyen_02", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, vladiFuncsA, vladiFuncsA_NT, "x^4 + x^3 + x^2 + x"},
180  Benchmark{"Nguyen_03", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, vladiFuncsA, vladiFuncsA_NT, "x^5 + x^4 + x^3 + x^2 + x"},
181  Benchmark{"Nguyen_04", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, vladiFuncsA, vladiFuncsA_NT, "x^6 + x^5 + x^4 + x^3 + x^2 + x"},
182  Benchmark{"Nguyen_05", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, kozaFuncs, kozaFuncs_NT, "sin(x^2)*cos(x) - 1"},
183  Benchmark{"Nguyen_06", []BenchmarkVar{xU11}, 200, []BenchmarkVar{xU11}, 2000, kozaFuncs, kozaFuncs_NT, "sin(x) + sin(x + x^2)"},
184  Benchmark{"Nguyen_07", []BenchmarkVar{xU02}, 200, []BenchmarkVar{xU02}, 2000, kozaFuncs, kozaFuncs_NT, "ln(x+1) + ln(x^2 + 1)"},
185  Benchmark{"Nguyen_08", []BenchmarkVar{xU04}, 200, []BenchmarkVar{xU04}, 2000, kozaFuncs, kozaFuncs_NT, "sqrt(x)"},
186  Benchmark{"Nguyen_09", xyU01, 200, xyU01, 2000, kozaFuncs, kozaFuncs_NT, "sin(x) + sin(y^2)"},
187  Benchmark{"Nguyen_10", xyU01, 200, xyU01, 2000, kozaFuncs, kozaFuncs_NT, "2*sin(x)*cos(y)"},
188  Benchmark{"Nguyen_11", xyU01, 200, xyU01, 2000, kozaFuncs, kozaFuncs_NT, "x^y"},
189  Benchmark{"Nguyen_12", xyU01, 200, xyU01, 2000, vladiFuncsA, vladiFuncsA_NT, "x^4 - x^3 + 0.5*y^2 - y"},
190
191  Benchmark{"Pagie_1", xyE55_4, 0, xyE55_4, 0, kozaFuncs, kozaFuncs_NT, "1 / (1 + x^-4) + 1 / (1 + y^-4)"},
192
193  // 5 inputs: x,y,z,v,w
194  Benchmark{"Korns_01", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "1.57 + 24.3*v"},
195  Benchmark{"Korns_02", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "0.23 + 14.2*(v+y)/3w"},
196  Benchmark{"Korns_03", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "-5.41 + 4.9*(v-x+y/w)/3w"},
197  Benchmark{"Korns_04", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "-2.3 + 0.13sin(z)"},
198  Benchmark{"Korns_05", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "3 + 2.13*ln(w)"},
199  Benchmark{"Korns_06", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "1.3 + 0.13*sqrt(x)"},
200  Benchmark{"Korns_07", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "213.80940889*(1 - e^(-0.54723748542*x))"},
201  Benchmark{"Korns_08", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "6.87 + 11*sqrt(7.23*x*v*w)"},
202  Benchmark{"Korns_09", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "(sqrt(x)/ln(y)) * (e^z / v^2)"},
203  Benchmark{"Korns_10", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "0.81 + 24.3*(2y+3*z^2)/(4*(v)^3+5*(w)^4)"},
204  Benchmark{"Korns_11", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "6.87 + 11*cos(7.23*x^3)"},
205  Benchmark{"Korns_12", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "2 - 2.1*cos(9.8*x)*sin(1.3*w)"},
206  Benchmark{"Korns_13", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "32 - 3*(tan(x)*tan(z))/(tan(y)*tan(v))"},
207  Benchmark{"Korns_14", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "22 - 4.2*(cos(x)-tan(y))*(tanh(z)/sin(v))"},
208  Benchmark{"Korns_15", korns5, 200, korns5, 2000, kornsFuncs, kornsFuncs_NT, "12 - 6*(tan(x)/e^y)(ln(z)-tan(v))"},
209
210  Benchmark{"Keijzer_01", []BenchmarkVar{xE11_01}, 0, []BenchmarkVar{xE11_001}, 0, vladiFuncsA, vladiFuncsA_NT, "0.3*x*sin(2*PI*x)"},
211  Benchmark{"Keijzer_02", []BenchmarkVar{xE22_01}, 0, []BenchmarkVar{xE22_001}, 0, vladiFuncsA, vladiFuncsA_NT, "0.3*x*sin(2*PI*x)"},
212  Benchmark{"Keijzer_03", []BenchmarkVar{xE33_01}, 0, []BenchmarkVar{xE33_001}, 0, vladiFuncsA, vladiFuncsA_NT, "0.3*x*sin(2*PI*x)"},
213  // Benchmark{"Keijzer_04", "x", "E[0,10,0.05]", "x^3*e^-x*cos(x)*sin(x)*((sin(x))^2*cos(x) - 1)"},
214  // Benchmark{"Keijzer_05", "x,y,z", "x,z: U[-1,1,1000] y: U[1,2,1000]", "(30*x*z) / ((x-10)*y^2)"},
215  // // Benchmark{"Keijzer_06", "x", "E[1,50,1]", "\\SUM_i^x (1/i)"},
216  // Benchmark{"Keijzer_07", "x", "E[1,100,1]", "ln(x)"},
217  // Benchmark{"Keijzer_08", "x", "E[0,100,1]", "sqrt(x)"},
218  // // arcsinh(x) == ln(x+sqrt(x^2+1))
219  // Benchmark{"Keijzer_09", "x", "E[0,100,1]", "ln(x+sqrt(x^2+1))"},
220  // Benchmark{"Keijzer_10", "x,y", "U[0,1,100]", "x^y"},
221  // // xy ? sin((x-1)(y-1))
222  // // Benchmark{"Keijzer_11", "x,y", "U[-3,3,20]", "xy ? sin((x-1)*(y-1))"},
223  // Benchmark{"Keijzer_12", "x,y", "U[-3,3,20]", "x^4 - x^3 + 0.5*y^2 - y "},
224  // Benchmark{"Keijzer_13", "x,y", "U[-3,3,20]", "6*sin(x)*cos(y)"},
225  // Benchmark{"Keijzer_14", "x,y", "U[-3,3,20]", "8 / (2 + x^2 + y^2) "},
226  // Benchmark{"Keijzer_15", "x,y", "U[-3,3,20]", "0.2*x^3 + 0.5*y^2 - y - x "},
227
228  // // (e^{-(x-1)^2}) / (1.2 + (y-2.5)^2)
229  // Benchmark{"Vladislavleva_1", "x,y", "?U[0.3,4,10]?", "(e^{-(x-1)^2}) / (1.2 + (y-2.5)^2)"},
230  // Benchmark{"Vladislavleva_2", "x", "E[0.05,10,0.1]", "e^-x* x^3 * (cos(x)*sin(x)) * (cos(x)*(sin(x))^2-1)"},
231  // Benchmark{"Vladislavleva_3", "x,y", "x: E[0.05,10,0.1]  y: E[0.05,10.05,2]", "e^-y * x^3 * (cos(x)*sin(x)) * (cos(x)*(sin(x))^2-1)"},
232  // // Benchmark{"Vladislavleva_4", "x_i", " U[0.05, 6.05, 1024]", "10 / (5 + \\SUM_1^5 (x_i - 3)^2)"},
233  // Benchmark{"Vladislavleva_5", "x,y,z", "x,z: U[0.05,2,300]  y: U[1,2,300]", "(30*(x-1)*(z-1)) / (y^2*(x-10))  "},
234  // Benchmark{"Vladislavleva_6", "x,y", "U[0.1,5.9,30]", "6*sin(x)*cos(y)"},
235  // Benchmark{"Vladislavleva_7", "x,y", "U[0.05,6.05,300]", "(x-3)*(y-3) + 2sin((x-4)*(y-4))"},
236  // Benchmark{"Vladislavleva_8", "x,y", "U[0.05,6.05,50]", "((x-3)^4 + (y-3)^3 - (y-3)) / ((y-2)^4 + 10)"},
237}
Note: See TracBrowser for help on using the repository browser.