def main():
    training_size = 1000
    index = range(training_size)
    epochs = 1000
    one_epoch_word_num = training_size * 3
    giver = PGACAgent(player_tag='giver', is_giver=True, restrict_value=False)
    all_words = giver.get_all_targets()
    words = itemgetter(*index)(all_words)
    words = [w[0] for w in words]
    res_dir = "./single_pg_res"
    if not os.path.exists(res_dir):
        os.mkdir(res_dir)
    path = 'single_pg_{0}.json'.format(CURRENT_TIME)
    path = os.path.join(res_dir, path)
    to_save_path = os.path.join(res_dir, 'model_{}'.format(CURRENT_TIME))

    for epoch in range(epochs):
        print("Current Epoch {}".format(epoch))
        for guesser in deterministic_guessers:
            print("In the testing set")
            if epoch:
                test_on_words(words, giver, guesser, epoch=epoch, path=path)
        for num in range(one_epoch_word_num):
            guesser = random.choice(deterministic_guessers)
            add_experience(giver, guesser, words)
            try:
                if num % 100 == 99:
                    print("Finished a training process")
                    giver.train()
            except:
                import pdb
                pdb.set_trace()
        giver.model.save_model(epoch=epoch, path=to_save_path)
        print('=======================')
def main():
    training_size = 1000
    index, test_index = range(training_size), range(training_size,
                                                    training_size + 59)
    epochs = 1000
    one_epoch_word_num = training_size * 3
    giver = PGACAgent(player_tag='giver', is_giver=True, restrict_value=False)
    all_words = giver.get_all_targets()
    words = itemgetter(*index)(all_words)
    words = [w[0] for w in words]

    test_words = itemgetter(*test_index)(all_words)
    test_words = [w[0] for w in test_words]

    for epoch in range(epochs):
        print("Current Epoch {}".format(epoch))
        for guesser in deterministic_guessers:
            print("In the testing set")
            if epoch:
                test_on_words(test_words, giver, guesser)

        for num in range(one_epoch_word_num):
            guesser = random.choice(deterministic_guessers)
            add_experience(giver, guesser, words)
            try:
                if num % 100 == 99:
                    giver.train()
            except:
                continue
        print('=======================')
def main():
    training_size = 1000
    giver = PGACAgent(player_tag='giver', 
                        is_giver=True,
                        restrict_value=False)
    
    guesser = PGACAgent(player_tag='guesser', 
                        is_giver=False, FSG=True, 
                        restrict_value=False,
                        REV_FSG_NORM=True)
    epochs = 1000
    index = list(range(training_size))
    one_epoch_word_num = training_size * 3
    all_words = giver.get_all_targets()
    words = itemgetter(*index)(all_words)
    words = [w[0] for w in words]
    deterministic_guessers.append(guesser)
    path = './double_pg_{}.json'.format(CURRENT_TIME)
    for epoch in range(epochs):
        print("Current Epoch {}".format(epoch))
        if epoch:
            for to_test_guesser in deterministic_guessers:
                test_on_words(words, giver, to_test_guesser, epoch=epoch, path=path)

        for num in range(one_epoch_word_num):
            add_experience(giver, guesser, words)
            if num % 100 == 99:
                print("Trained on a batch")
                giver.train()
                guesser.train()

        print('=======================')
def main():
    giver = ActorCriticAgent(player_tag='giver', 
                             is_giver=True,
                             restrict_value=True)
    training_size = 1000
    epochs = 1000
    one_epoch_word_num = training_size * 3
    all_words = giver.get_all_targets()
    words = all_words[:training_size]
    words = [w[0] for w in words]
    res_dir = "./single_naive_res"
    if not os.path.exists(res_dir):
        os.mkdir(res_dir)
    path = 'single_naive_{0}.json'.format(CURRENT_TIME)
    path = os.path.join(res_dir, path)
    to_save_path = os.path.join(res_dir, 'model_{}'.format(CURRENT_TIME))
    for epoch in range(epochs):
        print("Current Epoch {}".format(epoch))
        
        guesser = deterministic_guessers[0]
        for guesser in deterministic_guessers:
            # print("In the training set")
            # test_on_words(words, giver, guesser)
            print("In the testing set")
            if epoch:
                test_on_words(words, giver, guesser, epoch=epoch, path=path)
    
        for num in range(one_epoch_word_num):
            guesser = random.choice(deterministic_guessers)
            #guesser = deterministic_guessers[0]
            add_experience(giver, guesser, words)
            if num % 100 == 99:
                print("Trained on a batch")
                giver.train()
            if num == (one_epoch_word_num - 1):
                giver.add_train_counter()
        
        giver.model.save_model(epoch=epoch, path=to_save_path)
        print('=======================')
def topic_guesses_checker():
    giver = giver12
    training_size = 200
    all_words = giver.get_all_targets()
    words = all_words[:training_size]
    words = [w[0] for w in words]
    print("Test for 1")
    giver = PGACAgent(player_tag='giver', is_giver=True, restrict_value=False)
    giver.model.load_model('./remote_models/single_pg/giver')

    test_on_words(words, giver, guesser12, epoch=0, to_print_traj=False)
    print("Test for Topic 1")
    for guesser in guesser12_family:
        test_on_words(words, giver, guesser, epoch=0, to_print_traj=False)
    print("Test for 2")
    test_on_words(words, giver, guesser22, epoch=0, to_print_traj=False)
    print("Test for Topic 2")
    for guesser in guesser22_family:
        test_on_words(words, giver, guesser, epoch=0, to_print_traj=False)
    print("Test for 3")
    test_on_words(words, giver, guesser32, epoch=0, to_print_traj=False)
    print("Test for Topic 3")
    for guesser in guesser32_family:
        test_on_words(words, giver, guesser, epoch=0, to_print_traj=False)
    # testing
    print("Test for 4")
    test_on_words(words, giver, guesser42, epoch=0, to_print_traj=False)
    print("Test for Topic 4")
    for guesser in guesser42_family:
        test_on_words(words, giver, guesser, epoch=0, to_print_traj=False)
    print("Test for 5")
    test_on_words(words, giver, guesser52, epoch=0, to_print_traj=False)
    print("Test for Topic 5")
    for guesser in guesser52_family:
        test_on_words(words, giver, guesser, epoch=0, to_print_traj=False)