ottertune/server/analysis/tests/test_ddpg.py

45 lines
1.4 KiB
Python

#
# OtterTune - test_ddpg.py
#
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
#
import random
import unittest
from sklearn import datasets
import numpy as np
import torch
from analysis.ddpg.ddpg import DDPG
# test ddpg model
class TestDDPG(unittest.TestCase):
@classmethod
def setUpClass(cls):
torch.manual_seed(0)
random.seed(0)
np.random.seed(0)
super(TestDDPG, cls).setUpClass()
boston = datasets.load_boston()
data = boston['data']
X_train = data[0:500]
cls.X_test = data[500:]
y_train = boston['target'][0:500].reshape(500, 1)
cls.ddpg = DDPG(n_actions=1, n_states=13)
for i in range(500):
knob_data = np.array([random.random()])
prev_metric_data = X_train[i - 1]
metric_data = X_train[i]
reward = y_train[i - 1]
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):
ypreds_round = [round(self.ddpg.choose_action(x)[0], 4) for x in self.X_test]
expected_ypreds = [0.1778, 0.1914, 0.2607, 0.4459, 0.5660, 0.3836]
self.assertEqual(ypreds_round, expected_ypreds)
for ypred_round, expected_ypred in zip(ypreds_round, expected_ypreds):
self.assertAlmostEqual(ypred_round, expected_ypred, places=6)