精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用Actor-Critic的DDPG強化學習算法控制雙關節機械臂

人工智能
在本文中,我們將介紹在 Reacher 環境中訓練智能代理控制雙關節機械臂,這是一種使用 Unity ML-Agents 工具包開發的基于 Unity 的模擬程序。我們的目標是高精度的到達目標位置,所以這里我們可以使用專為連續狀態和動作空間設計的最先進的Deep Deterministic Policy Gradient (DDPG) 算法。

在本文中,我們將介紹在 Reacher 環境中訓練智能代理控制雙關節機械臂,這是一種使用 Unity ML-Agents 工具包開發的基于 Unity 的模擬程序。我們的目標是高精度的到達目標位置,所以這里我們可以使用專為連續狀態和動作空間設計的最先進的Deep Deterministic Policy Gradient  (DDPG) 算法。

現實世界的應用程序

機械臂在制造業、生產設施、空間探索和搜救行動中發揮著關鍵作用。控制機械臂的高精度和靈活性是非常重要的。通過采用強化學習技術,可以使這些機器人系統實時學習和調整其行為,從而提高性能和靈活性。強化學習的進步不僅有助于我們對人工智能的理解,而且有可能徹底改變行業并對社會產生有意義的影響。

而Reacher是一種機械臂模擬器,常用于控制算法的開發和測試。它提供了一個虛擬環境,模擬了機械臂的物理特性和運動規律,使得開發者可以在不需要實際硬件的情況下進行控制算法的研究和實驗。

Reacher的環境主要由以下幾個部分組成:

  1. 機械臂:Reacher模擬了一個雙關節機械臂,包括一個固定基座和兩個可動關節。開發者可以通過控制機械臂的兩個關節來改變機械臂的姿態和位置。
  2. 目標點:在機械臂的運動范圍內,Reacher提供了一個目標點,目標點的位置是隨機生成的。開發者的任務是控制機械臂,使得機械臂的末端能夠接觸到目標點。
  3. 物理引擎:Reacher使用物理引擎來模擬機械臂的物理特性和運動規律。開發者可以通過調整物理引擎的參數來模擬不同的物理環境。
  4. 視覺界面:Reacher提供了一個可視化的界面,可以顯示機械臂和目標點的位置,以及機械臂的姿態和運動軌跡。開發者可以通過視覺界面來調試和優化控制算法。

Reacher模擬器是一個非常實用的工具,可以幫助開發者在不需要實際硬件的情況下,快速測試和優化控制算法。

模擬環境

Reacher 使用 Unity ML-Agents 工具包構建,我們的代理可以控制雙關節機械臂。目標是引導手臂朝向目標位置并盡可能長時間地保持其在目標區域內的位置。該環境具有 20 個同步代理,每個代理獨立運行,這有助于在訓練期間有效地收集經驗。

圖片

狀態和動作空間

了解狀態和動作空間對于設計有效的強化學習算法至關重要。在 Reacher 環境中,狀態空間由 33 個連續變量組成,這些變量提供有關機械臂的信息,例如其位置、旋轉、速度和角速度。動作空間也是連續的,四個變量對應于施加在機械臂兩個關節上的扭矩。每個動作變量都是一個介于 -1 和 1 之間的實數。

任務類型和成功標準

Reacher 任務被認為是片段式的,每個片段都包含固定數量的時間步長。代理的目標是在這些步驟中最大化其總獎勵。手臂末端執行器保持在目標位置的每一步都會獲得 +0.1 的獎勵。當代理在連續 100 次操作中的平均得分達到 30 分或以上時,就認為成功。

了解了環境,下面我們將探討 DDPG 算法、它的實現,以及它如何有效地解決這種環境中的連續控制問題。

連續控制的算法選擇:DDPG

當涉及到像Reacher問題這樣的連續控制任務時,算法的選擇對于實現最佳性能至關重要。在這個項目中,我們選擇了DDPG算法,因為這是一種專門設計用于處理連續狀態和動作空間的actor-critic方法。

DDPG算法通過結合兩個神經網絡,結合了基于策略和基于值的方法的優勢:行動者網絡(Actor network)決定給定當前狀態下的最佳行為,批評家網絡(Critic network)估計狀態-行為值函數(Q-function)。這兩種網絡都有目標網絡,通過在更新過程中提供一個固定的目標來穩定學習過程。

通過使用Critic網絡估計q函數,使用Actor網絡確定最優行為,DDPG算法有效地融合了策略梯度方法和DQN的優點。這種混合方法允許代理在連續控制環境中有效地學習。

import random
 from collections import deque
 import torch
 import torch.nn as nn
 import numpy as np
 
 from actor_critic import Actor, Critic
 
 class ReplayBuffer:
     def __init__(self, buffer_size, batch_size):
         self.memory = deque(maxlen=buffer_size)
         self.batch_size = batch_size
 
     def add(self, state, action, reward, next_state, done):
         self.memory.append((state, action, reward, next_state, done))
 
     def sample(self):
         batch = random.sample(self.memory, self.batch_size)
         states, actions, rewards, next_states, dones = zip(*batch)
         return states, actions, rewards, next_states, dones
 
     def __len__(self):
         return len(self.memory)
 
 
 class DDPG:
     def __init__(self, state_dim, action_dim, hidden_dim, buffer_size, batch_size, actor_lr, critic_lr, tau, gamma):
         self.actor = Actor(state_dim, hidden_dim, action_dim, actor_lr)
         self.actor_target = Actor(state_dim, hidden_dim, action_dim, actor_lr)
         self.critic = Critic(state_dim, action_dim, hidden_dim, critic_lr)
         self.critic_target = Critic(state_dim, action_dim, hidden_dim, critic_lr)
 
         self.memory = ReplayBuffer(buffer_size, batch_size)
         self.batch_size = batch_size
         self.tau = tau
         self.gamma = gamma
 
         self._update_target_networks(tau=1)  # initialize target networks
 
     def act(self, state, noise=0.0):
         state = torch.tensor(state, dtype=torch.float32).unsqueeze(0)
         action = self.actor(state).detach().numpy()[0]
         return np.clip(action + noise, -1, 1)
 
     def store_transition(self, state, action, reward, next_state, done):
         self.memory.add(state, action, reward, next_state, done)
 
     def learn(self):
         if len(self.memory) < self.batch_size:
             return
 
         states, actions, rewards, next_states, dones = self.memory.sample()
 
         states = torch.tensor(states, dtype=torch.float32)
         actions = torch.tensor(actions, dtype=torch.float32)
         rewards = torch.tensor(rewards, dtype=torch.float32).unsqueeze(1)
         next_states = torch.tensor(next_states, dtype=torch.float32)
         dones = torch.tensor(dones, dtype=torch.float32).unsqueeze(1)
 
         # Update Critic
         self.critic.optimizer.zero_grad()
 
         with torch.no_grad():
             next_actions = self.actor_target(next_states)
             target_q_values = self.critic_target(next_states, next_actions)
             target_q_values = rewards + (1 - dones) * self.gamma * target_q_values
 
         current_q_values = self.critic(states, actions)
         critic_loss = nn.MSELoss()(current_q_values, target_q_values)
 
         critic_loss.backward()
         self.critic.optimizer.step()
 
         # Update Actor
         self.actor.optimizer.zero_grad()
 
         actor_loss = -self.critic(states, self.actor(states)).mean()
         actor_loss.backward()
         self.actor.optimizer.step()
 
         # Update target networks
         self._update_target_networks()
 
     def _update_target_networks(self, tau=None):
         if tau is None:
             tau = self.tau
 
         for target_param, param in zip(self.actor_target.parameters(), self.actor.parameters()):
             target_param.data.copy_(tau * param.data + (1 - tau) * target_param.data)
 
         for target_param, param in zip(self.critic_target.parameters(), self.critic.parameters()):
             target_param.data.copy_(tau * param.data + (1 - tau) * target_param.data)

上面的代碼還使用了Replay Buffer,這可以提高學習效率和穩定性。Replay Buffer本質上是一種存儲固定數量的過去經驗或過渡的內存數據結構,由狀態、動作、獎勵、下一狀態和完成信息組成。使用它的主要優點是使代理能夠打破連續經驗之間的相關性,從而減少有害的時間相關性的影響。

通過從緩沖區中抽取隨機的小批量經驗,代理可以從一組不同的轉換中學習,這有助于穩定和概括學習過程。Replay Buffer還可以讓代理多次重用過去的經驗,從而提高數據效率并促進從與環境的有限交互中更有效地學習。

DDPG算法是一個很好的選擇,因為它能夠有效地處理連續的動作空間,這是這個環境的一個關鍵方面。該算法的設計允許有效地利用多個代理收集的并行經驗,從而實現更快的學習和更好的收斂。就像上面介紹的Reacher 可以同時運行20個代理,所以我們可以使用這20個代理進行分享經驗,集體學習,提高學習速度。

完成了算法,下面我們將介紹、超參數選擇和訓練過程。

DDPG算法在Reacher 環境中工作

為了更好地理解算法在環境中的有效性,我們需要仔細研究學習過程中涉及的關鍵組件和步驟。

網絡架構

DDPG算法采用兩個神經網絡,Actor 和Critic。兩個網絡都包含兩個隱藏層,每個隱藏層包含400個節點。隱藏層使用ReLU (Rectified Linear Unit)激活函數,而Actor網絡的輸出層使用tanh激活函數產生范圍為-1到1的動作。Critic網絡的輸出層沒有激活函數,因為它直接估計q函數。

以下是網絡的代碼:

import numpy as np
 import torch
 import torch.nn as nn
 import torch.optim as optim
 
 class Actor(nn.Module):
     def __init__(self, input_dim, hidden_dim, output_dim, learning_rate=1e-4):
         super(Actor, self).__init__()
 
         self.fc1 = nn.Linear(input_dim, hidden_dim)
         self.fc2 = nn.Linear(hidden_dim, hidden_dim)
         self.fc3 = nn.Linear(hidden_dim, output_dim)
 
         self.tanh = nn.Tanh()
 
         self.optimizer = optim.Adam(self.parameters(), lr=learning_rate)
 
     def forward(self, state):
         x = torch.relu(self.fc1(state))
         x = torch.relu(self.fc2(x))
         x = self.tanh(self.fc3(x))
         return x
 
 class Critic(nn.Module):
     def __init__(self, state_dim, action_dim, hidden_dim, learning_rate=1e-4):
         super(Critic, self).__init__()
 
         self.fc1 = nn.Linear(state_dim, hidden_dim)
         self.fc2 = nn.Linear(hidden_dim + action_dim, hidden_dim)
         self.fc3 = nn.Linear(hidden_dim, 1)
 
         self.optimizer = optim.Adam(self.parameters(), lr=learning_rate)
 
     def forward(self, state, action):
         x = torch.relu(self.fc1(state))
         x = torch.relu(self.fc2(torch.cat([x, action], dim=1)))
         x = self.fc3(x)
         return x

超參數選擇

選擇的超參數對于高效學習至關重要。在這個項目中,我們的Replay Buffer大小為200,000,批大小為256。演員Actor的學習率為5e-4,Critic的學習率為1e-3,soft update參數(tau)為5e-3,gamma為0.995。最后還加入了動作噪聲,初始噪聲標度為0.5,噪聲衰減率為0.998。

訓練過程

訓練過程涉及兩個網絡之間的持續交互,并且20個平行代理共享相同的網絡,模型會從所有代理收集的經驗中集體學習。這種設置加快了學習過程,提高了效率。

from collections import deque
 import numpy as np
 import torch
 
 from ddpg import DDPG
 
 def train_ddpg(env, agent, episodes, max_steps, num_agents, noise_scale=0.1, noise_decay=0.99):
     scores_window = deque(maxlen=100)
     scores = []
 
     for episode in range(1, episodes + 1):
         env_info = env.reset(train_mode=True)[brain_name]
         states = env_info.vector_observations
         agent_scores = np.zeros(num_agents)
 
         for step in range(max_steps):
             actions = agent.act(states, noise_scale)
             env_info = env.step(actions)[brain_name]
             next_states = env_info.vector_observations
             rewards = env_info.rewards
             dones = env_info.local_done
 
             for i in range(num_agents):
                 agent.store_transition(states[i], actions[i], rewards[i], next_states[i], dones[i])
             agent.learn()
 
             states = next_states
             agent_scores += rewards
             noise_scale *= noise_decay
 
             if np.any(dones):
                 break
 
         avg_score = np.mean(agent_scores)
         scores_window.append(avg_score)
         scores.append(avg_score)
 
         if episode % 10 == 0:
             print(f"Episode: {episode}, Score: {avg_score:.2f}, Avg Score: {np.mean(scores_window):.2f}")
 
         # Saving trained Networks
         torch.save(agent.actor.state_dict(), "actor_final.pth")
         torch.save(agent.critic.state_dict(), "critic_final.pth")
 
     return scores
 
 if __name__ == "__main__":
     env = UnityEnvironment(file_name='Reacher_20.app')
     brain_name = env.brain_names[0]
     brain = env.brains[brain_name]
 
     state_dim = 33
     action_dim = brain.vector_action_space_size
 
     num_agents = 20
     
     # Hyperparameter suggestions
     hidden_dim = 400
     batch_size = 256
     actor_lr = 5e-4
     critic_lr = 1e-3
     tau = 5e-3
     gamma = 0.995
     noise_scale = 0.5
     noise_decay = 0.998
 
     agent = DDPG(state_dim, action_dim, hidden_dim=hidden_dim, buffer_size=200000, batch_size=batch_size,
                  actor_lr=actor_lr, critic_lr=critic_lr, tau=tau, gamma=gamma)
 
     episodes = 200
     max_steps = 1000
 
     scores = train_ddpg(env, agent, episodes, max_steps, num_agents, noise_scale=0.2, noise_decay=0.995)

訓練過程中的關鍵步驟如下所示:

初始化網絡:代理使用隨機權重初始化共享的 Actor 和 Critic 網絡及其各自的目標網絡。目標網絡在更新期間提供穩定的學習目標。

  • 與環境交互:每個代理使用共享的 Actor 網絡,通過根據其當前狀態選擇動作來與環境交互。為了鼓勵探索,在訓練的初始階段還將噪聲項添加到動作中。采取行動后,每個代理都會觀察由此產生的獎勵和下一個狀態。
  • 存儲經驗:每個代理將觀察到的經驗(狀態、動作、獎勵、next_state)存儲在共享重放緩沖區中。該緩沖區包含固定數量的近期經驗,這樣每個代理能夠從所有代理收集的各種轉換中學習。
  • 從經驗中學習:定期從共享重放緩沖區中抽取一批經驗。通過最小化預測 Q 值和目標 Q 值之間的均方誤差,使用采樣經驗來更新共享 Critic 網絡。
  • 更新 Actor 網絡:共享 Actor 網絡使用策略梯度進行更新,策略梯度是通過采用共享 Critic 網絡關于所選動作的輸出梯度來計算的。共享 Actor 網絡學習選擇最大化預期 Q 值的動作。
  • 更新目標網絡:共享的 Actor 和 Critic 目標網絡使用當前和目標網絡權重的混合進行軟更新。這確保了穩定的學習過程。

結果展示

我們的agent使用DDPG算法成功地學會了在Racher環境下控制雙關節機械臂。在整個訓練過程中,我們根據所有20個代理的平均得分來監控代理的表現。隨著智能體探索環境和收集經驗,其預測獎勵最大化最佳行為的能力顯著提高。

可以看到代理在任務中表現出了顯著的熟練程度,平均得分超過了解決環境所需的閾值(30+),雖然代理的表現在整個訓練過程中有所不同,但總體趨勢呈上升趨勢,表明學習過程是成功的。

下圖顯示了20個代理的平均得分:

圖片

可以看到我們實現的DDPG算法,有效地解決了Racher環境的問題。代理能夠調整自己的行為,并在任務中達到預期的性能。

下一步工作

本項目中的超參數是根據文獻和實證測試的建議組合選擇的。還可以通過系統超參數調優的進一步優化可能會帶來更好的性能。

多agent并行訓練:在這個項目中,我們使用20個agent同時收集經驗。使用更多代理對整個學習過程的影響可能會導致更快的收斂或提高性能。

批歸一化:為了進一步增強學習過程,在神經網絡架構中實現批歸一化是值得探索的。通過在訓練過程中對每一層的輸入特征進行歸一化,批歸一化可以幫助減少內部協變量移位,加速學習,并潛在地提高泛化。將批處理歸一化加入到Actor和Critic網絡可能會導致更穩定和有效的訓練,但是這個需要進一步測試。


責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2023-03-23 16:30:53

PyTorchDDPG算法

2023-10-31 16:40:39

機器學習強化學習

2022-11-02 14:02:02

強化學習訓練

2023-06-25 11:30:47

可視化

2025-05-28 02:25:00

2024-10-12 17:14:12

2024-08-28 13:53:42

多代理強化學習機器人

2023-01-24 17:03:13

強化學習算法機器人人工智能

2020-12-02 13:24:07

強化學習算法

2023-03-09 08:00:00

強化學習機器學習圍棋

2020-08-10 06:36:21

強化學習代碼深度學習

2025-03-11 01:00:00

GRPO算法模型

2022-10-30 15:24:00

無人機盆栽控制器

2020-11-12 19:31:41

強化學習人工智能機器學習

2021-09-17 15:54:41

深度學習機器學習人工智能

2025-06-05 06:36:17

2023-11-07 07:13:31

推薦系統多任務學習

2020-06-05 08:09:01

Python強化學習框架

2023-07-20 15:18:42

2024-12-09 08:45:00

模型AI
點贊
收藏

51CTO技術棧公眾號

亚洲人成亚洲人成在线观看图片 | 国产精品综合网| 精品国产拍在线观看| 久久久男人的天堂| 偷拍中文亚洲欧美动漫| 日韩美女久久久| 精品产品国产在线不卡| 亚洲手机在线观看| 亚洲精品人人| 最近中文字幕2019免费| 污污免费在线观看| 四虎影视国产精品| 欧美日韩在线免费| 日本女人高潮视频| 国产中文字幕在线观看| 国产伦精品一区二区三区视频青涩 | 偷拍亚洲欧洲综合| 亚洲自拍偷拍二区| 欧美日韩国产综合视频| 国产伦精一区二区三区| 国产精品一区二区三区久久 | 好看不卡的中文字幕| 中文字幕精品网| 在线观看国产网站| 日韩视频在线直播| 欧美精品一级二级| 国产无套粉嫩白浆内谢的出处| xxxcom在线观看| 亚洲欧洲在线观看av| 欧美高清视频一区| 色窝窝无码一区二区三区成人网站| 久久99热狠狠色一区二区| 日韩美女av在线免费观看| 国产在线精品观看| 狠狠88综合久久久久综合网| 久久人体大胆视频| 污污视频网站在线免费观看| 精品国产乱码| 亚洲激情在线观看| 国产原创剧情av| 亚洲精品在线国产| 91精品国产一区二区三区香蕉 | 97成人超碰| 亚洲国产wwwccc36天堂| 欧美一区二区三区综合| 黄色成年人视频在线观看| 欧美激情一区二区三区四区| 三区精品视频观看| 国产一区二区三区福利| 久久免费国产精品| 国产美女99p| 亚洲第一视频在线| 国产传媒久久文化传媒| 99理论电影网| www.中文字幕| 成人午夜电影网站| 国产精品日韩欧美一区二区| 农村少妇久久久久久久| www.亚洲激情.com| 鲁鲁狠狠狠7777一区二区| 欧美女子与性| 国产三级精品三级| 午夜视频久久久| а天堂8中文最新版在线官网| 久久久久久久综合狠狠综合| 欧美一区二区三区四区五区六区 | 91一区一区三区| 蜜桃日韩视频| yiren22亚洲综合伊人22| 中文字幕av一区二区三区高| 一区二区三区在线视频111| 麻豆传媒在线免费看| 亚洲欧美日韩一区二区三区在线观看 | 日本韩国欧美精品大片卡二| 成人小视频在线播放| 奇米四色…亚洲| 亚洲wwwav| 国产成人手机在线| 26uuu亚洲| 一区二区三区三区在线| 日本在线视频网址| 污片在线观看一区二区| 黄色aaa级片| 91麻豆精品国产综合久久久| 精品国产乱码久久久久久蜜臀| 黄色av网址在线观看| 欧美日韩播放| 欧美成人在线影院| 波多野结衣国产| 久久国产生活片100| 91文字幕巨乱亚洲香蕉| 日韩偷拍自拍| 自拍视频在线观看一区二区| 日韩欧美国产综合在线| 国产极品嫩模在线观看91精品| 日韩精品在线一区二区| 国产精品815.cc红桃| 97精品一区二区| 91国自产精品中文字幕亚洲| 亚洲无码精品国产| av在线综合网| 亚洲欧美日韩国产yyy| 国产天堂在线播放视频| 欧美在线观看视频一区二区| 又大又长粗又爽又黄少妇视频| 日韩母乳在线| 欧美成人免费全部| 樱花视频在线免费观看| 国产91在线|亚洲| 日韩av电影免费在线观看| av午夜在线观看| 欧美日韩国产在线观看| av网站有哪些| 你懂的国产精品| 国产精品久久久久久久7电影| www.日韩在线观看| 亚洲视频在线一区二区| 久草资源站在线观看| 亚洲高清在线一区| 中文字幕在线亚洲| 日韩中文字幕高清| 99久久久久免费精品国产 | 亚洲人人精品| 亚洲a在线观看| 成人在线视频成人| 一本一道综合狠狠老| 亚洲成a人无码| 91精品综合| 国产精品一区二区电影| 福利视频在线导航| 91成人看片片| 无码人妻精品一区二区三应用大全| 欧美成人69| 91网站免费观看| 欧美三级电影一区二区三区| 在线精品亚洲一区二区不卡| 艳妇乳肉亭妇荡乳av| 在线欧美视频| 国产伦精品一区二区三区视频孕妇 | 蜜臀久久99精品久久久无需会员 | 亚洲欧美国产高清va在线播| 日本一级黄色大片| 国产aⅴ精品一区二区三区色成熟| 中文字幕在线观看一区二区三区| 成人在线不卡| 中文字幕日本精品| 亚洲一区中文字幕在线| 国产精品女同一区二区三区| 污视频免费在线观看网站| 精品国产一区二区三区久久久樱花| 日本三级久久久| 国产精品一区二区婷婷| 欧美视频中文字幕| 看黄色录像一级片| 激情综合网av| 国内精品国产三级国产99| 日本精品在线观看| 久久久久久一区二区三区| 日本韩国在线观看| 欧美性猛交99久久久久99按摩| 国产亚洲无码精品| 久久亚洲精品伦理| 亚洲成人自拍| 精品国产鲁一鲁****| 欧美精品在线第一页| 欧美 日韩 国产 成人 在线| 亚洲成年人影院| 少妇大叫太粗太大爽一区二区| 久久久蜜桃一区二区人| 性欧美大战久久久久久久免费观看| 日韩有码欧美| 欧美多人爱爱视频网站| 亚洲 欧美 激情 小说 另类| 在线亚洲一区二区| 黄色录像免费观看| 成人性生交大片免费| 虎白女粉嫩尤物福利视频| 色综合天天爱| 动漫精品视频| 精品国产欧美日韩一区二区三区| 久久久精品一区二区| 少妇一级淫片免费看| 欧美性大战久久久久久久| 精品国产乱码久久久久久鸭王1| 成人av资源在线| 校园春色 亚洲色图| 狠狠爱成人网| 亚洲精品美女久久7777777| 99re91这里只有精品| 国内精品中文字幕| 日本综合在线| 日韩h在线观看| 国产尤物视频在线观看| 精品成人在线视频| 在线日韩国产网站| 91麻豆蜜桃一区二区三区| 一级做a免费视频| 在线不卡视频| 99亚洲精品视频| 影视先锋久久| 99在线观看视频网站| 日韩欧美少妇| 97免费视频在线| 黄色av电影在线播放| 亚洲色图35p| 国精品人妻无码一区二区三区喝尿| 91国产视频在线观看| 国产成年人免费视频| 亚洲三级在线播放| 小早川怜子久久精品中文字幕| 成人综合婷婷国产精品久久蜜臀 | 国产午夜麻豆影院在线观看| 亚洲一二三专区| 天堂网中文在线观看| 91美女视频网站| 第一页在线视频| 久久国产尿小便嘘嘘| 97在线免费公开视频| 亚洲成人中文| 日本女人高潮视频| 日韩中文在线电影| 日本精品二区| 色婷婷综合久久久久久| 操人视频欧美| 欧美大片91| 成人免费淫片视频软件| 日本成人福利| 国产不卡视频在线| 亚洲国产福利| 538国产精品一区二区免费视频| 国产深夜视频在线观看| 欧美成aaa人片免费看| 蜜桃视频网站在线| 精品国产一区二区三区在线观看| www免费网站在线观看| 亚洲欧美日韩精品久久亚洲区 | 亚洲一级特黄毛片| www在线免费观看视频| 精品国产乱码久久久久久图片| 国产ts变态重口人妖hd| 欧美精品123区| 伊人免费在线观看| 在线精品观看国产| 中文字幕777| 欧美日韩成人综合| 国产精品自拍电影| 5566中文字幕一区二区电影| 97人妻一区二区精品免费视频| 精品视频在线视频| 一区二区国产欧美| 在线不卡中文字幕| 国产精品视频无码| 日韩免费高清av| 欧美一级特黄aaaaaa| 亚洲国产免费av| 男人的天堂a在线| 精品无人国产偷自产在线| 天天干天天爱天天操| 亚洲精品综合久久中文字幕| 久香视频在线观看| 中文字幕欧美日韩在线| 久草中文在线观看| 色综合男人天堂| 碰碰在线视频| 国产精品国模在线| 成人噜噜噜噜| 国产精品精品软件视频| 神马久久影院| 先锋影音欧美| 午夜国产欧美理论在线播放| 青青草成人免费在线视频| 亚洲影音一区| 中文字幕在线综合| 国产成人av一区二区三区在线观看| 性色av蜜臀av浪潮av老女人 | 精品少妇一区二区三区免费观| 久久久精品免费免费| 国精品人伦一区二区三区蜜桃| 一区二区三区高清| aaa在线视频| 91精品国产欧美一区二区| 色综合视频在线| 国产一区二区三区四区福利| 污网站在线免费看| 日本视频久久久| 国产电影一区二区| 久久久精品动漫| 日韩在线综合| 黄色影院一级片| 国产一区二区毛片| 五月婷婷综合在线观看| 18欧美亚洲精品| 天天综合网久久综合网| 欧美精品久久99久久在免费线| 无码h黄肉3d动漫在线观看| 日韩中文字幕免费看| 国产盗摄——sm在线视频| 成人精品一区二区三区电影黑人 | 国产美女在线精品| 精品黑人一区二区三区观看时间| 国产精品进线69影院| 日本熟女一区二区| 91麻豆精品国产无毒不卡在线观看| 午夜在线观看视频18| 久久中文字幕国产| 经典三级一区二区| 国模一区二区三区私拍视频| 国产电影一区二区在线观看| 国模杨依粉嫩蝴蝶150p| 成人精品一区二区三区四区| 青青青手机在线视频| 欧美性xxxx极品hd欧美风情| 亚洲乱码精品久久久久..| zzijzzij亚洲日本成熟少妇| 日韩网站中文字幕| 久久婷婷开心| 亚洲无线视频| 国产不卡的av| 中文字幕日韩av资源站| 无码视频一区二区三区| 日韩的一区二区| av资源在线播放| av电影成人| 午夜精品久久久久99热蜜桃导演| 日日躁夜夜躁aaaabbbb| 国产性天天综合网| 国产午夜免费福利| 亚洲国产日韩欧美在线99| 18网站在线观看| 亚洲综合在线播放| 亚洲一区 二区 三区| 午夜免费看视频| 国产精品久久久久久久久搜平片| 天天操天天操天天操天天| 亚洲精品国产精品乱码不99按摩 | 欧美体内she精高潮| 中文字幕电影一区| 五月婷婷激情五月| 亚洲视频在线免费观看| jizz内谢中国亚洲jizz| 久久婷婷人人澡人人喊人人爽| 亚洲视频播放| 一本加勒比波多野结衣| 精品国产乱码久久久久久婷婷| 六月丁香色婷婷| 久久免费在线观看| 日韩激情啪啪| 日韩视频第二页| 久久精品视频免费| 性高潮视频在线观看| 中文字幕九色91在线| 久久69成人| 天堂av免费看| 国产aⅴ精品一区二区三区色成熟| 久久久美女视频| 精品一区二区三区三区| 性欧美videohd高精| 亚洲精品一区国产精品| 久久99精品久久只有精品| 人人澡人人澡人人看| 日韩欧美国产系列| 成人性生交大片免费看网站 | 午夜激情小视频| 日韩美女在线观看| 日本a级不卡| 在线播放免费视频| 亚洲大片免费看| 欧洲伦理片一区 二区 三区| 国产精品久久一区| 亚洲欧洲日韩| 免费看毛片的网站| 欧美一a一片一级一片| 超碰电影在线播放| 国产视频一区二区三区四区| 久久亚洲电影| 欧美成人精品一区二区免费看片 | 亚洲AV无码片久久精品| 欧美日韩精品一区二区三区| 在线三级电影| 久久天天狠狠| 狠狠色狠狠色综合系列| 日本一区二区不卡在线| 永久免费精品影视网站| 97久久超碰| 超碰影院在线观看| 亚洲另类一区二区| 欧美女v视频| 99高清视频有精品视频| 日韩和欧美一区二区| 麻豆影视在线播放| 国产亚洲一区精品| 成人免费在线电影网| 91网址在线播放| 午夜久久久影院| 欧美一区二区三区在线观看免费| 精品国产二区在线| 韩国三级电影一区二区| 欧美日韩一级黄色片| 色综合视频一区中文字幕| 成人情趣视频|