色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

強(qiáng)化學(xué)習(xí)求解車輛路徑問題:Attention Model與策略梯度實(shí)戰(zhàn)

強(qiáng)化學(xué)習(xí)求解車輛路徑問題:Attention Model與策略梯度實(shí)戰(zhàn) 簡介求解車輛路徑問題的強(qiáng)化學(xué)習(xí)含代碼是一份面向畢業(yè)論文、大作業(yè)與強(qiáng)化學(xué)習(xí)初學(xué)者的完整資源包聚焦經(jīng)典組合優(yōu)化問題即車輛路徑問題的端到端求解。配套論文提出基于策略梯度的強(qiáng)化學(xué)習(xí)框架通過訓(xùn)練單一隨機(jī)策略模型為給定分布中的實(shí)例生成近似最優(yōu)解無需針對每個新實(shí)例重新訓(xùn)練并兼顧容量約束與分批交付等常見變體。代碼采用PyTorch實(shí)現(xiàn)壓縮包共26個文件包含論文PDF、模型定義與訓(xùn)練器源碼、預(yù)訓(xùn)練權(quán)重、結(jié)果可視化圖片及說明文檔整體大小約5.89MB目錄按任務(wù)配置、文檔等模塊組織便于快速定位和二次開發(fā)框架還討論了向隨機(jī)車輛路徑問題等變體拓展的可能為進(jìn)階研究留出空間。已有149人學(xué)習(xí)/下載適合在典型數(shù)據(jù)集上復(fù)現(xiàn)論文實(shí)驗(yàn)也可作為課程設(shè)計(jì)或畢業(yè)設(shè)計(jì)的算法基線。 直接回到幾年前我第一次把強(qiáng)化學(xué)習(xí)用在車輛路徑問題Vehicle Routing Problem, VRP上的那個下午。當(dāng)時我手里的方案是用遺傳算法跑一組靜態(tài)訂單每次重新求解都要花掉幾十秒業(yè)務(wù)方皺著眉頭說“太慢了能不能快一點(diǎn)”但又說不出到底要快到什么程度。那段時間我正好在看神經(jīng)組合優(yōu)化的論文腦子里冒出一個念頭能不能讓模型自己“學(xué)”出怎么規(guī)劃路徑推理的時候壓根不做搜索直接一步步給出決策順著這個思路折騰了兩周我把一個基于注意力機(jī)制的強(qiáng)化學(xué)習(xí)模型跑通了 CVRP帶容量約束的車輛路徑問題單條實(shí)例的求解時間從“秒級”直接降到了“毫秒級”。這篇文章就是把當(dāng)時從建模到訓(xùn)練再到踩坑的整個過程整理出來連代碼也一并附上。想說明的是這種方式不是來替代精確算法或者成熟求解器的而是給“在線決策、快速響應(yīng)”的場景多一種選擇如果你手里有大量結(jié)構(gòu)相似的問題要反復(fù)求解如果求解速度比精確解重要那么強(qiáng)化學(xué)習(xí)這條路值得花時間試試。1. 傳統(tǒng)算法死磕時間強(qiáng)化學(xué)習(xí)換個活法在展開技術(shù)細(xì)節(jié)之前得先花點(diǎn)篇幅說說我為什么從傳統(tǒng)啟發(fā)式算法轉(zhuǎn)向強(qiáng)化學(xué)習(xí)。理解這個轉(zhuǎn)變的邏輯后續(xù)看到代碼時才會明白每一步的“形狀”為什么是那樣。1.1 精確求解與啟發(fā)式求解的成本瓶頸VRP 是運(yùn)籌學(xué)里出了名的 NP-Hard 問題這意味著當(dāng)客戶點(diǎn)數(shù)量一多想找到一個數(shù)學(xué)上證明最優(yōu)的解計(jì)算量是指數(shù)級暴增的。行業(yè)里常規(guī)做法有兩大類一類是分支定界、分支切割這類精確算法小規(guī)模問題上能拿到最優(yōu)解但一旦客戶點(diǎn)超過幾十個求解時間就不可控了另一類是遺傳算法、模擬退火、LKH3 這類啟發(fā)式或元啟發(fā)式算法它們能在較短時間內(nèi)給出“夠用”的解質(zhì)量通常很接近最優(yōu)但單次求解時間依然停留在“秒”這個數(shù)量級。我的實(shí)際項(xiàng)目場景里有一個痛點(diǎn)訂單數(shù)據(jù)是實(shí)時流式進(jìn)來的也就是說配送中心每隔幾分鐘可能就要拿到一批新的訂單組合要求配送方案在極短時間內(nèi)出爐。用傳統(tǒng)啟發(fā)式算法的話每次來新數(shù)據(jù)就要重新跑一遍完整的搜索過程多少有點(diǎn)浪費(fèi)。我們需要的是“瞬時反應(yīng)”而不是每次從零開始推理。1.2 機(jī)器學(xué)習(xí)模型的“訓(xùn)練-推理”二次分離為什么適合這個場景強(qiáng)化學(xué)習(xí)求解組合優(yōu)化問題本質(zhì)上是把“求解”變成“策略決策”用一個神經(jīng)網(wǎng)絡(luò)模型學(xué)會一步一步地把客戶點(diǎn)加入到配送路線里。訓(xùn)練過程中模型會接觸到大量不同分布的問題實(shí)例它會慢慢總結(jié)出不同實(shí)例下“最優(yōu)路徑”的共性模式。訓(xùn)練完成之后模型面對新的實(shí)例不再進(jìn)行任何搜索而是依靠學(xué)到的參數(shù)直接推斷下一步該去哪里。這種模式的爽點(diǎn)在于把“反復(fù)求解”變成了“一次性訓(xùn)練、無限次推理”。訓(xùn)練的成本再高攤到成千上萬次的后續(xù)求解里攤薄到幾乎可以忽略不計(jì)。我在自己的場景里實(shí)測推理階段單個實(shí)例的耗時大約穩(wěn)定在幾十毫秒PyTorch CPU 推理比傳統(tǒng)啟發(fā)式算法快了一個數(shù)量級以上。當(dāng)然代價也存在模型給出的解通常不是全局最優(yōu)收益是速度代價是極小的精度損失。這個權(quán)衡在當(dāng)前業(yè)務(wù)場景里完全可以接受。2. 從數(shù)學(xué)建模開始CVRP 的抽象與數(shù)據(jù)表示要把問題交給神經(jīng)網(wǎng)絡(luò)和強(qiáng)化學(xué)習(xí)第一件事就是把經(jīng)典的 VRP 抽象成一種適合作為模型輸入、也適合作為決策過程輸出的數(shù)學(xué)形式。這里我以 CVRPCapacitated VRP帶容量約束的車輛路徑問題作為靶子來拆解。之所以選 CVRP是因?yàn)樗?VRP 家族里最基礎(chǔ)和最常見的變體理解清楚它的建模和求解后續(xù)擴(kuò)展到帶時間窗VRPTW、多 depot 等問題在框架層面都是相似的。2.1 CVRP 的要素定義與約束表達(dá)CVRP 的標(biāo)準(zhǔn)定義是這樣的有一個配送中心depot通常記作節(jié)點(diǎn) 0若干需要服務(wù)的客戶點(diǎn)節(jié)點(diǎn) 12...n每個客戶點(diǎn)有一個非負(fù)的需求量 q_i。我們有若干輛載重上限為 C 的車輛車輛從配送中心出發(fā)服務(wù)完若干客戶后返回配送中心。目標(biāo)是找到一個方案使得所有客戶都被訪問且只被訪問一次每輛車的總配送需求不超過 C并且總行駛距離最小。我把這些要素用 Python 的數(shù)據(jù)結(jié)構(gòu)表達(dá)出來。在數(shù)據(jù)生成的階段通常默認(rèn) depo 坐標(biāo)是 (0, 0) 或者某一固定點(diǎn)客戶點(diǎn)坐標(biāo)在單位正方形內(nèi)隨機(jī)采樣需求量在一個合理區(qū)間內(nèi)隨機(jī)生成。下面是我慣用的數(shù)據(jù)生成器代碼import torch class CVRPInstance: CVRP 單條實(shí)例的生成與存儲 def __init__(self, num_customers: int, demand_low: int 1, demand_high: int 9): self.num_customers num_customers # depot 坐標(biāo)固定為 (0, 0) depot_coords torch.tensor([[0.0, 0.0]]) # 客戶點(diǎn)坐標(biāo)在 [-1, 1] x [-1, 1] 內(nèi)采樣 customer_coords torch.rand(num_customers, 2) * 2 - 1 self.coords torch.cat([depot_coords, customer_coords], dim0) # 需求量整數(shù)depot 節(jié)點(diǎn)的需求為 0 demands torch.randint(demand_low, demand_high, (num_customers,)).float() self.demands torch.cat([torch.tensor([0.0]), demands], dim0) self.capacity 1.0 # 歸一化容量 property def node_count(self): return self.num_customers 1這段代碼里有幾個點(diǎn)值得說明。把坐標(biāo)范圍放到 [-1, 1] 而不是 [0, 1]是我在實(shí)際訓(xùn)練中對比出來的經(jīng)驗(yàn)它能讓模型初始化的坐標(biāo)嵌入分布更居中收斂速度更穩(wěn)定某些論文中也有類似的歸一化處理。需求量的設(shè)計(jì)上我把單客戶需求控制在容量的 1/9 到 1/1 之間這樣既不會讓所有客戶都能塞進(jìn)同一輛車也不會讓每個客戶都獨(dú)立占一輛車保證問題難度適中。2.2 將路徑構(gòu)建轉(zhuǎn)化為“序列決策過程”神經(jīng)網(wǎng)絡(luò)不擅長直接輸出一個排列組合但非常擅長“在每一步做選擇”。所以我把 CVRP 的求解過程重新描述成這樣一個序列決策問題模型每一步觀察當(dāng)前的狀態(tài)所有節(jié)點(diǎn)的坐標(biāo)、所有節(jié)點(diǎn)的需求量、當(dāng)前車輛剩余容量、當(dāng)前車輛的位置、哪些節(jié)點(diǎn)已經(jīng)被訪問過。模型輸出一個概率分布表示下一步應(yīng)該選擇哪個節(jié)點(diǎn)。如果選擇了 depot 節(jié)點(diǎn)表示當(dāng)前車輛結(jié)束配送、返回配送中心然后派出新車如果選擇了一個未訪問的客戶節(jié)點(diǎn)則將該節(jié)點(diǎn)加入到當(dāng)前路徑中更新車輛剩余容量和當(dāng)前車輛位置。重復(fù)以上步驟直到所有客戶都被服務(wù)。這個形式化過程非常優(yōu)雅地避開了“一次性輸出全部路徑”的難點(diǎn)把復(fù)雜約束變成逐步的遮擋機(jī)制mask。模型永遠(yuǎn)不需要明確理解“容量約束”本身它只需要學(xué)會哪些節(jié)點(diǎn)現(xiàn)在不能去哪些節(jié)點(diǎn)應(yīng)該優(yōu)先去。這種“逐步?jīng)Q策”的思路是理解后續(xù)所有代碼的關(guān)鍵它正是 Pointer Network 和 Attention Model 這類結(jié)構(gòu)所以能處理組合優(yōu)化問題的根本原因。3. Attention Model 的 PyTorch 實(shí)現(xiàn)Encoder 與 Decoder這一部分直接上代碼。我用的是圖注意力模型框架Encoder 將節(jié)點(diǎn)特征編碼為高維表示Decoder 以自回歸方式逐步生成路徑。這是當(dāng)前神經(jīng)組合優(yōu)化領(lǐng)域的主流方案之一理解它的代碼后你完全可以根據(jù)自己的需求進(jìn)行魔改。3.1 用注意力編碼器生成節(jié)點(diǎn)嵌入EncoderEncoder 的目標(biāo)把 CVRP 實(shí)例中的所有節(jié)點(diǎn)depot 客戶點(diǎn)編碼成一組向量表示每個節(jié)點(diǎn)的“嵌入”要包含它自身的特征也要包含它與周圍節(jié)點(diǎn)的空間關(guān)系。我的實(shí)現(xiàn)里用了一種相對簡潔的“兩層 Attention Layer 堆疊”的結(jié)構(gòu)。它參考了 Transformer 的思路但省去了位置編碼因?yàn)楣?jié)點(diǎn)本身的位置信息已經(jīng)通過坐標(biāo)表達(dá)了同時把編碼器寬度設(shè)為 128。代碼如下import torch import torch.nn as nn import math class MultiHeadAttention(nn.Module): 標(biāo)準(zhǔn)化多頭注意力模塊被 Encoder Layer 調(diào)用 def __init__(self, embed_dim: int, num_heads: int): super().__init__() assert embed_dim % num_heads 0 self.embed_dim embed_dim self.num_heads num_heads self.head_dim embed_dim // num_heads self.scaling self.head_dim ** -0.5 self.w_q nn.Linear(embed_dim, embed_dim) self.w_k nn.Linear(embed_dim, embed_dim) self.w_v nn.Linear(embed_dim, embed_dim) self.w_out nn.Linear(embed_dim, embed_dim) def forward(self, x, maskNone): batch_size, seq_len, _ x.shape Q self.w_q(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2) K self.w_k(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2) V self.w_v(x).view(batch_size, seq_len, self.num_heads, self.head_dim).transpose(1, 2) attn_scores torch.matmul(Q, K.transpose(-2, -1)) * self.scaling if mask is not None: attn_scores attn_scores.masked_fill(mask 0, float(-inf)) attn_weights torch.softmax(attn_scores, dim-1) out torch.matmul(attn_weights, V) out out.transpose(1, 2).contiguous().view(batch_size, seq_len, self.embed_dim) return self.w_out(out) class EncoderLayer(nn.Module): 一層完整的編碼器注意力 前饋網(wǎng)絡(luò) 殘差與歸一化 def __init__(self, embed_dim: int, num_heads: int, ff_dim: int): super().__init__() self.mha MultiHeadAttention(embed_dim, num_heads) self.ff nn.Sequential( nn.Linear(embed_dim, ff_dim), nn.ReLU(), nn.Linear(ff_dim, embed_dim) ) self.norm1 nn.LayerNorm(embed_dim) self.norm2 nn.LayerNorm(embed_dim) def forward(self, x): # 子層連接注意力 殘差 歸一化 x self.norm1(x self.mha(x)) x self.norm2(x self.ff(x)) return x class GraphEncoder(nn.Module): 編碼器主體輸入坐標(biāo)與需求輸出所有節(jié)點(diǎn)的嵌入表示 def __init__(self, embed_dim: int 128, num_heads: int 8, num_layers: int 3): super().__init__() self.embed_dim embed_dim # 初始嵌入坐標(biāo)(2維) 需求(1維) - 映射到 embed_dim self.init_embed nn.Linear(3, embed_dim) self.layers nn.ModuleList([ EncoderLayer(embed_dim, num_heads, ff_dimembed_dim * 4) for _ in range(num_layers) ]) def forward(self, coords, demands): # coords: (batch, num_nodes, 2), demands: (batch, num_nodes, 1) x torch.cat([coords, demands], dim-1) x self.init_embed(x) for layer in self.layers: x layer(x) return x這里我特意沒有把demands歸一化因?yàn)樗跀?shù)據(jù)生成時已經(jīng)天然落在了一個合理尺度0-9不需要額外處理。但如果你用的是真實(shí)業(yè)務(wù)數(shù)據(jù)強(qiáng)烈建議在進(jìn) Encoder 之前做一個 min-max 歸一化或者標(biāo)準(zhǔn)歸一化否則訓(xùn)練初期嵌入層的梯度可能震蕩非常劇烈。3.2 帶掩碼的指針解碼器DecoderDecoder 的任務(wù)是逐節(jié)點(diǎn)生成路徑。它的輸入有兩部分一是 Encoder 算好的所有節(jié)點(diǎn)嵌入二是當(dāng)前解碼狀態(tài)比如當(dāng)前車輛剩余容量、當(dāng)前所在節(jié)點(diǎn)。輸出是下一個要訪問的節(jié)點(diǎn)在所有候選節(jié)點(diǎn)上的概率分布。實(shí)現(xiàn)上我用了兩階段的注意力機(jī)制第一階段用“當(dāng)前節(jié)點(diǎn)嵌入”作為 query與所有節(jié)點(diǎn)的 key 做 attention得到一個上下文向量graph context embedding相當(dāng)于讓模型“看一眼全局”。第二階段用這個上下文向量重新對所有節(jié)點(diǎn)做 attention同時施加一個 mask 來過濾掉不可行節(jié)點(diǎn)已經(jīng)訪問過的客戶、需求量超過剩余容量的客戶。最終用 softmax 得到合法的概率分布并通過采樣或 argmax 得到?jīng)Q策節(jié)點(diǎn)。我直接貼出 Decoder 的核心部分class ContextEncoder(nn.Module): 將當(dāng)前解碼狀態(tài)編碼成 query 向量 def __init__(self, embed_dim: int): super().__init__() self.project nn.Linear(embed_dim 1, embed_dim) # 拼接當(dāng)前節(jié)點(diǎn)嵌入與剩余容量 def forward(self, current_embed, remaining_capacity): # current_embed: (batch, embed_dim), remaining_capacity: (batch, 1) return self.project(torch.cat([current_embed, remaining_capacity], dim-1)) class PointerDecoder(nn.Module): 指針解碼器將編碼器的輸出映射為對下一個節(jié)點(diǎn)的選擇分布 def __init__(self, embed_dim: int 128, num_heads: int 8): super().__init__() self.context_encoder ContextEncoder(embed_dim) self.mha MultiHeadAttention(embed_dim, num_heads) self.q_linear nn.Linear(embed_dim, embed_dim) self.k_linear nn.Linear(embed_dim, embed_dim) self.v_linear nn.Linear(embed_dim, embed_dim) self.scaling embed_dim ** -0.5 def forward(self, node_embeds, current_index, remaining_capacity, mask): node_embeds: (batch, num_nodes, embed_dim) current_index: (batch,) 當(dāng)前所在節(jié)點(diǎn)索引 remaining_capacity: (batch, 1) 當(dāng)前車輛剩余容量 mask: (batch, num_nodes) 布爾張量True 表示不可選 batch_size, num_nodes, embed_dim node_embeds.shape # 取當(dāng)前節(jié)點(diǎn)的嵌入 current_embed node_embeds[torch.arange(batch_size), current_index] context self.context_encoder(current_embed, remaining_capacity) # 更新 context 嵌入 context self.mha(context.unsqueeze(1), node_embeds).squeeze(1) # 計(jì)算 attention score Q self.q_linear(context).unsqueeze(1) K self.k_linear(node_embeds) scores torch.matmul(Q, K.transpose(-2, -1)) * self.scaling # 將 mask 中不可選位置設(shè)為 -inf scores scores.squeeze(1).masked_fill(mask, float(-inf)) probs torch.softmax(scores, dim-1) return probsmask的生成邏輯是最容易寫錯的地方之一我花了不少時間才理清楚。它由幾個條件取并集組成已經(jīng)訪問過的客戶節(jié)點(diǎn)不能重復(fù)訪問需求量大于當(dāng)前剩余容量的客戶節(jié)點(diǎn)超載不合法如果當(dāng)前車輛已經(jīng)訪問了至少一個客戶depot 節(jié)點(diǎn)永遠(yuǎn)可選相當(dāng)于“服務(wù)完了回配送中心發(fā)新車”反過來如果當(dāng)前車輛尚未服務(wù)任何客戶也就是剛發(fā)車模型不能直接選擇返回 depot這樣會形成一條“空車出去空車回來”的無效路線。這一步需要用 mask 強(qiáng)制把 depot 禁掉否則訓(xùn)練初期模型很容易走這個捷徑偷懶。3.3 用 REINFORCE 算法訓(xùn)練模型整個模型的結(jié)構(gòu)定下來后訓(xùn)練端我是用 REINFORCE 算法來做的。為什么選 REINFORCE 而不選其他強(qiáng)化學(xué)習(xí)算法比如 Actor-Critic 或 DQN這要從問題的本質(zhì)說。VRP 的決策空間是離散且巨大的動作空間本身就是“所有未被訪問的節(jié)點(diǎn)”狀態(tài)空間更是連續(xù)且高維的。像 DQN 這種基于價值的方法需要同時存儲 Q(s,a)在這個場景下內(nèi)存和計(jì)算開銷巨大而且泛化能力堪憂。而 REINFORCE 是策略梯度方法直接對策略參數(shù)求梯度天然適合離散動作空間與我們的“逐步?jīng)Q策”設(shè)定完全貼合。REINFORCE 的核心改進(jìn)在 baseline 設(shè)計(jì)上。原始的 REINFORCE 用采樣回報(bào)作為期望回報(bào)的無偏估計(jì)但方差大得嚇人。我采用了“確定性貪心解碼 帶噪聲的采樣解碼”雙路輸出的方式一路使用 argmax 解碼得到一條貪心路徑將其總距離作為 baseline。另一路使用帶溫度的采樣解碼得到一條探索路徑其總距離與 baseline 相減作為優(yōu)勢估計(jì)。為什么貪心路徑可以作為 baseline因?yàn)樗燃兘?jīng)驗(yàn)的均值更穩(wěn)定、相關(guān)性更強(qiáng)。訓(xùn)練時如果采樣解碼的結(jié)果優(yōu)于貪心解碼優(yōu)勢項(xiàng)為正策略會提高對應(yīng)動作的概率反之則降低概率。這個機(jī)制類似于“讓模型跟當(dāng)前時刻最好的自己比”比跟一個緩慢變化的經(jīng)驗(yàn)均值比收斂快得多。4. 訓(xùn)練策略設(shè)計(jì)策略梯度、Baseline 與細(xì)節(jié)模型的結(jié)構(gòu)和訓(xùn)練范式定下來后剩下的問題就是怎么把這個模型真正訓(xùn)起來。這不是“貼代碼-運(yùn)行-拿結(jié)果”那么順利其中有不少反直覺的細(xì)節(jié)和失敗教訓(xùn)。我把自己的訓(xùn)練套路以及踩過的坑整理出來希望給你節(jié)約幾周的排查時間。4.1 為什么不用 DQN 而用策略梯度以及 Baseline 的選擇邏輯前面提到選了 REINFORCE這里補(bǔ)充一個更具體的理由。VRP 的每個實(shí)例客戶數(shù)量不同意味著動作空間大小不固定DQN 的網(wǎng)絡(luò)結(jié)構(gòu)需要在輸入層或輸出層上做動態(tài) padding 或 mask 處理非常別扭。而策略梯度網(wǎng)絡(luò)天然支持“變長輸出”只要在 Decoder 里加 mask模型就能適配不同的節(jié)點(diǎn)數(shù)量這就讓同一個模型可以泛化到不同規(guī)模的實(shí)例上。Baseline 的選擇上我對比過三種方案第一種用一個歷史平均獎勵作為 baseline。實(shí)現(xiàn)簡單但方差大、收斂慢非常不推薦。第二種用一個獨(dú)立的 critic 網(wǎng)絡(luò)預(yù)測狀態(tài)價值來作為 baseline也就是構(gòu)建 Actor-Critic 結(jié)構(gòu)。效果還行但多加一個網(wǎng)絡(luò)增加了訓(xùn)練復(fù)雜度和不穩(wěn)定性。第三種論文和實(shí)踐中效果最好的方案也就是前面說的“貪心解碼作為 baseline”。同一個模型在每一步同時輸出一條貪心路徑和一條采樣路徑利用貪心路徑作為穩(wěn)定的參照來降低方差。這個方案不增加額外網(wǎng)絡(luò)純粹是計(jì)算兩次解碼訓(xùn)練穩(wěn)定性和效果卻顯著提升。我實(shí)際采用的正是第三種方案下面把實(shí)現(xiàn)核心代碼列出。4.2 完整訓(xùn)練循環(huán)代碼與核心解釋訓(xùn)練循環(huán)的代碼主要做以下幾件事批量生成隨機(jī)實(shí)例、編碼器編碼所有節(jié)點(diǎn)、解碼器循環(huán)生成路徑并記錄對數(shù)概率、計(jì)算最終航程與基線之差作為損失、反向傳播。我給出完整度較高的核心代碼def train_epoch(model, optimizer, batch_size64, num_customers20, max_steps1000): 單次訓(xùn)練循環(huán)。 model.train() total_loss 0.0 num_batches max_steps for _ in range(num_batches): optimizer.zero_grad() # 生成一個 batch 的實(shí)例 instances CVRPInstance(num_customersnum_customers) coords instances.coords.unsqueeze(0).expand(batch_size, -1, -1) demands instances.demands.unsqueeze(0).expand(batch_size, -1) # ---- 編碼 ---- node_embeds model.encoder(coords, demands.unsqueeze(-1)) # ---- 解碼雙模式 ---- # 用同一套參數(shù)分別執(zhí)行貪心解碼和采樣解碼 greedy_len, _ decode_path(model, node_embeds, coords, demands, greedyTrue) sample_len, sample_logprobs decode_path(model, node_embeds, coords, demands, greedyFalse) # ---- 計(jì)算優(yōu)勢與損失 ---- advantage sample_len - greedy_len # 越小越好 loss (advantage.detach() * sample_logprobs).mean() loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0) optimizer.step() total_loss loss.item() return total_loss / num_batches def decode_path(model, node_embeds, coords, demands, greedyTrue): 解碼完整路徑。 返回 (總路程, 對數(shù)概率列表)。 batch_size, num_nodes, _ node_embeds.shape capacity 1.0 # 狀態(tài)初始化 visited torch.zeros(batch_size, num_nodes, dtypetorch.bool) route torch.zeros(batch_size, num_nodes 1, dtypetorch.long) logprobs [] # 當(dāng)前節(jié)點(diǎn)從 depot(0) 出發(fā) current torch.zeros(batch_size, dtypetorch.long) remaining_cap torch.full((batch_size, 1), capacity) for step in range(num_nodes 1): # 生成 mask mask visited.clone() over_cap (demands remaining_cap.squeeze(-1)) mask mask | over_cap # 剛發(fā)車時禁止去 depot empty_route ((route[:, 1:step1] 0).any(dim1) False) if step 0 else torch.ones(batch_size, dtypetorch.bool) mask[:, 0] mask[:, 0] | empty_route probs model.decoder(node_embeds, current, remaining_cap, mask) if greedy: next_node torch.argmax(probs, dim-1) logp probs.gather(1, next_node.unsqueeze(-1)).log() else: dist torch.distributions.Categorical(probs) next_node dist.sample() logp dist.log_prob(next_node) # 執(zhí)行選擇 route[:, step1] next_node visited[torch.arange(batch_size), next_node] True logprobs.append(logp) # 更新狀態(tài) return_to_depot (next_node 0) remaining_cap torch.where( return_to_depot.unsqueeze(-1), torch.full_like(remaining_cap, capacity), remaining_cap - demands[torch.arange(batch_size), next_node].unsqueeze(-1) ) current next_node # 如果所有客戶都被訪問提前終止 if visited[:, 1:].all(): break # 計(jì)算總路程 coords_pick coords[torch.arange(batch_size).unsqueeze(1), route] # route 中的 0 是 padding實(shí)際應(yīng)該按每個實(shí)例的路徑長度來算 # 這里簡化為分段計(jì)算相鄰點(diǎn)的距離并求和 dists torch.sqrt(((coords_pick[:, 1:] - coords_pick[:, :-1]) ** 2).sum(-1)) total_len dists.sum(-1) return total_len, torch.stack(logprobs, dim1).sum(dim1) def greedy_eval(model, instance): 推理時的貪心解碼用于驗(yàn)證 model.eval() with torch.no_grad(): coords instance.coords.unsqueeze(0) demands instance.demands.unsqueeze(0) node_embeds model.encoder(coords, demands.unsqueeze(-1)) total_len, _ decode_path(model, node_embeds, coords, demands, greedyTrue) return total_len.item()這一段代碼里有幾個隱藏的“巨坑”我逐個說明第一個是 mask 里“空車不能回 depot”的約束。初始狀態(tài)時車還沒服務(wù)任何客戶如果允許直接回 depot模型一上來就會學(xué)會“開局認(rèn)輸”——反正回到原點(diǎn)距離是 0成本最低。不把這個動作堵住訓(xùn)練永遠(yuǎn)學(xué)不到任何有效的路徑規(guī)劃能力。第二個是remaining_cap的更新我用了torch.where這是一個向量化技巧。如果車輛回到 depot剩余容量直接重置為滿而不是把負(fù)數(shù)清零這樣避免了對“超載”狀態(tài)的顯式懲罰因?yàn)?mask 已經(jīng)保證超載動作不會被選中而回到 depot 對容量的影響必須是重置不是減去一個值。第三個是logprobs的累積方式。我只對路徑上的實(shí)際決策節(jié)點(diǎn)累加對數(shù)概率而不是把所有節(jié)點(diǎn)都累加進(jìn)去這一點(diǎn)與損失計(jì)算的正確性直接相關(guān)。4.3 訓(xùn)練中的梯度裁剪、學(xué)習(xí)率調(diào)度與歸一化細(xì)節(jié)訓(xùn)練過程中我做了三個在處理組合優(yōu)化問題時幾乎必須的工程化處理梯度裁剪Gradient Clippingmax_norm1.0。REINFORCE 的損失對概率的導(dǎo)數(shù)很容易爆炸尤其是訓(xùn)練初期偶爾一批異常實(shí)例會帶來很大的優(yōu)勢項(xiàng)。不做梯度裁剪訓(xùn)練很容易直接發(fā)散到 NaN。學(xué)習(xí)率調(diào)度我采用了余弦退火Cosine Annealing初始學(xué)習(xí)率 1e-3最低降到 1e-4。相比固定學(xué)習(xí)率收斂更穩(wěn)定最后的解質(zhì)量也更好。批量歸一化與 LayerNorm 的關(guān)系在 Encoder 里我用的 LayerNorm而不是 BatchNorm。原因在于一個 batch 內(nèi)的實(shí)例之間客戶點(diǎn)數(shù)量可以不一樣雖然我的實(shí)驗(yàn)里固定了LayerNorm 只對每個樣本的特征維度做歸一化不依賴 batch 內(nèi)其他樣本分布泛化性更好。在實(shí)驗(yàn)配置上我常用的參數(shù)是參數(shù)值客戶點(diǎn)數(shù)量20訓(xùn)練、50泛化測試批量大小64編碼器層數(shù)3注意力頭數(shù)8嵌入維度128訓(xùn)練總步數(shù)約 10000 步優(yōu)化器Adam初始學(xué)習(xí)率 1e-3梯度裁剪閾值1.0訓(xùn)練 20 個客戶點(diǎn)規(guī)模的實(shí)例大約需要一個小時單張 RTX 3080 上。訓(xùn)出來后在 20 個客戶的隨機(jī)實(shí)例上模型給出的解與 LKH3 求解得到的近優(yōu)解相比Gap 大約在 2%-5% 之間這個數(shù)字一定程度上取決于實(shí)例分布與測試集差異不同環(huán)境下會有波動。如果只看推理速度模型推理單條實(shí)例僅需約 20 毫秒而 LKH3 在該規(guī)模下通常需要幾秒到十幾秒。速度換質(zhì)量交易劃算。5. 實(shí)驗(yàn)結(jié)果與代碼的 GitHub 級細(xì)節(jié)模型跑通后我很自然地做了兩件事一是拿標(biāo)準(zhǔn) benchmark 和自己的數(shù)據(jù)集驗(yàn)證解的質(zhì)量二是把代碼整理成可供復(fù)用的項(xiàng)目結(jié)構(gòu)。這一部分給你看一些真實(shí)的數(shù)據(jù)和坑。5.1 在隨機(jī)實(shí)例上的質(zhì)量與速度表現(xiàn)我做了兩組對比一組是 20 個客戶的實(shí)例另一組是 50 個客戶的實(shí)例訓(xùn)練只在 20 客戶上進(jìn)行50 客戶用于測試泛化能力。每組隨機(jī)生成 100 條實(shí)例分別用 LKH3 與我的模型求解。在 20 個客戶的測試集上模型解與 LKH3 解的 gap 平均在 3.4% 左右方差也比較穩(wěn)定。在 50 個客戶的泛化測試?yán)飃ap 上升到 7.8% 左右說明模型學(xué)到了一定的規(guī)模外推能力但精度折扣明顯。為什么會出現(xiàn)這個差距核心原因在于訓(xùn)練時的實(shí)例規(guī)模是 20 個客戶模型的注意力機(jī)制雖然在結(jié)構(gòu)上能處理 50 個客戶但它從未“見過”這么大規(guī)模的數(shù)據(jù)分布某些路徑選擇的模式在 50 個客戶場景中未必成立。如果你實(shí)際使用場景的實(shí)例規(guī)模是 50 個建議直接用 50 個客戶的數(shù)據(jù)訓(xùn)練gap 就能降到與 20 個客戶相當(dāng)?shù)乃?。速度方面這里給出一個直觀的對比基于單張 RTX 3080、CPU 推理 (i7-12700) 也測試過求解方式20 客戶耗時50 客戶耗時LKH33-8s15-30s模型推理GPU15ms35ms模型推理CPU45ms120ms這個速度差距在需要批量求解上千條實(shí)例的場景下非??捎^比如電商物流中一天的訂單可能需要拆分成幾萬條子問題。用 LKH3 逐個算可能要按天計(jì)而用模型推理幾分鐘就能跑完。5.2 用 OR-Tools 和 LKH3 對比驗(yàn)證解的合理性模型跑出來的解需要有一個參照系來評估好壞。我用的參照系是 LKH3 解。但 LKH3 安裝配置成本較高如果你只是想驗(yàn)證解不是“亂走路”也可以先用 Google OR-Tools 做一套 baseline。下面給出用 OR-Tools 對同樣實(shí)例求解的方法我用的版本是 9.xfrom ortools.constraint_solver import routing_enums_pb2, pywrapcp def solve_with_ortools(coords, demands, capacity): num_nodes len(coords) data {} data[distance_matrix] [ [int(((coords[i][0] - coords[j][0])**2 (coords[i][1] - coords[j][1])**2) ** 0.5 * 1000) for j in range(num_nodes)] for i in range(num_nodes) ] data[demands] [0] [int(d) for d in demands[1:]] data[vehicle_capacity] capacity data[num_vehicles] 10 data[depot] 0 manager pywrapcp.RoutingIndexManager(num_nodes, data[num_vehicles], data[depot]) routing pywrapcp.RoutingModel(manager) def distance_callback(from_index, to_index): from_node manager.IndexToNode(from_index) to_node manager.IndexToNode(to_index) return data[distance_matrix][from_node][to_node] transit_callback_index routing.RegisterTransitCallback(distance_callback) routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index) def demand_callback(from_index): from_node manager.IndexToNode(from_index) return data[demands][from_node] demand_callback_index routing.RegisterUnaryTransitCallback(demand_callback) routing.AddDimensionWithVehicleCapacity( demand_callback_index, 0, [data[vehicle_capacity]] * data[num_vehicles], True, Capacity, ) search_parameters pywrapcp.DefaultRoutingSearchParameters() search_parameters.first_solution_strategy routing_enums_pb2.FirstSolutionStrategy.PATH_CHEAPEST_ARC solution routing.SolveWithParameters(search_parameters) return solution有了這個 baseline 后你可以畫出路徑對比圖直觀地看兩條路徑的繞路程度。有一次我拿 OR-Tools 的解和模型解畫出來對比發(fā)現(xiàn)模型特別喜歡“把相鄰的客戶點(diǎn)串成一個 C 型或 S 型”而不是直線往返——這是因?yàn)橛?xùn)練數(shù)據(jù)里的 depo 坐標(biāo)在原點(diǎn)周圍的客戶越走越遠(yuǎn)再回到原點(diǎn)C 型或 S 型是使總距離最短的拓?fù)浣Y(jié)構(gòu)。這個觀察證明模型確實(shí)學(xué)到的是“幾何直覺”而不是死背訓(xùn)練集。5.3 代碼庫組織與關(guān)鍵配置說明為了讓你能直接復(fù)現(xiàn)我建議把代碼組織成如下的形式vrp_rl/ ├── data.py # CVRPInstance 數(shù)據(jù)生成器 ├── model.py # Encoder Decoder Pointer ├── train.py # 訓(xùn)練循環(huán) ├── evaluate.py # 模型評估與 LKH3/OR-Tools 對比 ├── config.py # 所有超參數(shù)集中管理 └── README.mdconfig.py 中我習(xí)慣把所有超參數(shù)整理成一個 dataclassfrom dataclasses import dataclass dataclass class Config: embed_dim: int 128 num_heads: int 8 num_encoder_layers: int 3 lr: float 1e-3 lr_decay: float 0.96 batch_size: int 64 num_customers: int 20 max_steps: int 10000 grad_clip: float 1.0如果你想復(fù)現(xiàn)運(yùn)行順序是python train.py先訓(xùn)練模型然后python evaluate.py --checkpoint your_ckpt.pth做推理與對比。如果機(jī)器上沒有 GPUCPU 訓(xùn)練小規(guī)模數(shù)據(jù)也能跑只是速度慢一些但不影響理解整個流程。5.4 我這段時間踩過的四個高頻坑這一部分按“惡心程度”排序吧。第一坑RNN 還是 Transformer我一開始用 LSTM 做 Decoder效果差到讓人懷疑人生。原因是 LSTM 在處理長度不定的序列時編碼器-解碼器之間的信息瓶頸太嚴(yán)重而且訓(xùn)練速度也慢。換成 Attention 結(jié)構(gòu)后同樣的 epoch 下 gap 從 12% 降到了 5% 左右。如果你的場景也是做組合優(yōu)化問題直接上 Attention 結(jié)構(gòu)別在 RNN 上浪費(fèi)時間。第二坑Mask 的實(shí)現(xiàn)順序。前面提到過空車不能回 depot 的 mask 是必須在訓(xùn)練一開始就加上的。我不止一次在代碼 review 時看到有人把這條 mask 漏了后果是訓(xùn)練不收斂、損失亂跳。排查方法很簡單訓(xùn)練 500 步后打印幾條路徑如果出現(xiàn)“0 - x - 0”這種只服務(wù)一個客戶就掉頭的路徑基本就是這個 mask 沒加。第三坑Batch 內(nèi)實(shí)例必須獨(dú)立但共享容量。如果你的 batch 里每個實(shí)例的 depot 坐標(biāo)不同那么編碼時要注意坐標(biāo)歸一化的尺度。我一度為了讓所有 depot 都在原點(diǎn)統(tǒng)一在數(shù)據(jù)生成階段把所有坐標(biāo)平移讓 depot 落在 (0,0)。這樣模型學(xué)起來最簡單在推理時對任意 depot 位置先把坐標(biāo)整體平移再送進(jìn)模型輸出路徑后再平移回真實(shí)坐標(biāo)即可。這一步非常重要千萬不能漏。第四坑驗(yàn)證與訓(xùn)練的 gap。訓(xùn)練時損失確實(shí)在下降但驗(yàn)證集上的路徑質(zhì)量不一定隨之提升可能出現(xiàn)“訓(xùn)練集過擬合到實(shí)例分布”的情況。解決辦法是在訓(xùn)練過程中定期生成全新的隨機(jī)實(shí)例做評估而不是長期固定一套驗(yàn)證集。因?yàn)槟P鸵娺^類似分布后固定驗(yàn)證集很容易被記住真實(shí)的泛化能力需要在全新數(shù)據(jù)上檢驗(yàn)。6. 從 CVRP 到真實(shí)業(yè)務(wù)強(qiáng)化學(xué)習(xí)求解 VRP 的邊界與下一步代碼跑通、效果驗(yàn)證完自然要想它怎么在真實(shí)業(yè)務(wù)里落地。這也是我認(rèn)為寫這篇文章最有價值的部分——你不能把整個訓(xùn)練好的模型直接丟給業(yè)務(wù)系統(tǒng)中間有很多工業(yè)級的細(xì)節(jié)需要補(bǔ)齊。6.1 從靜態(tài)數(shù)據(jù)到動態(tài)訂單模型還缺什么我的業(yè)務(wù)場景里訂單是動態(tài)進(jìn)來的。CVRP 的經(jīng)典設(shè)定是“所有客戶已知、一次規(guī)劃”但現(xiàn)實(shí)中往往早上還不知道下午有哪些單。這時候有兩種應(yīng)對思路第一種把時間窗口切成多個片段每個片段的訂單做一次靜態(tài) CVRP 求解。這是最簡單可行的辦法也是我切入點(diǎn)的方式。缺點(diǎn)是片段之間的路線不全局最優(yōu)但勝在穩(wěn)定、可解釋性強(qiáng)。第二種訓(xùn)練一個可以處理動態(tài)加單的模型。例如將“當(dāng)前時間步還沒到達(dá)的客戶需求”作為額外的特征輸入讓模型學(xué)會在部分信息下做決策。這屬于更前沿的 research 方向代碼復(fù)雜度高不少如果你的數(shù)據(jù)集里動態(tài)性很強(qiáng)可以沿著這個思路做深度定制。依賴第二種方案時有一件事必須提前規(guī)劃你如何獲取足夠多的“動態(tài)訂單”樣本純模擬生成的數(shù)據(jù)流與真實(shí)訂單分布差距很大直接遷移使用可能會水土不服。我的建議是先用模擬數(shù)據(jù)跑通框架然后收集你業(yè)務(wù)里真實(shí)訂單流的一小部分作為微調(diào)數(shù)據(jù)采用“先預(yù)訓(xùn)練、后微調(diào)”的方式最終才能讓模型真正在業(yè)務(wù)數(shù)據(jù)上穩(wěn)定工作。6.2 多倉庫、時間窗與真實(shí)路網(wǎng)距離如果你遇到的問題是 VRPTW帶時間窗或多倉庫模型改起來其實(shí)沒有想象中復(fù)雜——因?yàn)闆Q策框架沒有變?!皶r間窗”可以表達(dá)為每一步的一個 mask 條件某個客戶如果當(dāng)前到達(dá)時間不在時間窗內(nèi)暫時不可選?!岸鄠}庫”可以在初始輸入里把多個 depot 都編碼進(jìn)去讓模型決定一開始從哪個倉庫發(fā)車。真正讓你頭痛的不是模型結(jié)構(gòu)而是數(shù)據(jù)規(guī)??蛻酎c(diǎn)數(shù)量一旦超過 200注意力機(jī)制的 O(n2) 復(fù)雜度就會讓推理時間指數(shù)級上升那時候你可能需要引入分層策略——先聚類定區(qū)域再在區(qū)域內(nèi)精確求解或預(yù)測路徑。R 路網(wǎng)距離方面?zhèn)鹘y(tǒng)的“歐氏距離假設(shè)”在城區(qū)配送中往往嚴(yán)重失真。兩個看起來很近的點(diǎn)隔著一條河地圖上顯示距離不遠(yuǎn)但實(shí)際開車要繞一大圈。我的經(jīng)驗(yàn)教訓(xùn)是不要在模型里直接用經(jīng)緯度做歐氏距離。生產(chǎn)環(huán)境中至少要先把客戶點(diǎn)和倉庫之間的真實(shí)駕車距離矩陣計(jì)算出來然后把這個矩陣作為“預(yù)計(jì)算特征”喂給模型或者在訓(xùn)練時將真實(shí)距離矩陣作為坐標(biāo)的替代輸入。后者更快但需要維護(hù)一張全量距離矩陣表占內(nèi)存前者更優(yōu)雅但模型內(nèi)部計(jì)算的是歐氏距離與真實(shí)距離有偏。我自己在業(yè)務(wù)里采用的是折中方案用真實(shí)距離矩陣作為解碼階段的獎勵值reward但在 Encoder 的坐標(biāo)嵌入里仍然用經(jīng)緯度。這樣模型不需要顯式知道路網(wǎng)結(jié)構(gòu)但會在訓(xùn)練時通過 reward 感知到真實(shí)距離的“偏差”從而學(xué)會繞路。這個方案實(shí)測比純歐氏距離的效果穩(wěn)定很多且引擎基本不用改。6.3 模型的維護(hù)與持續(xù)迭代這可能是最難的一環(huán)很多人忽略了一個問題訓(xùn)練完成的強(qiáng)化學(xué)習(xí)模型不是像傳統(tǒng)軟件那樣部署完就完事。它依賴訓(xùn)練數(shù)據(jù)的分布。如果業(yè)務(wù)上線后訂單的空間分布、需求量的量級發(fā)生了變化比如新開了一座倉庫、某個區(qū)域客戶暴增模型的表現(xiàn)會明顯退化你需要建立一套模型監(jiān)控與再訓(xùn)練機(jī)制。我的做法是定期比如每周拿出最近一個月的真實(shí)訂單重新生成驗(yàn)證集與當(dāng)前部署模型的輸出做對比。如果平均路徑成本上升超過某個閾值比如 5%就觸發(fā)用最近數(shù)據(jù)混合舊數(shù)據(jù)做增量訓(xùn)練。這樣做的好處是讓模型始終跟隨業(yè)務(wù)分布的漂移壞處是你要長期維護(hù)一套數(shù)據(jù)管線與訓(xùn)練任務(wù)。在這個問題上沒有銀彈但至少可以從架構(gòu)層面把“數(shù)據(jù)生成-訓(xùn)練-評估-部署”做成自動化流程。7. 我的一點(diǎn)總結(jié)與資源方向斷斷續(xù)續(xù)做了這么久回頭來看用強(qiáng)化學(xué)習(xí)求解 VRP 這個方向有一個很重要的定位它不是要替代行業(yè)求解器而是給“高頻、快速、近似優(yōu)化”的決策場景提供一個新的選擇。如果你的需求是離線算精確調(diào)度方案、算力資源不敏感、每天只求幾次那老老實(shí)實(shí)用 LKH3 或 OR-Tools 就好。但如果是要求毫秒級響應(yīng)、海量實(shí)例并行推理、并且能容忍幾個百分點(diǎn)的精度損失那這套基于注意力機(jī)制與策略梯度的方案值得你認(rèn)真考慮。有時候“最優(yōu)解”不一定是約束條件下數(shù)學(xué)上最好的路徑而是在真實(shí)業(yè)務(wù)條件下最合適的那條路徑。強(qiáng)化學(xué)習(xí)讓我見到的正是這種“次優(yōu)但快”的實(shí)用主義。希望這份經(jīng)驗(yàn)和代碼能幫你在自己的場景里少走一些彎路。動手跑起來之后我們再接著聊。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
强被迫伦姧在线观看无码网站| 日本天天人人狠狠在线日美女| 韩国三级理论在线| 欧洲久久一二线| 超碰97最新人妻| 色牛牛AV| 亚欧高清在线| 精品无码欧美三级| 久久久96| 超碰欧美97资源| 思思热免费视频观看| 淫纸中9区| 爱射综合| 不卡九肏| 中文字幕在线观看AV| av网站在线观看了| 1000部熟女视频在线观看| 久久久久久久久久久精| 九九九九97| 91丝袜在线观看视频在线观看| 久久久久亚洲AV无码专区少妇| 91精品在线播放| 久插不卡| 伊人一区二区三区| 青草影院内射高潮| 久久精品人妻一区二区三区| 新97国产超碰| 果冻传媒A片一二三区| 伊人伊人LD| 91美女视屏| AV 少妇 人妻 偷拍| 狠狠色婷婷7777久| 无码抄逼网| 久久精视频美日韩在线视频| 亚洲色欲天天人妻无码系列专区| 久久99亚洲精品久久99果| 韩国成人精品久久久免费看| 日本在线不卡一二区| 色综合网1| 中字乱伦AV| 久久综合九九| 91狠婷| 男女性感激情网站| 93人人操人人| 熟女五十路一区二区三| 婷婷亚洲五月***久久| 久操热线| 久久国色天香香蕉| surenchaopeng| 天天操人人操骚逼网站| 97久久久久久久久久| 欧美片第一页| 欧美大香蕉同搞| 高潮的A片激情扒开一区| 素人伊尹大香蕉免费下载视频| 裸体美女久久久| 九九九九九精品十六| 大香蕉综合在线| 久久精品高清无码一区| 国产亚洲色婷婷99精品91| 久插综合| 97久久国产亚洲精品超碰热| 欧美伦乱| 九久9精品| 国产深夜福利| 亚洲免费成人在线高清无码视频| 一类av片在线看| 日韩免费看黄片| 一区二区三区 日韩欧美| 丁香五月性爱| 麻豆性爱视频在线播放| 超碰 欧美| 免费精品无码一级毛片牛牛影视 | 大香蕉一线视频| 强奸乱伦麻豆| 91久久久久免| 91激情网| 蜜臀久久99精品久久久久久酒店| 黄色成年| 亚洲日韩成人性爱视频| 中日无幕一二三四区| 高潮毛片无遮挡高清免费| 亚洲图片激情综合另类| 偷拍 精品另类 凸凹了四区| 久久久久亚洲av综合波多野制衣| 91精片| 久久精品视频一区三区小泽玛利亚| 韩国一区二区精品亚洲| 天天干夜夜肏| 性爱1区| 91狠狠综合久久久久久| 高颜值美女口爆高潮浪叫| 久久久久久久强迫| 欧美夜夜狠| 国产农村妇女精品一| 亚洲做性| 欧美日韩性爱无码| 后入式视频国产自| 国产精品盗摄 偷窥盗摄| 美女黄频a美女大全免费皮| 国产精品久久久久无码A√| 精品国产乱码久久久久久口爆网站 | 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 97中文字幕一区| 人妻夜夜爽天天爽三区麻豆AV网站| 女人被男人桶爽视频网站| 99色综合| 国产精品粉嫩福利在线| 久久久久国产一区二| 日产中文字幕2020| 老熟妇一区二区三区啪啪| 9久在线视频只有精品| 天堂8在线新版官网| 91天天爱| 2019天天干天天操| 日本九九久久99| 国产亚洲色婷婷久久99精品91 - 百度| www.色婷婷色综合| 激情综合 婷婷五月 红杏 | 亚洲欧美日韩中文久久自慰| 亚洲色图尤物视频| 久久鲁夜| 日韩极品无码B| 懂色综合久久久| 日本不卡免费二区| 一区二区娱乐网站| 东北女人性交| 日本三级韩三级99久久| 欧美性暴力猛交| AV九九| 日本506070| 色五月激情网| 精品二区久久| 97操| 九九色逼| 九九久久久| 男人的天堂在线有码| 色亚州人久干视频在线观看免费版| 秋霞操逼片| 亚洲色图欧美色图制服丝袜 | 婷婷色色五月天福利| 中文字幕在线观看丝袜| 蜜乳AV免费观看| 亚洲精品天天影视综合网| AV麻豆免费一区| 欧美色图亚州激情| 天天色天天干天天爱| 国产日韩欧美| 日韩欧美经典在线观看| 呦呦影院| 欧美熟女逼久久久久久| 久久欧洲| 欧美人妻一区| 天天爽天天操啊啊啊| 丝袜狠狠草尤物人妻av91| 久草尤物| www成人啪啪18秘 免费| 欧美久久人体| 操B久久| 乱欲一区二区| 强被迫伦姧在线观看无码网站| 大香蕉宅男伊人| 黄色小视频日本txt| 青青青在线高清视频在线一二三四区 | 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 秋霞成人一级在线观看| 国产97在线 | 亚洲| 夜夜狼人妻| 日韩av在线免费网站| 成人青青草原伊人| 5252色欧美在线| 91狼人| 男人午夜天堂| 天堂亚洲精品| 大香蕉在线86| 久久久久精| 亚洲h片在线免费观看| 精品少妇人妻一区二区三区| 黄色高清久久无码依人| 狠狠中文字幕| 中文字幕在线日亚州9| 精品国产三级av韩国在线| 亚洲春色欧美| julia中文字幕在线观看| 国产热RE99久久6国产精品首 | 色情乱伦AV| 午夜性刺激视频免费观看| 综合久久99亚洲人妻中文在线| 色色色综合网| 国产做?爰片久久毛片?片美国| 中文字幕色AV| 欧美第二页午夜| 夜夜嗨av午夜成人| 玖玖97综合 | 久操在97| 1区2区3区中文字幕日韩| 亚洲欧洲国产综合av| 国产家庭乱伦性爱视频| 日本一道在线播放高清| 日韩欧美操逼xxx| 这里只有97精品| 欧美一区二区三区成人性生活| 91xingse| 亚洲天堂,男人| 欧美黄色片AAAAA| 亚洲国产欧美一区二区潘金莲| 青青草五月份天| 日本新免费二区三区| 欧美制服另类丝袜| 午夜福利在线视频1000| 后入人妻一区| 97硬碰| 欧美日韩淫加| 一区二区蜜臀| 男人把坤坤插入女人的下体| 日本东京热大香蕉a片| 嫩草 人人网精品| 二三四区精品| 天堂精品| 久久99干一本高清| 少妇精品久久| 一区二区精品日韩欧美在线观看| 一级AV性爱| 最新无码国产| 在线岛| 色欲无码人妻日韩欧美精品| 东北丰满熟女国产一区| 中国一区二区亚洲人妻| 亚洲制服欧美另类内射| 亚洲欲色9532548967一区| 夜夜一区二区| 国产精品久久发布| 欧美图片色五月天| 午夜亚洲WWW湿好大| 国产隔壁老王影院在线| 任你草| 国产91美女高潮| 欧美久久草熟女| 亚州色图狠狠干| 日韩久久艹| 日韩精品电影| 麻豆精品.欧美精品.日韩精品.| 天天干人人乐| 欧美性爱18观看| 中国一级特黄大片护士| 色色婷婷五月天| 男人兔费天堂| 嫩草 人人网精品| 国产久9| 人人妻人人澡人人爽久久av| 亚一综合久久久久久久久久| 婷婷五月天AV| 在线观看午夜婷婷久久久久清性观看| 五月天九九日国产精品一区二区三区| 欧美 亚洲精品首页| 69精品| 青娱乐福利99| 色婷婷99| 亚洲电影91| 探花精品 一区二区| av爱爱爱| 欧美嗯啊……在线观看视频免费| 亚洲啪啪啪啪视香蕉| 黄色成年| 乱伦熟女区| 精彩国产视频播放1区2区| 国产又粗又长的视频| 国产精品久久aV| 婷婷丁香久久| 蜜臀色乳| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 920日本午夜免费| 久久久久久久久久精| 久久超碰com| 十八禁成人网站在线观看| 97日本超碰综合| 日日骚av| 亚洲色色探花| 九九九九九九九九九九九蜜桃| 在线视频97| 热九九精品| 丝袜狠狠草尤物 91| 欧亚日韩中文在线| 亚洲无码99| 九九av| 久久精品欧美一区二区三区不卡| 久99久视频精选| 老司机香蕉久久久久| 成人八戒网站| 日韩电影天堂视频一区二区| 黄片视频观看| AV天堂男人的天堂| 老司机深夜18禁污污网站| 国产丝袜视频| 91春色| 国产乱码久久| 中文字幕丰满人妻日本| 日韩人妻少妇 一区二区三区| 成人黄页| 搡老熟女老女人老熟妇免费视频| 超碰 欧美| 国产亚洲禁久一区二区| 国产和美国毛片| 欧美激情中文字幕另类小说| 久久精品人妻一区二区| 爽 好舒服 无码刺激久久| 天堂涩涩| 亚洲精品日日夜夜52| 蜜臀久久99'精品久久久| 国产色精品午夜大片| 97在线观看免费视频l| 国产午夜精品理论片a大结局| 超碰97精品在线| 福利视频网站| 久久曰曰| www.99中文字幕| 日本高清加勒比| 综合欧美激情网| 9久9久| 五月天婷婷基地| 国产精品扒开腿做爽爽爽视频| 亚洲高潮少妇| 99老司机精品视频在线观看| 亚洲97资源| 1956日韩精品| 亚洲一卡2卡3卡4卡乱码网站| 91热| 99999精品成人| 日本在线不卡v二区| 亚洲性综合11| 国产精品麻豆成人AV艾秋| www熟女乱伦com| 日韩不卡网操逼中文字幕日韩| 婷婷丁香五月天综合东京热| 超碰在线1234区| 99热最新| 国产日韩在线播放av| 免费超碰97久久| 九九99久久| 欧美日韩在线视频网站| 欧美 亚洲 综合 制服 另类| 亚洲精品蜜桃久久久一区二区三区| 国产免费一区2区3区| 撸撸成人在线视频| 少妇超碰在线| 粉嫩粉嫩一区性色AV片| 九一综合精品视品av| 日本精品中文字幕视频| 强奸乱伦中文字幕AV| 中文字幕av色| 老熟女91| 九七超碰| 婷婷8月天青娱乐| 久久久久密| 亚洲国产成人精品久久久国产成人一区二区三.| 四季av一区二区凹凸精品小说| 九九色逼| 欧美一区二区福利在线| 97日韩| 少妇第一页| 99999久久久久9国产精品| 国产午夜无码片在线观看影视| A 天堂| 欲色综合| 啊啊啊 在线| 殴美日韩m| 粉嫩国产精品久久粉嫩| 毛片电影一区二区三区| 极品美女福利在线观看| 亚洲巨爆乳一区二区三区四季网| 亚洲国产综合图区中文字幕 | 五十路人妻在线| 天天综合网国产| 性色av婷婷久久一区二区点复制| 激情视屏国产乱伦强奸| yiqicaoav| 五月天色色网站| 久久久91| 午夜福利 成人 91| 人妻 欧美亚洲| 国产精品91ai| 欧美 综合 亚洲| 亚洲91色在线| 制服诱惑亚洲一区二区三区在线观看| 久久偷拍人| 丰满人妻av一区二区三区 | 91狠狠综合久久| 97人妻免费中文字幕| 涩涩这里只有精品视频| 国产成人手机视频激情| www国产天美久久久| 国产精品亚洲天堂网址| 久草网站免费在线观看| 国产精品一区av在线| 五月天人妻综合| 另类专区加勒比| 久湿久久| 综合欧美亚洲| 91人妻在线视频| 国产精品高潮久久久无码| 国产精品操| 国产精品视频内谢女人| 色激情综合网站| 伦激情人妻另类人妻| 黄色片,com| 日韩一级特黄av毛片| 淫荡少妇免费| 激情丁香婷婷| 91男女啊啊啊| 日本不卡免费二区| 中文字幕三四区| 91免费看一区二区三区| 国产亚洲深夜激情| 日本人人操人人操| 婷婷五月天成人| 九九热免费在线国产视频伊人五月| 熟妇视频一区二区三区在线观看| 老司机午夜福利视频一区二区| 亚洲色丰满少妇高潮| 亚洲国产丝袜在线观看| 五月天伊人网| 欧美性生活男人的天堂| 国产一区二区三区精品观看啪| 一级性爱aaaa| 秋霞男人网| 99999这里都精品| 亚洲图片91| 黑人美精品 A片| 婷婷日韩一区二区三区中文字幕在线| 绯色AV粉色AV蜜臀AV| 韩国嫰模上门援交视频| 東南亚性呦成人伦理资源在线视频| 久久的免费性爱视频| 中日亚韩免费视频| 亚洲少妇诱惑| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 欧美第一页| 手机在线A片| 91天天日| 国产农村妇女毛片精品久久| 福利社区午夜一区二区| 国产成人网址| 桑老女人九区| 亚洲性爱电影| 蜜色网色哟哟| 人人妻人人色一区二区三区| 91情色| 亚洲伊人a线观看视频| 天天插天天干| 精品无av| 九九色影院| 欧美国产一区二区三区麻豆传媒| 欧美色图91| 美女黄频a美女大全免费皮| 伊人青青草久久| 天堂亚洲欧美| 99色色网| 51一区二区三区| 国产成人亚洲精品无码古代早漏男 | 国产精品一区二区三区,亚洲综合| 精品妇女一区二区三区| 97 国产精品| 女人喷水视频在线观看| 97国产天堂岛| www.99中文字幕| 成人AV素股で擦久久| 亚洲欧美碰碰| 色播五月丁香| 国产精品九九九| 色99色| 东京热,男人的天堂| 国模无码一区二区三区在线| 任我爽在线视频免费观看| 精品久久无码午夜福利 | 狠狠躁久久躁| 九九黄色网| 视频在线观看青青99国产| 操逼1区| 欧美一级专区免费大片| 午夜福利视频在线一区| 加勒比伊人影院| 国语对白在线播放视频| 国产精品电| 三级片网站在线播放| 超碰久久精品| 日本三级日本三级99| 日韩电影免费网站麻豆视频| 操人91| 黑人在线91| 91在线页| 亚洲网站一区二区在线| 99热 按摩 日韩| 在线观看高清AV| 熟女露脸激情自拍视频| 亚洲操人| 一区二区乱码福利| 97视频620| 在线a v| 天美麻豆黄色录像| 国语国产操逼伊人AV网| 骚熟女AV网| 天天日老熟妇| 免费1级a做爰片观看| 欧美激情黑人| 亚洲美女自拍偷拍视频| 久久超碰97| 精品区9| 成人av影院在线观看| 台湾佬中文娱乐自偷自拍| 美女视频尤物网在线看| 国产第11页| 九九色婷婷| 妇女性内射冈站HDWWWCOM| 91五月天| 91国产精品在线看| 亚洲另类小说卡通动漫| 欧美色性情| 91亚州欧美| 99热国产| 大香蕉免费3| www.黄色在线| 久久同城AV| 丝袜AV一二三区| 精品国产91内射久久| 九九热国产| 国产传媒美日韩av| 大香蕉在线视频15| 国产精品自产拍在线观看社区| 97久久超碰| yy少妇精品久久| 日本天天人人狠狠在线日美女 | 国产欧美日产一区二区三区 - 国产欧美日 | 四虎影视精品| 欧美天堂第二区| 91N五十路| 亚洲古典另类欧美在线| 黄色操人| 少妇久久久久久久久| 超碰97综合网| 怡红院怡春院| 天天肏美女| 99热色精品| 欧美大香蕉同搞| 日韩一级性爱无码| 少妇蹲下露出大唇5| 亚洲风情综合网| 成人在线日韩| 伊人久久大香大香线蕉中文 | 黑操B| 久干9操| 国产成年女人免费视频播放a| 丰满人妻-区二区三区免费看 | 欧美激情精品久久久| 伊人久久大香蕉线AV五月天| 99自拍视频在线| hd成人一区二区在线| 国产精品午夜福利亚洲综合网| 中文乱码字幕观看| 精品人妻一区二区三区不卡断 | 夜夜躁狠狠躁日日躁av| 奶水 人妻 哺乳 在线| 亚州男人的天堂| 欧美日韩人妻婷婷一区| 欧美亚洲涩涩| 久久中文字幕女同性恋一区| 偷拍片久久| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 国产传媒美日韩av| 9长久久精品| 先锋音影AV| 日日摸日日碰| 99国产精品自在自在| 亚洲色图第一页| 啊嗯好大视频在线观看| 亚洲激情天堂网| 九一国产精品| 啊啊啊啊无码| 亚洲伊人成综合成人网| 最新av中文字幕高清| 又大又长又粗又爽又黄| 亚洲成a人片在线观看中文!!!| 亚洲人妻中文高清| 秋霞曰韩R级| 99热在线观看| 熟妇熟女一区二三区| 青女在线| 99精品无码| 欧美男人天堂| 在线观看无码三级少妇| 国产精品免费美女视频| 亚洲色天堂日韩中| 五月天色电影| 欧美激情 一区| 精品国产乱码久久久久久蜜臀| 成人精品无码| 欧美日本国产日韩激情视频| 9九九九九视频在线观看| 亚洲综合113页| 91碰碰| 大香蕉伊人75| 操逼不卡中文字幕| 免费观看有码高清视频| 91高潮喷水美女| 人妻熟女一区二区三区视频| 日韩性爱免费观看视频| 丁香九月 婷婷| 国产高清无码一区二区三区四区皇冠| 99999久久久久9国产精品| 国产白丝在线| 蜜臀久久99精品久久久久久-DVD原版全| 亚洲av无码国产精品字幕| 91丨熟女丨丰满熟女| 91亚洲人电影| 秘书高跟黑色丝袜国产91在线| 精品无码久久久久久久久果冻糖心| 91人妻素女| 91色综| 少妇大屁屁| 中文字幕精品日韩中文字幕| 国产精品91一样| 亚洲人妻久久久| 国产AAAAAABBBBB| 99re视频在线观看这里只有精品| 日韩78m视频| 日本人妻丰满熟妇久久久久久| 蜜乳AV一区二区三区四| 天天天天做夜夜夜夜做| 日韩有码专区| 欧美婷婷| 91国产美女丝袜足交精品视频| 久久春色| 五月天开心网| 亚洲综人| 秋霞一级视频在线观看免费| 狠狠干精品一二三四五六2022| 精品人妻一区二区三区四区不卡在| 国产综合永久精品日韩鬼片| 色大香蕉97N| av网站免费线看| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 成人av毛片在线观看| 黑丝少妇| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 蜜臀99久| 狠狠综合网| 另类图片五月天| 一级黄色性爱A级片| 日本精品免费一区二区三区四区| 无码不卡八戒| 青青色综合| 98人妻精品一区二区色欲| 偷拍欧美综合| 欧美一二三| 大香蕉操久久| 国产午夜精品理论片a大结局| 日韩熟妇二区| 久久一区二区三区四区五区| 国产一级αv免费看片| 国产少妇内射| 九九99久久| 易易A毛视频| 麻豆久久久一区二区| 日韩欧视频| 日韩国语字幕| 韩国免费播放一级毛片| 欧美综合制服在线| 国产h片在线观看视频| 亚洲在钱| 美女啊啊啊啊啊啊啊| 天天日天天操天天射河南省| 91亚州欧美| 强奸乱伦大香蕉| 久久久久幕乱码| 九九综合色| 日韩免费a级毛片无码a∨| 天堂麻豆天美| 26uuu国产免费观看| 女优大全 - 91n| 欧美精品另类人妖xxxx| 中文字幕一二区二三区人妻专区| 免费超碰97久久| 婷婷九月色| 国产在线视频午夜精华在| 久干网| 18禁免费视频| 大香蕉中文网| 免费看污网址| 九九性爱网| 日本中文字幕不卡视频| 久久久禁| 97香焦色区| 久久久久亚洲AV无码专区少妇| 97伊人超碰| 久操 高清| 中文自拍欧美影视| 一级婬片120分钟试看| 91操人| 久热久一区二区三区| 一区操逼日比视频| 超碰97中文| 懂色av中文字幕| 久久大香蕉手机高清视频| 乱伦日本色图AⅤ| 亚洲欧美情色| 久久9免费视频| 日韩AV中文字幕电影| 97人人模人人爽人人| 91bbbbbb| 人妻美腿丝袜日韩| 东北女人| 另类综合另类| 激情五月婷婷| 老司机深夜影院18未满| 亚洲av综合伊人久久| 大香蕉伊人75| 欧美激情亚洲情色| 精品人妻一区二区乱码一区二区 | 亚洲色电影在线| 久久原创中文| 日本A级视频| 日本三级韩三级99久久| 东亚亚洲无码高清| 可以在线观看的黄色网址| 九九九九免费| 九久精品| 91A欧美电影网站| 欧美亚洲综合999| 大香蕉一人在线| 国产欧美日韩女同性恋ww喷水精品| 黄片直播三级黄片两女一男| 尤物视频一区| 91在线精品一区二区三区| 91视频综合网| 老熟妇91| 啊啊啊好舒服视频| 九九这里只有精品| 一二三四区操操Av| 久久成年精品| 无码一区二区三区四区五区六区七区八区九区十区视频 | 亚洲av热热色| 校园春色综合色| Av色五月| 婷婷激情一区二区三区俺也去| 亚洲国产欧美日韩人妻日中文| 亚洲精品美女久久久久久久久| 国产精品无码论坛| 男人高清无码一区二区| 成人5码视频| WWW啪啪的com| 欧美熟妇成人一区二区| 国产视频一区二区三区在线免费观看 | 午夜精品人妻二区三区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 超碰免费人妻人人| 欧美自拍偷拍综合图片| A一区片| 久久riav中文精品| 亚洲第一无码播放立川理惠| 大香蕉一线视频| 日韩成人电影AV| 婷婷久久综合久| 人妻夜夜爽天天爽麻豆三区网站 | 亚洲精品一卡二卡三卡福利视频网站| 大香蕉天天看妹子| 久久久免费懂色| 久久精品操| 大奶的诱惑| 97亚洲综合| 亚洲国产一级黄色视频| 天天干天天燥| 99ri精品| xxx亚洲午夜天堂| 久久高清无码夜夜操| 日日日大屁股骚女人精品| 懂色av中文字幕一区二区三区天美 | 蜜桃久久一区二区| 欧美的性爱网站免费| 精品人妻一区| 日日干夜夜干| 蜜桃久久精品一区二区三区| 亚洲色图自拍| 国内一区二区免费| 啪啪啪精品| 亚洲激情在线| 国产成人+综合亚洲+天堂| 亚洲不卡不卡中文字幕不卡| 99热99re6国产在线播放| 日日躁夜夜躁狠狠躁超爽| 久久久一区二区三区三州| 熟女人妇一区二区三区| 欧美有码亚洲中文字幕一区二区三区四区| 99.色网| 亚洲诱惑天堂 | 亚洲第一页第二页激情| 天天综合网日韩7799| 精品超碰中文在线| 久久久久久久六六| 中文字幕蜜乳av| 久久AV无码网址| 狠狠躁AV| 78m成人视线| 亚洲综合另类小说色区亚洲成av人片在www | 国产精品无码av| 99热在线观看| 日本国产二线女色| 一级@啪啪视频| 九九九九九九九精品视频| 香蕉免费一区二区三区不读| 亚洲精品九九九| 九色婷婷| 天天在线91| 国内精品a| 9久久9综合| 日韩欧美久久婷婷网站| 久久黄色视频一区二区三区 | 午夜欧美女人操逼| 岛国AV一区二区电影| 超碰97极品9| 日韩99精品视频综合区 | 国产亚洲综合欧美一区| 国产精品不卡高清在线观看| 神马久久久久久久久久久久| av三级电影在线播放| 99re在线视频| 强奸乱伦AV一天堂网| 国产AV人人夜夜澡人人爽麻豆| 人妻少妇精品久久久久久久| 国产97色在线| 日日噜噜夜夜久久亚洲一区二区| 视频一区二区免费在线| 色婷婷A V一二三四区麻豆综合| 日本在线999| 亚洲av无线观看| 欧美日韩亚洲高清不卡一区二区三区| 综合网少妇| 熟女被操视频网址| 蜜臀av网址| 国语av最新自产拍在线观看| 久久伦理视频久久大香蕉视频| 日韩成人私密一级精品av| 曰韩欧美国产传媒麻豆第一区| 九热超碰| 一区二区三区黄色片a| 九九拍拍精品视频在线播放| 中文字幕久久婷婷丁香五月天| 美国美女AV在线| 肏逼视频日本| 日本人妻一区二区| 中文字幕97| 日韩欧美麻豆大片| 四虎在线观看视频| 久久色一区| 日韩精品三级| 一区二区激情国产熟女| 曰韩中文人妻视频| 精品人妻1237| 中文字幕五月婷婷免费| 白丝在线一区| 中国国国产一级特黄毛片| 91丝袜在线视频| 欧美精品自慰系列寂寞少妇 | 2017天天操天天日| 人人射人人操人人摸| 91网站18+| www.色婷婷| 97精| 和协影院中文字幕三区| 日日天天久久啊啊aaa| 久久永久无码人妻视频| 蜜臀久久99精品| 久久久久婷婷| 久久91| 青青草玖玖爱| 久/久精品99看9| 思思热在线视频免费| 亚洲综合69| 女人被添高潮免费视频| 精品一区二区三区国产| 亚洲色图伊人网| 免费视频a级毛片免费视频| 天天日天天操天天射河南省| 性色国产东北露脸精品视频| 日本国产成人亚洲精品无码| 尤物av网站免费在线播放| 9精品在线| 狠狠干综合| 小日子操bb在线看| 色97欧美| 久久精品中文| 99热| www成人啪啪18秘 免费| 视频国产成人精品日本亚洲18| 97爱b| 熟女丰满人妻一区| 一区二区三区精品视频| 日日夜夜摸| 999久久芭蕾| 亚洲欧洲精品视频发布| 熟女探花啪啪| 91n处女在线观看| 中文字幕乱碼在线| 人人天天欧洲| 妺妺跟我一起洗澡没忍住| 操逼网站网站| 人妻少妇精品视频一区二区三区| 亚洲精品不卡一二三区| 久久精品欧美一区蜜桃| 日韩性爱播放| 蜜乳av一区二区| 97综合在线| 可乐操亚洲蜜911| 性色av一区二区| 自拍盗摄一区| 亚洲天天艹| 激情久久久| 思思热影视| 北约熟女超碰| 男啪女色黄无遮挡免费观看| 酒色综合网| 亚洲熟女人妻中文字幕一区二区| 亚洲色图 图片| 欧美久久婷婷| 天天躁日日躁AAAXX| 日韩中文字幕人妻视频| 成人无遮挡毛片免费看| 综合第一页| 九九热av| 啊啊啊好大好深| 国产人妻精品一区二区三区秋霞| 欧美青青视频| 亚洲www91| 亚洲精品天天影视综合网 | 久久久一热在线播放| 亚洲人妻中文高清| 三级三级三级a级全黄三| 蜜乳AV一区| 亚洲精品国产熟女| 久操网视频| 欧美日韩在线国产在线| 日韩精品在线观看观看| 少妇无码av专区线| 中文字幕丝袜国产第一页不卡| а√天堂资源官网在线资源| 色欲天天婬色婬香WWW夜色| 成人小说另类在线| 张柏芝国产一区在线观看| 国产精品福利资源在线尤物| 亚洲人成网站7777| 欧美成人性爱视频在线播放| 亚洲影院365| 日韩97P| 精品国产三级av韩国在线| 性久久久| 亚洲阿v天堂无码z2018| 艹少妇网站| 亚洲午夜av| 九九色逼| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 九九九九热只有精品| 俞拍久久国应视频| 亚洲欧美电影| 欧美呦呦性爱| 性爱乱伦一区| 欧美午夜精品久久久久久超碰| 婷婷亚洲色| 欧美大香蕉卡久久| 自拍视频大全亚洲专媒视频/一区二区三区| 99re9在线| 国产丰满熟夫69mpp| 青青久久久| 女人18精品一区二区三区| 天天久久久久久| 国产深喉视频一区二区| 青青草久草| 亚洲欧洲综合av在线| 91九色在线| 夜夜夜久久| 亚洲人精品午夜不卡| 人爽不卡视频| 欧亚日韩中文在线| 国产一区二区a毛片| 开心激情婷婷| 9 7超碰在线免费观看| 欧美 日韩第一性色| 亚洲āv网址在线观看| 久久久久久久国产视频| 日本久操视频| 欧美草草| 免费a v| 国产伦精品一区二区三区在线观| 青青草亚洲一区| ...日韩成人一区二区三区字幕| 色香综合| 色嗨嗨在线| 高清在线偷拍自拍视频| 麻豆AV96熟妇人妻| 夜夜爽夜夜操| 18禁免费视频| 麻豆AV一区二区| 国产精品农村妇女精品| 欧美啪啪色吧在线| 国产大学生口爆吞精合集| 亚洲国产综合久久天堂| 亚洲欧美97√| 激情网色| 精品亚洲俞拍视频一区| 蜜臀网 一区| 91强热人妻| 丝袜av一区二区三区| A级在线视频| 婷婷色五月激情| 蜜桃色院一区久久 | 欧美第一页| 色噜噜人妻丝袜a∨先锋影| 久久超碰大香蕉| 国产毛片片精品天天看视频| 久久美女福利是上海美女| 亚热日本熟女| 欧美色交| 中文字幕久热视频在线| 无码人妻丰满熟妇奶水区毛片| 91精品91久久久中77777| 日本一区二区做爱的视频| 精品999日本| 国产精品久久久| 黄色毛片A片| 狠狠躁天天躁日日躁| 久久精品人人做人人看| 91扒丝袜综合在线| JuliaAnn丝袜熟女系列| 国产精品蜜臀久久久久无码AV| 色哟哟的毛片| 好吊色一区| 亚洲国产综合视频| 久草网站免费在线观看| 91久久18禁| 色妇综合网| 啪啪综合网| 9精品久久久久| 色色五月天婷婷| 99精品人妻| 97国产高清视频在线观看| 蜜桃丰满熟妇av无码区不卡| 国产99精品一区二区三区免费| 国产美女91视频| 岛国1区2区3区在线观看| 白丝少妇一区二区| 一区二区影院| 超碰98综合网| 久久超碰国产一区二区三区| 久久欧洲| 可免费观看的av毛片中日美韩| 美女啊啊啊啊pc| 操婢日韩| 加勒比少妇AV婷婷六月天超碰超碰| 人人操人人摸人人看人人插| 久久人妇| 综合啪啪| 麻豆成人影音在线| 亚洲欧美天堂在线| 亚洲性爱电影| 国产精品在线一区二区| 色情乱伦AV| 2017天天插| 麻豆性爱视频在线播放| 草草影院最新网址| 97超碰色中文字幕| 无码av永久免费专区网站| 极品出轨视频网站| 精品精品精品| 飘花国产午夜精品不卡| 破处bbq| 91狠狠色丁香婷婷综合久久精品| 91精品少妇搡搡搡| 狠狠中文字幕| 777超碰| 色女99一级片在线观看| 国产偷拍自拍在线视频| 亚洲性高潮| 五月天婷婷色| 亚洲精品丝袜-不卡成人免费……| 国产白丝精品在线观看| 伦在线97| 99激情视频| 影视综合无码少妇| 丝袜足交视频| 久久精品老司| 五月婷婷深深爱| 可以在线观看的黄色网址| 国产一线二线三线av| 久久国色天香香蕉| 欧美特大黄一级片片免费| 超碰欧美97| 婷婷五月天久久精品视频一区二区三区| 亚洲欧洲综合av在线| 久久精视频美日韩在线视频| 911av网站免费观看| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 国产91美女高潮| 免费少妇一区二区| 天天天做天天天爱天天天爽| 蜜桃久久久久久| 色九区| 亚洲国产av中文字幕久久| 亚洲影视综合| 亚洲欧美天| 亚洲成人综合在线| 蜜乳Av成人片网站| 日韩性爱一级片| 另类小说欧美激情校园春色| 俺去久久| 亚洲.欧美.丝袜.中文.综合| 香蕉人人操tv| 欧美性性性| 色眯眯av| 99精品丰满人妻| 欧美 青青草| 99热97| 国产乱伦性爱AV| 日韩一级成人毛片免费观看| 国产91影院| 外国91| 免费精品AB| 久久精品一区二区三区蜜桃臀| 大香蕉男人的天堂| 在线性黄高清免费视频| 国模艳艳啪啪一区| 国产黄色剧情影片麻豆免费播放| 天啪| 美女t无毒不卡不卡| 欧美精品亚洲精品日韩传电影| 欧美韩日精品资源| 亚洲和欧美裸体美女双飞视频| 久久大香蕉手机高清| 色色激情五月天| 亚洲图片欧美在线视频| 曰韩成人免费视频| 岛国网址国产 | 亚洲欧美一区二区三区一猛片| xxxx网站亚洲精品| 国产拍偷精品网站| 久久久久久久免费A片国产成a人亚洲精∨品无码| 亚洲色交| 亚洲图片小说欧洲| 亚洲骚男同com| 日本黄色天堂| 狠狠爱夜夜干| 狠狠躁天天躁日日躁97| 女人天堂AV五区在线| 熟妇在线视频一区二区| 开心五月婷婷激情| 日本综合久久| 国产久久久久久久久一区二区| 肉嘟嘟www视频在线观看高清| 美女黄网| 日韩一级欧美一级国产一级台湾| 搡老女人老熟女91| 91天天| 国产午夜福利电影免费在线观看|