restore CDBTune
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
|
||||
#
|
||||
# from: https://github.com/KqSMea8/CDBTune
|
||||
# from: https://github.com/KqSMea8/use_default
|
||||
# Zhang, Ji, et al. "An end-to-end automatic cloud database tuning system using
|
||||
# deep reinforcement learning." Proceedings of the 2019 International Conference
|
||||
# on Management of Data. ACM, 2019
|
||||
@@ -23,22 +23,36 @@ LOG = get_analysis_logger(__name__)
|
||||
|
||||
class Actor(nn.Module):
|
||||
|
||||
def __init__(self, n_states, n_actions, hidden_sizes):
|
||||
def __init__(self, n_states, n_actions, hidden_sizes, use_default):
|
||||
super(Actor, self).__init__()
|
||||
self.layers = nn.Sequential(
|
||||
nn.Linear(n_states, hidden_sizes[0]),
|
||||
nn.LeakyReLU(negative_slope=0.2),
|
||||
nn.BatchNorm1d(hidden_sizes[0]),
|
||||
nn.Linear(hidden_sizes[0], hidden_sizes[1]),
|
||||
nn.Tanh(),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(hidden_sizes[1]),
|
||||
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
|
||||
nn.Tanh(),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(hidden_sizes[2]),
|
||||
nn.Linear(hidden_sizes[2], n_actions)
|
||||
)
|
||||
if use_default:
|
||||
self.layers = nn.Sequential(
|
||||
nn.Linear(n_states, 128),
|
||||
nn.LeakyReLU(negative_slope=0.2),
|
||||
nn.BatchNorm1d(hidden_sizes[0]),
|
||||
nn.Linear(128, 128),
|
||||
nn.Tanh(),
|
||||
nn.Dropout(0.3),
|
||||
nn.Linear(128, 128),
|
||||
nn.Tanh(),
|
||||
nn.Linear(128, 64),
|
||||
nn.Linear(64, n_actions)
|
||||
)
|
||||
else:
|
||||
self.layers = nn.Sequential(
|
||||
nn.Linear(n_states, hidden_sizes[0]),
|
||||
nn.LeakyReLU(negative_slope=0.2),
|
||||
nn.BatchNorm1d(hidden_sizes[0]),
|
||||
nn.Linear(hidden_sizes[0], hidden_sizes[1]),
|
||||
nn.Tanh(),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(hidden_sizes[1]),
|
||||
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
|
||||
nn.Tanh(),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(hidden_sizes[2]),
|
||||
nn.Linear(hidden_sizes[2], n_actions)
|
||||
)
|
||||
# This act layer maps the output to (0, 1)
|
||||
self.act = nn.Sigmoid()
|
||||
self._init_weights()
|
||||
@@ -58,22 +72,37 @@ class Actor(nn.Module):
|
||||
|
||||
class Critic(nn.Module):
|
||||
|
||||
def __init__(self, n_states, n_actions, hidden_sizes):
|
||||
def __init__(self, n_states, n_actions, hidden_sizes, use_default):
|
||||
super(Critic, self).__init__()
|
||||
self.state_input = nn.Linear(n_states, hidden_sizes[0])
|
||||
self.action_input = nn.Linear(n_actions, hidden_sizes[0])
|
||||
self.act = nn.Tanh()
|
||||
self.layers = nn.Sequential(
|
||||
nn.Linear(hidden_sizes[0] * 2, hidden_sizes[1]),
|
||||
nn.LeakyReLU(negative_slope=0.2),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(hidden_sizes[1]),
|
||||
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
|
||||
nn.Tanh(),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(hidden_sizes[2]),
|
||||
nn.Linear(hidden_sizes[2], 1),
|
||||
)
|
||||
if use_default:
|
||||
self.state_input = nn.Linear(n_states, 128)
|
||||
self.action_input = nn.Linear(n_actions, 128)
|
||||
self.layers = nn.Sequential(
|
||||
nn.Linear(256, 256),
|
||||
nn.LeakyReLU(negative_slope=0.2),
|
||||
nn.BatchNorm1d(256),
|
||||
nn.Linear(256, 256),
|
||||
nn.Linear(256, 64),
|
||||
nn.Tanh(),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(64),
|
||||
nn.Linear(64, 1)
|
||||
)
|
||||
else:
|
||||
self.state_input = nn.Linear(n_states, hidden_sizes[0])
|
||||
self.action_input = nn.Linear(n_actions, hidden_sizes[0])
|
||||
self.layers = nn.Sequential(
|
||||
nn.Linear(hidden_sizes[0] * 2, hidden_sizes[1]),
|
||||
nn.LeakyReLU(negative_slope=0.2),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(hidden_sizes[1]),
|
||||
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
|
||||
nn.Tanh(),
|
||||
nn.Dropout(0.3),
|
||||
nn.BatchNorm1d(hidden_sizes[2]),
|
||||
nn.Linear(hidden_sizes[2], 1)
|
||||
)
|
||||
self._init_weights()
|
||||
|
||||
def _init_weights(self):
|
||||
@@ -101,7 +130,8 @@ class DDPG(object):
|
||||
|
||||
def __init__(self, n_states, n_actions, model_name='', alr=0.001, clr=0.001,
|
||||
gamma=0.9, batch_size=32, tau=0.002, shift=0, memory_size=100000,
|
||||
a_hidden_sizes=[128, 128, 64], c_hidden_sizes=[128, 256, 64]):
|
||||
a_hidden_sizes=[128, 128, 64], c_hidden_sizes=[128, 256, 64],
|
||||
use_default=False):
|
||||
self.n_states = n_states
|
||||
self.n_actions = n_actions
|
||||
self.alr = alr
|
||||
@@ -113,6 +143,7 @@ class DDPG(object):
|
||||
self.a_hidden_sizes = a_hidden_sizes
|
||||
self.c_hidden_sizes = c_hidden_sizes
|
||||
self.shift = shift
|
||||
self.use_default = use_default
|
||||
|
||||
self._build_network()
|
||||
|
||||
@@ -124,10 +155,12 @@ class DDPG(object):
|
||||
return Variable(torch.FloatTensor(x))
|
||||
|
||||
def _build_network(self):
|
||||
self.actor = Actor(self.n_states, self.n_actions, self.a_hidden_sizes)
|
||||
self.target_actor = Actor(self.n_states, self.n_actions, self.a_hidden_sizes)
|
||||
self.critic = Critic(self.n_states, self.n_actions, self.c_hidden_sizes)
|
||||
self.target_critic = Critic(self.n_states, self.n_actions, self.c_hidden_sizes)
|
||||
self.actor = Actor(self.n_states, self.n_actions, self.a_hidden_sizes, self.use_default)
|
||||
self.target_actor = Actor(self.n_states, self.n_actions, self.a_hidden_sizes,
|
||||
self.use_default)
|
||||
self.critic = Critic(self.n_states, self.n_actions, self.c_hidden_sizes, self.use_default)
|
||||
self.target_critic = Critic(self.n_states, self.n_actions, self.c_hidden_sizes,
|
||||
self.use_default)
|
||||
|
||||
# Copy actor's parameters
|
||||
self._update_target(self.target_actor, self.actor, tau=1.0)
|
||||
|
||||
Reference in New Issue
Block a user