Exemple #1
0
    def __init__(self, n_in, n_mid, n_out):
        super(Net, self).__init__()

        self.util = RLUtil.RLUtil()

        # デバイスの設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)

        if self.device.type == "cuda":
            self.fc1 = nn.Linear(n_in, n_mid).cuda()
            self.fc2 = nn.Linear(n_mid, n_mid).cuda()
            # Actor-Critic
            # 行動を決めるのではなく出力は行動の種類数
            self.actor = nn.Linear(n_mid, n_out).cuda()
            # 状態価値なので出力は1つ
            self.critic = nn.Linear(n_mid, 1).cuda()
        else:
            self.fc1 = nn.Linear(n_in, n_mid)
            self.fc2 = nn.Linear(n_mid, n_mid)
            # Actor-Critic
            # 行動を決めるのではなく出力は行動の種類数
            self.actor = nn.Linear(n_mid, n_out)
            # 状態価値なので出力は1つ
            self.critic = nn.Linear(n_mid, 1)
Exemple #2
0
    def __init__(self, n_in, n_mid, n_out):
        super(Net, self).__init__()

        # Utilクラスインスタンス生成
        self.util = RLUtil.RLUtil()
        # デバイス情報の設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)

        if self.device.type == "cuda":
            self.fc1 = nn.Linear(n_in, n_mid).cuda()
            self.fc2 = nn.Linear(n_mid, n_mid).cuda()

            # Dueling Network
            # fc3_adv = Advantage, fc3_v = Value
            self.fc3_adv = nn.Linear(n_mid, n_out).cuda()
            self.fc3_v = nn.Linear(n_mid, 1).cuda()
        else:
            self.fc1 = nn.Linear(n_in, n_mid)
            self.fc2 = nn.Linear(n_mid, n_mid)

            # Dueling Network
            # fc3_adv = Advantage, fc3_v = Value
            self.fc3_adv = nn.Linear(n_mid, n_out)
            self.fc3_v = nn.Linear(n_mid, 1)
Exemple #3
0
    def __init__(self):
        # Utilクラスインスタンス生成
        self.util = RLUtil.RLUtil()

        # 同時実行する環境数分、envを生成
        self.envs = [
            gym.make(self.util.getENV())
            for i in range(self.util.getNUM_PROCESSES())
        ]

        # 全エージェントが共有して持つBrainを生成
        # 状態は4
        # n_in, n_out, n_midは数値情報
        n_in = self.envs[0].observation_space.shape[0]
        # 行動は2
        n_out = self.envs[0].action_space.n
        n_mid = 32
        # DNNの生成
        self.actor_critic = RLNet.Net(n_in, n_mid, n_out)

        self.global_brain = RLBrain.RLBrain(self.actor_critic)
        self.obs_shape = n_in

        # デバイス情報の設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)
Exemple #4
0
    def __init__(self, num_states, num_actions):
        self.util = RLUtil.RLUtil()
        # Cartpoleの行動(左右どちらかに押す)の2を取得する
        self.num_actions = num_actions
        # 経験を記憶するメモリオブジェクトを生成
        self.memory = ReplayMemory.ReplayMemory(self.util.getCAPACITY())

        # デバイス情報の設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)

        # NNの構築
        self.model = nn.Sequential()
        if self.device.type == "cuda":
            self.model.add_module('fc1', nn.Linear(num_states, 32).cuda())
            self.model.add_module('relu1', nn.ReLU().cuda())
            self.model.add_module('fc2', nn.Linear(32, 32).cuda())
            self.model.add_module('relu2', nn.ReLU().cuda())
            self.model.add_module('fc3', nn.Linear(32, num_actions).cuda())
        else:
            self.model.add_module('fc1', nn.Linear(num_states, 32))
            self.model.add_module('relu1', nn.ReLU())
            self.model.add_module('fc2', nn.Linear(32, 32))
            self.model.add_module('relu2', nn.ReLU())
            self.model.add_module('fc3', nn.Linear(32, num_actions))

        # NWの形を出力
        print(self.model)

        # 最適化手法の設定
        self.optimizer = optim.Adam(self.model.parameters(), lr=0.0001)
Exemple #5
0
    def __init__(self, num_steps, num_processes, obs_shape):
        self.util = RLUtil.RLUtil()

        # デバイス情報の設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)

        self.observations = torch.zeros(num_steps + 1,
                                        num_processes,
                                        4,
                                        device=self.device)
        self.masks = torch.ones(num_steps + 1,
                                num_processes,
                                1,
                                device=self.device)
        self.rewards = torch.zeros(num_steps,
                                   num_processes,
                                   1,
                                   device=self.device)

        if self.device.type == "cuda":
            self.actions = torch.zeros(num_steps, num_processes,
                                       1).type(torch.cuda.LongTensor)
        else:
            self.actions = torch.zeros(num_steps, num_processes,
                                       1).type(torch.LongTensor)

        # 割引報酬和を格納
        self.returns = torch.zeros(num_steps + 1,
                                   num_processes,
                                   1,
                                   device=self.device)
        # insertするindex値
        self.index = 0
Exemple #6
0
 def __init__(self, capacity):
     # メモリの最大長さ
     self.capacity = capacity
     # 経験を保存する変数
     self.memory = []
     # 保存するindexを示す変数
     self.index = 0
     # Utilクラスインスタンス生成
     self.util = RLUtil.RLUtil()
Exemple #7
0
 def __init__(self, capacity):
     # 定数用クラス
     self.util = RLUtil.RLUtil()
     # メモリの最大長さ
     self.capacity = capacity
     # 経験を保存する変数
     self.memory = []
     # 保存するindexを示す変数
     self.index = 0
Exemple #8
0
    def __init__(self, actor_critic):
        self.util = RLUtil.RLUtil()
        # actor_criticがクラスNetのDNNとなる
        self.actor_critic = actor_critic
        self.optimizer = optim.Adam(self.actor_critic.parameters(), lr=0.01)

        # デバイスの設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)
Exemple #9
0
    def __init__(self, n_in, n_mid, n_out):
        super(Net, self).__init__()

        self.util = RLUtil.RLUtil()

        # デバイスの設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)

        if self.device.type == "cuda":
            self.fc1 = nn.Linear(n_in, n_mid).cuda()
            self.fc2 = nn.Linear(n_mid, n_mid).cuda()
            self.fc3 = nn.Linear(n_mid, n_out).cuda()
        else:
            self.fc1 = nn.Linear(n_in, n_mid)
            self.fc2 = nn.Linear(n_mid, n_mid)
            self.fc3 = nn.Linear(n_mid, n_out)
Exemple #10
0
    def __init__(self):
        # Utilクラスインスタンス生成
        self.util = RLUtil.RLUtil()
        # 実行する課題を設定
        self.env = gym.make(self.util.getENV())

        # 課題の状態と行動の数を設定
        self.num_states = self.env.observation_space.shape[0]
        self.num_actions = self.env.action_space.n
        # このとき、cartpoleの行動(left/right)の2を取得

        # Agentクラスのインスタンスを生成
        self.agent = RLAgent.RLAgent(self.num_states, self.num_actions)

        # デバイス情報の設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)
Exemple #11
0
    def __init__(self, num_states, num_actions):
        self.util = RLUtil.RLUtil()
        # Cartpoleの行動(左右どちらかに押す)の2を取得する
        self.num_actions = num_actions
        # 経験を記憶するメモリオブジェクトを生成
        self.memory = ReplayMemory.ReplayMemory(self.util.getCAPACITY())

        # NNの構築
        n_in, n_mid, n_out = num_states, 32, num_actions
        self.main_q_network = RLNet.Net(n_in, n_mid, n_out)
        self.target_q_network = RLNet.Net(n_in, n_mid, n_out)
        # NNの形を出力
        print(self.main_q_network)
        # 最適化手法の設定
        self.optimizer = optim.Adam(self.main_q_network.parameters(),
                                    lr=0.0001)

        # デバイスの設定
        d = self.util.getDEVICE()
        self.device = torch.device(d)