/* Regression problem # From John Koza's Lisp implementation ftp://cs.ucl.ac.uk/genetic/ftp.io.com/code/koza-book-gp-implementation.lisp The solutions should be: (* 0.5 x x) OK, that's an easy one. [program = X * X / 2,res = 0.5,count = 10] [program = X * X / (5 - 3),res = 0.5,count = 8] [program = X / 2 * X,res = 0.5,count = 8] [program = X / 2 * (X - 0),res = 0.5,count = 5] [program = X * 5 * (X / 10),res = 0.5,count = 3] Using ** tends to blow up. Here is a solution: [found_function = X ** 2 / (6 - 4),check = 0.5] Using the restricted pow2/1 (X**2), etc, does not blow up: AllGood: [program = X / 2 * X,res = 0.5,count = 7] [program = pow2(X) / 2,res = 0.5,count = 6] [program = pow2(X) / (4 - 2),res = 0.5,count = 4] [program = X * (X / 2),res = 0.5,count = 4] [program = X * X / (4 - 2),res = 0.5,count = 3] Cf http://hakank.org/jgap/regression_koza.conf */ data(regression_koza,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [ [[0.0],0.0], [[0.1],0.0050000004], [[0.2],0.020000001], [[0.3],0.045], [[0.4],0.080000006], [[0.5],0.125], [[0.6],0.18], [[0.7],0.24499999], [[0.8],0.32000002], [[0.9],0.40499997] ], Vars = ['X'], Unknown = [1.0], println(data=Data), % Ops = [+,-,*,/], Ops = [+,-,*,/,pow2,pow3,pow4,pow5], % ** will probably blow up Constants = 0..10, MaxSize = 3, Params = new_map([approx=0.01]).