Exemple #1
0
def plot_throttled_performance():
    fig, ax = plt.subplots(3,
                           2,
                           figsize=(15, 3),
                           sharex='col',
                           gridspec_kw={'width_ratios': [1, 3]})
    if env[-2:] == '51':
        rwd_colrow = (16, 9)
    else:
        rwd_colrow = (14, 14)

    rect = plt.Rectangle(rwd_colrow, 1, 1, color='g', alpha=0.3)
    ax[0, 0].pcolor(e_grid, cmap='bone_r', edgecolors='k', linewidths=0.1)
    ax[0, 0].axis(xmin=0, xmax=20, ymin=0, ymax=20)
    ax[0, 0].set_aspect('equal')
    ax[0, 0].add_patch(rect)
    ax[0, 0].get_xaxis().set_visible(False)
    ax[0, 0].get_yaxis().set_visible(False)
    ax[0, 0].invert_yaxis()

    ax[1, 0].axis('off')
    ax[2, 0].axis('off')

    for g, gb in enumerate(gbs):
        for r, rep in enumerate(reps_to_plot):
            # ax[0,j] plot average performance with error bars
            # ax[1,j] plot variance of differnt rep types
            for j, pct in enumerate(pcts_to_plot):
                v_list = list(gb.get_group((env, rep, cache_limits[env][pct])))
                print(env, rep, pct, v_list)
                avg_, std_ = get_avg_std(v_list, cutoff=5000, smoothing=100)
                avg_cos, std_cos = np.mean(avg_), np.mean(std_)
                ax[g, 1].bar(2 * r + 0.35 * j,
                             avg_cos,
                             yerr=std_cos,
                             width=0.35,
                             color=convert_rep_to_color[rep],
                             alpha=pct / 100)

        ax[g, 1].set_ylim([0, 12])

        ax[g, 1].set_xticks(np.arange(0, 2 * len(reps_to_plot), 2) + 0.5)
        ax[g, 1].set_xticklabels(rep_labels, rotation=0)
        ax[g, 1].set_ylabel(f'{dist[g]}')
        #ax[1].axhline(y=avg_max_rwd[env[-2:]], color='r', linestyle='--')
        p100 = mpatches.Patch(color='gray', alpha=1, label='100')
        p75 = mpatches.Patch(color='gray', alpha=0.75, label='75')
        p50 = mpatches.Patch(color='gray', alpha=.5, label='50')
        p25 = mpatches.Patch(color='gray', alpha=.25, label='25')
        plt.legend(handles=[p100, p75, p50, p25],
                   bbox_to_anchor=(1.01, 1),
                   loc='upper left',
                   ncol=1,
                   title='Episodic Memory\nCapacity (%)')

    plt.show()
Exemple #2
0
def plot_all(save=False, cutoff=25000, smoothing=5000):
    fig, axs = plt.subplots(4, 3, sharex='col')
    for i in range(len(grids)):
        rect = plt.Rectangle((15,15), 1, 1, color='g', alpha=0.3)
        axs[i,0].pcolor(grids[i],cmap='bone_r',edgecolors='k', linewidths=0.1)
        axs[i,0].axis(xmin=0, xmax=20, ymin=0,ymax=20)
        axs[i,0].set_aspect('equal')
        axs[i,0].add_patch(rect)
        axs[i,0].get_xaxis().set_visible(False)
        axs[i,0].get_yaxis().set_visible(False)
        axs[i,0].invert_yaxis()

    for ind, name in enumerate(envs):
        for jnd, rep_to_plot in enumerate(reps):
            v_list = master_dict[name][rep_to_plot]
            for i in v_list:
                print(i[0:8])
                if i[0:8] in ['69aa8807','9ea97939']:
                    v_list.remove(i)
            avg_, std_ = get_avg_std(v_list,cutoff=cutoff, smoothing=smoothing)
            axs[ind,jnd+1].plot(avg_, label=f'{labels_for_plot[rep_to_plot]}',color=convert_rep_to_color[rep_to_plot]) # label=f'n={len(v_list)}'
            axs[ind,jnd+1].fill_between(np.arange(len(avg_)),avg_-std_, avg_+std_, alpha=0.1,color=convert_rep_to_color[rep_to_plot])

            # compare w
            v_list = slave_dict1[name][convert_conv_head_to_ec_labels[rep_to_plot]]
            avg_, std_ = get_avg_std(v_list,cutoff=cutoff, smoothing=smoothing)
            axs[ind,jnd+1].plot(avg_, ':', color=convert_rep_to_color[rep_to_plot], alpha=0.5) # label=f'n={len(v_list)}'
            #axs[ind,1].fill_between(np.arange(len(avg_)),avg_-std_, avg_+std_, alpha=0.3)
            v_list = slave_dict2[name][rep_to_plot]
            avg_, std_ = get_avg_std(v_list,cutoff=cutoff, smoothing=smoothing)
            axs[ind,jnd+1].plot(avg_, ':', color='gray', alpha=0.3) # label=f'n={len(v_list)}'

            axs[ind,jnd+1].set_ylim([-4,12])
        #axs[ind,1].legend(loc=0)
        if ind == len(envs)-1:
            axs[ind,1].set_xlabel('Episodes')
            #axs[ind,1].set_ylabel('Cumulative \nReward')
    axs[0,1].legend(loc='upper center', ncol=1, bbox_to_anchor=(0.2,1.1))
    axs[0,2].legend(loc='upper center', ncol=1, bbox_to_anchor=(0.2,1.1))
    if save:
        plt.savefig('../figures/CH1/ec_testing.svg',format='svg')

    plt.show()
Exemple #3
0
def plot_dist_comparison():
    fig, ax = plt.subplots(len(reps_to_plot),
                           len(pcts_to_plot) + 1,
                           figsize=(15, 3),
                           sharex='col')
    if env[-2:] == '51':
        rwd_colrow = (16, 9)
    else:
        rwd_colrow = (14, 14)

    rect = plt.Rectangle(rwd_colrow, 1, 1, color='g', alpha=0.3)
    ax[0, 0].pcolor(e_grid, cmap='bone_r', edgecolors='k', linewidths=0.1)
    ax[0, 0].axis(xmin=0, xmax=20, ymin=0, ymax=20)
    ax[0, 0].set_aspect('equal')
    ax[0, 0].add_patch(rect)
    ax[0, 0].get_xaxis().set_visible(False)
    ax[0, 0].get_yaxis().set_visible(False)
    ax[0, 0].invert_yaxis()

    for g, gb in enumerate(gbs):
        for r, rep in enumerate(reps_to_plot):
            if r == 0:
                pass
            else:
                ax[r, 0].axis('off')

            for j, pct in enumerate(pcts_to_plot):
                v_list = list(gb.get_group((env, rep, cache_limits[env][pct])))
                print(env, rep, pct, v_list)
                avg_, std_ = get_avg_std(v_list, cutoff=5000, smoothing=100)
                avg_cos, std_cos = np.mean(avg_), np.mean(std_)
                ax[r, j + 1].bar(g,
                                 avg_cos,
                                 yerr=std_cos,
                                 width=1,
                                 color=convert_rep_to_color[rep],
                                 alpha=(g + 1) / 4)

                ax[r, j + 1].set_ylim([0, 12])

                ax[r, j + 1].set_xticks(np.arange(3))
                if r == 0:
                    ax[r, j + 1].set_title(f'{pct}')
                if r == len(reps_to_plot) - 1:
                    ax[r, j + 1].set_xticklabels(dist, rotation=0)
            ax[r, 1].set_ylabel(f'{labels_for_plot[rep]}')

    plt.show()
Exemple #4
0
def plot_throttled_performance(gb,envs_to_plot,reps_to_plot,pcts_to_plot,grids,save=False):
    fig, ax = plt.subplots(len(envs_to_plot),2,figsize=(12,3*len(envs_to_plot)), sharex='col', gridspec_kw={'width_ratios': [1, 2]})
    for i, env in enumerate(envs_to_plot):
        if env[-2:] == '51':
            rwd_colrow= (16,9)
        else:
            rwd_colrow=(14,14)

        rect = plt.Rectangle(rwd_colrow, 1, 1, color='g', alpha=0.3)
        ax[i,0].pcolor(grids[i],cmap='bone_r',edgecolors='k', linewidths=0.1)
        ax[i,0].axis(xmin=0, xmax=20, ymin=0,ymax=20)
        ax[i,0].set_aspect('equal')
        ax[i,0].add_patch(rect)
        ax[i,0].get_xaxis().set_visible(False)
        ax[i,0].get_yaxis().set_visible(False)
        ax[i,0].invert_yaxis()

        for r, rep in enumerate(reps_to_plot):
            # ax[0,j] plot average performance with error bars
            # ax[1,j] plot variance of differnt rep types
            for j, pct in enumerate(pcts_to_plot):
                v_list = list(gb.get_group((env, rep, cache_limits[env][pct])))
                print(env, rep, pct, v_list)
                normalization_factor = avg_max_rwd[env[-2:]]
                avg_, std_ = get_avg_std(v_list,normalization_factor=normalization_factor,cutoff=5000, smoothing=100)
                avg_cos, std_cos = np.mean(avg_), np.mean(std_)
                ax[i,1].bar(2*r+0.35*j,avg_cos, yerr=std_cos,width=0.35,color=convert_rep_to_color[rep], alpha=pct/100)

        ax[i,1].set_ylim([0,1.2])
        ax[i,1].set_yticks(np.arange(0,1.5,0.25))
        ax[i,1].set_yticklabels([0,'',50,'',100,''])
        ax[i,1].set_ylabel('% Optimal Performance')

    ax[i,1].set_xticks(np.arange(0,2*len(reps_to_plot),2)+0.5)
    ax[i,1].set_xticklabels(rep_labels,rotation=0)

    #ax[1].axhline(y=avg_max_rwd[env[-2:]], color='r', linestyle='--')
    p100 = mpatches.Patch(color='gray',alpha=1, label='100')
    p75 = mpatches.Patch(color='gray',alpha=0.75, label='75')
    p50 = mpatches.Patch(color='gray',alpha=.5, label='50')
    p25 = mpatches.Patch(color='gray',alpha=.25, label='25')
    #plt.legend(handles=[p100,p75,p50,p25], bbox_to_anchor=(0.5, len(envs_to_plot)*1.1), loc='lower center', ncol=4, title='Episodic Memory Capacity (%)')
    ax[0,1].set_title("Limited Capacity with Structured Representations")
    if save:
        format = 'svg'
        plt.savefig(f'../figures/CH2/forgetting_structured.{format}', format=format)
    plt.show()
def plot_3d_avg_var():
    for i, env in enumerate(envs_to_plot):
        fig = plt.figure()
        ax = plt.axes(projection='3d')
        for r, rep in enumerate(reps_to_plot):
            avg_rwd_var =[[],[]]
            # ax[0,j] plot performance curves
            # ax[1,j] plot variance of differnt rep types
            for j, pct in enumerate(pcts_to_plot):
                v_list = list(gb.get_group((env, rep, cache_limits[env][pct])))
                print(env, rep, pct, v_list)
                avg_, std_ = get_avg_std(v_list,cutoff=5000, smoothing=100)
                avg_rwd_var[0].append(np.mean(avg_))
                avg_rwd_var[1].append(np.mean(std_))

            print(avg_rwd_var[0],avg_rwd_var[1], 'avg vs std')
            ax.plot3D(pcts_to_plot,avg_rwd_var[1], avg_rwd_var[0],'o-',color=convert_rep_to_color[rep])
    plt.show()
def plot_throttled_performance():
    for i, env in enumerate(envs_to_plot):
        fig, ax = plt.subplots(2,len(pcts_to_plot)+1)
        tmp_env_obj = gym.make(env)
        e_grid = tmp_env_obj.grid
        if env[-2:] == '51':
            rwd_colrow= (16,9)
        else:
            rwd_colrow=(14,14)

        rect = plt.Rectangle(rwd_colrow, 1, 1, color='g', alpha=0.3)
        ax[0,0].pcolor(e_grid,cmap='bone_r',edgecolors='k', linewidths=0.1)
        ax[0,0].axis(xmin=0, xmax=20, ymin=0,ymax=20)
        ax[0,0].set_aspect('equal')
        ax[0,0].add_patch(rect)
        ax[0,0].get_xaxis().set_visible(False)
        ax[0,0].get_yaxis().set_visible(False)
        ax[0,0].invert_yaxis()

        for r, rep in enumerate(reps_to_plot):
            avg_rwd_var =[[],[]]
            # ax[0,j] plot performance curves
            # ax[1,j] plot variance of differnt rep types
            for j, pct in enumerate(pcts_to_plot):
                v_list = list(gb.get_group((env, rep, cache_limits[env][pct])))
                print(env, rep, pct, v_list)
                avg_, std_ = get_avg_std(v_list,cutoff=5000, smoothing=100)
                ax[0,j+1].plot(avg_, label=f'{labels_for_plot[rep]}',color=convert_rep_to_color[rep])
                ax[0,j+1].fill_between(np.arange(len(avg_)),avg_-std_, avg_+std_, color=convert_rep_to_color[rep],alpha=0.3)
                ax[0,j+1].set_ylim([-4,12])
                ax[0,j+1].set_title(f'{pct}')
                ax[1,j+1].bar(r, np.mean(std_),label=f'{labels_for_plot[rep]}', color=convert_rep_to_color[rep])
                ax[1,j+1].set_ylim([0,6])
                avg_rwd_var[0].append(np.mean(avg_))
                avg_rwd_var[1].append(np.mean(std_))

            print(avg_rwd_var[0],avg_rwd_var[1], 'avg vs std')
            ax[1,0].plot(avg_rwd_var[1], avg_rwd_var[0],'o-',color=convert_rep_to_color[rep])
        ax[1,-1].legend(bbox_to_anchor =(1.1,-.05), ncol=len(reps_to_plot))

    plt.show()
Exemple #7
0
def plot_all(save=False, cutoff=25000):
    fig, axs = plt.subplots(4, 2, sharex='col')
    for i in range(len(grids)):
        rect = plt.Rectangle((5, 5), 1, 1, color='g', alpha=0.3)
        axs[i, 0].pcolor(grids[i],
                         cmap='bone_r',
                         edgecolors='k',
                         linewidths=0.1)
        axs[i, 0].axis(xmin=0, xmax=20, ymin=0, ymax=20)
        axs[i, 0].set_aspect('equal')
        axs[i, 0].add_patch(rect)
        axs[i, 0].get_xaxis().set_visible(False)
        axs[i, 0].get_yaxis().set_visible(False)
        axs[i, 0].invert_yaxis()

    for ind, name in enumerate(envs):
        for rep_to_plot in reps:
            v_list = list(df_gb.get_group((name, rep_to_plot, 'x')))
            for i in v_list:
                print(i[0:8])
                if i[0:8] in ['69aa8807', '9ea97939']:
                    v_list.remove(i)
            avg_, std_ = get_avg_std(v_list, cutoff=cutoff, smoothing=200)
            axs[ind, 1].plot(avg_, label=f'{labels_for_plot[rep_to_plot]}')
            axs[ind, 1].fill_between(np.arange(len(avg_)),
                                     avg_ - std_ / np.sqrt(len(v_list)),
                                     avg_ + std_ / np.sqrt(len(v_list)),
                                     alpha=0.3)
            axs[ind, 1].set_ylim([-4, 12])
        if ind == len(envs) - 1:
            axs[ind, 1].set_xlabel('Episodes')
            #axs[ind,1].set_ylabel('Cumulative \nReward')
    axs[0, 1].legend(loc='upper center', ncol=1, bbox_to_anchor=(0.2, 1.1))
    if save:
        plt.savefig('../figures/CH1/conv_retraining.svg', format='svg')

    plt.show()


#plot_all(cutoff=25000)
def plot_all(save=False):
    fig, axs = plt.subplots(4, 2, sharex='col')
    #rect = plt.Rectangle((5,5), 1, 1, color='r', alpha=0.3)
    for i in range(len(grids)):
        rect = plt.Rectangle((15,15), 1, 1, color='g', alpha=0.3)
        axs[i,0].pcolor(grids[i],cmap='bone_r',edgecolors='k', linewidths=0.1)
        axs[i,0].axis(xmin=0, xmax=20, ymin=0,ymax=20)
        axs[i,0].set_aspect('equal')
        axs[i,0].add_patch(rect)
        axs[i,0].invert_yaxis()

    for ind, name in enumerate(envs):
        for rep_to_plot in reps:
            v_list = master_dict[name][rep_to_plot]
            avg_, std_ = get_avg_std(v_list,cutoff=5000)
            axs[ind,1].plot(avg_, label=f'{rep_to_plot}')
            axs[ind,1].fill_between(np.arange(len(avg_)),avg_-std_, avg_+std_, alpha=0.3)
        if ind == len(envs)-1:
            axs[ind,1].set_xlabel('Episodes')
            axs[ind,1].set_ylabel('Cumulative \nReward')
        axs[0,1].legend(loc='upper center', ncol=2, bbox_to_anchor = (0.1,1.1))
    if save:
        plt.savefig('../figures/CH1/conv_training.svg',format='svg')
    plt.show()
Exemple #9
0
env_names = [
    'gridworld:gridworld-v1', 'gridworld:gridworld-v4',
    'gridworld:gridworld-v3', 'gridworld:gridworld-v5'
]
test_env_names = [
    'gridworld:gridworld-v11', 'gridworld:gridworld-v41',
    'gridworld:gridworld-v31', 'gridworld:gridworld-v51'
]

fig, ax = plt.subplots(4, 1)
env_number = 1
print(ids2[test_env_names[env_number]])
list_of_representations = ['saved_latents']
for ind, rep_str in enumerate(list_of_representations):
    print(rep_str)
    av, sd = get_avg_std(ids2[test_env_names[env_number]][rep_str],
                         cutoff=5000)
    ax[0].plot(av, label=rep_str)
    ax[0].fill_between(np.arange(len(av)), av - sd, av + sd, alpha=0.3)
    #ax[1].bar(ind,np.mean(sd))

ax[0].legend(loc=0)
#plt.ylim([-4,12])
plt.show()

df = pd.read_csv('../../Data/head_only_retrain.csv')

master_dict = {}
envs = df.env_name.unique()
reps = df.representation.unique()

for env in envs:
def plot_throttled_performance():
    fig, ax = plt.subplots(2, len(pcts_to_plot) + 1)
    if env[-2:] == '51':
        rwd_colrow = (16, 9)
    else:
        rwd_colrow = (14, 14)

    rect = plt.Rectangle(rwd_colrow, 1, 1, color='g', alpha=0.3)
    ax[0, 0].pcolor(e_grid, cmap='bone_r', edgecolors='k', linewidths=0.1)
    ax[0, 0].axis(xmin=0, xmax=20, ymin=0, ymax=20)
    ax[0, 0].set_aspect('equal')
    ax[0, 0].add_patch(rect)
    ax[0, 0].get_xaxis().set_visible(False)
    ax[0, 0].get_yaxis().set_visible(False)
    ax[0, 0].invert_yaxis()

    for r, rep in enumerate(reps_to_plot):
        avg_rwd_var = [[], []]
        # ax[0,j] plot average performance with error bars
        # ax[1,j] plot variance of differnt rep types
        for j, pct in enumerate(pcts_to_plot):
            v_list = list(gb_cos.get_group((env, rep, cache_limits[env][pct])))
            print(env, rep, pct, v_list)
            avg_, std_ = get_avg_std(v_list, cutoff=5000, smoothing=100)
            avg_cos, std_cos = np.mean(avg_), np.mean(std_)
            ax[0, j + 1].bar(2 * r + 0.5,
                             avg_cos,
                             yerr=std_cos,
                             width=0.5,
                             color=convert_rep_to_color[rep],
                             alpha=0.5)

            v_list = list(gb_euc.get_group((env, rep, cache_limits[env][pct])))
            print(env, rep, pct, v_list)
            avg_, std_ = get_avg_std(v_list, cutoff=5000, smoothing=100)
            avg_euc, std_euc = np.mean(avg_), np.mean(std_)
            ax[0, j + 1].bar(2 * r,
                             avg_euc,
                             yerr=std_euc,
                             width=0.5,
                             color=convert_rep_to_color[rep],
                             alpha=1)

            ax[0, j + 1].set_ylim([0, 15])
            ax[0, j + 1].set_title(f'{pct}')
            ax[0, j + 1].set_xticks([0, 2, 4, 6])
            ax[0, j + 1].set_xticklabels(rep_labels, rotation=315)

            ax[1, j + 1].scatter(avg_cos,
                                 std_cos,
                                 color=convert_rep_to_color[rep],
                                 alpha=0.5)
            ax[1, j + 1].scatter(avg_euc,
                                 std_euc,
                                 color=convert_rep_to_color[rep],
                                 alpha=1)
            ax[1, j + 1].set_xlim([0, 10])
            ax[1, j + 1].set_ylim([0, 6])

    ax[1, 0].axis('off')
    ax[1, -1].legend(bbox_to_anchor=(1.1, -.05), ncol=len(reps_to_plot))

    plt.show()
Exemple #11
0
    'gridworld:gridworld-v31', 'gridworld:gridworld-v51'
]
'''
grids = []
for ind, environment_to_plot in enumerate(env_names):
    env = gym.make(environment_to_plot)
    plt.close()
    grids.append(env.grid)
'''
fig, ax = plt.subplots(1, 2)
env_number = 1
print(ids2[test_env_names[env_number]])

for ind, rep_str in enumerate(df2.representation.unique()):
    print(rep_str)
    av, sd = get_avg_std(ids2[test_env_names[env_number]][rep_str],
                         cutoff=25000)
    ax[0].plot(av, label=rep_str)
    ax[0].fill_between(np.arange(len(av)), av - sd, av + sd, alpha=0.3)
    ax[1].bar(ind, np.mean(sd))

ax[0].legend(loc=0)
#plt.ylim([-4,12])
plt.show()

### JUNKYARD
'''
reps = df1.representation.unique()
print(reps)
fig, ax = plt.subplots(1,2, sharey=True)
env_number = 1
for rep_str in reps: