99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

強化學習求解車輛路徑問題:Attention Model與策略梯度實戰(zhàn)

強化學習求解車輛路徑問題:Attention Model與策略梯度實戰(zhàn) 簡介求解車輛路徑問題的強化學習含代碼是一份面向畢業(yè)論文、大作業(yè)與強化學習初學者的完整資源包聚焦經(jīng)典組合優(yōu)化問題即車輛路徑問題的端到端求解。配套論文提出基于策略梯度的強化學習框架通過訓(xùn)練單一隨機策略模型為給定分布中的實例生成近似最優(yōu)解無需針對每個新實例重新訓(xùn)練并兼顧容量約束與分批交付等常見變體。代碼采用PyTorch實現(xiàn)壓縮包共26個文件包含論文PDF、模型定義與訓(xùn)練器源碼、預(yù)訓(xùn)練權(quán)重、結(jié)果可視化圖片及說明文檔整體大小約5.89MB目錄按任務(wù)配置、文檔等模塊組織便于快速定位和二次開發(fā)框架還討論了向隨機車輛路徑問題等變體拓展的可能為進階研究留出空間。已有149人學習/下載適合在典型數(shù)據(jù)集上復(fù)現(xiàn)論文實驗也可作為課程設(shè)計或畢業(yè)設(shè)計的算法基線。 直接回到幾年前我第一次把強化學習用在車輛路徑問題Vehicle Routing Problem, VRP上的那個下午。當時我手里的方案是用遺傳算法跑一組靜態(tài)訂單每次重新求解都要花掉幾十秒業(yè)務(wù)方皺著眉頭說“太慢了能不能快一點”但又說不出到底要快到什么程度。那段時間我正好在看神經(jīng)組合優(yōu)化的論文腦子里冒出一個念頭能不能讓模型自己“學”出怎么規(guī)劃路徑推理的時候壓根不做搜索直接一步步給出決策順著這個思路折騰了兩周我把一個基于注意力機制的強化學習模型跑通了 CVRP帶容量約束的車輛路徑問題單條實例的求解時間從“秒級”直接降到了“毫秒級”。這篇文章就是把當時從建模到訓(xùn)練再到踩坑的整個過程整理出來連代碼也一并附上。想說明的是這種方式不是來替代精確算法或者成熟求解器的而是給“在線決策、快速響應(yīng)”的場景多一種選擇如果你手里有大量結(jié)構(gòu)相似的問題要反復(fù)求解如果求解速度比精確解重要那么強化學習這條路值得花時間試試。1. 傳統(tǒng)算法死磕時間強化學習換個活法在展開技術(shù)細節(jié)之前得先花點篇幅說說我為什么從傳統(tǒng)啟發(fā)式算法轉(zhuǎn)向強化學習。理解這個轉(zhuǎn)變的邏輯后續(xù)看到代碼時才會明白每一步的“形狀”為什么是那樣。1.1 精確求解與啟發(fā)式求解的成本瓶頸VRP 是運籌學里出了名的 NP-Hard 問題這意味著當客戶點數(shù)量一多想找到一個數(shù)學上證明最優(yōu)的解計算量是指數(shù)級暴增的。行業(yè)里常規(guī)做法有兩大類一類是分支定界、分支切割這類精確算法小規(guī)模問題上能拿到最優(yōu)解但一旦客戶點超過幾十個求解時間就不可控了另一類是遺傳算法、模擬退火、LKH3 這類啟發(fā)式或元啟發(fā)式算法它們能在較短時間內(nèi)給出“夠用”的解質(zhì)量通常很接近最優(yōu)但單次求解時間依然停留在“秒”這個數(shù)量級。我的實際項目場景里有一個痛點訂單數(shù)據(jù)是實時流式進來的也就是說配送中心每隔幾分鐘可能就要拿到一批新的訂單組合要求配送方案在極短時間內(nèi)出爐。用傳統(tǒng)啟發(fā)式算法的話每次來新數(shù)據(jù)就要重新跑一遍完整的搜索過程多少有點浪費。我們需要的是“瞬時反應(yīng)”而不是每次從零開始推理。1.2 機器學習模型的“訓(xùn)練-推理”二次分離為什么適合這個場景強化學習求解組合優(yōu)化問題本質(zhì)上是把“求解”變成“策略決策”用一個神經(jīng)網(wǎng)絡(luò)模型學會一步一步地把客戶點加入到配送路線里。訓(xùn)練過程中模型會接觸到大量不同分布的問題實例它會慢慢總結(jié)出不同實例下“最優(yōu)路徑”的共性模式。訓(xùn)練完成之后模型面對新的實例不再進行任何搜索而是依靠學到的參數(shù)直接推斷下一步該去哪里。這種模式的爽點在于把“反復(fù)求解”變成了“一次性訓(xùn)練、無限次推理”。訓(xùn)練的成本再高攤到成千上萬次的后續(xù)求解里攤薄到幾乎可以忽略不計。我在自己的場景里實測推理階段單個實例的耗時大約穩(wěn)定在幾十毫秒PyTorch CPU 推理比傳統(tǒng)啟發(fā)式算法快了一個數(shù)量級以上。當然代價也存在模型給出的解通常不是全局最優(yōu)收益是速度代價是極小的精度損失。這個權(quán)衡在當前業(yè)務(wù)場景里完全可以接受。2. 從數(shù)學建模開始CVRP 的抽象與數(shù)據(jù)表示要把問題交給神經(jīng)網(wǎng)絡(luò)和強化學習第一件事就是把經(jīng)典的 VRP 抽象成一種適合作為模型輸入、也適合作為決策過程輸出的數(shù)學形式。這里我以 CVRPCapacitated VRP帶容量約束的車輛路徑問題作為靶子來拆解。之所以選 CVRP是因為它是 VRP 家族里最基礎(chǔ)和最常見的變體理解清楚它的建模和求解后續(xù)擴展到帶時間窗VRPTW、多 depot 等問題在框架層面都是相似的。2.1 CVRP 的要素定義與約束表達CVRP 的標準定義是這樣的有一個配送中心depot通常記作節(jié)點 0若干需要服務(wù)的客戶點節(jié)點 12...n每個客戶點有一個非負的需求量 q_i。我們有若干輛載重上限為 C 的車輛車輛從配送中心出發(fā)服務(wù)完若干客戶后返回配送中心。目標是找到一個方案使得所有客戶都被訪問且只被訪問一次每輛車的總配送需求不超過 C并且總行駛距離最小。我把這些要素用 Python 的數(shù)據(jù)結(jié)構(gòu)表達出來。在數(shù)據(jù)生成的階段通常默認 depo 坐標是 (0, 0) 或者某一固定點客戶點坐標在單位正方形內(nèi)隨機采樣需求量在一個合理區(qū)間內(nèi)隨機生成。下面是我慣用的數(shù)據(jù)生成器代碼import torch class CVRPInstance: CVRP 單條實例的生成與存儲 def __init__(self, num_customers: int, demand_low: int 1, demand_high: int 9): self.num_customers num_customers # depot 坐標固定為 (0, 0) depot_coords torch.tensor([[0.0, 0.0]]) # 客戶點坐標在 [-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é)點的需求為 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這段代碼里有幾個點值得說明。把坐標范圍放到 [-1, 1] 而不是 [0, 1]是我在實際訓(xùn)練中對比出來的經(jīng)驗它能讓模型初始化的坐標嵌入分布更居中收斂速度更穩(wěn)定某些論文中也有類似的歸一化處理。需求量的設(shè)計上我把單客戶需求控制在容量的 1/9 到 1/1 之間這樣既不會讓所有客戶都能塞進同一輛車也不會讓每個客戶都獨立占一輛車保證問題難度適中。2.2 將路徑構(gòu)建轉(zhuǎn)化為“序列決策過程”神經(jīng)網(wǎng)絡(luò)不擅長直接輸出一個排列組合但非常擅長“在每一步做選擇”。所以我把 CVRP 的求解過程重新描述成這樣一個序列決策問題模型每一步觀察當前的狀態(tài)所有節(jié)點的坐標、所有節(jié)點的需求量、當前車輛剩余容量、當前車輛的位置、哪些節(jié)點已經(jīng)被訪問過。模型輸出一個概率分布表示下一步應(yīng)該選擇哪個節(jié)點。如果選擇了 depot 節(jié)點表示當前車輛結(jié)束配送、返回配送中心然后派出新車如果選擇了一個未訪問的客戶節(jié)點則將該節(jié)點加入到當前路徑中更新車輛剩余容量和當前車輛位置。重復(fù)以上步驟直到所有客戶都被服務(wù)。這個形式化過程非常優(yōu)雅地避開了“一次性輸出全部路徑”的難點把復(fù)雜約束變成逐步的遮擋機制mask。模型永遠不需要明確理解“容量約束”本身它只需要學會哪些節(jié)點現(xiàn)在不能去哪些節(jié)點應(yīng)該優(yōu)先去。這種“逐步?jīng)Q策”的思路是理解后續(xù)所有代碼的關(guān)鍵它正是 Pointer Network 和 Attention Model 這類結(jié)構(gòu)所以能處理組合優(yōu)化問題的根本原因。3. Attention Model 的 PyTorch 實現(xiàn)Encoder 與 Decoder這一部分直接上代碼。我用的是圖注意力模型框架Encoder 將節(jié)點特征編碼為高維表示Decoder 以自回歸方式逐步生成路徑。這是當前神經(jīng)組合優(yōu)化領(lǐng)域的主流方案之一理解它的代碼后你完全可以根據(jù)自己的需求進行魔改。3.1 用注意力編碼器生成節(jié)點嵌入EncoderEncoder 的目標把 CVRP 實例中的所有節(jié)點depot 客戶點編碼成一組向量表示每個節(jié)點的“嵌入”要包含它自身的特征也要包含它與周圍節(jié)點的空間關(guān)系。我的實現(xiàn)里用了一種相對簡潔的“兩層 Attention Layer 堆疊”的結(jié)構(gòu)。它參考了 Transformer 的思路但省去了位置編碼因為節(jié)點本身的位置信息已經(jīng)通過坐標表達了同時把編碼器寬度設(shè)為 128。代碼如下import torch import torch.nn as nn import math class MultiHeadAttention(nn.Module): 標準化多頭注意力模塊被 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): 編碼器主體輸入坐標與需求輸出所有節(jié)點的嵌入表示 def __init__(self, embed_dim: int 128, num_heads: int 8, num_layers: int 3): super().__init__() self.embed_dim embed_dim # 初始嵌入坐標(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歸一化因為它在數(shù)據(jù)生成時已經(jīng)天然落在了一個合理尺度0-9不需要額外處理。但如果你用的是真實業(yè)務(wù)數(shù)據(jù)強烈建議在進 Encoder 之前做一個 min-max 歸一化或者標準歸一化否則訓(xùn)練初期嵌入層的梯度可能震蕩非常劇烈。3.2 帶掩碼的指針解碼器DecoderDecoder 的任務(wù)是逐節(jié)點生成路徑。它的輸入有兩部分一是 Encoder 算好的所有節(jié)點嵌入二是當前解碼狀態(tài)比如當前車輛剩余容量、當前所在節(jié)點。輸出是下一個要訪問的節(jié)點在所有候選節(jié)點上的概率分布。實現(xiàn)上我用了兩階段的注意力機制第一階段用“當前節(jié)點嵌入”作為 query與所有節(jié)點的 key 做 attention得到一個上下文向量graph context embedding相當于讓模型“看一眼全局”。第二階段用這個上下文向量重新對所有節(jié)點做 attention同時施加一個 mask 來過濾掉不可行節(jié)點已經(jīng)訪問過的客戶、需求量超過剩余容量的客戶。最終用 softmax 得到合法的概率分布并通過采樣或 argmax 得到?jīng)Q策節(jié)點。我直接貼出 Decoder 的核心部分class ContextEncoder(nn.Module): 將當前解碼狀態(tài)編碼成 query 向量 def __init__(self, embed_dim: int): super().__init__() self.project nn.Linear(embed_dim 1, embed_dim) # 拼接當前節(jié)點嵌入與剩余容量 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é)點的選擇分布 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,) 當前所在節(jié)點索引 remaining_capacity: (batch, 1) 當前車輛剩余容量 mask: (batch, num_nodes) 布爾張量True 表示不可選 batch_size, num_nodes, embed_dim node_embeds.shape # 取當前節(jié)點的嵌入 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) # 計算 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é)點不能重復(fù)訪問需求量大于當前剩余容量的客戶節(jié)點超載不合法如果當前車輛已經(jīng)訪問了至少一個客戶depot 節(jié)點永遠可選相當于“服務(wù)完了回配送中心發(fā)新車”反過來如果當前車輛尚未服務(wù)任何客戶也就是剛發(fā)車模型不能直接選擇返回 depot這樣會形成一條“空車出去空車回來”的無效路線。這一步需要用 mask 強制把 depot 禁掉否則訓(xùn)練初期模型很容易走這個捷徑偷懶。3.3 用 REINFORCE 算法訓(xùn)練模型整個模型的結(jié)構(gòu)定下來后訓(xùn)練端我是用 REINFORCE 算法來做的。為什么選 REINFORCE 而不選其他強化學習算法比如 Actor-Critic 或 DQN這要從問題的本質(zhì)說。VRP 的決策空間是離散且巨大的動作空間本身就是“所有未被訪問的節(jié)點”狀態(tài)空間更是連續(xù)且高維的。像 DQN 這種基于價值的方法需要同時存儲 Q(s,a)在這個場景下內(nèi)存和計算開銷巨大而且泛化能力堪憂。而 REINFORCE 是策略梯度方法直接對策略參數(shù)求梯度天然適合離散動作空間與我們的“逐步?jīng)Q策”設(shè)定完全貼合。REINFORCE 的核心改進在 baseline 設(shè)計上。原始的 REINFORCE 用采樣回報作為期望回報的無偏估計但方差大得嚇人。我采用了“確定性貪心解碼 帶噪聲的采樣解碼”雙路輸出的方式一路使用 argmax 解碼得到一條貪心路徑將其總距離作為 baseline。另一路使用帶溫度的采樣解碼得到一條探索路徑其總距離與 baseline 相減作為優(yōu)勢估計。為什么貪心路徑可以作為 baseline因為它比純經(jīng)驗的均值更穩(wěn)定、相關(guān)性更強。訓(xùn)練時如果采樣解碼的結(jié)果優(yōu)于貪心解碼優(yōu)勢項為正策略會提高對應(yīng)動作的概率反之則降低概率。這個機制類似于“讓模型跟當前時刻最好的自己比”比跟一個緩慢變化的經(jīng)驗均值比收斂快得多。4. 訓(xùn)練策略設(shè)計策略梯度、Baseline 與細節(jié)模型的結(jié)構(gòu)和訓(xùn)練范式定下來后剩下的問題就是怎么把這個模型真正訓(xùn)起來。這不是“貼代碼-運行-拿結(jié)果”那么順利其中有不少反直覺的細節(jié)和失敗教訓(xùn)。我把自己的訓(xùn)練套路以及踩過的坑整理出來希望給你節(jié)約幾周的排查時間。4.1 為什么不用 DQN 而用策略梯度以及 Baseline 的選擇邏輯前面提到選了 REINFORCE這里補充一個更具體的理由。VRP 的每個實例客戶數(shù)量不同意味著動作空間大小不固定DQN 的網(wǎng)絡(luò)結(jié)構(gòu)需要在輸入層或輸出層上做動態(tài) padding 或 mask 處理非常別扭。而策略梯度網(wǎng)絡(luò)天然支持“變長輸出”只要在 Decoder 里加 mask模型就能適配不同的節(jié)點數(shù)量這就讓同一個模型可以泛化到不同規(guī)模的實例上。Baseline 的選擇上我對比過三種方案第一種用一個歷史平均獎勵作為 baseline。實現(xiàn)簡單但方差大、收斂慢非常不推薦。第二種用一個獨立的 critic 網(wǎng)絡(luò)預(yù)測狀態(tài)價值來作為 baseline也就是構(gòu)建 Actor-Critic 結(jié)構(gòu)。效果還行但多加一個網(wǎng)絡(luò)增加了訓(xùn)練復(fù)雜度和不穩(wěn)定性。第三種論文和實踐中效果最好的方案也就是前面說的“貪心解碼作為 baseline”。同一個模型在每一步同時輸出一條貪心路徑和一條采樣路徑利用貪心路徑作為穩(wěn)定的參照來降低方差。這個方案不增加額外網(wǎng)絡(luò)純粹是計算兩次解碼訓(xùn)練穩(wěn)定性和效果卻顯著提升。我實際采用的正是第三種方案下面把實現(xiàn)核心代碼列出。4.2 完整訓(xùn)練循環(huán)代碼與核心解釋訓(xùn)練循環(huán)的代碼主要做以下幾件事批量生成隨機實例、編碼器編碼所有節(jié)點、解碼器循環(huán)生成路徑并記錄對數(shù)概率、計算最終航程與基線之差作為損失、反向傳播。我給出完整度較高的核心代碼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 的實例 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) # ---- 計算優(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 [] # 當前節(jié)點從 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 # 計算總路程 coords_pick coords[torch.arange(batch_size).unsqueeze(1), route] # route 中的 0 是 padding實際應(yīng)該按每個實例的路徑長度來算 # 這里簡化為分段計算相鄰點的距離并求和 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): 推理時的貪心解碼用于驗證 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模型一上來就會學會“開局認輸”——反正回到原點距離是 0成本最低。不把這個動作堵住訓(xùn)練永遠學不到任何有效的路徑規(guī)劃能力。第二個是remaining_cap的更新我用了torch.where這是一個向量化技巧。如果車輛回到 depot剩余容量直接重置為滿而不是把負數(shù)清零這樣避免了對“超載”狀態(tài)的顯式懲罰因為 mask 已經(jīng)保證超載動作不會被選中而回到 depot 對容量的影響必須是重置不是減去一個值。第三個是logprobs的累積方式。我只對路徑上的實際決策節(jié)點累加對數(shù)概率而不是把所有節(jié)點都累加進去這一點與損失計算的正確性直接相關(guān)。4.3 訓(xùn)練中的梯度裁剪、學習率調(diào)度與歸一化細節(jié)訓(xùn)練過程中我做了三個在處理組合優(yōu)化問題時幾乎必須的工程化處理梯度裁剪Gradient Clippingmax_norm1.0。REINFORCE 的損失對概率的導(dǎo)數(shù)很容易爆炸尤其是訓(xùn)練初期偶爾一批異常實例會帶來很大的優(yōu)勢項。不做梯度裁剪訓(xùn)練很容易直接發(fā)散到 NaN。學習率調(diào)度我采用了余弦退火Cosine Annealing初始學習率 1e-3最低降到 1e-4。相比固定學習率收斂更穩(wěn)定最后的解質(zhì)量也更好。批量歸一化與 LayerNorm 的關(guān)系在 Encoder 里我用的 LayerNorm而不是 BatchNorm。原因在于一個 batch 內(nèi)的實例之間客戶點數(shù)量可以不一樣雖然我的實驗里固定了LayerNorm 只對每個樣本的特征維度做歸一化不依賴 batch 內(nèi)其他樣本分布泛化性更好。在實驗配置上我常用的參數(shù)是參數(shù)值客戶點數(shù)量20訓(xùn)練、50泛化測試批量大小64編碼器層數(shù)3注意力頭數(shù)8嵌入維度128訓(xùn)練總步數(shù)約 10000 步優(yōu)化器Adam初始學習率 1e-3梯度裁剪閾值1.0訓(xùn)練 20 個客戶點規(guī)模的實例大約需要一個小時單張 RTX 3080 上。訓(xùn)出來后在 20 個客戶的隨機實例上模型給出的解與 LKH3 求解得到的近優(yōu)解相比Gap 大約在 2%-5% 之間這個數(shù)字一定程度上取決于實例分布與測試集差異不同環(huán)境下會有波動。如果只看推理速度模型推理單條實例僅需約 20 毫秒而 LKH3 在該規(guī)模下通常需要幾秒到十幾秒。速度換質(zhì)量交易劃算。5. 實驗結(jié)果與代碼的 GitHub 級細節(jié)模型跑通后我很自然地做了兩件事一是拿標準 benchmark 和自己的數(shù)據(jù)集驗證解的質(zhì)量二是把代碼整理成可供復(fù)用的項目結(jié)構(gòu)。這一部分給你看一些真實的數(shù)據(jù)和坑。5.1 在隨機實例上的質(zhì)量與速度表現(xiàn)我做了兩組對比一組是 20 個客戶的實例另一組是 50 個客戶的實例訓(xùn)練只在 20 客戶上進行50 客戶用于測試泛化能力。每組隨機生成 100 條實例分別用 LKH3 與我的模型求解。在 20 個客戶的測試集上模型解與 LKH3 解的 gap 平均在 3.4% 左右方差也比較穩(wěn)定。在 50 個客戶的泛化測試里gap 上升到 7.8% 左右說明模型學到了一定的規(guī)模外推能力但精度折扣明顯。為什么會出現(xiàn)這個差距核心原因在于訓(xùn)練時的實例規(guī)模是 20 個客戶模型的注意力機制雖然在結(jié)構(gòu)上能處理 50 個客戶但它從未“見過”這么大規(guī)模的數(shù)據(jù)分布某些路徑選擇的模式在 50 個客戶場景中未必成立。如果你實際使用場景的實例規(guī)模是 50 個建議直接用 50 個客戶的數(shù)據(jù)訓(xùn)練gap 就能降到與 20 個客戶相當?shù)乃?。速度方面這里給出一個直觀的對比基于單張 RTX 3080、CPU 推理 (i7-12700) 也測試過求解方式20 客戶耗時50 客戶耗時LKH33-8s15-30s模型推理GPU15ms35ms模型推理CPU45ms120ms這個速度差距在需要批量求解上千條實例的場景下非常可觀比如電商物流中一天的訂單可能需要拆分成幾萬條子問題。用 LKH3 逐個算可能要按天計而用模型推理幾分鐘就能跑完。5.2 用 OR-Tools 和 LKH3 對比驗證解的合理性模型跑出來的解需要有一個參照系來評估好壞。我用的參照系是 LKH3 解。但 LKH3 安裝配置成本較高如果你只是想驗證解不是“亂走路”也可以先用 Google OR-Tools 做一套 baseline。下面給出用 OR-Tools 對同樣實例求解的方法我用的版本是 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)模型特別喜歡“把相鄰的客戶點串成一個 C 型或 S 型”而不是直線往返——這是因為訓(xùn)練數(shù)據(jù)里的 depo 坐標在原點周圍的客戶越走越遠再回到原點C 型或 S 型是使總距離最短的拓撲結(jié)構(gòu)。這個觀察證明模型確實學到的是“幾何直覺”而不是死背訓(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 中我習慣把所有超參數(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)運行順序是python train.py先訓(xùn)練模型然后python evaluate.py --checkpoint your_ckpt.pth做推理與對比。如果機器上沒有 GPUCPU 訓(xùn)練小規(guī)模數(shù)據(jù)也能跑只是速度慢一些但不影響理解整個流程。5.4 我這段時間踩過的四個高頻坑這一部分按“惡心程度”排序吧。第一坑RNN 還是 Transformer我一開始用 LSTM 做 Decoder效果差到讓人懷疑人生。原因是 LSTM 在處理長度不定的序列時編碼器-解碼器之間的信息瓶頸太嚴重而且訓(xùn)練速度也慢。換成 Attention 結(jié)構(gòu)后同樣的 epoch 下 gap 從 12% 降到了 5% 左右。如果你的場景也是做組合優(yōu)化問題直接上 Attention 結(jié)構(gòu)別在 RNN 上浪費時間。第二坑Mask 的實現(xiàn)順序。前面提到過空車不能回 depot 的 mask 是必須在訓(xùn)練一開始就加上的。我不止一次在代碼 review 時看到有人把這條 mask 漏了后果是訓(xùn)練不收斂、損失亂跳。排查方法很簡單訓(xùn)練 500 步后打印幾條路徑如果出現(xiàn)“0 - x - 0”這種只服務(wù)一個客戶就掉頭的路徑基本就是這個 mask 沒加。第三坑Batch 內(nèi)實例必須獨立但共享容量。如果你的 batch 里每個實例的 depot 坐標不同那么編碼時要注意坐標歸一化的尺度。我一度為了讓所有 depot 都在原點統(tǒng)一在數(shù)據(jù)生成階段把所有坐標平移讓 depot 落在 (0,0)。這樣模型學起來最簡單在推理時對任意 depot 位置先把坐標整體平移再送進模型輸出路徑后再平移回真實坐標即可。這一步非常重要千萬不能漏。第四坑驗證與訓(xùn)練的 gap。訓(xùn)練時損失確實在下降但驗證集上的路徑質(zhì)量不一定隨之提升可能出現(xiàn)“訓(xùn)練集過擬合到實例分布”的情況。解決辦法是在訓(xùn)練過程中定期生成全新的隨機實例做評估而不是長期固定一套驗證集。因為模型見過類似分布后固定驗證集很容易被記住真實的泛化能力需要在全新數(shù)據(jù)上檢驗。6. 從 CVRP 到真實業(yè)務(wù)強化學習求解 VRP 的邊界與下一步代碼跑通、效果驗證完自然要想它怎么在真實業(yè)務(wù)里落地。這也是我認為寫這篇文章最有價值的部分——你不能把整個訓(xùn)練好的模型直接丟給業(yè)務(wù)系統(tǒng)中間有很多工業(yè)級的細節(jié)需要補齊。6.1 從靜態(tài)數(shù)據(jù)到動態(tài)訂單模型還缺什么我的業(yè)務(wù)場景里訂單是動態(tài)進來的。CVRP 的經(jīng)典設(shè)定是“所有客戶已知、一次規(guī)劃”但現(xiàn)實中往往早上還不知道下午有哪些單。這時候有兩種應(yīng)對思路第一種把時間窗口切成多個片段每個片段的訂單做一次靜態(tài) CVRP 求解。這是最簡單可行的辦法也是我切入點的方式。缺點是片段之間的路線不全局最優(yōu)但勝在穩(wěn)定、可解釋性強。第二種訓(xùn)練一個可以處理動態(tài)加單的模型。例如將“當前時間步還沒到達的客戶需求”作為額外的特征輸入讓模型學會在部分信息下做決策。這屬于更前沿的 research 方向代碼復(fù)雜度高不少如果你的數(shù)據(jù)集里動態(tài)性很強可以沿著這個思路做深度定制。依賴第二種方案時有一件事必須提前規(guī)劃你如何獲取足夠多的“動態(tài)訂單”樣本純模擬生成的數(shù)據(jù)流與真實訂單分布差距很大直接遷移使用可能會水土不服。我的建議是先用模擬數(shù)據(jù)跑通框架然后收集你業(yè)務(wù)里真實訂單流的一小部分作為微調(diào)數(shù)據(jù)采用“先預(yù)訓(xùn)練、后微調(diào)”的方式最終才能讓模型真正在業(yè)務(wù)數(shù)據(jù)上穩(wěn)定工作。6.2 多倉庫、時間窗與真實路網(wǎng)距離如果你遇到的問題是 VRPTW帶時間窗或多倉庫模型改起來其實沒有想象中復(fù)雜——因為決策框架沒有變?!皶r間窗”可以表達為每一步的一個 mask 條件某個客戶如果當前到達時間不在時間窗內(nèi)暫時不可選。“多倉庫”可以在初始輸入里把多個 depot 都編碼進去讓模型決定一開始從哪個倉庫發(fā)車。真正讓你頭痛的不是模型結(jié)構(gòu)而是數(shù)據(jù)規(guī)??蛻酎c數(shù)量一旦超過 200注意力機制的 O(n2) 復(fù)雜度就會讓推理時間指數(shù)級上升那時候你可能需要引入分層策略——先聚類定區(qū)域再在區(qū)域內(nèi)精確求解或預(yù)測路徑。R 路網(wǎng)距離方面?zhèn)鹘y(tǒng)的“歐氏距離假設(shè)”在城區(qū)配送中往往嚴重失真。兩個看起來很近的點隔著一條河地圖上顯示距離不遠但實際開車要繞一大圈。我的經(jīng)驗教訓(xùn)是不要在模型里直接用經(jīng)緯度做歐氏距離。生產(chǎn)環(huán)境中至少要先把客戶點和倉庫之間的真實駕車距離矩陣計算出來然后把這個矩陣作為“預(yù)計算特征”喂給模型或者在訓(xùn)練時將真實距離矩陣作為坐標的替代輸入。后者更快但需要維護一張全量距離矩陣表占內(nèi)存前者更優(yōu)雅但模型內(nèi)部計算的是歐氏距離與真實距離有偏。我自己在業(yè)務(wù)里采用的是折中方案用真實距離矩陣作為解碼階段的獎勵值reward但在 Encoder 的坐標嵌入里仍然用經(jīng)緯度。這樣模型不需要顯式知道路網(wǎng)結(jié)構(gòu)但會在訓(xùn)練時通過 reward 感知到真實距離的“偏差”從而學會繞路。這個方案實測比純歐氏距離的效果穩(wěn)定很多且引擎基本不用改。6.3 模型的維護與持續(xù)迭代這可能是最難的一環(huán)很多人忽略了一個問題訓(xùn)練完成的強化學習模型不是像傳統(tǒng)軟件那樣部署完就完事。它依賴訓(xùn)練數(shù)據(jù)的分布。如果業(yè)務(wù)上線后訂單的空間分布、需求量的量級發(fā)生了變化比如新開了一座倉庫、某個區(qū)域客戶暴增模型的表現(xiàn)會明顯退化你需要建立一套模型監(jiān)控與再訓(xùn)練機制。我的做法是定期比如每周拿出最近一個月的真實訂單重新生成驗證集與當前部署模型的輸出做對比。如果平均路徑成本上升超過某個閾值比如 5%就觸發(fā)用最近數(shù)據(jù)混合舊數(shù)據(jù)做增量訓(xùn)練。這樣做的好處是讓模型始終跟隨業(yè)務(wù)分布的漂移壞處是你要長期維護一套數(shù)據(jù)管線與訓(xùn)練任務(wù)。在這個問題上沒有銀彈但至少可以從架構(gòu)層面把“數(shù)據(jù)生成-訓(xùn)練-評估-部署”做成自動化流程。7. 我的一點總結(jié)與資源方向斷斷續(xù)續(xù)做了這么久回頭來看用強化學習求解 VRP 這個方向有一個很重要的定位它不是要替代行業(yè)求解器而是給“高頻、快速、近似優(yōu)化”的決策場景提供一個新的選擇。如果你的需求是離線算精確調(diào)度方案、算力資源不敏感、每天只求幾次那老老實實用 LKH3 或 OR-Tools 就好。但如果是要求毫秒級響應(yīng)、海量實例并行推理、并且能容忍幾個百分點的精度損失那這套基于注意力機制與策略梯度的方案值得你認真考慮。有時候“最優(yōu)解”不一定是約束條件下數(shù)學上最好的路徑而是在真實業(yè)務(wù)條件下最合適的那條路徑。強化學習讓我見到的正是這種“次優(yōu)但快”的實用主義。希望這份經(jīng)驗和代碼能幫你在自己的場景里少走一些彎路。動手跑起來之后我們再接著聊。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月天艹天天| 99热只有精品在线观看| 懂色av粉嫩AV蜜臀AV| 日日夜夜噜噜爽爽| 可以免费观看的av网址| 婷婷激情人妻| 久婷婷久草| 五月丁香婷婷综合视频| 丁香五月婷婷基地| 国产免费一区二区三州老师F1F1| 九九热精品视频九九| 大香蕉婷婷色| 99ri在线播放| 色五月婷婷伊人| 婷婷金品综合视频| 日本色99| 天天日日夜夜| 色五月综合在线| 噜噜色五月| 婷婷久久图片| 99在线视频喷水| 日日干夜夜干| 九九99在线免费在线观看视频| 丁香五月婷婷亚洲色图| 色婷婷影视| 大香蕉视频婷| 婷婷酒色网| AV操操操| 五月天激情小说| 五月丁香婷婷潮喷中文字幕| 精品免费99| 久久99网站| 婷婷综合九色伊人| 人妻熟人中文字幕一区二区 | 天天色凹凸| 人妻啪啪啪| 五月天播播综合| 日本人妻A片成人免费看片| chaopeng在线人人| 开心五月激情站| 91精品丝袜久久久久久久久粉嫩| www.91AV.COM| 日本一级淫| 91人妻人人做人碰人人爽九色| 久久这里只| 激情五月综合六月丁香婷婷狠狠干| 色色色婷婷五月天| 99热伊人| www.五月天性.com| 青青热久精品视频在线观看| 久久久月丁香| 日日操人人操| 日本va欧美va欧美va| 伊人网色婷婷五月天| 色色色精品无码区| 婷婷丁香综合| 99综合| 婷婷丁香激情| 五月丁香婷婷综合网| 婷婷五月丁香综合人妻| www.婷婷六月天| 婷婷五月天激情基地| 5月婷婷激情6月| 99re热在线观看| 色射7856五月天激情四射| 丁香五月天婷婷大香蕉| 天堂久久婷婷| 欧美群妇大交乱婬网| 激情五月天色色网| 五月天a婷婷伊人| 99久热| 九九热10| 亚洲天堂婷婷丁香| 午夜丁香 婷婷| 99精品丰满| 偷拍99在线视频观看| 天天操天天插天天射| 欧美婷婷丁香社区在线播放| 色欲五月婷婷| 日日婷婷不卡| 色色网站在线| 日日操日日撸| 91伦| 人人操Av| 亚洲激情久久| 无遮挡国产高潮视频免费观看| 538在线精品| 精品国产AV色一区二区深夜久久| 综合九色| 激情五月婷婷网在线观看| 亚洲 小说 欧美 激情 另类| 天天色粽合合合合合合合| 996热re视频精品视频| 激情五月影院| 人操人人| 深爱五月天 开心网| 深爱五月日韩| 亚洲另类在线观看| 在线资源av-超碰中文在线-成人AV| 婷婷五月天堂| 五月天俺去也| 亚洲亚洲人成综合网络| www久久艹| 丁香五月首页| 久久婷婷东京热大香樵| 九九热区一区二区三区| 婷综合| 国产精品18久久久| 一本久道综合色婷婷五月| 激情婷婷色小说| 五月婷婷伊人在线| 国产又黄又爽又色的免费| 五月刺激丁香月综合| 99精品久久久久| 婷婷五月情色| 99热亚洲| 久久久WWW| 亚洲国产va| 亚洲色五月婷婷| 国产av天堂| 色月丁| 天堂婷婷五月色| 色99热| 亚洲综合在线视频| 五月丁香婷婷色色| 99在线精品视频| 久操热线| 天天做天天爱高潮片| 亚洲视色| 大香蕉伊然在亚洲90| 久久亚洲婷婷综合色五月| 夜夜干夜夜操| 色五月色五天色情网址| 婷婷五月天久久久| 综合激情肏逼网| 人妻熟人中文字幕一区二区| 黄色大片又大粗又爽| 99热这里有精品首页10| 99热资源在线| 丁香五月天在线观看| 亚洲妇女熟BBW| 久色网| 性色五月天| 蜜桃人妻无码AV天堂三区| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 五月天丁香欧美激情| 91艹人| 九九热AV| 操操操www.com| 婷婷97碰碰| 久久五月婷综合网| 久草热在线视频| 激情九月婷婷九月| 亚洲激情网站| 亚洲爱婷婷| 日本激情五月天‘| 狠狠色狠狠色综合日日91| 婷婷五月天少妇| 激情综合网五月婷婷| 大香蕉久艹| 9久久久久| aaa9区免费在线观看| 婷婷开心五月| 欧美在线看| 色婷婷五月天久久| 激情五月天视频| 色婷久九| 99精品视频在线观看免费| 91玖玖| 久久综合综合久久| 亚洲成人免费电影| 五月婷婷开心丁香| 欧美综合五月丁香六月婷| 婷婷九月综合| 97色色色视屏| 九九99视频精品| 99免费视频网| 色情丁香五月婷婷精品| 免费无码毛片一区二区A片| 日韩av一区二区在线/日产精品久久久 | 91婷婷| 丁香五月激情综合在线观看| 99精品视频推荐| 中文av网| 精热在线综合网| 狠狠穞A片一區二區三區| 天天摸天天舔在线视频| 欧在线一区| 久久九九国产精品怡红院| 亚洲乱码w在线观看| 天天综合久久| 婷婷色五月天第7色| 桃色五月婷婷| 另类小说色婷婷| a在线观看| 99久在线精品99re8热| 极品 少妇 内射| 免费在线观看av网站| 日本女人久久| 99.色| 超碰京东热av男人的天堂| 五月天色色婷婷| 色婷婷五月天av在线| 久久caop| 五月天伊人网| 俺去也五月| 91综合国免费久入| 黄色aa观看aaguochan| 激情综合网址| 五月天色婷婷网| 超碰97干| 99re久热| 99在线精品免费视频| 人妻久久久久久久| 激情综合网激情五月欧美| 婷婷不卡基地| 亚洲无AV在线中文字幕| 99熟女| 丁香五月六月欧美| 69五月天视频| 六月丁婷婷| 97久久超视频| 综合色图婷婷| 色婷婷欧美| wwwC0maV五月花| 日韩在线视频中文字幕| 大香蕉伊然在亚洲90| 五月丁香影视| 六月丁香av| 开心婷婷五月中文字幕组| 狠狠色噜噜狠狠| 极品少妇XXXX精品少妇偷拍| 丁香五月手机在线| 综合激情五月丁香| 亚洲午夜视频| 激情av在线| 五月丁香激情婷婷综合| 五月丁香天堂网婷婷| 九九久久高清| 色九四色| 91超级碰| 综合激情婷婷| 六月婷婷色综合| 五月婷婷丁香啪啪| www,超碰| 久热免费| www.婷婷五月天| 久久这里有精品在线观看| 丁香午月AV中文字幕| 9热精品| 97操在线资源| 九九超碰人人| 97超级碰碰碰| 久草A片| 97碰人人操| 碰碰碰97免费精彩视频| 五月婷婷亚洲色图| 久久五月天色婷婷| 九九五月天| 久久婷婷五月天激情四射| 丁香五月激情月| 色99欧洲色19| 日本黄色在线观看| 色吧五月| 五月色婷婷在线观看| 久久久婷婷婷| 九月婷婷综合八月丁香在线观看 | 拍真实国产伦偷精品| 丁香五月六月欧美| 色婷婷狠狠| 情婷婷五月天| 天天色视频| 精品无码99| www.夜夜騎夜夜狠| 天天干天天日日| 99热九九这里只有精品10| 亚洲成人色五月天| 精品成人无码A片观看香草视频| 五月婷婷综合网在线播放| 丁香色五月婷婷17C| 丁香五月亚洲AV| 99色视| 婷婷六月丁香开心深深爱| 五月天日日操夜夜操| www.xtbsty.cn.com蜜乳AV| 91九色丨国产丨爆乳| 五月丁香六月激情在线| 天天色色天天| 天天干人人奸97| 中文网婷婷字幕婷| 天天综合激情| 五月天激情无码| 丁香六月久久| 婷婷久月| 又大又粗九一在线| Www99热| 久久综合中文| 丁香五月色色色色| 日日干天天爽| 成人午夜天| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 99热只有精品综合| 五月丁香龟婷婷| 色婷婷先锋| 色五月激情网| 色色婷婷婷丁香五月天| 日本丁香五月婷婷| 日韩99视频| 色婷婷五月综合| 精品自拍99| 五月丁香啪啪激情| 全国最新疫情| 久激情网| 探花搜索结果 - 黄上黄| 丝袜激情网| 久久这有这里精品| 91日本在线观看| 牛色色碰| 综合丁香婷婷五月天| 五月天精品综合| 国产在线黄色| 婷婷综合另类| 婷婷基地五月色| 久久网日本| 九九精品免费| 九色自拍| 色爱五月天| 五月叮香啪| 无毒黄色网址| 婷婷的五月天另类视频| 日本99热| 激情图片99| 婷婷色日本| 国産精品| 色婷婷色综合激情91| 五月丁香六月婷婷不卡免费无码| 色综合久久久久| 色色五月丁香婷婷综合| 色婷婷色人人射| a网站免费观看| 婷婷五月激情综合啪啪| 天天舔天天摸天天透| 天天干狠狠| 色色丁香五月| 99.N在线视频| 五月婷婷导航| 天天色天天日| 婷婷综合九月| 五月天啪啪啪| 激情五月综合久久| 久青草影院| 日操夜操天天操不卡| 久久国产性爱A V| 九九九热精品| 六月丁香啪啪| 色五月激情五月开心五月| 人伦30P| EEUSS鲁片一区二区三区| www.一区二区三区| 久久丁香久久| 色五月色五天色情网址| 2025色婷婷| www.丁香黄色五月天人与| 5月婷婷综合| 思思热在线播放| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 九九热精品| 精品国产va久久久久| 亚洲99综合| 色情五月天。| 亚洲超碰在线| 欧日韩AV| 嫩草极品| 天天婷婷| 97视频.干com| 天天日天天插| 国际国外精品欧洲南美洲专区无码不卡| 欧美搡BBBBB摔BBBBB| 六月米奇色综合| 99精品国产在热久久| 91九色国产在线| 久久五月婷| 五月丁香六月婷婷啪啪综合| 欧美色一级色| 五月婷婷开心五月| 色色五月丁香| co超碰在线观看| 五月丁香六月欧美| 九九综合网色全集| 桃色五月天| 五月丁香综合伦理片| AV大片在线播放| 天天日,天天射,天天舔| 五月丁香久人妻中文| 成人短视频在线| www.zbzhongsen.com| 久久中文人妻系列| 色天使色综合| 涩涩涩五月天| 西瓜美女a片| 99艹精品在线观看| 狠狠狠狠狠狠狠狠| 97色婷婷五月天| 1024成人在线观看| 中文字幕乱码亚洲精品一区| 五月天偷拍| 婷婷精品| 色综啪啪啪啪啪啪| 在线播放成人网站| 国产成人va在线| 人人操女人| 色播五月婷婷| 国产.亚洲.欧洲视频在线| 丁香六月色香蕉视频| 激情精品久久| 狠狠操综合| 亚洲成人黄色网| 九九热99熟女| 色青青电影色五月| 九色婷婷| 久9久9久9久9久9久9| 五月婷婷综合色拍| 色色丁香| 亚州婷婷五月激情综合| 青柠影视免费高清电视剧| 丁香五月冃欧美| 九九AV在线| 97干在线视频精品店| 99在线资源| 开心五月婷婷激情网| 日噜噜色| 无码少妇高潮喷水A片免费| 免费看欧美成人A片无码 | 五月丁香六月| 欧美日韩91| 四色五月婷婷在线观看| 丁香五月婷婷亚洲另类| 九九热再线九九视频免费在线观看 | 欧美A级网站| 五月婷婷丁香大香蕉| 中文字幕在线免费观看视频| 无码人妻电影| 99亚洲精品| 人人看人人草人人摸| 婷婷丁香色五月亚洲| Www.se.久久| 国产精品色色| 婷婷五月天伊人| 婷婷久久精品| 五月婷婷,狠狠操| 99热精品一| 99热久久这里只有精品| 99在线视频资源| 精品久久久人妻| 五月丁香六月婷婷综合伊人| 日本特黄aaaaa| 69热在线| 天天狠天天狠| 伊人五月婷婷| 婷婷五月天777| 婷婷丁香五月天综合AV| 99精品久久| 国产97色在线| 九九精品99久久久| 久久婷婷久久| 婷婷欧美综合| 婷婷天堂站| 99在线免费视频| 婷婷九月狠狠色| www.爱婷婷.com| 激情五月狠狠喔| 免费色婷婷| 97搞在线| 婷婷久久图片| 五月丁香操婷逼| 久久婷婷五月综合色奶水99啪| 91porn一起草| 色欲av伊人久久大香线蕉影院| 婷婷成人AV| 激情综合网址| se色99| 婷婷色播六月无码| 亚洲最大五月天成人网| 日本五月天婷婷丁香| 天天爽夜夜爽夜夜爽精品视频| 丁香五月香蕉| www.99热| 2025超碰| 亚洲AV第二区国产精品| 深爱激情中文五月天av| 婷婷五月综合激情小说| 色五婷婷开心缴| 天堂网啪啪| 色综合综合色| 色五月激情五月| 少妇人妻人伦A片| 欧美成人A片AAA片在线播放| 亚洲无AV在线中文字幕| 超碰A V在线| 国产婷婷综合| 五月丁香六月情| 色香蕉影院| 日韩在线观看网址| 99色五月| 2020久久婷婷五月| 亚洲人人操| 色婷婷免费观看| 五月婷婷激情综合| 综合日本婷婷| 老司机午夜福利视频金瓶梅| 这里只有精品网| 色五月综合在线| 99ER热精品视频| 丰满人妻一区二区三区| 色9999综合久久| 五月丁香久久丝袜啪啪| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 玖玖资源站国产| ′久久99一| 日日操无码| 大香蕉220| 丁香五月激情综合| 97天堂| 亚洲中文字幕av| 99免费视频| 五月丁香综合啪啪対白| 亚洲色五月天是什么| 丁香五月1页| 久久嘟嘟丁香| 欧美日韩五月婷婷| 伊人婷婷91| 碰碰碰97免费精彩视频| 婷婷五月乱交换| 丁香五月婷婷影视先锋| 婷婷五月天av小说| 激情五月天色色色| 婷婷五月色综合香五月| 91色性感五月婷婷丁香| 五月天婷婷Av| 99精彩视频在线观看| 97碰精品| 91xxxx九色| 久久伊人婷| 香蕉影院色| 岛国在线观看91| 狠狠色综合网| 国产精品久久久久久喷浆| 激情q青青草在线婷婷| 丁香五月激情六月欧亚激情综合导航 | 六月丁香五月婷婷| www.婷婷,com| 9久久婷婷国产综合精品性色| 大香蕉中文| 色婷婷丁香| 色99视频| 婷婷五月精品| 97九色视频| 狠狠色丁香| 色欲香综合网| 五月婷婷激情综合网| 丁香五月在线播放| www.色婷婷| www.91久久| 99热这里只有精品1025| 精品人妻久久久久久| 狠狠色噜噜狠狠狠狠综合| 五月天开心激情综合网| 国产成人精品一区二三区熟女在线 | 久久丁香五月婷婷激情综合网| 激情啪啪五月天| 久草婷婷| 99精品爱| 人妻aV在线| 日韩成人av在线| 六月丁香啪啪| 九97免费视频| 97在线精品| 天天摸,天天爽| 六月狠狠综合| 狼人狠狠操| 99性爱视频| 天天综合色| 色婷婷8| 在线99精品| 中文字幕永久在线| 99re这里只有精品在线观看| 久99热在线观看| 99热啪啪| 大香蕉懂9| 激情丁香婷婷六月天| 五月丁香婷爱在线| 九九热视频在线观看| 九九伦子片| 狠狠色丁香| 日韩五月丁香| 亚洲婷婷五月天| 五月婷婷,狠狠操| 久久五月网| 色婷婷免费观看| 色欧美一级| 五月丁香精品| 思思久久精品| 久久婷婷青青草| 久久婷五月天| 超碰猛烈的性猛交| 超碰无码老师| 能看的av片| 狠狠香蕉| www.99热在线| 开心五月深爱五月丁香五月激情五月| 天天干天天拍| 色综合综合色| 五月丁香色婷婷| 青青草伊人婷婷| 综合狠狠伊人| 婷婷精品在线| 黑人无码一区| 成人精品亚洲性爱| 日本成人内射| 婷婷六月激情丁香| 国产毛片精品一区二区色欲黄A片| 日韩黄色网络| 丁香婷婷情色五月天| 丁香五月婷婷激情97| 疯狂做受XXXX高潮A片动画| 婷婷深爱五月亚洲综合| 91久久久久久| 日韩在线观看亚洲| 激情五月最新网址| 大伊香蕉精品视频在线 | 综合五月婷婷| 97色久| 天天爽免费视频| 亚洲激情99| 婷婷的99视频网站| 《久久综合九色综合97婷婷| 久久综合婷婷激情| 精品一二三区久久AAA片| 一级精品999WWW| 丁香六月婷婷一区二区三区| 亚洲综合色丁香五月天| 五月香蕉综合| 婷婷色香六月综合激情| 欧美操人| 日本综合色图| 色综合色色色| 99热99网| 天天爽天天操| ji'qing'luan'ren'lun| AⅤ网站在线看| 五月丁香六月情婷婷久久| 久久黄色片| 亚洲行行色色| 色吧99| 精品成人a v无码内射| 激情网色五月| 五月天天天天天天天天天天天婷婷婷| 色五月婷婷影院| 原琪琪色影院| 天天艹天天综合网| 第九色区av天堂| 五月婷婷激情色情网| 变态 另类 在线| 日日操,夜夜爽| 日本玖玖在线| 欧美性猛交99久久久99| 91性高潮久久久久久久久| 色情综合网| 安息电影在线观看完整版| 熟妇无码乱子成人精品| 亚洲人人操BD| 综合网啪| 丁香激情五月天| 丁香五月大片| 婷婷五月丁香激情图片| 天堂久久婷婷| 狠狠色婷婷在线| 天堂成人A片永久免费网站| 五月丁香激情深爱婷婷| 99色精品| 久热婷婷| 婷婷色5月激情网| 99操无码视频观看| 天堂婷婷五月色| 97搞在线| 激情久久久久久久久久久| 五月天啪啪| 思思9久久| 深爱激情综合| 丁香婷婷五月天网站| 五月丁香花成人社区| 婷婷五月婷婷| 丁香激惜男女| 亚洲色综合色网| 五月婷婷性爱| 操你av| 91丨九色丨白浆秘| 中文字幕免费高清电视剧| 五月丁香综合在线| 激情网五夜婷婷| 字母不卡码人逼| 天天色播| 婷婷丁香五月亚洲免费| 亚洲永久四色| www.久久久久久久久久.com| 欧美婷婷五月丁香| 丁香激情五月少妇| 日韩好吊操| 色综合久久综合| 成人丁香五月| 91大屁股精品| 人人干Av| 久热九九| 色色五月激情| 国产黄大片在线观看画质优化| 噜一噜在线| 五月丁香六月婷婷不卡免费无码| 丁香密臀AV激情网| 香蕉婷婷五月| 五月在线| 亚洲免费观看高清完整版AV线| 丁香伊人综合| 五月丁香婷婷色| 免费观看日韩成人av| 狠狠爱综合网| 婷婷成人综合| 色情五月婷婷| 九九九成人在线视频| 久久婷婷综| 999精品久久久久久久| 天天日日夜夜| 婷婷在线精品| 天天色天天日| 日日肏夜夜干| 亚洲五月六丁香激情| 色五月91| 99在线视频免费| 操91综合网| 久久草大香蕉| 九色婷婷| 色五月大| 亚洲婷婷五月天激情| 五月天婷婷色小说| 六月亚洲婷婷6月中文字幕| 插逼综合网| 日本少妇AA一级特黄大片| 国产精品久久久久久喷浆| 五月丁香在线观看| 色欲丁香| 97在线刺激| www.minyis.com【JT】实力收量可预付QQ2101460746 | 六月丁香激情综合网| 久99久精品视频| 婷婷五月天你懂的| 国产av第一专区| 日韩成人中文| 国产精产国品一二三在观看| 图片区 小说区 区 亚洲五月| 九九碰九九爱97超碰| 淫视馆AV在线| 五月婷婷深深爱| 亚洲激情综合| 丁香婷婷激情| 99这里热| 婷婷刺激综合| 大香蕉伊人爱在线| 丁香五月激情网| 五月天播播中文字幕| 色色色无码| 99久久6| 天天久| 激情五月天小说网| 色色色综合网| 性爱网五月天| 成人午夜无码视频| 九九热视频精品| 五月丁香五月综合欧美| 九九在线精点品| 五月天综合色| 婷婷在线播放| 三级毛片视频| 超碰2021| 亚洲 欧洲 国产 伦综合| aaaa.黄| 五月天丁香成人| 97久久人人| 婷五月丁香俺| 激情婷婷丁香五月| 五月婷婷福利| 日韩色色视频| 五月丁香激情综合| 99操逼| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲国产精品SUV| 91干婷婷| 中文字幕黄色电影网址| 婷婷五月香蕉| 包操45分钟网站| 天天狠狠色噜噜| 日日夜夜婷婷| 色婷| 狠狠干综合| 五月天婷婷青青草| 六月激情丁香一道本7777| 一起草Av| 美臀自射自家人妻| 色丁香影院| 色噜噜狠狠色综合网| 99热这| 日韩av手机在线观看| 另类亚洲电影| 91操熟女| 婷婷丁香成人网址| 日本色婷婷| 久久久久久人妻| 色色色色丁香| 九色 在线| 丁香六月婷婷缴情欧美| 五月婷婷开心丁香| 久久狼人天堂| 丁香五月激动深爱欧美| 激情五月综合第一页| 亚洲超碰在线| www.久99| 色啪影院| 丁香五月天成人| 99熟女视频| 亚洲成人在线在线| 桃色激情五月天| 天天噜天天爱| 人妻久久久久久| 这里只有精品视频在线| 久热在线观看视频9| 色婷婷久久| 夜夜操,天天撸| 五月香婷婷| 婷婷五月天国产性感美女演员久久久久| 丁香五月综合激情性爱| 婷婷五月天深爱| 日本久久性| 激情婷婷丁香| 激情综合网五月婷婷| 色人妻五月| 六月激情综合| 91丁香| 91操操操| 操碰97| 九九美女视频| 色亭亭五月天网扯| 无码人妻激情| 潮汕成人AV片在线| 99热精品网| 天堂中文国产| 啪啪五月婷婷| 五月停停直播| 色播婷婷五月天| www.9色色色| 热久久成人| 97久久草草超级碰碰碰| 韩国97天堂| 丁香五月婷婷呀| 久久人操| 色原狠狠综合| 五月婷婷激情中心| AV九九| 97操在线视频| 色色a| 国模狼狼| 婷婷综合成人五月天| 色五月六月| 色偷偷色婷婷| 天天骑天天操| 婷婷九月久久| 丁香五月婷婷激情123| 天天干,夜夜爽| 丁香五月激情啪| 思思热视频| 亚州成人综合在线| 很操日本7| 日韩无码成人电影| 丁香五月天堂| 网色99| 日韩精品成人在线| 99精色| 影音 五月 婷婷 久久| 亚洲AV激情五月综合网| 激情网五月天| 婷婷丁香五月亚洲欧美| 国产精品久久..4399| 99色五月| 激情综合五月| 最新日韩久热免费视频看看| 五月婷婷之综合激情| 久久38视频| 婷婷五月天激情综合深爱激情| 色.五月综合网| 欧美五月丁香在线观看| 欧美叉叉叉BBB网站| 丁香五月婷婷少妇| 丁香九月婷婷| 久久在这里有精品| 精品夜夜澡人妻无码AV| 青青热久精品视频在线观看| 色色色综合网| 成人五月天在线视频在线观看| 久久色情| 亚洲99激情| 国产全是老熟女太爽了| 亚色网站小视频| 国色天香成人网| 婷婷激情六月中文| 人人摸人人操人人爱| 婷婷五月精品| www.夜夜.com| 九九久久玖玖爱| 婷婷色五月在线视频| 97人妻碰碰碰碰碰久久久久久| 婷婷六月综合激情| 99手机在线精品视频| 色婷婷9| 九九热超碰| 大香蕉九九| 天天日夜夜夜操操操操| 玖玖99婷婷| www.日日夜夜.com| 色五月婷婷综合在线| 色色色欧美| 深爱 五月天| 九九综合九| 噜噜色噜噜网| 精品牛仔裤超碰| 99热综合| 亚洲六月婷| 久久婷婷的综合色丁香五月| 猫咪伊人久久| 久久视屏这里只有久久| 尤物一区二区| 天天日天天爽夜夜爽| 国产精品成人AV在线| 日韩啊啊啊| 99在线视频在线观看| 激情五月天福利| 91seav| 成人欧美一区二区三区在线观看| 99人人爽| www.99热精品| 久热这里只有精品3| 草草色情综合网| 日本色爽| 密黄站| 色色999三级片| 日韩色五月| 色必久悠悠影院| 丁香婷婷综合色五月激情国产基地| 五月婷婷深深爱| 第二色AⅤ| 久久99免费视频| 超碰av在线| 婷婷丁香激情| 大香蕉婷婷丁香视频在线| 亚洲乱码日产精品BD| 五月婷婷六月丁香在线| 这里有精品99| 丁香五月激情啪啪啪| 91天天操天天干天天射| 激情五月六月丁香| 伊人网碰碰| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 天天视频亚洲| 亚洲综合激情五月久久| 婷婷五月天亚洲综合网| 丝袜大香蕉| 五月天久久丁香| 五月丁香| 夜夜AVV| 九九激情网| 五月天播播中文字幕| 五月婷伊人| 婷婷色操| 六月婷婷毛片| 婷婷午夜| 五月婷婷婷婷| 色婷婷成人影片| 超碰人人91| 五月天大香蕉av| 国产成人综合网| 99热在线这里| AV天堂淫乩| 九九这里是免费的视频5| 99热香港| 久碰视频| 激情综合在线观看| 激情婷婷丁香色五月| 欧美色图45678| 婷婷黄色五月| 久久婷婷五月综合色欧美| 四色永久成人网站| 99热九九热| 亚洲瑟瑟精品在线| 亚洲一个色| 色五月婷婷自拍| 3p九色在线| 久久人妻精品| 九九色影院| 激情网婷婷五月天| 99思思热只有在这里看| 久久久久亚洲AV综合| 激情小说五月天| 亚洲综合另类| 五月天六月婷婷电影| 婷婷六月爽| 国产亚洲在线观看| 91九色精品| 92久久久| 九九亚洲天堂| 八戒青柠影视剧在线观看| 97久久超碰| 久碰婷婷视频| 五月婷婷在线视频观看| 情婷婷五月天| 五月丁香人人婷婷在线观看| 操笔无码| 99热永久在线观看| 99热在线观看| 综合AV在线| 欧美色色干| 久七香蕉| 激情久久网 | 欧洲亚洲免费视频区| aaaaa黄色| 99久久婷婷国产综合| 99热精品99| 日本久久人| 婷婷五月天精品| 一区二区三区XXXXXX| 91在线观看www| 拍色综合| 99日本视频在线观看专区| 婷婷五月五月丁香| 久久久久久久久久久久久久久久一道本| 少妇AB又爽又紧无码网站| 五月色丁香| 亚洲综合色网| 午夜少妇在线观看视频| 深爱激情五月天| 丁香激情五月天| 成人做爰A片免费看视频| 99热综合| 亚洲精品一区中文字幕乱码| 极品少妇XXXX精品少妇偷拍| 97人妻碰碰中文无码久热丝袜| 久热大香蕉| www.yw尤物| 狠狠狠狠狠干| 怡红院AV亚洲一区二区三区H| 香蕉久久国产AV一区二区| 色色欧美。| 精品一区久热| www.久久99精品| 久人人操| 69久久99精品久久久久| 丁香五月综合婷婷| 五月天激情综合网俺也去| 婷婷第六色| 五月丁香激情综合网官网| 亚洲看av的网站| 美女美女美女三级色天天天天天| 第四色首页| 五月婷婷中文字幕AV| 五月婷婷天堂| 久色视频| 熟女人妻视频| 91碰碰碰久久久久| 99热99天堂| 日韩成人中文字幕| 99热免费网站| 五月丁香六月停停| 99热这里只有精品3| 99色在线观看视频| 色色色色色色色色网站| 双性美人被调教到喷水A片| 桃色五月婷婷| 久久一级片| 色婷视频| 久久五月丁香综合17C| 天天谢天天操| 激情综合国产| 开心激情站| av操B网站| 国产婷婷五月天| 综合激情开心五月| 久久色这里只有精品| 99精品视频偷拍| 五月丁香激情综合| 青青操日本摸摸看看| 大香蕉五月天婷婷丁香91| 狠狠夜夜五月丁香| 激情婷婷五月天日本系列| 日本婷久久| 熟妇无码乱子成人精品| 91精品国产色猫| 天天爱天天做天天日| 色婷婷在线视频综合| 99啪啪网| 亚州美女| 99色日本| 9999热精品在线免费播放| 婷婷丁香成人五月天| 99久久性爱| www.夜夜爱.com| www.色综合| 国产另类综合| 亚洲av成人在线| 五月丁香花成人社区| 婷婷99热| 丁香五月冃欧美| 亚洲激情在线| 激情电影五月婷婷| 掩去也综合五月视频| 婷婷五月色情天| h在线看免费版在线看| 激情婷婷。| 精品人妻伦| 免费观看大片视频 丁香婷婷 六月欧美| 色婷婷久久| 丁香五月综合久久| 日韩一区二区三区无码| 久艹大香蕉| 丁香婷婷老熟女综合网| 超碰在线精品| 中国激情网| 色吧综合网| 伊人综合色干| 激情五月婷婷丁香综合网| 91婷婷丁香| 五月天综合激情网| 国产亚洲成AV人片在线观黄桃| 激情五月天啪啪| VA婷婷亚洲| www.色婷婷| 色爽九九| 国产日韩亚洲欧美在线观看| 99精品久久| 婷婷六月激情| 五月丁香六月激情欧美综合| www.五月天| 六月丁香婷| 99九九在线视频| 五月天婷婷无码| 天天舔天天摸天天射| 影音先锋色婷婷| 蜜桃婷婷狠狠久久综合| 玖玖福利视频资源| 操操碰| 婷婷综合网站| 狠狠色噜噜狠狠| 欧美日韩国产成人在线| 五月社区婷婷激情| 一区二区三区视频| 男女99免费视频| 五月天 婷 欧美亚洲| 伦乱人妻| 武汉美女啪啪视频免费一级片| 激情五月四色| 婷婷五月色亚洲| 丁香网站| 色婷婷黄色网络| 激情综合在线观看| caopeng97人人| 久热网站| 日B日潘金莲BB| 激情五月天之五月婷婷| 91人妻PORNY九色大屁股| 久久婷婷精品| 五月丁香婷婷色色| 九热久| 综合图片色色| 丁香婷婷午夜| 五月激情天天干| 男女av免费看| 婷婷丁香五月天狠狠| 亚洲12p| 色五月天综合| 亚洲无AV在线中文字幕| 成年AAAA色情| 五月天久久久| 另类的婷婷| 五月天激情婷婷| 久久视这里只有精品| 99自拍视频| 99视频内射三四| 色玖玖| 人妻操逼视频。| 可以看的av网站| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 亚洲精品成人| 九月丁香| 婷婷五月丁香六月| 五月丁香六月婷婷,婷| 日韩一级片| 亚洲性爱99| 精品香蕉99久久久久网站| 思思久久思思| 色色综合网www| 操操操AV| 秋霞丝袜啪啪啪| 成人一级片| 色情婷婷| 青青青在线视频国产| 九九草热在线观看| 九九热9| 99久在线精品99re8| 九九九九大香蕉| 亚洲天堂热| bbwcuckold精品熟妇| 亚洲无AV在线中文字幕| 五月丁香婷婷伊人| 99婷婷色| 久草性爱| 亚洲午夜精品久久久久久人妖| 蜜桃人妻无码AV天堂三区| 亚洲人妻一区二区 | 婷婷免费成人视频| 色色网站毛片| 亚洲狠狠干| 99热新网址| 99精品免费| 激情网婷婷婷| 色www.con| 九九热精品在线| 热99re| 久草a片| 久热这里只有| 亚洲一区二区无码蜜乳av| 亚洲精品网址| 97色色综合| 五月噜噜| 婷婷的色色五月天| 婷婷五月天堂| 激情5月天天天| 丁香五月激情网| 99自拍视频在线观看| wwwC0maV五月花| 日本97在线视频| 乱岳熟女50岁| 婷婷五月丁香五月综合网| 五月天综合网| 亚洲xx在线| 亚洲操逼片| 亚州视频九九99| 激情久久 婷婷| 99热亚洲| 丁香五月成人网| 96人人操人人操人人| 天天色五月婷婷91久久久久久久| 99热这里只有精品1025| 超碰AAAAAAV| 99久久99久久| 91精品激情9| 夜夜大香蕉婷婷丁香| 嫩草综合网| 激情爱爱网站超大免费| 最新高清无码专区| 久操福利| 激情小说 五月天| 天天操天天爱天天日|