Exemplo n.º 1
0
def run_guessing_game(thread, n_cycles, context_size):
    """ runs a guessing game for a number of cycles
    """
    count = 0
    output = []
    test_succes = []
    while count < cfg.replicas:
        gl.agent2 = agent.Agent("agent2", "learner")
        if cfg.training_type == "c1":   # rgb colour data
            if cfg.training_data == 0:
                training_data = auks.generate_training_data_colour(n_cycles, context_size)
                gl.agent1 = agent.Agent("agent1", "teacher", ["l", data.colour_data])
            elif cfg.training_data == 2:
                training_data = auks.generate_training_data_colour_shape(n_cycles, context_size)
                gl.agent1 = agent.Agent("agent1", "teacher", data.la_colour_shape)
            elif cfg.training_data == 3:
                training_data = auks.generate_training_data_artificial(n_cycles, context_size)
                gl.agent1 = agent.Agent("agent1", "teacher", data.artificial_data2)
        if cfg.training_type == "c2":   # hsv colour data
                training_data = auks.generate_training_data_colour(n_cycles, context_size, "hsv")
                gl.agent1 = agent.Agent("agent1", "teacher", ["l", data.colour_data_hsv])
        gl.cycle = 0
        guessing_success = []
        test_success = []
        while gl.cycle < n_cycles:
            guessing_game(gl.agent1, gl.agent2, training_data[gl.cycle], ran.randint(0, context_size-1))
            if cfg.test_type == "direct":
                gl.agent2.test_succes.append(test_knowledge(gl.agent1, gl.agent2, cfg.n_tests))
            elif cfg.test_type =="language game":
                gl.agent2.test_succes.append(gl.agent2.guessing_success)
            gl.cycle += 1
            
            # visuals
            if cfg.show_in_panda:
                if thread.stop:
                    break
                thread.emit(SIGNAL("update()"))
                time.sleep(0.02)
                                   
            if gl.cycle % 100 == 0:
                print gl.cycle
        print "replica " + str(count+1) + " gg_success=" + str(gl.agent2.guessing_success)
        test_succes.append(gl.agent2.test_succes)
        count += 1
#    name = "learning=" + str(cfg.associative_word_learning) + "_context=" + str(cfg.context_size) + "_replicas=" + str(cfg.replicas)+ "_cycle=" + str(cfg.n_cycles) + "_dist=" + str(cfg.sample_minimum_distance)
#    inout.write_output("guessing_game_" + name, output)
#    inout.write_output("test_success_" + name, success_output)
#    inout.save_matrix(gl.agent2.agent_name, "cs_cs", gl.agent2.cs_cs.matrix)
#    inout.save_matrix(gl.agent2.agent_name, "cs_lex", gl.agent2.cs_lex)
#    inout.save_matrix(gl.agent2.agent_name, "lex_lex", gl.agent2.lex_lex.matrix)
    inout.save_knowledge(gl.agent2)
    inout.write_out("teaching=" + cfg.teaching_type + " test=" + cfg.test_type, [auks.calc_mean(test_succes)])
    return [[auks.calc_mean(test_succes), "teaching=" + cfg.teaching_type + " test=" + cfg.test_type]]
Exemplo n.º 2
0
 def learn_colour(self, word3):
     config.detect_colour = True
     config.idle_go = False
     time.sleep(0.1)
     percept_data = self.camera.return_colour()
     if percept_data:
         #per_dat = [["c",[["h",percept_data[0]],  ["s",percept_data[1]], ["v",percept_data[2]]]]]
         per_dat = [["c",[["r",percept_data[0]],  ["g",percept_data[1]], ["b",percept_data[2]]]]]
         self.learning_agent.learn_concept(word3, per_dat)
         print "\n learning " + word3
         inout.save_knowledge(self.learning_agent)
     else:
         print "I didn't get it, please repeat"
Exemplo n.º 3
0
def run_direct_instruction(thread):
    """ runs direct instruction from teaching agent to learning agent for given number of cycles
    """
    if cfg.teacher_type == "h":
        run_human_teaching(cfg.n_cycles)
    
    if cfg.teacher_type == "a":
        count = 0
        agent2_similarity = []
        agent2_test_succes = []
        while count < cfg.replicas:
            training_data = []
            if cfg.training_type == "a1":
                #generate_artificial_knowledge(n_dom, av_dimensions, avn_exemplars, av_words, av_associations, av_cluster_size = None)
                a_data = auks.generate_artificial_knowledge(1, 3, 10, 10, 3, 3)
                gl.agent1 = agent.Agent("agent1", "teacher", ('a', a_data))
                training_data = auks.generate_training_data_simple(cfg.n_cycles)
            elif cfg.training_type == "a2":
                a_data = auks.create_knowledge_with_a_data(data.artificial_percepts, data.artificial_san_percepts, data.artificial_words, data.artificial_san_words, data.artificial_matrix)
                gl.agent1 = agent.Agent("agent1", "teacher", ('a', a_data))
                training_data = auks.generate_training_data_simple(cfg.n_cycles)
            elif cfg.training_type == "c1":
                gl.agent1 = agent.Agent("agent1", "teacher", ('l', data.colour_data))
                training_dat = auks.generate_training_data_colour(cfg.n_cycles, 1)
                for i in training_dat:
                    training_data.append(i[0])  # remove one list level for compatibility
            elif cfg.training_type == "c2":
                gl.agent1 = agent.Agent("agent1", "teacher", ('l', data.colour_data_hsv))
                training_dat = auks.generate_training_data_colour(cfg.n_cycles, 1)
                for i in training_dat:
                    training_data.append(i[0])  # remove one list level for compatibility
            inout.save_knowledge(gl.agent1)
            gl.agent2 = agent.Agent("agent2", "learner")
            
            agent2_numbers = [["words","percepts"]]
            agent2_sim = []
            for x, i in enumerate(training_data):
                a1_word = gl.agent1.name_object(i)
                gl.agent2.learn_concept(a1_word, i)

                #learning
                if cfg.associative_word_learning:
                    a1_word_related = gl.agent1.name_object_related(i)
                    #print a1_word, a1_word_related
                    gl.agent2.learn_word_association(a1_word, a1_word_related)
                if cfg.associative_object_learning:
                    pass # to be implemented
                agent2_numbers.append([gl.agent2.n_words, gl.agent2.n_percepts])
                
                #testing
                if cfg.test_type == "direct": # direct test
                    gl.agent2.test_succes.append(run_objects_test(gl.agent1, gl.agent2, cfg.n_tests))
                elif cfg.test_type == "language game": # language game test
                    gl.agent2.test_succes.append(run_guessing_game_test(gl.agent1, gl.agent2, cfg.n_tests, cfg.context_size))
                agent2_sim.append(calc_similarity_agents(gl.agent1, gl.agent2))
                
                # visuals
                if cfg.show_in_panda:
                    if thread.stop:
                        break
                    thread.emit(SIGNAL("update()"))
                    time.sleep(0.05)
                    
                if x % 10 == 0:
                    print x
            count += 1
            agent2_similarity.append(agent2_sim)
            agent2_test_succes.append(gl.agent2.test_succes)
            print "replica " + str(count)
            
        # stats
        inout.save_knowledge(gl.agent2)
        inout.write_out("agent2_numbers", agent2_numbers)
        inout.write_out("teaching=" + cfg.teaching_type + " test=" + cfg.test_type + " 2nd word=" + str(cfg.test_2nd_word), [auks.calc_mean(agent2_test_succes)])
        #inout.write_out_average("agent2_test_correct_clusters=" + str(cfg.SAN_clusters) + "_domain=" + str(cfg.training_type) + "_alearning=" + str(cfg.associative_word_learning), agent2_correct)
        #inout.write_out_average("agent2_similarity_clusters=" + str(cfg.SAN_clusters) + "_domain=" + str(cfg.training_type) + "_alearning=" + str(cfg.associative_word_learning), agent2_similarity)
        #go.output([auks.calc_mean(agent2_correct)], "test success", "# interactions", "% correct", "agent2_test_succes")  
        #go.output([auks.calc_mean(agent2_comm_succes)], "communicative success", "# interactions", "% correct", "agent2_comm_succes")
        return [[auks.calc_mean(agent2_test_succes), gl.test_title], [auks.calc_mean(agent2_similarity), "similarity"]]