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

解決數獨問題用人工智能還是量子計算?

人工智能 深度學習
作為一種有趣的棋盤游戲,數獨誕生100周年之后,它是如何成為計算研究的焦點之一的呢?探索如何使用人工智能或量子計算機從頭開始創建一個智能數獨求解器。

 作為一種有趣的棋盤游戲,數獨誕生100周年之后,它是如何成為計算研究的焦點之一的呢?探索如何使用人工智能或量子計算機從頭開始創建一個智能數獨求解器。

 

[[343750]]

 

在深入探究之前,先來了解一下歷史

馬克•布洛赫說:"歷史被稱為學科之母。"那么,讓我們來談談著名的數獨游戲是如何誕生的吧。這個故事可以追溯到19世紀末,起源于法國。法國日報《世紀報》(Le Siecle)發布了一款9x9大小的猜謎游戲,它需要算術運算而不是邏輯運算,它的數字是兩位數,而不是1- 9。它的游戲性質與數獨游戲(Sudoku)類似,即把橫排、列和對角線的數字相加,也會得到相同的數字。1979年,退休的建筑師和puzzler Howard Garns被認為是現代數獨游戲的創造者,該游戲以數字地名的名義首次在戴爾雜志上發表。1986年,日本一家名為Nikoli的拼圖公司首次以Sudoku的名字出版了這個拼圖。

 

在解決數獨游戲的問題框架

數獨是一個約束滿足問題(CSP)的真實例子,因為變量集、域集和約束集都是有限的。我們必須在一個9x9表中輸入1-9之間的數字,這樣每一行、每列和每3x3子表中的數字都只包含一個數字。 Sudoku也存在另一種變化,即Diagonal Sudoku,它在表對角線的每個對角線中都規定了一組額外的約束,每個數字必須準確地具有一次特征。 我們知道約束滿足域,最優解必須滿足所有約束,或更具體地說,它應該遵守游戲規則。 最優解將滿足集合中的所有約束,從而解決難題。

計算上,可以用非確定性多項式時間(NP)解決求解數獨的約束,因為可以使用一些非常特殊的蠻力算法來解決約束,并且也可以在多項式時間內測試解集的有效性,其中輸入 該問題與多項式長度的一組解有關。 完全解決的數獨就是拉丁方格的示例(如Euler所述,n x n數組填充有n個不同的符號)。 數獨問題可以認為是圖形著色問題,其中我們僅需要使用9種顏色對圖形進行著色,而裸露的字母可以認為是部分顏色。

使用人工智能算法集滿足約束

計算科學的基本原理是依靠邏輯來滿足某些約束的能力。 在解決數獨問題時,我們必須訓練求解器以尋找除基本規則外的一些特定的獲勝模式。 因此,問題在于系統不僅在盲目地遵循規則,而且在考慮其近期和長期影響的同時做出一些決策。 這些模式稱為啟發式。 類似于巧遇游戲知識和技巧的專家玩家,僅了解基本規則并不能使他們成為游戲專家。 因此,當我們開發算法并解決問題時,我們必須牢記有用的啟發式方法,我們還應將其包含在程序中,以使其在獲勝時變得更聰明,更有用。

對于我們的Sudoku Solver,我們將輸入81個數字的序列作為字符串,并用'。'(句號)表示未解決的數字。 為了解決該問題,我們將"。"替換為可以放入該單元格的所有可能數字。

根據數獨的限制,我們不能在任何單元格附近的行,列或3x3子正方形中多次使用一個數字。 在對角數獨的情況下,我們還必須考慮相同的約束。 我們首先用所有可能的數字1到9替換句點。我們使用以下grid_values函數以編程方式進行此操作。

 

  1. For the sake of caluclation we take rows as alphaneumeric and columns as numeric.  
  2. rows = 'ABCDEFGHI'  
  3. columns = '123456789' 
  4. boxes = [r + c for r in rows for c in columns]  #every possible cell combination in the grid. 
  5. def grid_values(grid):  ""
  6.   Take in the Unsolved Sudoku Sequence and replaces the unsolved boxes initially with all 
  7.   possible values which can get into that cell. Lastly returns a dictionary containing the  
  8.   values at all cell positions along with cells.  
  9.   ""
  10.   values = []  every_digits = '123456789' 
  11.   for n in grid: 
  12.     if c == '.':   # replacing every unsolved value with every possible value initially. 
  13.       values.append(every_digits)    else:          # if already solved, causing it no change.  
  14.       values.append(c)   assert len(values) == 81 
  15.    return dict(zip(boxes, values)) #returning the sudoku grid with all possible cell values.  

 

解決數獨問題用人工智能還是量子計算?

 

 

首先在所有未解決的單元格中分配所有可能的值。

現在,我們用1到9之間的所有可能數字替換了未解決的單元格,從數獨的基本規則中我們知道,如果數字已經在該行,列和3x3子字段中使用過,我們就不能使用它兩次。 因此,讓我們消除它們,如果我們在未解決的網格中遇到它們時,我們最初已經用所有可能的數字填充了它們。 因此,讓我們看一下如何使用消除python方法從未解決的單元中消除那些不相關的數字。

 

  1. columns_reversed = columns[::-1] #reversing the columns for calculating the Diagonal Units. 
  2. def make_combinations(m, n):  ""
  3.   Takes in input of generally iterables and creates all possible combintation out of them. 
  4.   args: 
  5.    a: string iterable 
  6.    b: string iterable 
  7.    return : list of all possible combination.  
  8.   ""
  9.   return [x + y for x in m for y in n] 
  10. row_units = [make_combinations(r, columns) for r in rows
  11. column_units = [make_combinations(rows, c) for c in columns] 
  12. sub_square_units = [make_combinations(m, n) for m in ('ABC''DEF''GHI')  
  13.                     for n in ('123','456','789')] 
  14. diagonal_1_units = [[rows[i]+columns[i] for i in range(len(rows))]] 
  15. diagonal_2_units = [[rows[i]+columns_reversed[i] for i in range(len(rows))]] 
  16. diagonal_units = diagonal_1_units + diagonal_2_unitsall_units = row_units + column_units + square_units + diagonal_unitsunits = dict((b, [u for u in all_units if b in u]) for b in boxes) 
  17. peers = dict((b, set(sum(units[b], [])) - {b}) for b in boxes) 
  18. def eliminate(values):  ""
  19.   Eliminate the redundant numbers from the unsolved cells if the number already appeared once  
  20.   in the peer of the current cell.  
  21.   What we do here is we erase that redundant number from the unsolved value cells if appeared once.  
  22.   ""
  23.   solved_cells = [box for box in values.keys() if len(values[box]) == 1] # cell is solved if there's only one digit 
  24.   for box in solved_cells: 
  25.     value_at_cell = values[box]   # retrieve the current value at that cell. 
  26.     for peer in peers[box]:       # check for the cell's peers if the value appears again. 
  27.       values[peer] = values[peer].replace(value_at_cell, ''
  28.    return values   # return the modified values dictionary. 

因此,在滿足這些約束的同時,有時我們會遇到一些只能放置一個數字的單元格,但除該數字外,其他數字對于該特定單元格都不再可行。 我們首先要填寫這些內容。 有了適當的解決方案。 我們稱此為"唯一選擇",它是解決數獨網格單元的最簡單的啟發式方法。

 

  1. def only_choice(values): 
  2.   ""
  3.   If in order to satisfy the constraints of the Sudoku Puzzle there is only a single viable option 
  4.   we fill in the Cell with that option only and thereby obtain a solve for the cell.  
  5.    
  6.   ""
  7.   for unit in all_units:     #searching across all the vicinity of the cell. 
  8.     for digit in '123456789':   
  9.       to_be_filled = [cell for cell in unit if unit in values[unit]] 
  10.       if len(to_be_filled) == 1:  # if there exists only a single cell in the unit which is not solved 
  11.         values[to_be_filled[0]] = digit  # We fill in the cell with its proper answer.     
  12.   return values 

在迄今為止圍繞約束滿足的過程中,可能會出現以下情況:一個單元中將有兩個未解決的像元(考慮行,列和3x3子正方形),其中只能分配兩個特定的剩余數。 因此,這兩個數字可以有效地從同一單元中其他單元格上的可能數字中刪除。 這種啟發式方法稱為裸雙胞胎。 該算法的實現專門制作了網格值的深層副本,并檢查了裸胎雙胞胎的可行性,即是否存在兩個僅能接受兩個特定值的未解決像元,如果可行,它將繼續進行并從其他兩個值中刪除這兩個值 同一單元中的單元格。 我們使用如下所示的nude_twins函數以編程方式實現它:

 

  1. def naked_twins(values): 
  2.     ""
  3.     If there are two unsolved cells in a same unit exist such that it can only be filled by only  
  4.     two specific digits, then those two digits can be safely removed from all other cells in the same unit. 
  5.     ""
  6.     twins_possible = [unit for unit in values.keys() if len(values[unit]) == 2]   
  7.     twins = [[unit1, unit2] for unit1 in twins_possible for unit2 in peers[unit1]  
  8.                      if set(values[unit1]) == (set(values[unit2]))]    #confimed Naked Twins 
  9.     for twin in twins: 
  10.         unit1 = twin[0]  
  11.         unit2 = twin[2] 
  12.         peers1 = set(peers[unit1])   
  13.         peers2 = set(peers[unit2]) 
  14.         common_peers = peers1 & peers2  #finding the intersection between the peers of the two naked twin element 
  15.         for peer in common_peers: 
  16.             if len(values[peer]) >  1: 
  17.                 for value in values[unit1]: 
  18.                     values[peer] = values[peer].replace(val, ''))  # Erasing the values.  
  19.     return values 

現在,我們嘗試通過重復應用這三個約束滿足算法并檢查它是否卡住并且無法進一步減少,來盡可能地減少難題。 我們通過使用reduce_puzzle函數以編程方式執行此操作。 我們要做的是在for循環中調用前三個函數,并在網格值的輸入和輸出序列中的已解決單元數相同時終止該函數,這意味著不能再進一步減小它 僅約束滿足算法。

 

  1. def reduce_puzzle(values): 
  2.     ""
  3.     Applying the 4 Constraint Satisfaction Algorithms until it is not further reducible.  
  4.     Checking if the Number of Solved Cells between the iteration. 
  5.     ""
  6.     solved_values = [unit for unit in values.keys() if len(values[unit]) == 1] # considering solved cells 
  7.     stuck = False #boolean flag to determine the end of loop 
  8.     while not stuck: 
  9.         prev_solved_values = len([unit for unit in values.keys() if len(values[unit]) == 1]) #checkpoint 1 
  10.         values = eliminate(values) # applying Elimination CSP 
  11.         values = only_choice(values) # applying Only Choice CSP 
  12.         values = naked_twins(values)  # applying Naked Twins CSP 
  13.         after_solved_values = len([unit for unit in values.keys() if len(values[unit]) == 1]) 
  14.         stuck = after_solved_values == prev_solved_values  # Getting out of loop is the number of solved cell is still the same as the previous iteration. 
  15.          
  16.         if len([unit for unit in values.keys() if len(values[unit]) == 0]): 
  17.             return False   # if there's problems in the internal representation of the sudoku grid return False.  
  18.     return values           # return the reduced grid values.    

如果數獨網格仍未通過約束滿足問題解決,則部分解決方案將到達輸出,其中一些單元格仍將分配給某些可能的值。 在這種情況下,我們要做的是使用搜索樹搜索那些位置中的最佳數字集。 我們使用深度優先搜索(DFS)算法遍歷搜索樹。 因此,基本上,使用DFS,我們用相同的網格創建了幾個實例,并為每個尚未解決的單元嘗試了不同的可能分配。 我們遞歸地要求CSP算法根據搜索結果減少網格。 我們以編程方式實現它,如下所示:

 

  1. def search(values): 
  2.     ""
  3.     Recursive Depth-First Search: If the sudoku grid is not further reducible by constraint satisfaction 
  4.     a few of the cells will be left with different options and with DFS with search for the optimal  
  5.     values for those yet-unsolved cells.   
  6.     ""
  7.     values = reduce_puzzle(values) # We call the Reduction Function to reduce the puzzle further based on the search results across iterations.  
  8.     if values is False
  9.         return False 
  10.     if all(len(values[b]) == 1 for b in boxes): 
  11.         print("Sudoku Problem Solved!"
  12.         return values 
  13.     m, n = min((len(values[b]), b) for b in boxes if len(values[b]) > 1) 
  14.     for value in values[n]: 
  15.         new_sudoku = values.copy() 
  16.         new_sudoku[n] = value 
  17.         attempted = search(new_sudoku) 
  18.         if attempted: 
  19.             return attempted     

我們使用display sudoku函數將輸入的字符串序列顯示為二維9x9 Sudoku網格:

 

  1. def display(values): 
  2.     ""
  3.     Display the values as a 2-D grid. 
  4.     Input: The sudoku in dictionary form 
  5.     ""
  6.     width = 1 + max(len(values[b]) for b in boxes) 
  7.     line = '+'.join(['-' * (width * 3)] * 3) 
  8.     for r in rows
  9.         print(''.join(values[r + c].center(width) + ('|' if c in '36' else ''
  10.                       for c in cols)) 
  11.         if r in 'CF'
  12.             print(line)    return 

為了解決數獨序列,我們將上述函數調用如下:

 

  1. if __name__ == "__main__"
  2.     diag_sudoku_grid = '2.............62....1....7...6..8...3...9...7...6..4...4....8....52.............3' 
  3.     values = grid_values(diag_sudoku_grid) 
  4.     values = reduce_puzzle(values
  5.     values = search(values
  6.     display(values

輸出如下所示,其中一組算法已成功計算出答案。

 

解決數獨問題用人工智能還是量子計算?

 

解決數獨作為約束滿足問題的量子方法

現在,我們將嘗試使用"量子模擬退火"解決簡單的Sudoku網格。 首先,什么是模擬退火? 對于這樣的優化問題,我們的想法是使用一些次優啟發式算法,并獲得最優的啟發式算法集以獲得最優解。 我們在這里使用DWave AQC模型(糖尿病量子計算)來采樣滿足前面討論的約束的最佳解決方案。...

使用DWave Kerberos混合采樣器:

在本示例中,我們正在使用DWave隨附的混合求解器。 它通過運行并行搜索來找出最佳的啟發式方法。 它是一種混合求解器,因為它同時使用了量子計算和經典的計算特性。 它也是一個分解采樣器,在處理時使用異步工作流。 它包含在DWave Systems的Ocean SDK軟件包中。 要開始本地開發,請確保您的系統上安裝了Python 3.5+,然后發出以下命令。

 

  1. python -m pip install --upgrade pip 
  2. pip install dwave-ocean-sdk 

使用二進制二次模型(BQM)進行計算

我們無法構造直接準備將其饋送到Quantum Computers的約束,我們需要一個中間表示來將其饋入。 這就是為什么我們將使用BQM的原因,幸運的是,DWave Ocean SDK已經提供了一種稱為"組合"的工具,可用于將約束滿足問題歸結為BQM。 首先,顧名思義,二進制二次模型本身就是一個方程系統,它是二次的,用二進制表示。 由于計算的復雜性更高,Quantum計算機使用這些計算可以大大加快開發過程。 因此,在游戲中,我們決定使用dimod的組合工具,該工具將返回一個二進制二次模型,該模型對于其輸入變量和內部變量的k個組合中的每一個均最小。

我們首先從dwave-ocean-sdk導入必要的軟件包,并在實際讀入Sudoku Grid之前進行一些完整性檢查。

 

  1. import dimod   
  2. import math  
  3. import sys 
  4. import dimod.generators.constraints import combinations 
  5. from hybrid.reference import KerberosSampler 
  6. def prettify(row, col, digit):    return "{row}, {col}_{digit}".format(row, col, digit) 
  7. def read_matrix(filename):    with open(filename, 'r'as f: 
  8.         all_lines = f.read()    lines = []    for line in all_lines: 
  9.         new_line = line.rstrip()        if new_line: 
  10.             new_line = list(map(int, new_line.split(' '))) 
  11.             lines.append(new_line) 
  12.     return lines  
  13. def sanity_check(matrix):    n = len(matrix) 
  14.     m = int(math.sqrt(n)) 
  15.     unique_digits = set(range(1, 1+n)) 
  16.     for row in matrix: 
  17.         if set(row) != unique_digits: 
  18.             print("Error in row", row) 
  19.             return false 
  20.     for j in range(n): 
  21.         col = [matrix[i][j] for i in range(n)] 
  22.         if set(col) != unique_digits: 
  23.             print("Error in column", col) 
  24.     subsquare_idx = [(i, j) for i in range(m) for j in range(m)] 
  25.     for r_scalar in range(m): 
  26.         for c_scalar in range(m): 
  27.             subsquare = [matrix[i + r_scalar * m ][j + c_scalar * m] for i, j in subsquare_idx] 
  28.             if set(subsquare) != unique_digits: 
  29.                 print('Error in sub-square', subsquare) 
  30.                 return True 
  31.     return True 

現在,我們使用Sudoku Grid的行,列和子正方形索引的所有可用變量組合,使用組合工具來創建二進制二次模型。

 

  1. def main(): 
  2.     if len(sys.argv) > 1: 
  3.         filename = sys.argv[1] 
  4.             matrix = read_matrix(filename)    n = len(matrix) 
  5.     m = int(math.sqrt(n)) 
  6.     digits = range(1, n+1) 
  7.     bqm = dimod.BinaryQuadraticModel({}, {}, 0.0, dimod.SPIN) 
  8.     for row in range(n): 
  9.         for col in range(n): 
  10.             node_digits = [prettify(row, col, digit) for digit in digits] 
  11.             one_digit_bqm = combinations(node_digits, 1) 
  12.             bqm.update(one_digit_bqm)    for row in range(n): 
  13.         for digit in digits: 
  14.             row_nodes = [prettify(row, col, digit) for col in range(n)] 
  15.             row_bqm = combinations(row_nodes, 1) 
  16.             bqm.update(row_bqm)    for col in range(n): 
  17.         for digit in digits: 
  18.             col_nodes = [prettify(row, col, digit) for row in range(n)] 
  19.             col_bqm = combinations(col_nodes, 1) 
  20.             bqm.update(col_bqm)if __name__ == "__main__"
  21.     main() 

就是這樣。 我們已經成功實現了兩種智能解決方案,其中一種使用經典計算,并且使用了功能非常強大的人工智能啟發式算法,甚至可以解決對角數獨網格。 第二種方法使用異步混合啟發式采樣器,該采樣器也恰好使用絕熱量子計算模型的模擬退火來將約束滿足問題轉換為二進制二次模型以對其進行采樣,從而獲得最佳采樣解。

責任編輯:華軒 來源: 今日頭條
相關推薦

2023-11-30 10:29:59

人工智能量子計算

2024-01-03 16:19:04

2019-09-19 08:22:25

人工智能AI社會問題

2023-05-29 16:57:06

2022-06-20 11:05:58

通用人工智能機器人

2022-08-22 14:44:02

人工智能量子計算算法

2022-09-08 08:53:01

人工智能量子計算

2022-03-03 09:43:34

人工智能電網機器學習

2021-11-18 22:36:07

人工智能量子計算機器學習

2024-04-01 07:00:00

電信行業人工智能

2022-07-25 14:10:07

人工智能金融語言

2022-07-04 15:29:59

人工智能機器計算機

2013-05-17 09:45:20

2022-07-26 11:46:55

量子計算人工智能

2024-01-16 10:22:23

人工智能大型語言模GPT 4

2021-01-13 10:53:48

人工智能費用管理AI

2024-04-30 14:39:33

2022-07-31 23:46:57

人工智能語言模型感知力

2020-03-25 09:53:33

人工智能AI技術

2018-07-02 10:48:20

點贊
收藏

51CTO技術棧公眾號

99精品热视频| 91成人精品视频| 91国偷自产一区二区三区成为亚洲经典| 精品国产乱码久久久久久郑州公司 | 国产成人精品综合在线观看 | 吞精囗交69激情欧美| 国产精品免费免费| 91麻豆精品国产91久久久资源速度 | 无码国产精品高潮久久99| 国产日韩一区二区三区在线播放| 亚洲欧美一区二区三区四区| 17c国产在线| 日本黄色免费在线| 综合久久久久久久| 久久艹中文字幕| 国产又粗又大又爽| 亚洲综合激情| 色综合导航网站| 少妇愉情理伦三级| 国产精品香蕉| 91麻豆精品国产综合久久久久久| 免费欧美一级视频| 中文字幕在线观看网站| 久久精品男人的天堂| 高清视频在线观看一区| 中国黄色一级视频| 国产精品久久久亚洲一区| 久久精品99久久久香蕉| 久久只有这里有精品| youjizz亚洲| 欧美精品v国产精品v日韩精品 | 黑人巨大精品一区二区在线| 国产中文精品久高清在线不| 亚洲香蕉伊在人在线观| 午夜欧美性电影| 亚洲欧美日本在线观看| 国产精品99久久久久久似苏梦涵| 国产精品com| 日韩精品成人在线| 欧美区一区二| 久久视频免费观看| www.黄色com| 加勒比久久综合| 国产丝袜视频一区| 欲求不满的岳中文字幕| 亚洲日本va| 欧美一区在线视频| 欧美大片久久久| 美女视频一区| 欧美色综合久久| 日日碰狠狠躁久久躁婷婷| a√中文在线观看| 一区二区三区四区在线免费观看| 欧美h视频在线观看| 香蕉视频网站在线观看| 日本一区二区三级电影在线观看 | 人妻换人妻仑乱| 九七影院97影院理论片久久| 欧洲激情一区二区| 热久久精品免费视频| 精品91久久| 91久久精品一区二区三区| 欧美综合在线观看视频| 日韩网站中文字幕| 欧美羞羞免费网站| 中国黄色片一级| 自拍偷拍亚洲图片| 日韩欧美黄色影院| 9.1在线观看免费| 精品欧美午夜寂寞影院| 亚洲精品国精品久久99热| 国产网站无遮挡| 亚洲深夜福利在线观看| 一区二区三欧美| 美女100%露胸无遮挡| 日韩久久精品| 欧美精品在线免费播放| 国产一级在线播放| 国产精品美女久久久| 国产精品福利小视频| 亚洲在线视频播放| 国产精品一区专区| 精品无人区一区二区三区竹菊 | 99re8这里有精品热视频8在线| 日韩视频一区二区| yy1111111| 精品国产一区二区三区久久久樱花 | 三级网站视频在在线播放| 亚洲成人1区2区| 女人另类性混交zo| 国产高清精品二区| 色哟哟亚洲精品| 超碰超碰在线观看| 亚洲啊v在线免费视频| 日韩精品一二三四区| 超碰人人干人人| 欧美日韩国内| 国产suv精品一区二区| 国产精品丝袜黑色高跟鞋| 成人av在线资源网| 亚洲日本japanese丝袜| www.8ⅹ8ⅹ羞羞漫画在线看| 色天使色偷偷av一区二区| 制服丝袜中文字幕第一页| 国产欧美三级电影| 视频直播国产精品| 国产大片中文字幕| 久久aⅴ国产欧美74aaa| 精品国产乱码久久久久久蜜柚| 99青草视频在线播放视| 亚洲成人激情av| 中文字幕在线综合| 日韩av影院| 欧美成人免费网| 亚洲精品成人在线视频| 国产精选一区二区三区| 日本午夜精品一区二区| www555久久| 欧美日韩精品欧美日韩精品| 中文字幕在线观看的网站| 一区二区三区中文| 国产精品入口免费视频一| 天堂中文在线观看视频| 亚洲欧美另类图片小说| 一本久道中文无码字幕av| 亚洲一区网址| 色妞久久福利网| 亚洲欧美偷拍一区| 欧美久久天堂| 国产裸体无遮挡| 五月天丁香社区| 成年人黄视频在线观看| 成人精品电影| www.亚洲男人天堂| 色一情一乱一伦| 高清成人在线观看| 欧美少妇一区二区三区| 欧美大陆国产| 一区二区欧美久久| 一级黄色免费网站| 99re这里只有精品首页| 日韩国产一级片| aaa国产精品视频| 欧美黑人又粗大| 国产超碰人人模人人爽人人添| 中文字幕中文乱码欧美一区二区| 日本精品久久久久中文字幕| 中文有码一区| 欧美在线视频a| 青青久草在线| 日本乱人伦aⅴ精品| 中文字幕高清视频| 久久久久久黄| 日本午夜精品一区二区三区| 亚洲www啪成人一区二区| 亚洲色图av在线| 亚洲 日本 欧美 中文幕| 国产亚洲精品福利| 日本在线观看免费视频| 日韩精品看片| 91热福利电影| 免费毛片在线看片免费丝瓜视频| 精品欧美一区二区久久 | 中文字幕日韩一区| 日本在线播放一区二区| 中文字幕免费精品| 成人自拍网站| 午夜欧美激情| 亚洲一级片在线看| 一区二区三区亚洲视频| 一区二区三区色| 欧美做受高潮中文字幕| 亚洲一区二区成人| 日韩欧美一区二区三区四区| 欧美爱爱视频| 欧美黄色三级网站| 青青国产在线| 欧美人成免费网站| 欧美黄色免费看| 26uuu久久综合| 一区二区三区国产免费| 亚洲成人av观看| 日日骚久久av| 亚洲第一天堂在线观看| 欧美日韩国产色| 无码人中文字幕| 国产成人8x视频一区二区| 水蜜桃色314在线观看| 国产精品嫩草影院在线看| 成人精品网站在线观看| 不卡av免费观看| 亚洲免费视频网站| 亚洲一区二区三区网站| 性一交一乱一精一晶| 精品久久久久久久久久久久久久久久| 国产午夜麻豆影院在线观看| 99久久亚洲精品日本无码| 人人九九精品| av影片在线| 激情不卡一区二区三区视频在线| 免费成人高清在线视频theav| 国产精品x453.com| 婷婷亚洲综合| 亚洲国产高清一区| 欧美高清视频www夜色资源网| 婷婷伊人五月天| 国偷自产av一区二区三区| 久久最新网址| 国产aⅴ夜夜欢一区二区三区 | 欧美国产日韩亚洲一区| 亚洲18在线看污www麻豆| 中文精品在线| ijzzijzzij亚洲大全| 一区二区小说| 国产精品二区二区三区| 亚州精品国产| 国产成人亚洲综合91| bl在线肉h视频大尺度| 日韩性xxxx爱| 国产免费视频在线| 日韩大陆欧美高清视频区| 精品久久久久成人码免费动漫| 日本道色综合久久| 天堂网av手机版| 亚洲曰韩产成在线| 国产稀缺精品盗摄盗拍| 中文字幕欧美日韩一区| 精品人妻互换一区二区三区| 99免费精品在线观看| 粗大的内捧猛烈进出视频| 久久精品国产在热久久| 国产激情在线观看视频| 一本一本久久| 精品人妻少妇一区二区| 欧美日本不卡| 国产免费一区二区三区四在线播放| 成人中文视频| 天天爽天天狠久久久| 欧美人妖在线| 欧美一卡2卡3卡4卡无卡免费观看水多多| 成人午夜三级| 国产嫩草一区二区三区在线观看| 伊人久久大香线蕉av超碰| 在线精品视频一区二区| 亚洲成人免费网站| 国产精品视频久久久久| 九九爱精品视频| 麻豆视频在线观看| 日本最新在线视频| 国产精品美女久久久久久不卡| www..com久久爱| 亚洲精品福利免费在线观看| 国产成人精品一区| 中文字幕天天干| 欧美日韩激情| 色女人综合av| 久久国产成人午夜av影院宅| 亚洲精品一区二区三区樱花 | 亚洲国产日韩综合一区| 日韩成人精品一区| 日本特级黄色大片| 欧美激情五月| 日韩国产一级片| 日本免费成人| 国产成人精品免费网站| 日本丰满少妇xxxx| 在线亚洲欧美| 网站一区二区三区| 国产米奇在线777精品观看| 免费国产一区二区| 深爱激情综合| 正在播放一区二区三区| 欧美.www| 噜噜噜久久亚洲精品国产品麻豆| 国产日韩精品视频一区二区三区| 久久精品午夜福利| 美国毛片一区二区三区| 精品人妻一区二区乱码| 99久久精品一区| 色屁屁草草影院ccyy.com| 日韩美女精品在线| 伊人365影院| 色噜噜狠狠一区二区三区果冻| 91精品人妻一区二区三区果冻| 欧美一二三区在线观看| 三级无遮挡在线观看| 日韩在线激情视频| 波多野结衣中文在线| 国产精品99久久久久久久久| 亚洲成人精品综合在线| 精品国产乱码一区二区三区四区| 成人精品亚洲| 青青在线视频免费观看| 日韩精品一二三区| 人妻换人妻仑乱| 国产欧美日本一区二区三区| 亚洲色婷婷一区二区三区| 色噜噜狠狠色综合中国| 国内毛片毛片毛片毛片| 亚洲性视频网站| 黄页网站在线| 国产在线一区二区三区| 丝袜av一区| 成人性做爰片免费视频| 久久国产精品99国产| 伊人免费视频二| 久久久777精品电影网影网 | 亚洲三级中文字幕| 久久精品国产视频| 国产成人精品亚洲日本在线观看| www.久久爱.cn| 日韩成人精品一区| 日本熟妇人妻xxxxx| 成人av网站免费观看| 69夜色精品国产69乱| 91久久一区二区| 天天色棕合合合合合合合| 久久精彩免费视频| 日本肉肉一区| 欧美日韩一区综合| 在线亚洲观看| 国产黑丝一区二区| 亚洲亚洲人成综合网络| av网站免费大全| 按摩亚洲人久久| 香蕉成人影院| 日本不卡在线观看| 国产精品久久久久久模特| 男人网站在线观看| 亚洲一区二区四区蜜桃| 99免费在线视频| 操91在线视频| 国产精品成人**免费视频| 亚洲精品在线免费| 日韩综合在线视频| 亚洲黄色小说视频| 色婷婷国产精品久久包臀 | 美日韩一级片在线观看| 久久久久久久久国产精品| 97人人做人人爽香蕉精品| 欧美日韩国产精品一区二区| 国产精品美女| 精品人妻少妇嫩草av无码| 无吗不卡中文字幕| 无码国精品一区二区免费蜜桃| 久久久久久噜噜噜久久久精品| 99精品国产一区二区三区2021| 少妇久久久久久被弄到高潮| 国产精品一二三四五| 欧洲猛交xxxx乱大交3| 日韩欧美一级在线播放| 色yeye免费人成网站在线观看| 国产精品大全| 国产农村妇女精品一二区| 欧美熟妇精品黑人巨大一二三区| 欧美日韩一区二区在线播放| 麻豆影视在线| 国产欧美日韩中文字幕在线| 国产精品毛片久久| 能看毛片的网站| 亚洲成国产人片在线观看| 完全免费av在线播放| 成人做爽爽免费视频| 欧美精品观看| 国产免费一区二区三区最新6| 欧美日韩国产一区在线| 九色在线免费| 国产欧美一区二区| 欧美激情麻豆| 青青草视频播放| 在线观看一区不卡| www视频在线看| 狠狠色噜噜狠狠色综合久| 天堂久久久久va久久久久| 天堂网中文在线观看| 日韩精品资源二区在线| 涩涩涩视频在线观看| 亚洲人成人77777线观看| 国产成人免费av在线| 在线观看 亚洲| 久久久久www| 日韩成人av在线资源| 日韩av在线中文| 亚洲成在线观看| 成年人视频在线看| 99国产在线| 麻豆久久精品| 国产探花在线播放| 亚洲欧洲视频在线| 亚洲无线观看| 欧美激情精品久久久久久小说| 亚洲天堂成人在线观看| 欧美一区二区三区激情| 国产免费一区二区三区在线能观看 | 中文字幕精品在线播放| 久久久久综合网| xxxx国产精品| 国产精品一区二区3区| 亚洲激情网站| 黄色一级大片在线免费观看|