modify ddpg test
change the expectation values in dnn test
This commit is contained in:
parent
dcb3152ec5
commit
ab17aafac4
|
@ -6,13 +6,17 @@
|
|||
|
||||
import random
|
||||
import unittest
|
||||
from sklearn import datasets
|
||||
import numpy as np
|
||||
import torch
|
||||
from analysis.ddpg.ddpg import DDPG
|
||||
|
||||
|
||||
# test ddpg model
|
||||
# test ddpg model:
|
||||
# The enviroment has 1-dim state and 1-dim action, the reward is calculated as follows:
|
||||
# if state < 0.5, taking action < 0.5 gets reward 1, taking action >= 0.5 gets reward 0
|
||||
# if state >= 0.5, taking action >= 0.5 gets reward 1, taking action < 0.5 gets reward 0
|
||||
# Train 500 iterations and test for 500 iterations
|
||||
# If the average reward during test is larger than 0.9, this test passes
|
||||
class TestDDPG(unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
|
@ -21,22 +25,26 @@ class TestDDPG(unittest.TestCase):
|
|||
np.random.seed(0)
|
||||
torch.manual_seed(0)
|
||||
super(TestDDPG, cls).setUpClass()
|
||||
boston = datasets.load_boston()
|
||||
data = boston['data']
|
||||
X_train = data[0:500]
|
||||
X_test = data[500:]
|
||||
y_train = boston['target'][0:500].reshape(500, 1)
|
||||
ddpg = DDPG(n_actions=1, n_states=13)
|
||||
for i in range(500):
|
||||
cls.ddpg = DDPG(n_actions=1, n_states=1, gamma=0)
|
||||
for _ in range(700):
|
||||
knob_data = np.array([random.random()])
|
||||
prev_metric_data = X_train[i - 1]
|
||||
metric_data = X_train[i]
|
||||
reward = y_train[i - 1]
|
||||
ddpg.add_sample(prev_metric_data, knob_data, reward, metric_data, False)
|
||||
if len(ddpg.replay_memory) > 32:
|
||||
ddpg.update()
|
||||
cls.ypreds_round = ['%.4f' % ddpg.choose_action(x)[0] for x in X_test]
|
||||
prev_metric_data = np.array([random.random()])
|
||||
metric_data = np.array([random.random()])
|
||||
reward = 1.0 if (prev_metric_data[0] - 0.5) * (knob_data[0] - 0.5) > 0 else 0.0
|
||||
reward = np.array([reward])
|
||||
cls.ddpg.add_sample(prev_metric_data, knob_data, reward, metric_data, False)
|
||||
if len(cls.ddpg.replay_memory) > 32:
|
||||
cls.ddpg.update()
|
||||
|
||||
def test_ddpg_ypreds(self):
|
||||
expected_ypreds = ['0.3169', '0.3240', '0.3934', '0.5787', '0.6988', '0.5163']
|
||||
self.assertEqual(self.ypreds_round, expected_ypreds)
|
||||
total_reward = 0.0
|
||||
for _ in range(500):
|
||||
prev_metric_data = np.array([random.random()])
|
||||
knob_data = self.ddpg.choose_action(prev_metric_data)
|
||||
reward = 1.0 if (prev_metric_data[0] - 0.5) * (knob_data[0] - 0.5) > 0 else 0.0
|
||||
total_reward += reward
|
||||
self.assertGreater(total_reward / 500, 0.9)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
#
|
||||
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
|
||||
#
|
||||
import random
|
||||
import unittest
|
||||
import numpy as np
|
||||
from tensorflow import set_random_seed
|
||||
from sklearn import datasets
|
||||
from analysis.nn_tf import NeuralNet
|
||||
|
@ -20,7 +22,9 @@ class TestNN(unittest.TestCase):
|
|||
X_train = data[0:500]
|
||||
X_test = data[500:]
|
||||
y_train = boston['target'][0:500].reshape(500, 1)
|
||||
set_random_seed(1)
|
||||
random.seed(0)
|
||||
np.random.seed(0)
|
||||
set_random_seed(0)
|
||||
cls.model = NeuralNet(n_input=X_test.shape[1],
|
||||
batch_size=X_test.shape[0])
|
||||
cls.model.fit(X_train, y_train)
|
||||
|
@ -29,10 +33,10 @@ class TestNN(unittest.TestCase):
|
|||
|
||||
def test_nn_ypreds(self):
|
||||
ypreds_round = ['%.3f' % x[0] for x in self.nn_result]
|
||||
expected_ypreds = ['20.503', '22.158', '22.158', '25.692', '24.536', '23.637']
|
||||
expected_ypreds = ['21.279', '22.668', '23.115', '27.228', '25.892', '23.967']
|
||||
self.assertEqual(ypreds_round, expected_ypreds)
|
||||
|
||||
def test_nn_yrecommend(self):
|
||||
recommends_round = ['%.3f' % x[0] for x in self.nn_recommend.minl]
|
||||
expected_recommends = ['14.229', '22.158', '22.158', '23.591', '23.591', '23.593']
|
||||
expected_recommends = ['21.279', '21.279', '21.279', '21.279', '21.279', '21.279']
|
||||
self.assertEqual(recommends_round, expected_recommends)
|
||||
|
|
Loading…
Reference in New Issue