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

ARTICLE DETAIL

資訊詳情

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

GraphHopper整合SpringBoot的多途徑點(diǎn)路徑規(guī)劃與TSP優(yōu)化實(shí)踐

GraphHopper整合SpringBoot的多途徑點(diǎn)路徑規(guī)劃與TSP優(yōu)化實(shí)踐 簡(jiǎn)介一套基于Java SpringBoot與GraphHopper庫(kù)構(gòu)建的多途徑點(diǎn)路徑規(guī)劃系統(tǒng)源碼面向有一定Java后端基礎(chǔ)、需要實(shí)現(xiàn)物流配送、多點(diǎn)導(dǎo)航或巡檢路線優(yōu)化等場(chǎng)景的開(kāi)發(fā)者。壓縮包共23個(gè)文件主要包含4個(gè)Java源文件、2個(gè)OSM地圖數(shù)據(jù)文件、Maven構(gòu)建配置pom.xml及mvnw腳本、GraphHopper運(yùn)行所需的索引與圖數(shù)據(jù)文件如nodes、edges、location_index等以及若干配置說(shuō)明文檔整體約31.72MB。當(dāng)前已有325人學(xué)習(xí)下載。這套源碼完整展示了SpringBoot集成GraphHopper的關(guān)鍵流程從OSM地圖數(shù)據(jù)加載、路網(wǎng)圖構(gòu)建到多途經(jīng)點(diǎn)查詢接口的封裝同時(shí)給出了路徑計(jì)算所需的核心參數(shù)配置與圖數(shù)據(jù)持久化方案。開(kāi)發(fā)者可直接參考項(xiàng)目結(jié)構(gòu)理解各文件在路徑規(guī)劃鏈路中的具體作用并基于現(xiàn)有代碼擴(kuò)展業(yè)務(wù)邏輯、調(diào)整路徑算法策略或接入新的地圖數(shù)據(jù)源適合作為二次開(kāi)發(fā)、畢業(yè)設(shè)計(jì)或課程設(shè)計(jì)的基礎(chǔ)工程。1. 多途徑點(diǎn)路徑規(guī)劃不是地圖 API 的活GraphHopper SpringBoot 能自己干接到一個(gè)配送調(diào)度需求某快遞站每天有三十多個(gè)派件點(diǎn)車輛從站點(diǎn)出發(fā)送完所有點(diǎn)再回站之前一直用地圖廠商的路線 API 挨個(gè)算相鄰點(diǎn)耗時(shí)再人工排順序排一次要半小時(shí)高峰時(shí)根本排不過(guò)來(lái)。我接手后第一反應(yīng)是找路線規(guī)劃 SDK對(duì)比了一圈發(fā)現(xiàn)自托管的 GraphHopper 是投入產(chǎn)出比最高的方案——它是純 Java 寫的開(kāi)源路由引擎能直接嵌進(jìn) SpringBoot 工程吃 OpenStreetMap 格式的道路數(shù)據(jù)本地就能批量算兩點(diǎn)間耗時(shí)多點(diǎn)順序規(guī)劃則是在它提供的耗時(shí)矩陣接口之上再套一層優(yōu)化算法把“先算距離再排順序”兩步徹底自動(dòng)化。這套東西打通之后排三十個(gè)點(diǎn)的路線從半小時(shí)壓縮到幾秒不用為每次調(diào)度付 API 調(diào)用費(fèi)也沒(méi)有外網(wǎng)依賴數(shù)據(jù)全在本地。核心組件只有三個(gè)GraphHopper 負(fù)責(zé)路網(wǎng)圖構(gòu)建和單點(diǎn)路由計(jì)算、SpringBoot 負(fù)責(zé)把引擎包成 HTTP 服務(wù)、TSP 順序優(yōu)化算法負(fù)責(zé)把多途徑點(diǎn)排序。適用對(duì)象很明確自建配送調(diào)度、外勤巡檢、農(nóng)機(jī)田間路徑規(guī)劃這類需要批量、反復(fù)計(jì)算多點(diǎn)路線的系統(tǒng)??赐赀@篇你能把最小可跑的 GraphHopper 服務(wù)嵌進(jìn)自己的 SpringBoot 工程并親手實(shí)現(xiàn)一個(gè)多途徑點(diǎn)順序規(guī)劃接口。2. GraphHopper 選型與數(shù)據(jù)準(zhǔn)備為什么是它而不是別家路由引擎2.1 自托管路由引擎的定位先搞清楚 GraphHopper 能干什么GraphHopper 是一個(gè) Java 實(shí)現(xiàn)的開(kāi)源路由引擎核心能力有三塊解析道路數(shù)據(jù)、構(gòu)建路網(wǎng)圖、按不同交通方式計(jì)算兩點(diǎn)或多點(diǎn)之間的路線與耗時(shí)。它不是在線服務(wù)而是一個(gè)嵌入式的 Jar 包你的 SpringBoot 進(jìn)程啟動(dòng)時(shí)調(diào)用它的 API 就能完成路網(wǎng)加載之后每次路由請(qǐng)求都在本地內(nèi)存里計(jì)算不走任何外呼。選它之前我對(duì)比過(guò)幾種方案。純調(diào)用在線地圖廠商的路線 API 當(dāng)然最省事但多途徑點(diǎn)場(chǎng)景下要反復(fù)調(diào)用批量接口費(fèi)用和配額都是問(wèn)題而且有些業(yè)務(wù)數(shù)據(jù)不能出內(nèi)網(wǎng)。另一類是自建 OSRM 服務(wù)它性能很強(qiáng)但有獨(dú)立的 C 進(jìn)程和 HTTP 服務(wù)和 Java 工程是兩套體系部署運(yùn)維要多管一個(gè)組件。GraphHopper 和 SpringBoot 是同語(yǔ)言、同進(jìn)程路網(wǎng)和路由邏輯全在一個(gè) JVM 里對(duì)單機(jī)幾千點(diǎn)規(guī)模以內(nèi)的業(yè)務(wù)足夠用部署也最簡(jiǎn)單。架構(gòu)上它把“路網(wǎng)數(shù)據(jù)文件”和“內(nèi)存中的圖對(duì)象”分開(kāi)處理啟動(dòng)時(shí)一次性讀取.osm.pbf格式的道路數(shù)據(jù)解析后構(gòu)建十字路口節(jié)點(diǎn)和路段邊組成的圖路由請(qǐng)求時(shí)在這個(gè)圖上做雙向 Dijkstra 或 A* 搜索。這里說(shuō)的圖是圖論里的圖不是圖片存儲(chǔ)結(jié)構(gòu)和檢索效率直接決定路由耗時(shí)。你的 SpringBoot 服務(wù)里只需持有 GraphHopper 單例所有請(qǐng)求線程共享同一個(gè)圖對(duì)象這也是它嵌入式用法高效的原因。2.2 道路數(shù)據(jù)怎么落到本地從 .osm.pbf 到 GraphHopper 圖GraphHopper 要跑起來(lái)第一步是準(zhǔn)備道路數(shù)據(jù)。最常見(jiàn)的數(shù)據(jù)格式是.osm.pbf它是 OpenStreetMap 數(shù)據(jù)的二進(jìn)制壓縮格式體積比同內(nèi)容的 XML 小好幾倍解析也更快。國(guó)內(nèi)大區(qū)級(jí)路網(wǎng)數(shù)據(jù)通常幾百 MB全國(guó)級(jí)需要幾個(gè) GB不要一上來(lái)就想全量加載按業(yè)務(wù)覆蓋范圍裁剪數(shù)據(jù)更務(wù)實(shí)。數(shù)據(jù)來(lái)源渠道有幾種但不要下載整個(gè)國(guó)家的文件塞進(jìn)內(nèi)存啟動(dòng)時(shí)構(gòu)建圖會(huì)非常慢且吃內(nèi)存。我一般先按城市或省份邊界裁剪用 osmium 這類命令行工具可以把大區(qū)域切成小區(qū)域只保留業(yè)務(wù)涉及的范圍。GraphHopper 雖然自帶數(shù)據(jù)處理工具但裁剪在數(shù)據(jù)準(zhǔn)備階段做更靈活后面改業(yè)務(wù)邊界也不用重新構(gòu)建整個(gè)圖。拿到.osm.pbf后GraphHopper 需要把它“導(dǎo)入”并構(gòu)建成自己的圖存儲(chǔ)格式。運(yùn)行時(shí)配置解析器會(huì)讀取道路標(biāo)簽等級(jí)、限速、單行道等然后做節(jié)點(diǎn)合并和邊緣計(jì)算。這個(gè)構(gòu)建過(guò)程耗時(shí)取決于數(shù)據(jù)量一個(gè)城市級(jí)文件通常在幾十秒到幾分鐘區(qū)域級(jí)可能要幾個(gè)小時(shí)。構(gòu)建好的圖會(huì)寫到本地目錄下次啟動(dòng)如果目錄存在且數(shù)據(jù)沒(méi)變就直接加載序列化后的圖啟動(dòng)時(shí)間從幾分鐘降到幾秒。2.3 圖構(gòu)建的三個(gè)核心參數(shù)圖存儲(chǔ)目錄、交通方式、內(nèi)存映射模式GraphHopper 的初始化參數(shù)直接決定內(nèi)存占用和路由準(zhǔn)確性。第一個(gè)是圖存儲(chǔ)目錄指定后引擎會(huì)把構(gòu)建好的圖落盤重啟不用重新解析原始道路數(shù)據(jù)。第二個(gè)是交通方式GraphHopper 的每種交通方式對(duì)應(yīng)一套道路可走性與速度配置汽車模式跳過(guò)步行道、走機(jī)動(dòng)車道步行模式則是另一套規(guī)則選錯(cuò)模式會(huì)導(dǎo)致路線完全不同。內(nèi)存映射有兩種模式RAM_STORE把整個(gè)圖載入堆外內(nèi)存路由最快但數(shù)據(jù)量大時(shí)占用偏高M(jìn)MAP是內(nèi)存映射文件按需加載適合圖較大而內(nèi)存有限的環(huán)境。單機(jī)并發(fā)不高、圖在 500 MB 以內(nèi)用 RAM_STORE圖超過(guò) 1 GBMMAP 更穩(wěn)妥能省下大量?jī)?nèi)存。我通常會(huì)關(guān)閉CHContraction Hierarchies預(yù)處理——預(yù)計(jì)算會(huì)讓單點(diǎn)路由快一個(gè)數(shù)量級(jí)但對(duì)多途徑點(diǎn)的矩陣批量計(jì)算場(chǎng)景CH 加速效果并不明顯反而增加構(gòu)建時(shí)間和內(nèi)存。多途徑點(diǎn)規(guī)劃的核心是頻繁調(diào)用路徑替代算法算矩陣用不帶 CH 的普通圖更直接??匆幌碌湫偷某跏蓟渲么a在用 SpringBoot 之前先在獨(dú)立方法里驗(yàn)證參數(shù)是否合理// 初始化 GraphHopper 引擎核心配置項(xiàng) public GraphHopper initGraphHopper() { GraphHopper hopper new GraphHopper(); // 數(shù)據(jù)目錄存放 .osm.pbf 原始數(shù)據(jù) hopper.setOSMFile(/data/osm/beijing-latest.osm.pbf); // 圖存儲(chǔ)目錄構(gòu)建后的圖落盤位置 hopper.setGraphHopperLocation(/data/graph-cache/beijing); // 編碼方式支持汽車、步行等多種方式逗號(hào)分隔 hopper.setEncodedValuesString(car,foot); // 內(nèi)存映射模式有 RAM_STORE 和 MMAP 兩種可選 hopper.setMemoryMapped(false); // 不啟用 CH 預(yù)處理降低構(gòu)建開(kāi)銷 hopper.setCHEnabled(false); hopper.importOrLoad(); return hopper; }代碼里setEncodedValuesString定義圖里預(yù)計(jì)算哪些編碼屬性car 和 foot 是兩種最常見(jiàn)的編碼方式對(duì)應(yīng)不同道路通行能力。importOrLoad()是關(guān)鍵方法數(shù)據(jù)沒(méi)導(dǎo)入過(guò)就執(zhí)行導(dǎo)入并保存導(dǎo)入過(guò)就直接加載。這個(gè)過(guò)程會(huì)打印詳細(xì)的日志第一次運(yùn)行觀察日志里的導(dǎo)入進(jìn)度和耗時(shí)能幫你判斷數(shù)據(jù)量級(jí)是否匹配當(dāng)前機(jī)器配置。3. SpringBoot 里把 GraphHopper 跑起來(lái)從配置類到可調(diào)用的路由接口3.1 依賴與 Bean 初始化讓引擎隨應(yīng)用生命周期啟動(dòng)SpringBoot 工程引入 GraphHopper 很簡(jiǎn)單核心就一個(gè)依賴com.graphhopper:graphhopper-core。版本要和你下載的源碼對(duì)應(yīng)這一點(diǎn)容易翻車GraphHopper 的 Java 版本要求偏高JDK 8 在較新版本上會(huì)直接運(yùn)行失敗建議 JDK 11 或 17。另一個(gè)隱蔽問(wèn)題GraphHopper 依賴了若干第三方庫(kù)如果你的工程里也用了低版本沖突庫(kù)會(huì)出現(xiàn)NoSuchMethodError啟動(dòng)時(shí)注意看異常棧優(yōu)先調(diào)整 GraphHopper 傳遞依賴的版本即可。Bean 初始化上用Configuration定義一個(gè)GraphHopper單例Bean(initMethod importOrLoad)讓它隨 Spring 容器啟動(dòng)自動(dòng)完成圖加載。不要每次請(qǐng)求都 new 一個(gè) GraphHopper那等于每次重新加載路網(wǎng)內(nèi)存會(huì)爆。下面是標(biāo)準(zhǔn)的初始化配置類Configuration public class GraphHopperConfig { Value(${graphhopper.osm-file}) private String osmFile; Value(${graphhopper.graph-location}) private String graphLocation; Bean(initMethod importOrLoad, destroyMethod close) public GraphHopper graphHopper() { GraphHopper hopper new GraphHopper(); hopper.setOSMFile(osmFile); hopper.setGraphHopperLocation(graphLocation); hopper.setEncodedValuesString(car); hopper.setMemoryMapped(true); hopper.setCHEnabled(false); return hopper; } }配置項(xiàng)被拆分到了application.yml便于不同環(huán)境切換數(shù)據(jù)目錄。注意destroyMethod close應(yīng)用停機(jī)時(shí)釋放底層文件句柄和內(nèi)存映射資源反復(fù)重啟部署時(shí)不會(huì)出現(xiàn)文件鎖問(wèn)題。setMemoryMapped(true)對(duì)大圖更友好但首次路由請(qǐng)求會(huì)偏慢因?yàn)轫?yè)面數(shù)據(jù)是懶加載的預(yù)熱一次就好。啟動(dòng)后日志里如果出現(xiàn)Using memory mapped files和Finished loading graph說(shuō)明圖加載成功。之后所有線程共享該單例路由計(jì)算是并發(fā)的但引擎內(nèi)部對(duì)圖讀取做了線程安全處理不需要額外加鎖。3.2 封裝單點(diǎn)路由計(jì)算從經(jīng)緯度到路線詳情最基礎(chǔ)的能力是兩個(gè)經(jīng)緯度之間的路線。調(diào)用GraphHopper是GHRequest/GHResponse模式創(chuàng)建請(qǐng)求、設(shè)置起終點(diǎn)經(jīng)緯度、指定編碼方式、發(fā)送到引擎然后檢查響應(yīng)是否有異常。這里有一個(gè)最容易忽視的坐標(biāo)順序問(wèn)題GraphHopper 的 API 統(tǒng)一是緯度在前、經(jīng)度在后也就是(lat, lon)和國(guó)內(nèi)很多系統(tǒng)習(xí)慣的(lng, lat)正好相反。我封裝的服務(wù)類接收業(yè)務(wù)側(cè)的(lng, lat)在進(jìn)入 GraphHopper 之前轉(zhuǎn)成(lat, lng)避免調(diào)用方因?yàn)樽鴺?biāo)順序搞混而返回完全離譜的路線。完整代碼Service public class RouteService { private final GraphHopper graphHopper; public RouteService(GraphHopper graphHopper) { this.graphHopper graphHopper; } public RouteResult route(double fromLng, double fromLat, double toLng, double toLat) { // GraphHopper 使用緯度在前經(jīng)度在后的順序 GHRequest request new GHRequest(fromLat, fromLng, toLat, toLng); request.setProfile(car); // 限制搜索范圍避免歧義點(diǎn)導(dǎo)致路由繞遠(yuǎn) request.setHint(ch.disable, true); GHResponse response graphHopper.route(request); if (response.hasErrors()) { String errorMsg response.getErrors().toString(); throw new IllegalStateException(路由計(jì)算失敗: errorMsg); } ResponsePath path response.getBest(); return new RouteResult(path.getDistance(), path.getTime(), path.getPoints().toLineString(false).toString()); } }setProfile(car)指定用哪種編碼方式必須是在初始化時(shí)setEncodedValuesString里聲明過(guò)的否則拋異常。path.getPoints().toLineString(false)把軌跡點(diǎn)序列轉(zhuǎn)成 WKT 格式的 LineString 字符串前端地圖直接按這個(gè)串繪制路徑省去自行序列化的麻煩。getDistance()返回的是米getTime()返回的是毫秒兩個(gè)值后續(xù)計(jì)算矩陣時(shí)都要用到。這個(gè)接口本身不復(fù)雜但它驗(yàn)證了整個(gè) SpringBoot 集成鏈路是否通——配置類有沒(méi)有加載、坐標(biāo)轉(zhuǎn)換有沒(méi)有問(wèn)題、GraphHopper 能不能算出路線。集成新引擎時(shí)務(wù)必要先把單點(diǎn)路由跑通再談多途徑點(diǎn)。3.3 距離矩陣計(jì)算多途徑點(diǎn)規(guī)劃的數(shù)據(jù)底座單點(diǎn)路由只能解決 A 到 B多途徑點(diǎn)規(guī)劃需要知道任意兩點(diǎn)之間的耗時(shí)于是 GraphHopper 的矩陣計(jì)算接口就該登場(chǎng)了。它避免你寫雙層循環(huán)逐個(gè)調(diào)用單點(diǎn)路由——一次請(qǐng)求算出所有點(diǎn)對(duì)之間的耗時(shí)和距離內(nèi)部會(huì)做批量?jī)?yōu)化耗時(shí)只有逐個(gè)調(diào)用的幾分之一。GraphHopper 矩陣 API 要構(gòu)建一個(gè)MatrixRequest設(shè)置所有點(diǎn)的經(jīng)緯度、編碼方式然后執(zhí)行。返回的矩陣是二維數(shù)組下標(biāo)與原數(shù)組一一對(duì)應(yīng)。這里要注意MatrixRequest不是GHRequest它在底層會(huì)復(fù)用團(tuán)簇算法對(duì)區(qū)域內(nèi)的點(diǎn)做批量計(jì)算所以如果業(yè)務(wù)上確實(shí)只需要某幾個(gè)點(diǎn)之間的兩兩耗時(shí)用矩陣接口比循環(huán)單點(diǎn)路由合適得多。public long[][] getTimeMatrix(ListPoint points) { ListGHPoint ghPoints points.stream() .map(p - new GHPoint(p.getLat(), p.getLng())) .collect(Collectors.toList()); MatrixRequest matrixRequest new MatrixRequest(); matrixRequest.setPoints(ghPoints); matrixRequest.setProfile(car); // 只需要耗時(shí)數(shù)據(jù)不返回路徑幾何形狀降低傳輸和計(jì)算開(kāi)銷 matrixRequest.setOutArrays(Arrays.asList(time, distance)); matrixRequest.setFailFast(false); MatrixResponse matrixResponse graphHopper.matrix(matrixRequest); long[][] result new long[ghPoints.size()][ghPoints.size()]; for (int row 0; row matrixResponse.getTimes().length; row) { // 逐行拷貝耗時(shí)矩陣行下標(biāo)是起點(diǎn)列下標(biāo)是終點(diǎn) result[row] matrixResponse.getTimes()[row]; } return result; }setOutArrays只聲明time和distance別再加weight這類內(nèi)部字段多了白白增加計(jì)算量。setFailFast(false)很關(guān)鍵矩陣中只要有一個(gè)點(diǎn)無(wú)法到達(dá)整個(gè)請(qǐng)求會(huì)直接失敗把它關(guān)掉后能拿到部分結(jié)果哪些點(diǎn)不可達(dá)在響應(yīng)里標(biāo)記出來(lái)方便業(yè)務(wù)層單獨(dú)處理異常點(diǎn)。矩陣結(jié)果保存在內(nèi)存中幾十個(gè)點(diǎn)時(shí)就是一個(gè)N x N的二維數(shù)組后續(xù)順序優(yōu)化算法直接基于這個(gè)矩陣運(yùn)算不再碰 GraphHopper。4. 多途徑點(diǎn)順序規(guī)劃耗時(shí)矩陣 最近鄰 2-opt 是性價(jià)比最高的組合4.1 把多點(diǎn)問(wèn)題拆成 TSP為什么要先算矩陣再排順序、不能直接在圖上搜索明確了矩陣接口之后核心問(wèn)題浮現(xiàn)給三十個(gè)派件點(diǎn)和一個(gè)起點(diǎn)怎么決定先送哪個(gè)、后送哪個(gè)路線規(guī)劃問(wèn)題的本質(zhì)是旅行商問(wèn)題TSP——找一個(gè)經(jīng)過(guò)所有點(diǎn)且總耗時(shí)最短的順序。注意這不是在地圖圖上做一次簡(jiǎn)單搜索能解決的因?yàn)樾枰?jīng)過(guò)的點(diǎn)有多個(gè)而且順序未知搜索空間是排列組合級(jí)別的。圖搜索如 A*只能解決“從 A 到 B 的最短路徑”解決不了“經(jīng)過(guò) A、B、C、D 并以 E 結(jié)束的最短路徑順序”。TSP 的解法分精確算法和啟發(fā)式算法。精確算法如動(dòng)態(tài)規(guī)劃 Held-Karp在 20 個(gè)點(diǎn)左右就開(kāi)始吃力幾十上百點(diǎn)的場(chǎng)景完全不可用。實(shí)際工程里貪心最近鄰給出一個(gè)不錯(cuò)的基礎(chǔ)解再用 2-opt 局部搜索優(yōu)化這種組合在幾十點(diǎn)規(guī)模下能跑到接近最優(yōu)耗時(shí)也短是性價(jià)比最高的方案。更復(fù)雜的模擬退火和遺傳算法在這個(gè)規(guī)模下收益有限反而讓代碼復(fù)雜度和調(diào)參成本大幅上升。業(yè)務(wù)上還要考慮起點(diǎn)和終點(diǎn)的約束。最常見(jiàn)場(chǎng)景是“從站點(diǎn)出發(fā)送完所有點(diǎn)再回站點(diǎn)”這是一個(gè)閉合 TSP起點(diǎn)和終點(diǎn)都是站點(diǎn)本身另一種是“不回站點(diǎn)送完就地收工”這就是路徑 TSP。約束不同算法里的矩陣取值方式就不同——閉合 TSP 在計(jì)算總耗時(shí)時(shí)要加上“最后一個(gè)點(diǎn)回到起點(diǎn)”的耗時(shí)。4.2 先用最近鄰快速生成初始順序幾分鐘的高質(zhì)量可行解最近鄰的思路很樸素從起點(diǎn)出發(fā)每次選擇離當(dāng)前點(diǎn)耗時(shí)最短的下一個(gè)未訪問(wèn)點(diǎn)走完所有點(diǎn)后得到一條路徑。它本質(zhì)是貪心策略單次運(yùn)行結(jié)果是確定的執(zhí)行時(shí)間只有幾毫秒到幾十毫秒取決于點(diǎn)數(shù)解的質(zhì)量通常不超過(guò)最優(yōu)解的 20% 偏差作為 2-opt 的初始解完全夠用。關(guān)鍵點(diǎn)在于矩陣的構(gòu)建方式——我們需要拿到任意兩點(diǎn)之間通過(guò)路網(wǎng)的真實(shí)驅(qū)動(dòng)耗時(shí)而不是直線距離。這就是第 3 章里矩陣接口的價(jià)值把三十個(gè)點(diǎn)的經(jīng)緯度一次性傳入GraphHopper 返回兩兩之間的駕駛耗時(shí)這個(gè)耗時(shí)已經(jīng)考慮了路網(wǎng)、紅綠燈和道路等級(jí)比歐氏距離靠譜得多。最近鄰算法實(shí)現(xiàn)如下public ListInteger nearestNeighbor(int startIndex, long[][] timeMatrix) { int n timeMatrix.length; boolean[] visited new boolean[n]; ListInteger route new ArrayList(); int current startIndex; route.add(current); visited[current] true; while (route.size() n) { int next -1; long minTime Long.MAX_VALUE; for (int i 0; i n; i) { if (!visited[i] timeMatrix[current][i] minTime) { minTime timeMatrix[current][i]; next i; } } if (next -1) { // 剩余的節(jié)點(diǎn)不可達(dá)直接退出并保留部分路徑 break; } route.add(next); visited[next] true; current next; } return route; }timeMatrix[current][i]的語(yǔ)義是“從當(dāng)前節(jié)點(diǎn)到節(jié)點(diǎn) i 的耗時(shí)”所以貪心選擇時(shí)只需要掃描當(dāng)前行。startIndex是起點(diǎn)在矩陣中的下標(biāo)需要在矩陣接口調(diào)用前維護(hù)好“原始點(diǎn)列表”和“下標(biāo)”的對(duì)應(yīng)關(guān)系規(guī)劃完成后按這個(gè)關(guān)系把下標(biāo)翻譯成真實(shí)的經(jīng)緯度點(diǎn)即可。不可達(dá)點(diǎn)時(shí)直接 break 是因?yàn)閒ailFast(false)之后矩陣?yán)飼?huì)有Long.MAX_VALUE繼續(xù)循環(huán)只會(huì)卡死不如提前結(jié)束并把這個(gè)情況上報(bào)給業(yè)務(wù)層。4.3 2-opt 局部搜索用兩兩交換把路徑磨到接近最優(yōu)最近鄰得到一個(gè)初始解但問(wèn)題很明顯貪心的短視行為經(jīng)常導(dǎo)致某條路走了回頭路或者繞了一個(gè)大圈。2-opt 的思想是取當(dāng)前路徑中的兩條邊斷開(kāi)后反向連接重排如果新路徑的總耗時(shí)更小就采納。反復(fù)執(zhí)行直到?jīng)]有可以改進(jìn)的交換為止收斂之后路徑基本定型。2-opt 最核心的改進(jìn)點(diǎn)是“倒序”操作??串?dāng)前路徑序列如果交換位置i和j之間的路徑段需要把這段倒過(guò)來(lái)而不是簡(jiǎn)單換兩個(gè)節(jié)點(diǎn)——因?yàn)槁窂街心扯蔚姆较驔Q定了車輛實(shí)際走的道路方向。用路網(wǎng)耗時(shí)矩陣檢查倒序前后的總耗時(shí)保留更優(yōu)的那個(gè)。2-opt 嵌入實(shí)現(xiàn)public ListInteger twoOpt(ListInteger route, long[][] timeMatrix) { ListInteger best new ArrayList(route); long bestTime calculateTotalTime(best, timeMatrix); boolean improved true; while (improved) { improved false; for (int i 1; i best.size() - 1; i) { for (int j i 1; j best.size(); j) { ListInteger candidate twoOptSwap(best, i, j); long candidateTime calculateTotalTime(candidate, timeMatrix); if (candidateTime bestTime) { best candidate; bestTime candidateTime; improved true; } } } } return best; }twoOptSwap把[i, j]這段反轉(zhuǎn)后重新拼接實(shí)現(xiàn)方式很常規(guī)前半段保留中間段倒序后半段保留。calculateTotalTime按順序遍歷路徑累加相鄰節(jié)點(diǎn)耗時(shí)如果路徑是閉合 TSP還要把最后一個(gè)點(diǎn)和第一個(gè)點(diǎn)的耗時(shí)也加進(jìn)去——這是調(diào)參時(shí)最容易漏掉的一塊。2-opt 的單輪時(shí)間復(fù)雜度是 O(n2)加上外層循環(huán)在 30 個(gè)點(diǎn)的規(guī)模下通常是幾十毫秒級(jí)的完全夠用。它做不了全局最優(yōu)但能保證解質(zhì)量在 5% 偏差以內(nèi)對(duì)絕大多數(shù)配送調(diào)度場(chǎng)景綽綽有余。4.4 多途徑點(diǎn)接口落地把矩陣和優(yōu)化算法串成一個(gè) HTTP 接口整個(gè)流程串到 SpringBoot 里對(duì)外暴露一個(gè) HTTP 接口接收一組經(jīng)緯度點(diǎn)返回排序后的路線。這里我增加了一個(gè)“強(qiáng)制回起點(diǎn)”開(kāi)關(guān)因?yàn)楹芏鄻I(yè)務(wù)場(chǎng)景是車輛出去必須回站點(diǎn)也有場(chǎng)景是送完就地下班兩種需求用一個(gè)開(kāi)關(guān)控制算法實(shí)現(xiàn)上只在總耗時(shí)計(jì)算時(shí)多加/少加一條回到起點(diǎn)的邊。接口設(shè)計(jì)考慮了批量規(guī)劃場(chǎng)景的調(diào)用方式一次傳入所有點(diǎn)服務(wù)端同步計(jì)算返回帶有順序標(biāo)記的路線列表。由于矩陣計(jì)算和 2-opt 都在內(nèi)存里跑幾十點(diǎn)級(jí)別的接口響應(yīng)時(shí)間通常在數(shù)百毫秒足夠交互式使用。RestController RequestMapping(/api/route) public class MultiPointRouteController { private final RoutePlanningService planningService; public MultiPointRouteController(RoutePlanningService planningService) { this.planningService planningService; } /** * 多途徑點(diǎn)路徑規(guī)劃接口 * param points 起點(diǎn) 途徑點(diǎn)列表 * param returnToStart 是否返回起點(diǎn) */ PostMapping(/plan) public PlanResult plan(RequestBody PlanRequest request) { ListPoint points request.getPoints(); boolean returnToStart request.isReturnToStart(); return planningService.planOrder(points, returnToStart); } }RoutePlanningService.planOrder內(nèi)部依次執(zhí)行轉(zhuǎn)換 GHPoint 列表、調(diào)用矩陣接口、最近鄰生成初始順序、2-opt 優(yōu)化、把下標(biāo)翻譯成經(jīng)緯度、計(jì)算總耗時(shí)。整個(gè)流程把 GraphHopper 引擎、矩陣接口和 TSP 算法串成一個(gè)業(yè)務(wù)閉環(huán)。服務(wù)層接口返回值里包含排序后的點(diǎn)列表、每段路線耗時(shí)和總耗時(shí)業(yè)務(wù)方可以直接按這個(gè)結(jié)果生成調(diào)度單或?qū)Ш铰肪€。planOrder 核心流程拆解步驟操作數(shù)據(jù)來(lái)源1轉(zhuǎn)換坐標(biāo)點(diǎn)lng/lat 轉(zhuǎn) lat/lng請(qǐng)求參數(shù)2構(gòu)建耗時(shí)矩陣GraphHopper Matrix API3最近鄰生成初始順序耗時(shí)矩陣42-opt 優(yōu)化順序初始順序 耗時(shí)矩陣5翻譯下標(biāo) → 經(jīng)緯度原始點(diǎn)列表6計(jì)算總耗時(shí)、返回結(jié)果優(yōu)化后順序你會(huì)發(fā)現(xiàn)真正的規(guī)劃邏輯并不在 GraphHopper 里而是發(fā)生在這個(gè)服務(wù)類中。GraphHopper 只負(fù)責(zé)回答“這兩點(diǎn)之間開(kāi)車多久”順序怎么排是你自己的 TSP 算法說(shuō)了算。5. 避坑GraphHopper 集成里最常見(jiàn)的 5 個(gè)翻車點(diǎn)5.1 坐標(biāo)順序搞反路線全部橫穿地圖現(xiàn)象從北京到天津的路線算出來(lái)橫跨了中國(guó)版圖或者路線自動(dòng)繞了上千公里。原因GraphHopper 的 GHPoint 構(gòu)造器明確是(lat, lon)很多業(yè)務(wù)系統(tǒng)主鍵存的是(lng, lat)直接反轉(zhuǎn)傳入后本應(yīng)向北的路變成了往東圖搜索完全錯(cuò)亂。解決在進(jìn)入引擎之前統(tǒng)一做一次坐標(biāo)轉(zhuǎn)換并且寫單元測(cè)試鎖定給定已知經(jīng)緯度的 A/B 兩點(diǎn)驗(yàn)證計(jì)算出的距離在合理范圍內(nèi)。我吃過(guò)一次虧之后在這個(gè)轉(zhuǎn)換方法里加了強(qiáng)校驗(yàn)——如果緯度超過(guò) 90 或者經(jīng)度超過(guò) 180直接拋異常寧可開(kāi)發(fā)期炸掉也不要線上錯(cuò)。5.2 道路數(shù)據(jù)精度不夠壓根搜不到點(diǎn)現(xiàn)象某幾個(gè)點(diǎn)報(bào)Could not find point但經(jīng)緯度看著明明在市區(qū)。原因.osm.pbf 數(shù)據(jù)的精度和詳細(xì)程度取決于數(shù)據(jù)源本身。有些區(qū)域道路缺失或斷頭路太多GraphHopper 在圖上找最近的可行走邊失敗就會(huì)報(bào)點(diǎn)不可達(dá)。這種情況在郊區(qū)、新建開(kāi)發(fā)區(qū)特別常見(jiàn)。解決先把點(diǎn)投影到圖上查看GraphHopper返回的最近邊和投影點(diǎn)確認(rèn)是否有道路數(shù)據(jù)如果有路但斷頭則手動(dòng)補(bǔ)錄幾條道路或者調(diào)整點(diǎn)坐標(biāo)到實(shí)際道路位置。工程上給業(yè)務(wù)方提供一個(gè)“地圖選址”功能讓他們?cè)诘貓D上選點(diǎn)而不是填坐標(biāo)能從源頭規(guī)避這個(gè)坑。5.3 強(qiáng)制回起點(diǎn)時(shí)總耗時(shí)少算一段現(xiàn)象接口返回的總耗時(shí)明顯偏短對(duì)比實(shí)際跑下來(lái)的時(shí)間差了將近半小時(shí)。原因閉合 TSP 要求“最后一個(gè)點(diǎn)回起點(diǎn)”這一段路的耗時(shí)也要計(jì)入總和但實(shí)現(xiàn)里只算了路徑內(nèi)部相鄰點(diǎn)的耗時(shí)少了最后一段返程。這個(gè)在代碼 review 階段特別容易漏因?yàn)榭雌饋?lái)路徑已經(jīng)“結(jié)束”了。解決在calculateTotalTime方法里增加一個(gè)布爾參數(shù)returnToStart閉合時(shí)把timeMatrix[last][first]加上。同時(shí)接口返回的明細(xì)里單獨(dú)列出一個(gè)“返程耗時(shí)”字段讓業(yè)務(wù)方能看出這半小時(shí)是怎么來(lái)的。5.4 CH 預(yù)計(jì)算打開(kāi)導(dǎo)致啟動(dòng)極慢、內(nèi)存吃緊現(xiàn)象啟動(dòng)時(shí)構(gòu)建圖明顯變慢日志顯示 CH preprocessing 卡了很久內(nèi)存占用翻倍。原因和第 2 章說(shuō)的一樣CH 預(yù)計(jì)算會(huì)為每個(gè)節(jié)點(diǎn)算跳表構(gòu)建時(shí)間和內(nèi)存開(kāi)銷都很高。多途徑點(diǎn)場(chǎng)景下主要調(diào)矩陣接口單次路由用的不多CH 收益有限但它造成的構(gòu)建負(fù)擔(dān)是實(shí)打?qū)嵉?。解決初始化配置關(guān)掉 CHhopper.setCHEnabled(false)。如果確實(shí)有個(gè)別高并發(fā)單點(diǎn)路由需求可以單獨(dú)為那個(gè)接口準(zhǔn)備一個(gè)帶 CH 的引擎實(shí)例兩個(gè)引擎共享同一份圖數(shù)據(jù)目錄互不干擾。5.5 內(nèi)存映射模式下首次請(qǐng)求特別慢現(xiàn)象服務(wù)啟動(dòng)后第一個(gè)路由請(qǐng)求要等好幾秒甚至幾十秒后面的請(qǐng)求就正常了。原因MMAP 模式下圖數(shù)據(jù)是懶加載到內(nèi)存的哪條路被搜索到了才把那部分?jǐn)?shù)據(jù)頁(yè)加載進(jìn)來(lái)。首次請(qǐng)求覆蓋的路段多相當(dāng)于把所有道路數(shù)據(jù)都觸達(dá)了一遍自然慢。解決應(yīng)用啟動(dòng)后做一次“預(yù)熱”調(diào)用隨便算一條短線路讓底層把常用圖頁(yè)加載完?;蛘咧苯佑肦AM_STORE模式啟動(dòng)時(shí)全部載入第一次請(qǐng)求和后面一樣快。內(nèi)存夠的話優(yōu)先 RAM_STORE省心。6. 進(jìn)階加一個(gè)“一鍵優(yōu)化”按鈕前先搞懂這些技巧多途徑點(diǎn)規(guī)劃從能跑到好用中間還有幾個(gè)提升體驗(yàn)的小改動(dòng)。第一個(gè)是把 2-opt 的迭代上限露出來(lái)。當(dāng)途徑點(diǎn)數(shù)超過(guò)五十個(gè)時(shí)完全收斂可能要幾十輪而實(shí)際業(yè)務(wù)里 2-opt 前幾輪效果最明顯后面幾輪收益很小。我習(xí)慣設(shè)置一個(gè)最大迭代次數(shù)比如 5 輪配合improved標(biāo)志位耗時(shí)可控解質(zhì)量也只有百分之幾的差距。第二個(gè)技巧是復(fù)用矩陣計(jì)算結(jié)果。同一個(gè)小區(qū)的多個(gè)配送點(diǎn)耗時(shí)矩陣可能長(zhǎng)時(shí)間不變而 GraphHopper 的矩陣計(jì)算是有成本的尤其點(diǎn)多的情況下。如果你的輸入點(diǎn)集相對(duì)固定把矩陣結(jié)果緩存起來(lái)點(diǎn)集變化時(shí)才重新計(jì)算??梢杂煤?jiǎn)單的ConcurrentHashMap加一個(gè)版本號(hào)來(lái)實(shí)現(xiàn)點(diǎn)在緩存里就直接跳到 TSP 優(yōu)化階段。第三個(gè)技巧是異步化長(zhǎng)任務(wù)。五十個(gè)點(diǎn)以上的規(guī)劃矩陣計(jì)算加 2-opt 可能要幾秒同步阻塞 HTTP 請(qǐng)求會(huì)讓前端一直轉(zhuǎn)圈。一個(gè)老板鍵做法接口先返回任務(wù) ID后端用線程池執(zhí)行規(guī)劃完成后把結(jié)果寫到內(nèi)存緩存前端輪詢拿結(jié)果。這和直接用同步接口相比用戶體驗(yàn)差別明顯。車輛容量約束是另一個(gè)常見(jiàn)擴(kuò)展方向。目前算法只優(yōu)化耗時(shí)不關(guān)心車能不能裝下所有貨。如果你的業(yè)務(wù)里每輛車有載重上限那這就從 TSP 變成了 CVRP帶容量約束的車輛路徑問(wèn)題需要在排順序時(shí)同時(shí)檢查已分配點(diǎn)的累計(jì)重量。最簡(jiǎn)單的做法是分桶——按順序貪心塞進(jìn)多輛車每輛車滿負(fù)荷后開(kāi)下一輛再用 2-opt 分別優(yōu)化每輛車的順序。我做這套系統(tǒng)的過(guò)程中最耗時(shí)的不是算法本身而是把坐標(biāo)順序、數(shù)據(jù)精度、返程耗時(shí)這些細(xì)節(jié)打磨對(duì)。這些坑不填掉再快的最優(yōu)算法都給不了業(yè)務(wù)可用的結(jié)果。規(guī)劃接口上線之后配送員的實(shí)際行駛距離和我算出來(lái)的路線差距穩(wěn)定在 10% 以內(nèi)——說(shuō)明路網(wǎng)速度假設(shè)和實(shí)際匹配良好。后續(xù)如果你遇到“某些點(diǎn)搜不到”“總耗時(shí)不對(duì)”“啟動(dòng)慢得離譜”這類問(wèn)題按第 5 章的排查順序過(guò)一遍大多數(shù)能直接解決。如果你要更大規(guī)模的點(diǎn)集上千個(gè)點(diǎn)那種建議改用專門的 VROOM 和 jsprit 這類開(kāi)源求解器配合 GraphHopper 做路網(wǎng)前處理依然能把整套鏈路留在自己的工程里。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
曰本特级特黄特色黄色A级网站高清在线免费看 | 日本一区三级韩国| 综合大香蕉美。| 2017av无码免费无线播| 免费看污网站| 在线视频97| 可以免费观看的AV| 日韩精品一二三| 日本日皮视频逼| 毛片麻豆91糖心精品毛情片| 国产精品成人蜜臀AV在线| 欧美日韩少妇色情| 国产一级特黄大片处女| yazhouzaixian| 亚洲色图殴美色图激情乱伦| 爱丝福利| 欧美日韩91| 丝袜视频网国产90| 婷婷性爱| 日韩15p| 精品人妻伦一二三区久久| 亚洲Av无码成人精品国产| 欧美亚洲日韩16色| av午夜影院在线播放| 后入式视频国产自| 久久草在线综合视频| 97jingpin| 国产激情久久久| 久久久久成人网| 久久九精品| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 中文字幕交换人妻| 亚洲国产福利视频| 天天干天天干天天| 五月丁香黄色网| 欧美黑人与女人91~| 100啪啪视频大全| 亚洲三级网址久久最新| 国产精品女久久久久av爽| 欧美天堂亚洲电影院一区在线播放| 国产啊v在线免费播放| 热久日综合| 中文字幕加勒比海高清无码免费视频| 综合夜夜| 99re国产精品视频| 久久久日本电影| 欧美色棕合| 青草香蕉网| 亚洲囯产精品女人久久久| 加勒比伊人影院| 久久久中文| 麻豆天美国美国产| 日本不卡在线二区三区| 免费国产视频| a在线视频免费观看| 亚洲成A∨人影院在线欢看| 激情文学小说一区二区| 夜夜中出国产| 精品偷拍13p欧美dodk视频| 国产精品午夜精品| 高潮内射在线| 凸凹视频在线观看| 午夜舔阴达高潮视频免费看| 97精品一区二区视频在线观看| 蜜桃色色网站视频三区| 91c色| 亚洲第一页综合在线| 亚洲激情网一二三四区| 日本操大逼| 999综合网| 欧美影音在线| 国产乱码久久| 91操人| 国产精品96久久久久久| 福利一级版子| 内射日韩大臀美女| 韩国一级做A片免费的| 亚洲中文字幕有码视频一区二区三区| 国产白嫩漂亮KTV在线| 91老司机精品| 亚洲s色图| 日韩人妻精品久久久久| 操逼视频免费日韩无码| 先锋激情∨在线视频播放| 欲香欲色综合天天伊人| 97视频新免费| 亚洲激情色片 | 国产精品一区二区三区,亚洲综合| 清纯唯美亚洲综合| 激情久久久| 亚洲欧美日韩夜夜| 情侣开房子拍 日韩无码 女的很漂亮| 国产精品成人AV片免费看网站| 亚洲男人天堂AV| 黑丝91视频| 在线αⅴ| 欧美综合97www| 精品1区2区3区| 殴美,日韩国产伦精品| 岛国成人av在线播放网址| 人人妻碰人人免费| 午夜天堂精品久久| 日本黄色天堂| 69AV女优男人的天堂| 四季AV一区二区凹凸精品小说| 留下AⅤ黄色片| 欧美人人天天网| 日韩三级在线观看mp4| 18一区二区三区| 97伊人超碰| 香蕉黄色一级视频| 男人网站婷婷| 人妖欧美一区二区| 亚洲无码一区二区三区三州| 97 国产精品| 无套后入双马尾| 国产性刺激| 91Chinese在线| AV有码在线| 伊香蕉综合久久久久久久噜噜噜 | 丁香五月天啪啪| 日本一级婬片试看三分钟| 色欲天天婬色婬香WWW夜色| 中国熟妇| 78操B| 亚洲最大黄网| 99国产天美| 天天看少妇| 久久久国产成人一区二区三区在线| 久艾草在线精品视频在线观看| 91搡老女人老妇女老熟女歌词翻译| 亚洲在线综合| 国产美女91| 在线播放欧洲免费av| 999 久久久| 少妇内射视频| 日本高清一本二本免费不卡| 九九九久| 最新AV在线| 老司机香蕉| 人妻熟女av国产网站| 亚洲91网站| 中英熟女操女| 97人妻免费中文字幕| 免费啪啪av| 少妇一级婬片免费放一级a性色.| 强奸乱伦亚洲第一页| 国产精品久久久无码aV去| 国产亚洲色停停久久99精品91| 美女久久久久久久久久久| 超碰在线成人电影| 中文无线日韩一区| 9ⅰ久久久天天| 亚洲蜜桃V妇女| 私人尤物在线精品不卡| 亚洲日韩在线a不卡99精品| 99久久精品国产系列| 亚洲乱码精品一区二区| 91东京热男人的天堂| 国产欧美日韩精品中文| 丁香五月色情| 丁香五月综合| 狠狠色一区二区中文字幕| 高清肉丝中文无码| 欧美,日韩,中文,另类| 国产日本顶级一区二区三区| 亚洲在线网站| 亚洲暴力强奸AV| 久久精品国产亚洲AV片多多| 67914亚洲精品| 91国产大片| 少妇丝袜在线观看AV| 无码精品啪啪啪一区二区三区三州| 97超碰超| 亚洲制服aⅴ中文字幕| 秋霞曰韩R级| 欧美亚洲综合色| 欧亚久久偷拍视频| 国产精品另类| 午夜乱轮操逼视频免费看| 国产一区二区a毛片| 麻豆 亚洲 97| 欧美亚洲特P| 97超碰香蕉| 亚洲学生妹高清av| 好涩综合| 一本久道久久综合狠狠爱| 啊啊啊啊啊好大好舒服想要| 精品二区三四区五电影| 久久鲁干| 国产色综合亚洲色综合吹潮| 久久av一级av少妇av高潮 | 学生妹天天看| 一区二区久久天天干狠狠| 国产精品4p在线观看| 国产操逼逼网| 秋霞午夜视频一区二区| 蜜屁av| 人人看欧美性爱| 久久人人爽人人爽人人片Ⅴ| 五月天综合网| 夜夜欢天天干| 两性综合网| 日日夜夜青青草母狗| 久草这里只有精品| 国产一区在线观看无码AV| 大香蕉九九| 18禁中文字幕| 中文字幕天天天天天| 久久αⅴ| 国产又色又爽又舒服的三级视频| 久久久久亚洲一区女同性恋中文字幕| 97色香蕉| 久久婷婷五月天| 欧美青青视频| 人人看人人插| 精品无码久久久| 超碰吊日色| 天天色天天干天天射| 视频在线观看一二三区| 亚洲女人91| 欧美综合区| 国产乱码久久久久久| 无码137片内射在线影院| 97色婷| 国偷自 一区二区| 国产精品永久免费10000| 婷婷伊人一区| 91亚洲人| 校园春色之综合网| 欧美色图20P| 香蕉国产精品麻豆亚洲欧美日韩| 深夜啪啪啪视频免费| 久啪视频| 一区二区 韩日AV| av橘色网站| 91三级理论片播放器| 国产熟女| 在线观看色视频| 黑人中出21连凳花野真衣| 天天综合网日韩| 婷婷激情五月综合| 91香蕉国产尤物视频| 91综合网在线| 97天天爽| 亚洲一级黄色毛片| 亚洲国产一级中文综合久久天堂在线免费观看 | 豆花视频操逼网址| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 色激情综合网站| 欧美黑人猛交春色影视大全| 射综合网| 综合激情97| 天天看天天干| 麻豆精品A片免费观看| 超碰在线人妻中文字幕| 超碰97在线 欧美 国产| 美女国产一区二区久久| 操死我了啊啊啊| 黄色高清无码无码破解免费暗网| 久久久女人| 国产 码在线成人网站| 综合五月天| 欧美亚洲综合色| 国产色图乱伦| 天天做日日做天天欢。| 午夜精品人妻二区三区| www色婷婷| 亚洲欧洲第二视频在线观看色图| 中文 人妻 制服| 999色欧美中文字幕| 日本淫穴在线| 五月丁香综合啪啪| 丰满人妻一区| 天天综合~91入口| 亚州男人天堂| 欧美日本天堂| 麻豆啪啪啪视频| 日本一级真人黄色性爱视频| 色综和网| 天天日夜夜爽| 永久免费av无码网站国产app | 中国熟妇| 95精品在线| www.男人的天堂| 九九九九九九九九九九九九九九九女| 四虎影视永久在线免费| 免费国产视频| 日日日骚女人精品| 男人天堂2019亚洲| 色综合V| 情色五月天就去干| 97在线免费看| 精品人人插人人操| 秋霞怕怕片| 97久久精品不卡| 99视频只有精品| 国产精品日韩在线一区| 欧美日韩妖精91com| 精品九九九九九九九| 欧美黄色片AAAAA| 超碰日韩人妻| 大香蕉中文201| 欧美在线色图| 六月丁香啪啪啪| 成人麻豆av电影网站| 亚洲天堂男| 天天干人妻| 亚洲美乱| 免費黃色視頻觀看一| 色哟哟AⅤ| 夜夜黄| 粉嫩AV一区夜夜嗨| 天天摸夜夜摸| 欧美国产日韩高清在线| 亚洲国产欧美中文永久| 综合激情二| 亚洲天堂男人天堂网| 亚洲麻豆18发?| 久久久久久中文版| 操穴国产| 蜜臀久久久久久999| 浪人综合网| 国产毛片久久久久久久| AVE乱伦| 91成人无码| 国产不卡的视频| 免费成人在线熟妇网| 黄页大片在线观看| 欧美图片偷拍| 性站| 欧美 亚洲 制服 精品| 91快色色色色色| 涩涩涩综合| 中文乱码字字幕在线第5页| 熟女少妇一区二区三区| 97在线日韩中文字幕| 久热久操| 丰满人妻一区二区中文| 加勒比AV天堂| 国产精品天干天干综合网麻豆| 欧美日韩国第一区| 啊啊啊在线观看免费视频| 2020中文字幕| 91N欧美| 久久婷婷色| www狠狠| 亚洲av乱伦色图网站| 日韩黄色一区二区三区| 青青久久手机线视频| 嗯啊抽插大香蕉网页| 欧美日韩性爱电影在线| 久操凹凸视频| 人妻乱仑一区二区三区| 欧美刺激色黄片免费看| av天堂5| 久久久97| 婷婷精品视频| 旡码电影特区| 久操在97| 舔舔啊| 久操| 久久久91| 极品另类| 在线播放一级无码视频| 亚洲无码一二三区| 免费视频无码| 无码heyzo高清一区| AV一二区| 成人十八禁日韩欧美一二三| 偷窥自拍亚洲| 国产400孕妇孕交群| 国产精品ww久久| 97国产超碰| 中文字幕国产在线天堂| 久久AV无码AV| 狠狠操夜夜| 久久这里只精品99re66图| 巨爆乳肉感一区二区三区竹菊影视| 五月婷婷啪啪| 日本熟妇熟色97一本在线观看| wwe 天天干.com| 99re在线观看| 亚洲综人网| 丰满人妻一区二区三区四区| 久久无码一区二区二三区性色| 伊人久久在线视频观看| 三及片网站| 婷婷婷婷婷婷久久久久| 无码精品蜜桃一区二区三区ww| 国产精品熟女丝袜一区二区| 俺去久久| 日韩专区久久久| 日日夜夜精品视频| 欧美大香蕉同搞| 天天综合,91综合永久| 伊人久久青青草| 亚洲精品人伦一区二区| 亚洲国产精品久久久久婷婷青年| 天天干干天天干干| 成人在线视频网| 亚洲淫乱骚妇AV| 我爱操| 内射小黄片| 亚洲第一无码播放立川理惠| 一区黄二区黄| 四虎影视永久在线观看精品免费网站| 久久老女人| 一线黄色免费性爱片| 欧美操人| 97色色色综合网站| 亚洲欧美人妻| 久久精品性| 欧美欲色| 久久产精品一区二区三区电影| 人人操人人摸人人看人人干| 91 丝袜在线| 国产sv美女内射| 金莲网址| 日韩一999精品| 久久香蕉国产线看观看亚洲女人| av网页一区二区三区| 久操99| 一二三卡欧美日韩人妻免费精品| 91深夜夜| 性欧美另类高清| 91亚洲网站| 最新精品久久蜜桃| 亚洲欧美情色| 丁香五月电影| 日韩黄色小说| 无码区蜜乳| 五月丁香婷婷综合| 中出人妻中文字幕91在线| 牛牛AV人人夜夜澡人人爽| 综合色啪| 天天草AV| 国产日韩欧美亚洲精品95 | 亚洲二区精品在线观看| 日少妇亚洲版| 欧美性爱精品七区| 97色婷| 九九九九免费视频| 国产av波波国产精品| 色噜噜狠狠色综无码久久合欧美| 日韩99999| hd成人一区二区在线| 日本999精品| 亚洲电影中字一区二区| 91亚洲青青草原精品1区| 91美女在线| 99热这里| 97超碰9| 青青草日韩无码| 97亚洲欧美日韩| 岛国福利在线精品播放| 麻豆一区二区三区精品| 国产一区二区三区白丝| 欧美黄色图片| 天天肏夜夜肏| 九色婷婷| 欧美天天影院| 日本中文字幕一区| WWW.加勒比人妻一区不卡.com| 日本媚薬中文字幕在线| 色播五月丁香| 91熟女在线| 激情四射婷婷四五月天| 国产精品久久久| 搡老女人老妇女老妇老熟女怎么读| 人妻人久久精品中文字幕| 囯产操逼片| 97视频一区| 大香蕉AV在线| 日骚逼视频| 国产人妻精品久久久一区二区三区 | 国产精品乱码久久久久久久久| 嫩草影院性色| 日产精品久久久一区二区| 天天色粽合合合合合合合| 大香蕉中文201| 日本一本一区二区三区四区五区欧美日韩中文字幕| 欧洲精品区| 欧美日韩中文亚洲v在线综合| 超碰 国产熟女精品一区| 国产在线精品偷| 97亚洲精品| 偷拍亚洲情色| 99久久久久久亚洲精品不卡| 青娱乐av在线| 啊啊啊水好多| 色综合美国| 国产无码三级视频在线观看| 蜜臀AV一区二区三区激情综合| 国产隔壁老王影院在线| 国产精品国产| 亚洲天堂久久久久久粉红视频| 亚洲一区二区三区久久 亚洲一区二区| 国产农村妇女精品| 美熟女逼导航AV操逼| 激情六月天| 日韩大香蕉AV影片| 大香蕉伊人在线成人AV在线观看| 国产一级做a爰大片免费久久| 91久久国产精品| 久久免费老司机精品| 国产AV色黄看到爽| 欧美成97爱| 欧色综合| 久99久视频| 国内亚洲高清无码| 97操B| 中文字幕一区二区三区人妻少妇在线| 99精品视频在线观看免费| 日韩小电影| 熟女一区二区三区| 99热国产| 高清无码一区二区三区| 色区97| 99久久综合| 日韩人妻精品久久久久| 久久riav中文精品| 97久久久| 久久精品无码熟妇一区二区三区视频导航 | 色婷婷电影网| 天堂中文日本在线观看| 久久久久九九九九| 精品久操| 97久精品| www.色操逼| 亚洲AV成人无码一二三久久| 97国产精品一区| 性性久久| 强奸抽插av| 婷婷激情丁香| 热热色色综合| 久久综合日韩亚洲欧美| 吻戏激情性巴克| 天天干夜夜一操| 青娱乐福利99| 蜜臀99久久精品久久久久| 91国精产品| 欧美亚洲影视| 999久久久九| 五月综合久久| 欧美十八禁网站| 成人乱人伦一区二区| 97碰| 久久精品无码熟妇一区二区三区视频导航 | 亚卅熟女乱色| 亚洲国产一级精品毛一级精品看免费视频 | 中文字幕在线观看网页| 国产农村妇女一区二区| 欧美性爱系列| 一级aaaaa欧美中文字幕录像片| 乱操乱伦AV| 特色a在线上| 2017天天操天天日| 蜜桃午夜视频一区二区| 色牛aV| 91天堂| 北野未奈加勒比av| AAA久久| 国产一区二区三区免费视频在性观看 | 99热精品青草在线| 97色在线观看| 国产成人亚洲精品自产在线 | www.av家庭乱伦| 亚洲乱妇p22| 亚洲丰满很很操| 国产一| 国产精品乱码久久久、久久| 中出20p| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 天天天天干| 丁香婷婷大香蕉| 九九综合久久| 艹我哪美一区无码| 麻豆这里只有精品| 午夜男人一级A片7777| www色婷婷| 嗯嗯嗯好爽| 91九九九馒头| 蜜臀久久99精品久久久久免费观| 毛片17S| 亚州精品丝袜-不卡成人免费| 久久蜜桃综合网| 少妇与黑人高潮在线| 亚洲激情色片 | 中文字暮97| 极品五月天噜噜| 99啪| 精品亚洲俞拍视频一区| 久久久久9| 国产女人高潮视频| 狠插 制服 自拍| 亚州再线| 日韩情色视频| 中国小夫妻勾搭露脸淫荡对白| 夜夜嗨av午夜成人| 亚州高清av| 精品无码久久| 热99这里有精品综合久久| 天天摸夜夜添无码小视频| 加勒比在线视频一区二区三区| 韩国一级做A片免费的| 亚洲伊人成综合成人网| 97人人夜夜精品视频| 太久视频| 91亚洲黑人| 久久久性爱视频| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 91在线视频免费播放| 亚洲二区精品在线观看| 狠狠干,狠狠操| 亚洲少妇在线影音| 亚洲欧美综合网| 91无码西班牙视频在线| 操逼操逼逼操操逼91 | 婷婷伊人綜合中文字幕小说| 五月天春色激情网| 蜜臀aV午夜一区二区三区| 啊啊啊啊免费视频| 99久久久久久亚洲精品不卡| 欧美视频中文字幕区| 伊人天堂在线| 后入福利| 黄色无码高清黄色无码网站| 91社区拍啪人妻| 欧美黑人猛交春色影视大全| 日本欧美m v精品网站加| 久久精品操| 日本高清视频xxxx| www.狠狠操| 曰韩少妇无码| 欧州一区二区三区四区| 日韩AC| 久久鲁夜| 97色色色| 丁香五月影院| 天天日美女的B| 啊啊啊慢点| 日本孕妇一区二区视频操逼免费看| 网页导航五月天免费一二三区| 国产肏逼网站| 爱我干综合| 久插不卡| 午夜男女爽爽爽影院视频| 天美麻花大全视频| 狠色婷婷久久一区二区三区_| 屁股久久久久久久| 女人双腿搬开让男人桶| 97色色,97综合| 91在线欧美| 婷婷午夜| 99re国产中文字幕| 柠檬AV导航| 欧美性色网| 超碰在线人妻不卡| 嫩草一区二区在线观看| 精品在线78| 亚殴在线| 亚洲综合伊人无码久久| 污污汅18禁网站在线永久免费观看 | 色狠狠综合| 色噜噜国产在线| 97爱综合| 先锋精品av色鲁| 999久久芭蕾| 天天搞在线综合网| 亚洲综合影视| 中文字幕日韩电影人妻| 99r九九| 美女诱惑久久| 久久婷婷热| 99精品丰满人妻无码| 青娱乐亚洲自拍| 狠狠亚洲| 欧美一级在线观看成人| 国产玖玖| 偷拍 亚洲 欧美| 久久国色天香香蕉| 综合网欧美| 夜夜操av亚洲一区二区| 天天综合网久久ww| 乱伦熟女论坛| 欧美视频第二页| 夜夜操美女| 九区国产| 免费在线观看国内色片网站网址| 校园春色综合色| 可以免费看黄片的视频| 5252色欧美在线| 国内毛片无遮挡国产| 国产盗摄美女如厕大神作品在线观看| 中文字幕视频在线观看| 国产视频三区四区| 国产黄色视频久久| 欧美熟妇操操视频| 在线综合色| 国产熟码AV| 欧美激情综合| 美女诱惑一区| 97 国产一区| 在线看的av| 青青伊人这里只有精品| 亚洲av淫乱| 大香久久| 色婷婷婷五月天激情四射| 国产精品久久久久久照片| 超碰人妻久久人妻中文97| 欧美性爱日韩性爱| 亚洲天堂久久| 天天综和| 日韩 欧美 另类 人妻| 黑人精品欧美一区二区蜜桃| 99在线精品观看99| 热99这里有精品综合久久| 青青久操| 欧美精品1区2区3区| 人妻第一页| 日本久久99| 囯产精品强| 九九99久久| 日语五十路和六十路亚洲国产精品| 91xingse| 中国操逼无码| 果冻传媒一区二区三区| 亚洲另类综合欧美| 国产精品亚洲无码| 视频在线97| 偷拍色图| 极品五月天噜噜| 在线观看黄色电话| 天天干天天爽| 神马精品视频| 日日夜夜草草草| 国产乱子伦一区二区三区免看| 91 丝袜在线观看| 国产精品色| 麻豆av一区二区| 蜜臀久久99精品久久久| 亚洲一区二区三区在线激情| 一区不卡在线观看av| 午夜精品五区| 5月婷婷6月六月丁香| 丁香五月婷婷色| 高潮内射在线| 97bbn| 91在线一起| 亚州操操穴网| 97精品久久久久久久| 美女AV一区二区| 天堂网亚洲区手机版| 国产97亚洲| 人人操人人操人人操人人操人人操人人人11.CM | 亚洲色欲天天人妻无码系列专区| 欧美熟妇视频| 欧美伦乱爱| 欧美色图20P| 国产精品不卡av免费在线观看| 人人操我人人干| 亚洲欧美天| 亚州色阁| 自拍第一页| 97无码视频在线播放| 丝袜亚洲综合| 曰韩精品视频一区二区| 密乳AV免费观看| 99精品视频在线观看| 日日干日日| 日韩78m视频| 一区二区三区美女超清| 亚洲一区中文精品| 视频在线观看免费一区二区三区| 欧美天天干| 美女露胸露屁股| 国产三级中文字幕粉嫩| 在线观看不卡一区二区三区| 色噜噜综合网| 黑人与人妻| 久久天堂| 亚洲婷婷五月天| 2003天天干夜夜操| 一级片在线观看高清无码| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 亚洲日韩狠狠撸视频| 超碰97中文| 日韩丝袜二区| 日韩一区二区熟女| 91超碰在线观看| 操逼逼一区视频| 九色婷婷| 日韩超碰精品综合| 久久男人的天堂| 在线观看综合精品亚洲| 好看的91视频| 伊人久大| 人妻中文字幕精品无码| 志村玲子视频一区二区| 亚洲涩图欧美| 中文字幕日韩专区精品系列| 女人高潮大叫一级毛片| 国产精品熟女九九九| 亚洲欧美日韩激情不卡| av天堂手机版追回| 欧美性生活内射| 国产白丝精品在线观看| 凹凸视频特色日本特黄| 男人的天堂2000| 精品久久久av无码免费| 伊人久久艹| 精品综合久久久久久97| 国产在线综合福利网站| 色婷婷在线视频| 精品二区三四区五电影| 日韩免费中文字幕视频| 亚洲高潮少妇| 蜜桃传媒视频第一区入口在线看| h无码动漫在线观看| 少妇天堂网络| 国产免费一区2区3区| 婷婷五月天成人| 欧美性Fer办公室秘书| 尤物视频一区| 亚洲精品一二三四区| 国产深喉视频一区二区| 国产精品一区二区黄片| 超碰在线第一页| 97精品熟女少妇一区| 十八禁黄色成人网站观看| 草草电影院| 欧美综合97www| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 日韩无码视频黄色| Av色五月| 亚洲欧洲激情卡通另类文学四射小说网站 | 人妻精品一区二区| 欧亚免费视频| 国产亚洲欧洲在线观看| 91性高朝久久久久久久久| 亚洲AV乱码专区国产噜噜亚洲| 欧美色图 色综合图| 五月婷婷激情网| 777超碰| 在线黄页看毛片| 日本大香蕉综合网红本杳社区| 我要看免费韩日黄片| 麻豆区久久久久亚| 国产精品亚洲一区二区三区四区| 精彩久久中文| av天堂手机版追回| 男人天堂久久精品不卡| 丰满人妻av一区二区三区| 人澡逼| 欧美日韩性爱操大逼| 丁香7月婷婷| 在线国产探花| 五月天婷婷社区| 丁香五月成人| 男同专区一区二区三区在线| 91操操| 综合欧美亚洲| 国产久久久9999| 七月丁香婷婷| 成人网欧美风情| 一级性爱啪啪视频| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 一级啊性爱在线视频| 亚洲中亚日激情视频| 免费啪啪啪网站18岁| 神马久久免费电影观看| 色九月婷婷| 日韩在线观看AV| 色激情五月天| 综合久久97| 中文字幕在线观| 色婷婷综合视频| 日韩国产九九精品一区二区三区毛片| 国产精品视频白浆免费| 精品人妻一区二区三区视频在线| 欧美日韩高潮喷水91| 亚洲性网| 热热热热日日漂亮永久永久国产日| 黄色AAAAAAAAAAA大片| 超碰在线成人电影| 国产免费永久精品无码| 天天综合中文字幕 91| 白丝1区2区3区| 操逼片国产| 超碰吊日色| 蜜臀av中字字幕网站| 久久久免费的精品| 欧美亚州综合网图片| 蜜臀国产AV中文字幕| 乱伦一二三区| 九九九草| 日本 欧美 亚中文字幕| 久综合国内精品自在自线| 色69大色97香蕉| 97香焦色区| 亚洲一区中文精品| 91n免费处女| 920日本午夜免费| 欧美性爱第一区| 国产在线激情| 北条麻妃性愛视频| 9999免费精彩视频| 久久婷婷电影网| 粉嫩av一区二区三区四季| www.99热| 精品无码久久久久久国产浪潮| 日日AAvv| AV天堂男人的天堂| 午夜天堂啪啪| 夜夜草我| 黑白配性爱AV成| 欧美午夜色妇色鬼| 九九色色| 欧美日韩日产免费网站看| 超碰99re| 97视频www| 毛片17S| 黄片www.| 八戒无码国产午夜福利| 友优传媒精品在线一区二区| 婷婷另类小说| 亚洲成人av色网| 欧美日本中字另类在线| 国产伦精品| 色眯眯av| 久久亚洲人妻| 人妻丝袜无 码视频专区| 乱欲一区二区| 操b在线观看| 操死我了啊啊啊| 日韩AV色图| 色综合久| 操高情无码| 一区二区三区美女超清| 少妇贴图| 涩涩久久精品| 久久手机视直播| 久久婷婷色| 粉嫩粉嫩一区性色AV片| 一级人妻性爱视频| 久久精品无码专区| 大香交| 亚洲精品天天影视综合网 | 婷婷丁香五月天综合东京热| 成·人免费午夜在线观看| 免费草草草草草视频| 欧美日韩一干二干| 95人妻爽爽人人做人人澡| www成人啪啪18秘 免费| 久久这里是精品| 国产无码久久高清| 九九久久玖玖| 精品人妻一区二区三区不卡断 | 国产精品久久久久久久久久久久久久| 亚洲国产福利视频| 精品国产乱码久久久兰草影视| 国产久久一区二区三区野外在线| 综合网色| 美女自卫慰黄网站免费| 操逼不卡中文字幕| 精品视频免费在线一区| 国产精品麻豆成人av| 狠狠婷婷亚洲中文综合久久| 97Ai亚洲| av草草在线电影| 日韩少妇在线视频| 国产极品久久久| 蜜臀久久在线视频| 美女的肌被草喷水视频| 大香蕉欧美伊| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 欧美男女午夜啪啪| 麻豆久久久一区二区| 婷婷导航| 依人大香蕉| 无码最新| ..日韩av毛片精品久久久| 国产色综合亚洲色综合吹潮| 你懂的在线观看区国产| 无码精品久久久久久亚洲| 成人久久久| 亚州91| 亚洲欧洲激情卡通另类文学四射小说网站 | 欧美淫乱视频| 99福利社| 97ai亚洲| 热热色AV| 99re视频在线播放青草| 欧美综合色,www| 亚洲丝袜少妇在线| 91高潮| 亚洲综合色图欧美| 密臀在线视频| 91精品国| 伦理第一页| 蜜桃传媒视频第一区入口在线看| 蜜臀久久99精品久久久久久成人小说 | 久草这里只有精品 | 草b在线| 97欧美精品综合| 久久的网站啊啊啊啊啊| 女人一区| 99久久com免费视频′| 欧美丝袜激情| 极品粉嫩少妇视频| 好爽免费视频,| 国产AV天美传媒一区二区三区 | 老熟女乱伦一区| 97人妻免费中文字幕| 久久精品国产亚洲AV片多多| 丁香六月啪| 亚码激情| 国产AV人人 夜夜人人澡| 狠狠搞 亚洲91| 免费成人在线熟妇网| 亚洲在钱| 国产超碰欧美| 日骚逼视频| 东京热一区二区中文字幕| 狠狠色伊人亚洲综合网站色| 天天躁日日躁成人字幕aⅴ| 国产v片在线免费观看| 久久久久久久久久va| 免费簧片在线观看| 国产精品亚洲免费| 亚洲精品丝袜-不卡成人免费……| 六月天婷婷| 欧美日日夜夜| 精品97久久综合| 97免费视频在线观看视频| 蜜臀久久久99久久久久 | 国精精品无码一二三区水多多| 婷婷亚洲色| 哈哈操电影AV| 亚洲91射| 欧美性爱超碰97| 欧美综合国产精品久久丁香| 日本五十路熟女一区二区| 九九在线视频| 一区二区三区日韩欧美 | 新亚洲无码| 亚洲成人久久一区二区| 在线人人人人人人精品超| 999狠狠综合| 中文字幕乱码人妻一区二区三区,99精品 | 蜜臀一二三| 蜜臀久久99精品久久久久久婷婷 | 欧美情色男人的天堂| 亚洲综合在线91| 欧美亚洲国产91在线| 日本中文字幕在线电影| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 强奸少妇AV导航网| 好湿好紧好爽 视频| 欧美性暴力猛交XXXX| 97免费视频网| 日日骚精品视频| 日韩久久艹| 欧美 亚洲 大香| 精品一区二区人妖| 99国产精品人妻人伦| 国产和美国毛片| 色原狠狠天天天| 欧美亚洲素人制服精品| 九九色图| 十八禁黄色成人网站观看| 久久亚洲日韩熟女精品| 久操操AV电影| 人妻久久久| 久草老司机| 大香蕉乱级| 国产精品麻豆成人AV艾秋| av东京热男人的天堂| 国产精品免费久久久久久久久久| 亚洲乱码国产乱码精网站| 国产极品999| 欧美综合色图片| 国产av强奸美女| 婷婷五月天AV| 午夜久久一区二区无码中出| 亚洲成人帖图| 欧美色性爱| 欧美色图私拍91| 亚洲一二三四区| 无码丰满熟妇一区二区浪潮AV| 久久久蜜桃一区二区三区| 做爱福利视频一区二区| 校园春色亚洲色图| 在线观看岛国有码| 91蜜臀在线久久久久| 久久精品人妻一区二区三区| 很黄很色的视频在线观看| 久久亚洲骚逼综合| 亚洲黄色| 日韩欧美经典在线观看| 伊人 俄罗斯 a v| 日本大香蕉综合网红本杳社区| 3P乱轮视频| 97 九色| 草草草视频在线免费看| 一本久道久久综合狠狠爱| WWW美腿丝袜香蕉中文| 97在线精品观看视频| 啊好爽受不了无码| 亚洲av成人精品一区| www.激情| 九九九九AV| 欧美精品999| 欧美综合狠| 伊人一区二区在线播放| 久久发布国产伦子伦精品| 精品九九| 国产91美女高潮| 97欧美日韩综合| 欧美一级A片在线看视频性色| 久久久九九九九| 亚洲图片激情综合另类| 91九九九小逼| 蜜乳成人AV| 男人干美女| 亚洲国产一区二区日韩专区| 天天亚洲综合| 久久久精品中文字幕爱豆| 日本裸体久久色噜噜| www国产无码| 久久久久久久久久久久久久久性生活视频| 超碰9 7女人| av天堂手机版追回| 麻豆天天躁天天揉揉AV| 屁屁影院一区二区三区国产| 人人操人人射人人干| blacked精品一区国产| 欧洲大香蕉| 久草免费在线一区二区| 老色鬼成人精品视频下载大在线观看| 在线国产福利网址导航| 国产亚洲日本| 狠狠操夜夜| 1024手机看片欧美日韩| 欧美操逼熟女| 大香蕉青青9| 亚洲蜜桃V妇女| 欧美激情久久久久| 熟妇人妻精品一区二区| 天天综合色| 亚洲欧美日韩偷拍色图| 九九精品美女高溯喷水 | a片久久久久久久久久久久 | 男女性无套 免费九一| 大香蕉国产中文自拍| 国产强奸乱伦第1页| 国产乱码久久| 曰韩中文人妻视频| 91亚洲影院综合|