/* Boolean 3-majority on From John Koza's Lisp implementation ftp://cs.ucl.ac.uk/genetic/ftp.io.com/code/koza-book-gp-implementation.lisp Cf http://hakank.org/jgap/majority_on_3.conf Here is one solution from JGAP: ((a || (b && c)) && c) || ((b || b) && a) * Using [/\,\/] [program = C /\ B \/ (B /\ (A /\ 1) \/ C /\ (A \/ 0) /\ C) /\ A,res = 0,count = 1] * Using [if_then_else,==] [program = if_then_else(if_then_else(A == C,C,B),1,0),res = 0,count = 7] [program = if_then_else(B == A,A,C),res = 0,count = 7] [program = if_then_else(A == B,A,C),res = 0,count = 7] [program = if_then_else(A == C,if_then_else(B,C,1),B),res = 1,count = 6] [program = if_then_else(B == A,1 == B,C),res = 0,count = 5] [program = if_then_else(if_then_else(A == C,C,B),if_then_else(C,1,B),0),res = 0,count = 4] [program = if_then_else(if_then_else(C,B,A),B,A),res = 0,count = 4] [program = if_then_else(C == A,if_then_else(0,1,A),B),res = 0,count = 4] [program = if_then_else(1,if_then_else(A == C,C,B),B),res = 0,count = 4] [program = if_then_else(B == A,B,C),res = 0,count = 3] [program = (1 == if_then_else(A == C,C,B)),res = 0,count = 3] [program = if_then_else(if_then_else(A == C,C,B),if_then_else(C,1,A),0),res = 0,count = 2] [program = if_then_else(A == C,if_then_else(1,C,C),B),res = 0,count = 2] [program = (if_then_else(A,B,1) == if_then_else(C,B,A)),res = 0,count = 2] [program = if_then_else(B == C,B,A),res = 0,count = 1] resultMap = [0 = 14,1 = 1] * Using [+,*,-,mod] No solution... * Using and,or,not [program = or(and(A,C),and(or(C,A),B)),res = 0,count = 1] [program = and(or(and(A,A),B),or(and(B,A),C)),res = 0,count = 1] [program = and(or(A,B),or(and(B,A),C)),res = 0,count = 1] */ data(majority_on_3,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [[[1,1,1],1], [[1,1,0],1], [[1,0,1],1], [[1,0,0],0], [[0,1,1],1], [[0,1,0],0], [[0,0,1],0] % , % [[0,0,0],0] % -> Unknown ], Unknown = [0,0,0], Vars = ['A','B','C'], % Ops = [+,-,*,/,/\\,\\/,mod], % Ops = [+,*,-,mod], % Ops = [if_then_else,==], % Ops = [/\,\/], Ops = [and,or,not], Constants = 0..1, MaxSize = 3, Params = new_map().