-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathexperiment_3_pool_showresults.py
122 lines (102 loc) · 4.73 KB
/
experiment_3_pool_showresults.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# next is to add accel and see the difference
# add stiffness too
import tensorflow as tf
import numpy as np
from scipy import signal, stats
from matplotlib import pyplot as plt
from all_functions import *
import pickle
from warnings import simplefilter
import matplotlib
matplotlib.rcParams['pdf.fonttype'] = 42
matplotlib.rcParams['ps.fonttype'] = 42
matplotlib.rcParams['mathtext.fontset'] = 'cm'
plt.rcParams['svg.fonttype'] = 'none'
def calculate_mean_std(data, method='mean'):
stiffness_versions = data.shape[0]
output = np.zeros(stiffness_versions)
for stiffness_version_A in range(stiffness_versions):
if method == 'mean':
output[stiffness_version_A] = data[stiffness_version_A].mean(0)
elif method == 'std':
output[stiffness_version_A] = data[stiffness_version_A].std(0)
else:
raise NameError('invalid method: please use mean or std')
return output
experiment_ID = "experiment_3_pool_G"
if experiment_ID == "experiment_3_pool_B":
reward_thresh = 5 #3:7 3B:5
mc_run_number = 50
elif experiment_ID == "experiment_3_pool_D":
reward_thresh = 5 #3:7 3B:5
mc_run_number = 100
elif experiment_ID == "experiment_3_pool_C":
reward_thresh = 6 #3:7 3B:5
mc_run_number = 50
elif experiment_ID == "experiment_3_pool_E":
reward_thresh = 4 #3:7 3B:5
mc_run_number = 20
elif experiment_ID == "experiment_3_pool_F":
reward_thresh = 3 #3:7 3B:5
mc_run_number = 20
elif experiment_ID == "experiment_3_pool_G":
reward_thresh = 3 #3:7 3B:5
mc_run_number = 100
else:
reward_thresh = 7 #3:7 3B:5
mc_run_number = 50
stiffness_versions = 9
exploration_run_numbers_all = np.zeros([mc_run_number, stiffness_versions])
rewards_all = np.zeros([mc_run_number, stiffness_versions])
energies_all = np.zeros([mc_run_number, stiffness_versions])
for stiffness_version_A in range(stiffness_versions):
exploration_run_numbers_all [:, stiffness_version_A] = np.load("./results/{}/exploration_run_numbers_S{}.npy".format(experiment_ID, stiffness_version_A))
rewards_all [:, stiffness_version_A] = np.load("./results/{}/rewards_S{}.npy".format(experiment_ID, stiffness_version_A))
energies_all [:, stiffness_version_A] = np.load("./results/{}/energies_S{}.npy".format(experiment_ID, stiffness_version_A))
#y_lim=[0, .7]
number_of_successful_attempt = np.array(sum(rewards_all>=reward_thresh))
successful_rewards = []
successful_energies = []
#number_of_successful_attempt = np.where(rewards_all>=7)
for stiffness_version_A in range(stiffness_versions):
successful_rewards.append(rewards_all[rewards_all[:, stiffness_version_A]>=reward_thresh, stiffness_version_A])
successful_energies.append(energies_all[rewards_all[:, stiffness_version_A]>=reward_thresh, stiffness_version_A])
successful_rewards = np.array(successful_rewards)
successful_energies = np.array(successful_energies)
successful_rewards_means = calculate_mean_std(successful_rewards, method='mean')
successful_rewards_stds = calculate_mean_std(successful_rewards, method='std')
successful_energies_means = calculate_mean_std(successful_energies, method='mean')
successful_energies_stds = calculate_mean_std(successful_energies, method='std')
[f_ow, p_val_avg] = stats.f_oneway(successful_energies[0],successful_energies[4])
print("p-value (S = 0 & S = 4K): ", p_val_avg)
[f_ow, p_val_avg] = stats.f_oneway(successful_energies[6],successful_energies[4])
print("p-value (S = 10K & S = 4K): ", p_val_avg)
nrows = 1
ncols = 3
fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(9, 3))
#import pdb; pdb.set_trace()
p0 = axes[0].bar(range(stiffness_versions),number_of_successful_attempt/mc_run_number, alpha=.5)
p1 = axes[1].bar(range(stiffness_versions),successful_rewards_means,yerr=successful_rewards_stds/2, alpha=.5)
p2 = axes[2].bar(range(stiffness_versions),successful_energies_means,yerr=successful_energies_stds/2, alpha=.5)
#axes[1].set_xlabel('stiffness')
#axes[1].set_xticklabels(stiffness_values, rotation=45, fontsize=8)
stiffness_values = ["0", "500", "1k", "2k", "4k", "7k", "10k", "15k", "20k"]
#titles = []
xlabels = ['Stiffness']*3
ylabels = ['Success rate (%)', 'Reward', 'Energy']
for ii in range(ncols):
plt.sca(axes[ii])
plt.xlabel(xlabels[ii], fontsize=9)
plt.xticks(range(stiffness_versions), stiffness_values, rotation=45, fontsize=8)
plt.ylabel(ylabels[ii], fontsize=9)
plt.yticks(rotation=45, fontsize=8)
fig.subplots_adjust(top=.9, bottom=.2, left=.06, right=.95, wspace=.30)
fig.savefig('./results/{}/exp3_learn2walk_results.pdf'.format(experiment_ID))
fig.savefig('./results/figures/exp3_learn2walk_results.pdf'.format(experiment_ID))
fig.savefig('./results/figures/exp3_learn2walk_results.png'.format(experiment_ID))
# p0 = axes[1].boxplot(
# [errors_all_cyc_A_A.mean(0)[0], errors_all_cyc_A_B.mean(0)[0], errors_all_cyc_B_B.mean(0)[0]],
# notch=True,
# patch_artist=True)
plt.show()
#import pdb; pdb.set_trace()