回答編集履歴
5
softmax_randomからboltzmann_randomに変更
test
CHANGED
@@ -78,4 +78,4 @@
|
|
78
78
|
|
79
79
|
|
80
80
|
|
81
|
-
|
81
|
+
boltzmann_randomに一次元の行動価値の配列を渡して使います。
|
4
色々と無駄があったので修正
test
CHANGED
@@ -38,31 +38,9 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
-
def
|
41
|
+
def boltzmann_random(array, temperature_parameter):
|
42
42
|
|
43
|
-
if array.ndim == 2:
|
44
|
-
|
45
|
-
array = array.T
|
46
|
-
|
47
|
-
array = array - np.max(array, axis=0)
|
48
|
-
|
49
|
-
result = np.exp(array) / np.sum(np.exp(array), axis=0)
|
50
|
-
|
51
|
-
return result.T
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
array = array - np.max(array) # オーバーフロー対策
|
56
|
-
|
57
|
-
return np.exp(array) / np.sum(np.exp(array))
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
def softmax_random(array, temperature_parameter):
|
62
|
-
|
63
|
-
softmax_array = softmax(array)
|
64
|
-
|
65
|
-
boltzmann_array = boltzmann_distribution(
|
43
|
+
boltzmann_array = boltzmann_distribution(array, temperature_parameter)
|
66
44
|
|
67
45
|
random_value = random.uniform(0, 1)
|
68
46
|
|
@@ -82,17 +60,17 @@
|
|
82
60
|
|
83
61
|
#行動価値
|
84
62
|
|
85
|
-
array = np.array([0.5, 0.
|
63
|
+
array = np.array([0.5, 0.3, 0.2])
|
86
64
|
|
87
65
|
#temperature_parameter = 0であれば最大値のみを選択する
|
88
66
|
|
89
|
-
action_index = [
|
67
|
+
action_index = [boltzmann_random(array, 0) for _ in range(10000)]
|
90
68
|
|
91
69
|
print([action_index.count(i) for i in range(len(array))])
|
92
70
|
|
93
71
|
#temperature_parameterを大きくするほどランダム性が高まる 1であれば行動価値に応じた確率で行動を起こす
|
94
72
|
|
95
|
-
action_index = [
|
73
|
+
action_index = [boltzmann_random(array, 1) for _ in range(10000)]
|
96
74
|
|
97
75
|
print([action_index.count(i) for i in range(len(array))])
|
98
76
|
|
3
コードの修正
test
CHANGED
@@ -62,7 +62,7 @@
|
|
62
62
|
|
63
63
|
softmax_array = softmax(array)
|
64
64
|
|
65
|
-
boltzmann_array = boltzmann_distribution(array, temperature_parameter)
|
65
|
+
boltzmann_array = boltzmann_distribution(softmax_array, temperature_parameter)
|
66
66
|
|
67
67
|
random_value = random.uniform(0, 1)
|
68
68
|
|
2
printデバッグが残ったままだった
test
CHANGED
@@ -76,8 +76,6 @@
|
|
76
76
|
|
77
77
|
return i
|
78
78
|
|
79
|
-
print("ok", i)
|
80
|
-
|
81
79
|
return i
|
82
80
|
|
83
81
|
|
1
リスト内包の部分でバグがあったぽいので修正
test
CHANGED
@@ -76,6 +76,8 @@
|
|
76
76
|
|
77
77
|
return i
|
78
78
|
|
79
|
+
print("ok", i)
|
80
|
+
|
79
81
|
return i
|
80
82
|
|
81
83
|
|
@@ -86,11 +88,15 @@
|
|
86
88
|
|
87
89
|
#temperature_parameter = 0であれば最大値のみを選択する
|
88
90
|
|
91
|
+
action_index = [softmax_random(array, 0) for _ in range(10000)]
|
92
|
+
|
89
|
-
print([
|
93
|
+
print([action_index.count(i) for i in range(len(array))])
|
90
94
|
|
91
95
|
#temperature_parameterを大きくするほどランダム性が高まる 1であれば行動価値に応じた確率で行動を起こす
|
92
96
|
|
97
|
+
action_index = [softmax_random(array, 1) for _ in range(10000)]
|
98
|
+
|
93
|
-
print([
|
99
|
+
print([action_index.count(i) for i in range(len(array))])
|
94
100
|
|
95
101
|
```
|
96
102
|
|