/* Multiplexer-3 (if then else) 1 address + 2^1 data = 3 See John R. Koza Genetic Programming - On the programming of computers by means of natural selection" (i.e. his first GP book) This is the same as (boolean) IfElse: If(A0) then (D1) else(D0) Solutions: * Using [+,-,*,if_then_else,==,\/,/\,~,^], [program = if_then_else(A * 1,B,if_then_else(C,1,C)),res = 1,count = 6] [program = if_then_else(A + 1,C,B) * if_then_else(B,B,1),res = 1,count = 5] [program = if_then_else(A,B,C),res = 1,count = 4] [program = if_then_else(A,if_then_else(1,A,1) == (B == 1),C),res = 1,count = 3] [program = if_then_else(A + 1,C,B) * 1,res = 1,count = 1] resultMap = [1 = 5] * Using [+,-,*,\/,/\,~,^] [program = (1 /\ C \/ A) - A * (1 - B),res = 1,count = 1] [program = (A \/ C) * (B \/ 1 ^ A),res = 1,count = 1] [program = (A ^ B) * A ^ (C \/ A),res = 1,count = 63] [program = (1 ^ B) * (1 * A) ^ (C \/ A),res = 1,count = 58] [program = (A \/ C) - (1 ^ B) * (1 * A),res = 1,count = 35] [program = (A \/ C) ^ (1 ^ B) * (1 * A),res = 1,count = 32] [program = (C \/ A) - (1 ^ B) * (1 * A),res = 1,count = 25] [program = (C * C \/ A) - (A ^ B) * A,res = 1,count = 14] [program = (C \/ A) ^ (1 ^ B) * (1 * A),res = 1,count = 8] [program = (A \/ C) ^ (A ^ B) * A,res = 1,count = 1] * Using [\/,/\,~,^] [program = (B \/ 1 ^ A) /\ ((C \/ A) /\ 1),res = 1,count = 75] [program = (A \/ C) /\ (~ A \/ B),res = 1,count = 66] [program = (~ A \/ B) /\ ((C \/ A) /\ 1),res = 1,count = 61] [program = (C \/ A) /\ 1 /\ (B \/ 1 ^ A),res = 1,count = 57] [program = (B \/ 1 ^ A) /\ (A \/ C),res = 1,count = 52] [program = (C \/ A) /\ 1 /\ (~ A \/ B),res = 1,count = 49] [program = (~ A \/ B) /\ (C /\ C \/ A),res = 1,count = 38] [program = (A \/ C) ^ ~ B /\ (A /\ A),res = 1,count = 36] [program = ~ B /\ (A /\ A) ^ (A \/ C),res = 1,count = 23] [program = (A \/ C) /\ (B \/ 1 ^ A),res = 1,count = 2] resultMap = [1 = 10] * Using and, or, not [program = and(or(A,C),or(not A,B)),res = 1,count = 82] [program = and(or(C,or(A,A)),or(B,not A)),res = 1,count = 72] [program = and(or(not A,B),or(A,C)),res = 1,count = 61] [program = and(or(C,A),or(B,not A)),res = 1,count = 57] [program = and(or(B,not A),or(A,C)),res = 1,count = 56] [program = and(or(C,A),or(not A,B)),res = 1,count = 52] [program = and(or(B,not A),or(C,or(A,A))),res = 1,count = 46] [program = and(or(not A,B),or(C,A)),res = 1,count = 45] [program = and(or(C,or(A,A)),or(not A,B)),res = 1,count = 45] [program = and(or(B,not A),or(C,A)),res = 1,count = 45] [program = or(and(not A,or(A,C)),and(B,A)),res = 1,count = 35] [program = and(or(not A,B),or(or(C,C),A)),res = 1,count = 35] [program = and(or(and(A,1),C),or(B,not A)),res = 1,count = 34] [program = and(or(A,C),or(B,not A)),res = 1,count = 31] [program = and(or(or(C,C),A),or(B,not A)),res = 1,count = 28] [program = and(or(or(C,C),A),or(not A,B)),res = 1,count = 17] [program = and(or(A,and(C,1)),or(not A,B)),res = 1,count = 17] [program = and(or(A,and(C,1)),or(B,not A)),res = 1,count = 17] [program = or(and(not A,or(A,C)),and(or(A,C),B)),res = 1,count = 15] [program = or(and(B,A),and(not A,or(A,C))),res = 1,count = 6] [program = and(or(not A,B),or(and(1,C),A)),res = 1,count = 5] [program = and(or(not A,B),or(A,and(C,1))),res = 1,count = 5] [program = or(or(and(B,A),not 1),and(not A,or(A,C))),res = 1,count = 4] [program = and(or(and(A,1),C),or(not A,B)),res = 1,count = 4] [program = and(or(not A,B),or(C,or(A,A))),res = 1,count = 4] [program = and(or(and(1,C),A),or(not A,B)),res = 1,count = 3] [program = and(and(or(A,C),1),or(B,not A)),res = 1,count = 3] [program = or(and(and(A,1),B),and(not A,or(A,C))),res = 1,count = 1] [program = or(and(not A,or(A,C)),or(and(B,A),not 1)),res = 1,count = 1] resultMap = [1 = 29] * Using only sheffer [program = sheffer(sheffer(A,B),sheffer(sheffer(A,C),C)),res = 1,count = 93] [program = sheffer(sheffer(A,B),sheffer(sheffer(1,A),C)),res = 1,count = 92] [program = sheffer(sheffer(A,B),sheffer(C,sheffer(A,1))),res = 1,count = 90] [program = sheffer(sheffer(A,B),sheffer(C,sheffer(A,C))),res = 1,count = 81] [program = sheffer(sheffer(A,B),sheffer(sheffer(A,A),C)),res = 1,count = 70] [program = sheffer(sheffer(A,B),sheffer(C,sheffer(A,A))),res = 1,count = 69] [program = sheffer(sheffer(B,A),sheffer(C,sheffer(A,1))),res = 1,count = 61] [program = sheffer(sheffer(A,B),sheffer(sheffer(C,A),C)),res = 1,count = 52] [program = sheffer(sheffer(A,B),sheffer(sheffer(A,1),C)),res = 1,count = 52] [program = sheffer(sheffer(B,A),sheffer(sheffer(1,A),C)),res = 1,count = 50] [program = sheffer(sheffer(A,B),sheffer(sheffer(sheffer(1,C),1),sheffer(A,C))),res = 1,count = 42] [program = sheffer(sheffer(B,A),sheffer(C,sheffer(A,A))),res = 1,count = 39] [program = sheffer(sheffer(B,A),sheffer(C,sheffer(A,C))),res = 1,count = 38] [program = sheffer(sheffer(C,sheffer(A,1)),sheffer(B,A)),res = 1,count = 27] [program = sheffer(sheffer(C,sheffer(A,1)),sheffer(A,B)),res = 1,count = 22] [program = sheffer(sheffer(C,sheffer(A,C)),sheffer(B,A)),res = 1,count = 20] [program = sheffer(sheffer(sheffer(A,C),C),sheffer(A,B)),res = 1,count = 16] [program = sheffer(sheffer(B,A),sheffer(sheffer(A,1),C)),res = 1,count = 15] [program = sheffer(sheffer(A,B),sheffer(C,sheffer(1,A))),res = 1,count = 12] [program = sheffer(sheffer(sheffer(1,A),C),sheffer(B,A)),res = 1,count = 11] [program = sheffer(sheffer(B,A),sheffer(sheffer(A,C),C)),res = 1,count = 11] [program = sheffer(sheffer(C,sheffer(A,A)),sheffer(A,B)),res = 1,count = 10] [program = sheffer(sheffer(sheffer(A,1),C),sheffer(B,A)),res = 1,count = 9] [program = sheffer(sheffer(sheffer(A,1),C),sheffer(A,B)),res = 1,count = 8] [program = sheffer(sheffer(sheffer(1,A),C),sheffer(A,B)),res = 1,count = 6] [program = sheffer(sheffer(C,sheffer(A,C)),sheffer(A,B)),res = 1,count = 6] [program = sheffer(sheffer(sheffer(A,A),C),sheffer(B,A)),res = 1,count = 5] [program = sheffer(sheffer(sheffer(A,A),C),sheffer(A,B)),res = 1,count = 5] [program = sheffer(sheffer(C,sheffer(1,A)),sheffer(B,A)),res = 1,count = 5] [program = sheffer(sheffer(C,sheffer(A,A)),sheffer(B,A)),res = 1,count = 4] [program = sheffer(sheffer(C,sheffer(1,A)),sheffer(A,B)),res = 1,count = 3] [program = sheffer(sheffer(B,A),sheffer(sheffer(A,A),C)),res = 1,count = 3] [program = sheffer(sheffer(sheffer(sheffer(B,1),A),A),sheffer(C,sheffer(A,1))),res = 1,count = 2] [program = sheffer(sheffer(sheffer(sheffer(1,C),1),sheffer(A,C)),sheffer(B,A)),res = 1,count = 2] [program = sheffer(sheffer(sheffer(C,A),C),sheffer(A,B)),res = 1,count = 2] [program = sheffer(sheffer(B,A),sheffer(sheffer(C,A),C)),res = 1,count = 2] [program = sheffer(sheffer(sheffer(sheffer(A,1),1),B),sheffer(C,sheffer(A,A))),res = 1,count = 1] [program = sheffer(sheffer(sheffer(sheffer(1,C),1),sheffer(A,C)),sheffer(A,B)),res = 1,count = 1] [program = sheffer(sheffer(sheffer(C,A),C),sheffer(B,A)),res = 1,count = 1] [program = sheffer(sheffer(sheffer(A,C),C),sheffer(B,A)),res = 1,count = 1] [program = sheffer(sheffer(B,A),sheffer(sheffer(sheffer(1,C),1),sheffer(A,C))),res = 1,count = 1] [program = sheffer(sheffer(B,A),sheffer(C,sheffer(1,A))),res = 1,count = 1] resultMap = [1 = 42] Cf http://hakank.org/jgap/multiplexer_3.conf */ data(if_then_else,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [ [[0,0,0],0], [[0,0,1],1], [[0,1,0],0], [[0,1,1],1], [[1,0,0],0], [[1,0,1],0], [[1,1,0],1], [[1,1,1],1] ], Unknown = [1,1,1], Vars = ['A','B','C'], % Ops = [+,-,*,if_then_else,==,\/,/\,~,^], % Ops = [+,-,*,\/,/\,~,^], % Ops = [\/,/\,~,^], % Ops = [and,or,not], Ops = [sheffer], Constants = 1..1, MaxSize = 5, Params = new_map([num_gens=100])