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

朋友,這篇筆記看起來怎么樣呢?

開發 架構
我把 Var 理解為決策變量,或者自變量;而 Args 是根據 Var 變動的,中介變量,本身并不主動變化,受 Var 們變動影響。

[[419848]]

前言:這是我 3月22日 寫的線性求解器 gecode 的筆記。我喜歡 gecode 的文檔,也很喜歡它簡潔流暢的 C++ 源碼。計劃趕不上變化快,當時興致勃勃的我,真的想不到,3月22日是我這五個月來最后一次寫這么工整的筆記;之后我便陷入一場極大的拉鋸戰中——無暇再打開這個筆記(甚至都給忘了,這幾天整理資料才想起),但拉鋸戰最終收獲甚少;當時的我更想不到,現在提起「線性優化」這個課題,我的第一反應是拒絕。我很喜歡這個筆記,稍微閱讀我便可以把當時總結的重點全部回顧起來。這幾個月來的教訓是:不要認為自己可以什么都學、什么都涉獵,趕快定好一個細分方向,努力下去吧。接下來的很長一段時間,我可能都沒空更新這個筆記了。我當時的期望「gecode 是很優秀的線性求解器,但中文互聯網幾乎沒有其系統性教輔資料,我用研一下學期來寫一套」近期也不可能實現了。共勉。我會回來看你的,老伙計。

Gecode基礎知識

  • Gecode基礎知識[1]
    • SendMoreMoney[3]
    • 必須注意的點[4]
    • rel - 關系約束[5]
    • distinct - 兩兩不同約束[6]
    • branch - 定義分支規則[7]
    • 關于 print[8]
    • 以SendMoreMoney為例[2]
    • 搜索引擎的使用[9]
    • 異常處理[10]
    • Gist - 可視化求解過程[11]
    • 設定目標值[12]
  • 筆記地址[13]

以SendMoreMoney為例

SendMoreMoney

我們給這八個字母賦值(賦一個數字):S E N D M O R Y

使得等式成立:SEND + MORE = MONEY ,其中每個字母是不同的數字。

還不明白?告訴你答案,我們最后要把 SEND + MORE = MONEY 替換為 9567 + 1085 = 10652 。這就是求解成功了,其中 S 是 9 、 E 是 5 ...

必須注意的點

代碼在:https://gitee.com/piperliu/math_codes_economics_management/tree/master/gecode_MPG_notes/codes/03sendmoremoney/sendmoremoney.cpp[14]

  1. // 使用整數變量和整數約束 
  2. // 我們需要 include gecode/int.hh 頭文件 
  3. #include <gecode/int.hh> 
  4. // 使用搜索引擎(求解邏輯),我們需要 gecode/search.hh 頭文件  
  5. #include <gecode/search.hh> 
  6.  
  7. // 所有的 gecode 功能都在命名空間 Gecode 里 
  8. // 所以,避免 Gecode::IntVarArray 這樣的麻煩 
  9. // 我們 using namespace Gecode; 來簡化代碼 
  10. using namespace Gecode; 
  11.  
  12. // 所有的模型都要繼承 Gecode::Space 
  13. class SendMoreMoney : public Space { 
  14. protected: 
  15.   // 這里聲明了一個整數變量數組 l 
  16.   IntVarArray l; 
  17. public
  18.   // 在構造函數里聲明模型 
  19.   // l(*this, 8, 0, 9) 表示: 
  20.   //   - 變量數組 l 是這個模型的(this) 
  21.   //   - 變量數組 l 包含 8 個變量 
  22.   //   - 這些變量的取值范圍是 [0, 9] 
  23.   SendMoreMoney(void) : l(*this, 8, 0, 9) { 
  24.     // 我們聲明了一些變量 
  25.     IntVar s(l[0]), e(l[1]), n(l[2]), d(l[3]), 
  26.            m(l[4]), o(l[5]), r(l[6]), y(l[7]); 
  27.     // 下面是一些約束的實現,先不用管具體含義 
  28.     // no leading zeros 
  29.     rel(*this, s, IRT_NQ, 0); 
  30.     rel(*this, m, IRT_NQ, 0); 
  31.     // all letters distinct 
  32.     distinct(*this, l); 
  33.     // linear equation 
  34.     // 這里是一些 Args 變量 
  35.     // 我把 Var 理解為決策變量,或者自變量 
  36.     // 而 Args 是根據 Var 變動的,中介變量 
  37.     // 本身并不主動變化,受 Var 們變動影響 
  38.     IntArgs c(4+4+5); IntVarArgs x(4+4+5); 
  39.     c[0]=1000; c[1]=100; c[2]=10; c[3]=1; 
  40.     x[0]=s;    x[1]=e;   x[2]=n;  x[3]=d; 
  41.     c[4]=1000; c[5]=100; c[6]=10; c[7]=1; 
  42.     x[4]=m;    x[5]=o;   x[6]=r;  x[7]=e; 
  43.     c[8]=-10000; c[9]=-1000; c[10]=-100; c[11]=-10; c[12]=-1; 
  44.     x[8]=m;      x[9]=o;     x[10]=n;    x[11]=e;   x[12]=y; 
  45.     linear(*this, c, x, IRT_EQ, 0); 
  46.     // 定義了分支定界的規則 
  47.     // post branching 
  48.     branch(*this, l, INT_VAR_SIZE_MIN(), INT_VAL_MIN()); 
  49.   } 
  50.   // 必須聲明一個 copy constructor 
  51.   // 其中一定一定要有對于變量的更新 
  52.   // search support 
  53.   SendMoreMoney(SendMoreMoney& s) : Space(s) { 
  54.     l.update(*this, s.l); 
  55.   } 
  56.   // 以及聲明一個 copy 方法(用于search) 
  57.   virtual Space* copy(void) { 
  58.     return new SendMoreMoney(*this); 
  59.   } 
  60.   // print solution 
  61.   void print(void) const { 
  62.     std::cout << l << std::endl; 
  63.   } 
  64. }; 
  65.  
  66. // main function 
  67. int main(int argc, char* argv[]) { 
  68.   // create model and search engine 
  69.   SendMoreMoney* m = new SendMoreMoney; 
  70.   DFS<SendMoreMoney> e(m); 
  71.   delete m; 
  72.   // search and print all solutions 
  73.   while (SendMoreMoney* s = e.next()) { 
  74.     s->print(); delete s; 
  75.   } 
  76.   return 0; 

如上,我們實現了一個問題,我在中文注釋中做出了解釋。值得注意的有:

  • 所有的 gecode 功能都在命名空間 Gecode 里
  • 所有的模型都要繼承 Gecode::Space
  • 除了基本的構造函數,必須聲明一個 copy constructor 、以及聲明一個 copy 方法(用于search)
  • 我們必須在 copy constructor 對決策變量進行更新(比如 l.update(*this, s.l);),這尤為重要,否則程序不會報錯,而求解過程是錯誤的。原因在于,我們的求解器在求解過程中,會不斷賦值 Space 實例,如果不在 copy constructor 中更新決策變量,則無法進行回溯、保存等操作

我把 Var 理解為決策變量,或者自變量;而 Args 是根據 Var 變動的,中介變量,本身并不主動變化,受 Var 們變動影響。

注意到無論是變量還是約束,其聲明時,第一個參數都 *this 。你可以如此理解:變量如小孩子,小孩子出生,必須明確 ta 的監護人是誰,否則,接下來小孩子沒有依靠,這個小孩子也就活不下去。在這里,我們的變量和約束都依靠其存在的問題中,即類 SendMoreMoney 。

rel - 關系約束

  1. rel(*this, s, IRT_NQ, 0); 

上述語句表示:變量 s 不等于 0,其中:

  • IRT_NQ 表示不等于,我們將在后文見到所有的邏輯符號表達
  • rel 是 relation 的意思

distinct - 兩兩不同約束

  1. distinct(*this, l); 

我們這里不具體闡述 distinct 的用法,只說明其作用:

  • l 數組中變量要兩兩不同(pairwise different)

其他約束不再詳述,以后會提到。

branch - 定義分支規則

在求解過程中,不同的搜索方式對于求解效果有著天差地別的影響。因此定義合適的 branch 分支規則尤為重要。

  1. branch(*this, l, INT_VAR_SIZE_MIN(), INT_VAL_MIN()); 

這里表示,對于變量數組 l 中的變量,我們首先選擇對其中搜索范圍最小的變量進行搜索(INT_VAR_SIZE_MIN()),此外如果選擇了一個變量,我們將現有的最小值賦給它(INT_VAL_MIN())。

其他規則以及關于 branch 的用法將在后文討論。

關于 print

在求解后, gecode 會自動調用 print 輸出。我們可以自由發揮,重載 print 函數,讓解是我想要的形式。

  1. // print solution 
  2. void print(void) const { 
  3. std::cout << l << std::endl; 

求解后的效果:

  1. {9, 5, 6, 7, 1, 0, 8, 2} 

表示 S 是 9 、 E 是 5 ...

搜索引擎的使用

我們在上面定義了我們的問題(包含變量與約束),我們在程序中稱之為一個“模型model”。

這個模型對象中存儲了當前變量的范圍,我將其理解為搜索中的一些節點的集合(在一些運算后產生的更小的、更精準的解空間)。

那么如何實現一顆搜索樹呢?在 main 方法中,我們將其實現。

  1. // main function 
  2. int main(int argc, char* argv[]) { 
  3.   // create model and search engine 
  4.   SendMoreMoney* m = new SendMoreMoney; 
  5.   // 第一個 print() 
  6.   std::cout << "1" << std::endl; 
  7.   m->print(); 
  8.   m->status(); 
  9.   // 第二個 print() 
  10.   std::cout << "2" << std::endl; 
  11.   m->print(); 
  12.   DFS<SendMoreMoney> e(m); 
  13.   // 第三個 print() 
  14.   std::cout << "3" << std::endl; 
  15.   m->print(); 
  16.   delete m; 
  17.   // search and print all solutions 
  18.   while (SendMoreMoney* s = e.next()) { 
  19.     // 第四個 print() 
  20.     std::cout << "4" << std::endl; 
  21.     s->print(); delete s; 
  22.   } 
  23.   return 0; 

你可以看到,我在上面安插了 4 個 print,來看看當前我們搜索到的范圍。輸入如下。

  1. {[1..9], [0..9], [0..9], [0..9], [1..9], [0..9], [0..9], [0..9]} 
  2. {9, [4..7], [5..8], [2..8], 1, 0, [2..8], [2..8]} 
  3. {9, [4..7], [5..8], [2..8], 1, 0, [2..8], [2..8]} 
  4. {9, 5, 6, 7, 1, 0, 8, 2} 

當我們聲明這個問題時(初始化模型),我們的模型根據約束做了一些最基本的運算,在這里體現為:

  • S的范圍應該是[1, 9]
  • M的范圍應該是[1, 9]

這很好理解,因為我們有約束 rel(*this, s, IRT_NQ, 0);, rel(*this, m, IRT_NQ, 0); 。

只有當我們調用 status() 后,約束傳播constraint propagation才會起作用。

status函數的注釋原文為 Query space status Propagates the space until fixpoint or failure; updates the statistics information stat; and:

  • if the space is failed, SpaceStatus::SS_FAILED is returned.
  • if the space is not failed but the space has no brancher left, SpaceStatus::SS_SOLVED is returned.
  • otherwise, SpaceStatus::SS_BRANCH is returned.

我的理解是,對現有的解空間做一次最基本的探索,直到需要 branch 做決策的點或者探索失敗。

值得注意的是,如果我們取消上述 m->status(); 這句話,那么 3 對應的 print() 依然是 {9, [4..7], [5..8], [2..8], 1, 0, [2..8], [2..8]} 。這說明為我們的模型聲明搜索引擎時,會調用一次 status() 。

如下,在 while 中,我們希望返回每一次探索的解。值得注意的是,解也是一個模型(問題實例)。

  1. while (SendMoreMoney* s = e.next()) { 
  2.     // 第四個 print() 
  3.     std::cout << "4" << std::endl; 
  4.     s->print(); delete s; 
  5.   } 

在這里,e是基于DFS深度優先搜索的搜索引擎,e.next()則是基于DFS規則做出的下一個探索方向的探索結果。如果探索到頭了,那么e.next()會返回NULL,此時 while 停止,跳出循環。

異常處理

實際上,為了捕捉 Gecode 的異常,使用 try {} catch () {} 是一個很好的選擇。

  1. int main(int argc, char* argv[]) { 
  2.   try { 
  3.     // main 中的內容 
  4.   } catch (Exception e) { 
  5.     std::cerr << "Gecode exception: " << e.what() << std::endl; 
  6.     return 1; 
  7.   } 
  8.   return 0; 

注意,這里的 Exception 是 Gecode 命名空間中的異常Gecode::Exception。

不管是本筆記還是教程文件MPG,都沒有使用 try catch (為了易讀性),但是在時間使用中,還是應該具有如此的良好習慣。

Gist - 可視化求解過程

程序見https://gitee.com/piperliu/math_codes_economics_management/tree/master/gecode_MPG_notes/codes/03sendmoremoney/sendmoremoneyGist_1.cpp[15]

  1. #include <gecode/gist.hh> 
  2. using namespace Gecode; 
  3. ... 
  4.  
  5. int main(int argc, char* argv[]) { 
  6.   SendMoreMoney* m = new SendMoreMoney; 
  7.   Gist::dfs(m); 
  8.   delete m; 
  9.   return 0; 

我們引入 gist.hh 頭文件,在 main 中較為簡單地可視化 dfs 過程。

可以用鼠標探索

關于 gist 功能,還有其他調用方法。gist功能較為強大,這里不再贅述。

此外,還可用手動增加現實解的功能,代碼見https://gitee.com/piperliu/math_codes_economics_management/tree/master/gecode_MPG_notes/codes/03sendmoremoney/sendmoremoneyGist_2.cpp[16]

添加了 inspect

設定目標值

設定目標值時,我們需要聲明 cost 函數以及用變量表示搜索過程中變量的傳遞(用于目標函數的計算)。這里不詳細討論。 

這并不復雜,我們將在之后的筆記中專門討論。

 

責任編輯:武曉燕 來源: Piper蛋窩
相關推薦

2021-10-02 10:36:00

YAML編程語言軟件開發

2019-08-08 16:12:33

2013-12-30 10:06:51

智能硬件3D打印互聯網化

2016-08-01 11:33:40

云遷移云安全合規性

2022-02-28 12:57:09

GNOMEPlasma桌面

2022-03-30 14:23:48

LibreOfficOffice開源

2022-02-21 12:05:49

LibreOffiLinux工具欄

2021-02-02 13:23:47

Python語言線程

2023-08-29 08:01:39

2014-11-07 10:26:05

2012-04-11 09:44:42

谷歌Chrome OS

2024-05-23 08:31:34

2024-09-13 16:19:47

2021-12-19 22:48:53

JavaScript開發代碼

2023-07-11 15:43:16

JavaScript技巧

2022-05-26 01:15:22

GitHub代碼快捷鍵

2022-01-22 16:25:51

System76桌面應用

2018-04-16 11:03:50

區塊鏈陷阱騙術

2024-11-29 09:00:00

云計算應用

2011-09-28 10:05:42

Java
點贊
收藏

51CTO技術棧公眾號

成人综合影院| 亚洲综合久久网| 亚洲一区二区三区日本久久九| 亚洲激情综合网| 国产精品国产精品国产专区不卡| 久久一区二区三区视频| 成人3d精品动漫精品一二三| 91精品国产综合久久久久久久| 91免费版看片| 毛片免费在线观看| 国产一区二区毛片| 青青草精品毛片| 午夜剧场免费在线观看| 欧美变态网站| 678五月天丁香亚洲综合网| 精品国偷自产一区二区三区| 国产视频二区在线观看| 国产不卡一区视频| 国产精品久久久久久久久久小说 | 亚洲444eee在线观看| 日韩精品在在线一区二区中文| 国产人妖一区二区| 三级成人在线视频| 欧美精品18videosex性欧美| 欧美18—19性高清hd4k| 国产成人福利av| 91精品综合久久久久久| 18禁免费无码无遮挡不卡网站| 久操视频在线播放| 国产亚洲一区二区在线观看| 国产伦精品一区二区三区四区视频| 国产精品露脸视频| 免费亚洲视频| 国内精品久久久久| 日本少妇高清视频| 精品美女在线视频| 亚洲男人第一av网站| 久草视频福利在线| 亚州一区二区| 欧美电影精品一区二区| 日韩va在线观看| 精品三级在线| 欧美日韩亚州综合| 日本va中文字幕| 国产精品av一区二区三区| 五月天网站亚洲| 国产 欧美 日韩 一区| p色视频免费在线观看| 久久嫩草精品久久久精品一| 久久久综合亚洲91久久98| 刘亦菲毛片一区二区三区| 国产精品12区| yellow视频在线观看一区二区| 97人妻精品一区二区三区视频| 青青草成人在线观看| 国产精品久久二区| 伊人久久国产精品| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲一级在线播放| 日韩av一区二区三区四区| 国产成人亚洲综合| 草莓视频18免费观看| 爽好多水快深点欧美视频| 欧美综合一区第一页| 在线观看日本网站| 日日噜噜夜夜狠狠视频欧美人| 欧美有码在线观看| 国产精品自拍第一页| 人人超碰91尤物精品国产| 国产精品青草久久久久福利99| 中国一级特黄视频| 激情图区综合网| 97se亚洲综合| 欧美视频免费一区二区三区| 国产日韩欧美亚洲| 一级一片免费播放| 国产在线xxx| 日韩欧美中文在线| 国产精品自拍视频在线| 欧美视频三区| 亚洲电影天堂av| 欧美人妻一区二区三区| 97国产成人高清在线观看| 九九久久久久99精品| 日本三级2019| 男男视频亚洲欧美| 99在线观看| 欧美精品a∨在线观看不卡| 国产精品三级久久久久三级| 免费看黄色a级片| 手机在线观看av网站| 欧美日韩中字一区| 日本女人性视频| 日本欧美韩国国产| 色噜噜狠狠狠综合曰曰曰88av| 国产大学生自拍| 久久久久国产精品一区三寸| 91精品视频在线免费观看| 亚洲免费视频网| 欧美国产精品一区二区三区| 国产亚洲黄色片| 久久久久毛片| 精品视频在线导航| 99久久婷婷国产综合| 亚洲在线网站| 国产91亚洲精品一区二区三区| 美女做暖暖视频免费在线观看全部网址91| 综合久久综合久久| 成人在线免费在线观看| 亚洲精品一二三**| 尤物九九久久国产精品的特点| 精品少妇久久久久久888优播| 日本美女一区二区三区| 国产久一道中文一区| 日本不卡不卡| 在线视频欧美精品| 特级西西人体4444xxxx| 午夜av一区| 国产精品久久久久久搜索| 肥臀熟女一区二区三区| ...中文天堂在线一区| 国产熟女高潮视频| 奇米777国产一区国产二区| 萌白酱国产一区二区| 在线观看免费高清视频| 久久免费的精品国产v∧| 国产xxxx振车| 欧美专区一区| 精品国产一区二区在线 | 黄页在线观看免费| 欧美日韩视频在线第一区| a视频免费观看| 亚洲二区在线| 国产精品一区二区免费| 日本欧美电影在线观看| 51精品秘密在线观看| 国产午夜精品福利视频| 视频精品一区二区| 欧美污视频久久久| 高清不卡av| 亚洲视屏在线播放| 亚洲 欧美 中文字幕| 久久久九九九九| 男人添女人下部高潮视频在观看| 99国产精品久久一区二区三区| 另类色图亚洲色图| 国产精品自偷自拍| 樱桃视频在线观看一区| 国产人妖在线观看| 亚洲大片在线| 欧美大香线蕉线伊人久久| 在线观看爽视频| 亚洲日本中文字幕| 亚洲一区在线观| 亚洲欧洲99久久| 国产男女无遮挡猛进猛出| 欧美破处大片在线视频| 精品久久久久久一区| 亚洲第一av| 国产一区av在线| 国产精品久久久久久久久久久久久久久久久久 | 中文字幕在线亚洲精品| 国产精品视频一区二区三区综合| 欧美成人手机在线| 欧美天堂在线视频| 色综合久久88色综合天天6| 国产高清一区二区三区四区| 爽好多水快深点欧美视频| 欧美亚洲视频一区| youjizz欧美| 清纯唯美日韩制服另类| av影片免费在线观看| 91麻豆精品久久久久蜜臀| 久久亚洲av午夜福利精品一区| 成人av网站在线观看| 日韩黄色片视频| 欧美xxxxx视频| caoporen国产精品| 国产精品av一区二区三区| 色婷婷av一区二区三区在线观看| 精品国产无码AV| 狠狠躁天天躁日日躁欧美| 在线观看亚洲大片短视频| 国产黄色成人av| 日韩在线xxx| 欧美va亚洲va日韩∨a综合色| 国产尤物99| 国产一区影院| 91高潮精品免费porn| 婷婷免费在线视频| 亚洲激情第一页| 亚洲天堂视频在线| 亚洲国产成人tv| 在线观看亚洲大片短视频| 成人免费毛片aaaaa**| 婷婷激情四射五月天| 伊人久久大香线蕉综合热线| 视频一区免费观看| 国产成人高清精品免费5388| 国产精品三级在线| 日本不良网站在线观看| 久久精品亚洲一区| 久久精品蜜桃| 精品国产乱码久久久久久免费| 日本欧美www| 亚洲成av人片在线观看无码| 亚洲精品国产精品乱码在线观看| 99re热视频精品| 男人的天堂免费| 九一九一国产精品| 国产综合免费视频| 伊人影院久久| 国产美女视频免费| 欧美一区二区三区高清视频| 好吊色欧美一区二区三区视频| 国产一区二区三区国产精品| 国产精品高潮呻吟久久av无限| 国产污视频在线播放| 欧美国产视频一区二区| 国产理论在线观看| 中文字幕在线看视频国产欧美在线看完整| 天堂在线观看av| 精品sm在线观看| 99久久婷婷国产一区二区三区| 欧美在线综合视频| 日韩电影在线观看一区二区| 欧美性猛交xxxx久久久| 日本一区二区三区四区五区| 一区二区三区日韩在线观看| 亚洲女人久久久| 亚洲天堂精品在线观看| 精品少妇一区二区三区密爱| 国产女同互慰高潮91漫画| 爱爱的免费视频| 91小视频免费看| 一区二区视频观看| www.欧美日韩| 国产精品伦子伦| 99精品国产热久久91蜜凸| 国模无码视频一区| 大桥未久av一区二区三区中文| 手机在线播放av| 床上的激情91.| 波多野结衣办公室双飞| 成人一二三区视频| 色哟哟无码精品一区二区三区| 高清国产一区二区| 怡红院一区二区| 99在线精品视频| 亚洲熟妇无码av| 国产日产亚洲精品系列| 欧美福利第一页| 中文字幕中文字幕在线一区 | 日本55丰满熟妇厨房伦| 韩国毛片一区二区三区| 宇都宫紫苑在线播放| 国产成人丝袜美腿| 中文成人无字幕乱码精品区| 99久久精品国产麻豆演员表| 国产精品毛片一区二区| 日本一区二区三区视频视频| 99久久99久久精品免费看小说.| 中文字幕第一区第二区| 日本在线一级片| 亚洲图片欧美视频| 天天操中文字幕| 欧美亚洲高清一区二区三区不卡| 亚洲天堂视频在线| 精品国产髙清在线看国产毛片| 色婷婷av一区二区三区之红樱桃| 亚洲精选在线观看| 欧美精品videos另类| 欧美日韩成人精品| 涩涩网在线视频| 成人av在线亚洲| 红杏aⅴ成人免费视频| 欧美性xxxx69| 亚洲精品成人影院| 激情伊人五月天| 另类小说视频一区二区| 日本女人性视频| 国产欧美一区二区精品秋霞影院| 国产传媒免费在线观看| 天涯成人国产亚洲精品一区av| www.日韩一区| 日韩免费高清视频| 国产三级视频在线看| 欧美xxxx做受欧美| 久久电影tv| 91久色国产| 精品一级毛片| 成人午夜视频在线观看免费| 奇米精品一区二区三区四区| 精品人妻伦一二三区久| 国产精品天天看| 久久视频免费在线观看| 精品视频123区在线观看| 人妻视频一区二区三区| 日韩中文字幕在线观看| 国产高清中文字幕在线| 91黄色国产视频| 欧美视频免费| 国产黄页在线观看| 国产在线一区观看| 国产精成人品免费观看| 欧美日韩国产黄| 国产三级午夜理伦三级| 一区二区在线免费视频| 超碰97国产精品人人cao| 国产欧美韩国高清| 亚洲深夜福利在线观看| 国内少妇毛片视频| 九九在线精品视频| 最新中文字幕av| 欧美日韩色婷婷| 亚洲成a人片在线| www.久久色.com| 国产一区二区色噜噜| 欧美色图亚洲自拍| 欧美亚洲一级| 日本免费福利视频| 亚洲国产wwwccc36天堂| 精品人妻aV中文字幕乱码色欲| 日韩中文字幕久久| 美脚恋feet久草欧美| 国内精品二区| 狠狠88综合久久久久综合网| 又黄又爽又色的视频| 国产精品久久久久久久久免费樱桃| 国产精品视频123| 日韩精品在线观看网站| 成年男女免费视频网站不卡| 成人免费在线一区二区三区| 在线中文字幕第一区| 日韩视频在线观看一区二区三区| 国产精品欧美精品| 亚洲精品久久久久久久蜜桃| 亚洲欧洲高清在线| 希岛爱理一区二区三区av高清| 精品国产一区二区三区免费| 日韩午夜精品| 最近日本中文字幕| 色婷婷综合在线| 国产永久免费高清在线观看| 国产精品第3页| 第一会所sis001亚洲| 五月天激情视频在线观看| 中文字幕国产一区| 在线播放亚洲精品| 久久夜色精品国产| 国产在线一区不卡| av动漫在线免费观看| 风间由美性色一区二区三区| 国产系列精品av| 亚洲日本成人网| 精品久久福利| 成人区一区二区| www.在线成人| 免费黄色av片| 久久精品国产欧美亚洲人人爽| 91视频亚洲| 99视频精品全部免费看| 国产精品综合网| 日本特黄一级片| 亚洲色图欧美制服丝袜另类第一页 | 国产精品国产三级国产有无不卡| 亚洲一区在线观| 久久久免费高清电视剧观看| 夜夜春成人影院| 天堂视频免费看| 亚洲一区二区三区在线播放| 亚洲欧美日韩成人在线| 日本久久亚洲电影| 中文无码久久精品| 精品国产一区在线| 欧美四级电影在线观看| 中文字幕免费高清电视剧网站在线观看| 国产精品视频500部| 日本在线不卡一区| 少妇aaaaa| 亚洲久久久久久久久久| 日韩黄色在线| 国产原创popny丨九色 | 在线免费一区| 成人av手机在线观看| 中文字字幕在线中文乱码| 欧美激情久久久| 日本电影一区二区| 国产原创剧情av| 欧美日韩卡一卡二| 成人bbav| 在线国产伦理一区| www国产精品av| 国产乱淫av免费| 国产mv免费观看入口亚洲| 欧美成人一品| 中文字幕黄色网址| 日韩电影免费观看中文字幕| 亚洲一区导航| www.日日操|