/* Logic example from Ruby/GP sample/logic.rb http://www31.tok2.com/home/akimichi/aki/program/gp/ where the only operator is the Shaffer (sic!) Bar ("|") fitness_cases.set_inputs("P",[true,true,true,true,false,false,false,false]) fitness_cases.set_inputs("Q",[true,true,false,false,true,true,false,false]) fitness_cases.set_inputs("R",[true,false,true,false,true,false,true,false]) fitness_cases.set_outputs([false,true,false,true,false,true,false,false]) Note: the GP implementation calls this Shaffer operator (as do I in my JGAP implementation, ShafferD). * num_gens=10 give a lot of solutions [program = sheffer(sheffer(sheffer(R,1),Q),sheffer(sheffer(1,R),P)),res = 0,count = 6] [program = sheffer(sheffer(Q,sheffer(Q,R)),sheffer(sheffer(1,R),P)),res = 0,count = 6] [program = sheffer(sheffer(sheffer(R,sheffer(1,0)),P),sheffer(sheffer(sheffer(sheffer(sheffer(Q,0),R),P),R),Q)),res = 0,count = 5] [program = sheffer(sheffer(Q,sheffer(R,R)),sheffer(sheffer(R,R),P)),res = 0,count = 5] [program = sheffer(sheffer(sheffer(R,R),P),sheffer(Q,sheffer(Q,R))),res = 0,count = 4] [program = sheffer(sheffer(sheffer(R,1),Q),sheffer(sheffer(R,sheffer(1,0)),P)),res = 0,count = 4] [program = sheffer(sheffer(Q,sheffer(sheffer(P,0),R)),sheffer(sheffer(1,R),P)),res = 0,count = 4] [program = sheffer(sheffer(sheffer(R,sheffer(sheffer(R,R),sheffer(Q,P))),Q),sheffer(sheffer(1,R),P)),res = 0,count = 3] [program = sheffer(sheffer(sheffer(R,sheffer(1,0)),P),sheffer(Q,sheffer(Q,R))),res = 0,count = 3] [program = sheffer(sheffer(sheffer(R,R),P),sheffer(sheffer(R,1),Q)),res = 0,count = 3] [program = sheffer(sheffer(Q,sheffer(sheffer(P,0),R)),sheffer(sheffer(R,sheffer(1,0)),P)),res = 0,count = 3] [program = sheffer(sheffer(sheffer(sheffer(1,sheffer(P,1)),R),P),sheffer(sheffer(sheffer(sheffer(sheffer(Q,0),R),P),R),Q)),res = 0,count = 2] [program = sheffer(sheffer(sheffer(R,sheffer(R,0)),P),sheffer(sheffer(R,1),Q)),res = 0,count = 2] [program = sheffer(sheffer(sheffer(R,1),P),sheffer(sheffer(R,sheffer(sheffer(R,R),sheffer(Q,P))),Q)),res = 0,count = 2] [program = sheffer(sheffer(sheffer(1,R),P),sheffer(sheffer(R,1),Q)),res = 0,count = 2] [program = sheffer(sheffer(sheffer(1,R),P),sheffer(Q,sheffer(sheffer(P,0),R))),res = 0,count = 2] [program = sheffer(sheffer(sheffer(1,R),P),sheffer(Q,sheffer(Q,R))),res = 0,count = 2] [program = sheffer(sheffer(Q,sheffer(sheffer(P,0),R)),sheffer(sheffer(R,R),P)),res = 0,count = 2] [program = sheffer(sheffer(Q,sheffer(R,R)),sheffer(sheffer(R,sheffer(1,0)),P)),res = 0,count = 2] [program = sheffer(sheffer(Q,sheffer(Q,R)),sheffer(sheffer(sheffer(1,sheffer(P,1)),R),P)),res = 0,count = 2] [program = sheffer(sheffer(Q,sheffer(Q,R)),sheffer(sheffer(R,sheffer(1,0)),P)),res = 0,count = 2] [program = sheffer(sheffer(sheffer(R,sheffer(sheffer(R,R),sheffer(Q,P))),Q),sheffer(sheffer(R,R),P)),res = 0,count = 1] [program = sheffer(sheffer(sheffer(R,sheffer(sheffer(R,R),sheffer(Q,P))),Q),sheffer(P,sheffer(R,1))),res = 0,count = 1] [program = sheffer(sheffer(sheffer(R,sheffer(1,0)),P),sheffer(sheffer(R,sheffer(sheffer(R,R),sheffer(Q,P))),Q)),res = 0,count = 1] [program = sheffer(sheffer(sheffer(R,sheffer(1,0)),P),sheffer(Q,sheffer(R,R))),res = 0,count = 1] [program = sheffer(sheffer(sheffer(R,R),P),sheffer(sheffer(R,sheffer(sheffer(R,R),sheffer(Q,P))),Q)),res = 0,count = 1] [program = sheffer(sheffer(sheffer(R,R),P),sheffer(Q,sheffer(sheffer(P,0),R))),res = 0,count = 1] [program = sheffer(sheffer(sheffer(R,R),P),sheffer(Q,sheffer(R,R))),res = 0,count = 1] [program = sheffer(sheffer(Q,sheffer(R,R)),sheffer(sheffer(1,R),P)),res = 0,count = 1] [program = sheffer(sheffer(Q,sheffer(R,R)),sheffer(P,sheffer(R,1))),res = 0,count = 1] [program = sheffer(sheffer(Q,sheffer(Q,R)),sheffer(sheffer(R,1),P)),res = 0,count = 1] [program = sheffer(sheffer(P,sheffer(R,sheffer(P,0))),sheffer(Q,sheffer(sheffer(P,0),R))),res = 0,count = 1] resultMap = [0 = 32] * With just nor [program = nor(nor(P,Q),R),res = 0,count = 10] [program = nor(R,nor(Q,P)),res = 0,count = 10] [program = nor(nor(Q,P),R),res = 0,count = 8] [program = nor(nor(P,nor(R,nor(Q,P))),R),res = 0,count = 8] [program = nor(R,nor(nor(nor(0,1),nor(P,Q)),0)),res = 0,count = 8] [program = nor(nor(nor(R,nor(P,0)),Q),R),res = 0,count = 7] [program = nor(nor(Q,nor(nor(nor(1,P),P),nor(1,R))),R),res = 0,count = 7] [program = nor(nor(Q,nor(nor(P,0),nor(R,P))),R),res = 0,count = 7] [program = nor(R,nor(nor(R,nor(P,0)),Q)),res = 0,count = 7] [program = nor(R,nor(P,Q)),res = 0,count = 7] [program = nor(R,nor(nor(0,nor(Q,R)),nor(R,nor(0,P)))),res = 0,count = 4] [program = nor(R,nor(P,nor(R,nor(Q,P)))),res = 0,count = 4] [program = nor(R,nor(P,nor(P,nor(P,Q)))),res = 0,count = 4] [program = nor(nor(nor(nor(0,1),nor(P,Q)),0),R),res = 0,count = 3] [program = nor(nor(P,Q),nor(nor(R,nor(1,0)),nor(nor(nor(P,0),nor(1,1)),Q))),res = 0,count = 3] [program = nor(R,nor(P,nor(nor(nor(0,R),nor(Q,1)),nor(R,Q)))),res = 0,count = 3] [program = nor(nor(nor(nor(nor(1,1),nor(0,nor(P,0))),nor(P,R)),Q),R),res = 0,count = 2] [program = nor(nor(Q,nor(nor(nor(1,P),P),nor(1,R))),nor(nor(nor(P,1),R),nor(Q,1))),res = 0,count = 2] [program = nor(nor(P,nor(nor(nor(0,R),nor(Q,1)),nor(R,Q))),R),res = 0,count = 2] [program = nor(nor(P,nor(R,nor(Q,P))),nor(nor(nor(P,1),R),nor(Q,1))),res = 0,count = 2] [program = nor(nor(P,nor(R,nor(Q,P))),nor(nor(R,nor(1,0)),nor(nor(nor(P,0),nor(1,1)),Q))),res = 0,count = 2] [program = nor(nor(P,nor(P,nor(P,Q))),R),res = 0,count = 2] [program = nor(nor(0,nor(R,0)),nor(P,Q)),res = 0,count = 2] [program = nor(R,nor(nor(nor(nor(1,1),nor(0,nor(P,0))),nor(P,R)),Q)),res = 0,count = 2] [program = nor(R,nor(Q,nor(nor(nor(1,P),P),nor(1,R)))),res = 0,count = 2] [program = nor(nor(nor(nor(nor(nor(P,R),0),R),Q),Q),R),res = 0,count = 1] [program = nor(nor(nor(nor(nor(Q,R),nor(P,1)),nor(nor(R,P),nor(1,P))),nor(R,nor(P,1))),nor(nor(nor(nor(1,1),nor(0,nor(P,0))),nor(P,R)),Q)),res = 0,count = 1] [program = nor(nor(nor(nor(nor(Q,R),nor(P,1)),nor(nor(R,P),nor(1,P))),nor(R,nor(P,1))),nor(Q,nor(nor(P,0),nor(R,P)))),res = 0,count = 1] [program = nor(nor(nor(nor(Q,nor(Q,1)),0),P),R),res = 0,count = 1] [program = nor(nor(nor(nor(Q,1),R),nor(R,1)),nor(P,nor(R,nor(Q,P)))),res = 0,count = 1] [program = nor(nor(nor(nor(P,1),R),nor(Q,1)),nor(nor(R,nor(P,0)),Q)),res = 0,count = 1] [program = nor(nor(nor(nor(P,1),R),nor(Q,1)),nor(Q,P)),res = 0,count = 1] [program = nor(nor(nor(nor(P,1),R),nor(Q,1)),nor(P,nor(nor(nor(0,R),nor(Q,1)),nor(R,Q)))),res = 0,count = 1] [program = nor(nor(nor(nor(0,1),nor(P,Q)),0),nor(nor(R,R),0)),res = 0,count = 1] [program = nor(nor(nor(R,nor(P,0)),Q),nor(0,nor(R,0))),res = 0,count = 1] [program = nor(nor(nor(R,nor(1,0)),nor(nor(nor(P,0),nor(1,1)),Q)),nor(P,Q)),res = 0,count = 1] [program = nor(nor(nor(R,R),nor(1,R)),nor(P,Q)),res = 0,count = 1] [program = nor(nor(nor(1,1),nor(R,R)),nor(nor(nor(0,1),nor(P,Q)),0)),res = 0,count = 1] [program = nor(nor(nor(1,1),nor(R,R)),nor(P,nor(P,nor(P,Q)))),res = 0,count = 1] [program = nor(nor(Q,nor(nor(nor(1,P),P),nor(1,R))),nor(0,nor(R,0))),res = 0,count = 1] [program = nor(nor(Q,P),nor(0,nor(R,0))),res = 0,count = 1] [program = nor(nor(P,nor(R,nor(Q,P))),nor(nor(1,Q),nor(R,nor(1,Q)))),res = 0,count = 1] [program = nor(nor(P,nor(P,nor(P,Q))),nor(nor(nor(Q,1),R),nor(R,1))),res = 0,count = 1] [program = nor(nor(0,nor(R,nor(nor(0,0),1))),nor(nor(R,nor(P,0)),Q)),res = 0,count = 1] [program = nor(nor(0,nor(R,0)),nor(nor(nor(0,1),nor(P,Q)),0)),res = 0,count = 1] [program = nor(nor(0,nor(R,0)),nor(Q,nor(nor(P,0),nor(R,P)))),res = 0,count = 1] [program = nor(R,nor(nor(nor(nor(nor(Q,0),P),P),R),Q)),res = 0,count = 1] resultMap = [0 = 47] * With just nand [program = nand(nand(nand(R,1),Q),nand(1,nand(1,nand(P,nand(R,R))))),res = 0,count = 7] [program = nand(nand(nand(R,1),Q),nand(P,nand(R,nand(0,R)))),res = 0,count = 6] [program = nand(nand(1,nand(1,nand(P,nand(R,R)))),nand(nand(R,Q),Q)),res = 0,count = 5] [program = nand(nand(nand(nand(nand(P,R),nand(R,Q)),1),P),nand(nand(R,Q),Q)),res = 0,count = 4] [program = nand(nand(Q,nand(R,R)),nand(P,nand(R,nand(0,R)))),res = 0,count = 4] [program = nand(nand(P,nand(R,nand(nand(1,R),P))),nand(nand(R,1),Q)),res = 0,count = 4] [program = nand(nand(P,nand(R,nand(0,R))),nand(nand(R,1),Q)),res = 0,count = 4] [program = nand(nand(P,nand(R,P)),nand(nand(R,Q),Q)),res = 0,count = 4] [program = nand(nand(P,nand(1,R)),nand(nand(Q,nand(nand(1,P),nand(R,Q))),Q)),res = 0,count = 3] [program = nand(nand(P,nand(1,R)),nand(Q,nand(R,R))),res = 0,count = 3] [program = nand(nand(1,nand(1,nand(P,nand(R,R)))),nand(nand(R,1),Q)),res = 0,count = 3] [program = nand(nand(nand(R,R),P),nand(nand(R,Q),Q)),res = 0,count = 2] [program = nand(nand(nand(R,Q),Q),nand(P,nand(R,P))),res = 0,count = 2] [program = nand(nand(nand(R,1),Q),nand(nand(P,R),P)),res = 0,count = 2] [program = nand(nand(nand(Q,nand(nand(0,R),nand(R,R))),nand(nand(Q,Q),1)),nand(nand(R,nand(1,nand(1,1))),P)),res = 0,count = 2] [program = nand(nand(P,nand(R,P)),nand(nand(Q,nand(nand(1,P),nand(R,Q))),Q)),res = 0,count = 2] [program = nand(nand(P,nand(R,P)),nand(Q,nand(R,R))),res = 0,count = 2] [program = nand(nand(P,nand(R,1)),nand(nand(R,1),Q)),res = 0,count = 2] [program = nand(nand(P,nand(1,R)),nand(nand(R,Q),Q)),res = 0,count = 2] [program = nand(nand(P,nand(1,R)),nand(nand(R,1),Q)),res = 0,count = 2] [program = nand(nand(nand(R,nand(1,nand(1,1))),P),nand(nand(R,1),Q)),res = 0,count = 1] [program = nand(nand(nand(R,nand(0,0)),P),nand(nand(R,Q),Q)),res = 0,count = 1] [program = nand(nand(nand(R,nand(0,0)),P),nand(nand(R,1),Q)),res = 0,count = 1] [program = nand(nand(nand(R,nand(0,0)),P),nand(Q,nand(R,R))),res = 0,count = 1] [program = nand(nand(nand(R,R),P),nand(nand(R,1),Q)),res = 0,count = 1] [program = nand(nand(nand(R,Q),Q),nand(nand(R,nand(1,nand(1,1))),P)),res = 0,count = 1] [program = nand(nand(nand(R,Q),Q),nand(P,nand(1,R))),res = 0,count = 1] [program = nand(nand(nand(R,Q),Q),nand(1,nand(1,nand(P,nand(R,R))))),res = 0,count = 1] [program = nand(nand(nand(R,1),Q),nand(nand(R,R),P)),res = 0,count = 1] [program = nand(nand(nand(R,1),Q),nand(P,nand(R,P))),res = 0,count = 1] [program = nand(nand(nand(Q,nand(nand(1,P),nand(R,Q))),Q),nand(nand(R,R),P)),res = 0,count = 1] [program = nand(nand(nand(Q,nand(nand(0,R),nand(R,R))),nand(nand(Q,Q),1)),nand(P,nand(R,nand(0,R)))),res = 0,count = 1] [program = nand(nand(nand(P,R),P),nand(nand(R,1),Q)),res = 0,count = 1] [program = nand(nand(Q,nand(R,R)),nand(nand(R,R),P)),res = 0,count = 1] [program = nand(nand(Q,nand(Q,R)),nand(nand(R,nand(0,0)),P)),res = 0,count = 1] [program = nand(nand(P,nand(R,nand(nand(1,R),P))),nand(nand(R,Q),Q)),res = 0,count = 1] [program = nand(nand(P,nand(R,nand(0,R))),nand(nand(R,Q),Q)),res = 0,count = 1] [program = nand(nand(P,nand(1,R)),nand(nand(Q,nand(nand(0,R),nand(R,R))),nand(nand(Q,Q),1))),res = 0,count = 1] resultMap = [0 = 38] Cf logic_shaffer.conf */ data(logic_sheffer,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [ [[1,1,1],0], [[1,1,0],1], [[1,0,1],0], [[1,0,0],1], [[0,1,1],0], [[0,1,0],1], [[0,0,1],0], [[0,0,0],0] ], Unknown = [0,0,0], Vars = ['P','Q','R'], Ops = [sheffer], % Ops = [nand], % Ops = [nor], % Ops = [and,xor], Constants = 0..1, MaxSize = 11, Params = new_map([init_size=1000, show_best=2, % debug=true, % mutate_rate=0.3, % crossover_rate=0.7, % show_instances=true, % show_only_improvements=false, % debug=true, num_gens=10 ]).