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

5分鐘掌握Python隨機爬山算法

開發(fā) 后端 算法
在本教程中,您將發(fā)現(xiàn)用于函數(shù)優(yōu)化的爬山優(yōu)化算法完成本教程。

 隨機爬山是一種優(yōu)化算法。它利用隨機性作為搜索過程的一部分。這使得該算法適用于非線性目標函數(shù),而其他局部搜索算法不能很好地運行。它也是一種局部搜索算法,這意味著它修改了單個解決方案并搜索搜索空間的相對局部區(qū)域,直到找到局部最優(yōu)值為止。這意味著它適用于單峰優(yōu)化問題或在應用全局優(yōu)化算法后使用。

在本教程中,您將發(fā)現(xiàn)用于函數(shù)優(yōu)化的爬山優(yōu)化算法完成本教程后,您將知道:

  •  爬山是用于功能優(yōu)化的隨機局部搜索算法。
  •  如何在Python中從頭開始實現(xiàn)爬山算法。
  •  如何應用爬山算法并檢查算法結(jié)果。

教程概述

本教程分為三個部分:他們是:

  •  爬山算法
  •  爬山算法的實現(xiàn)
  •  應用爬山算法的示例

爬山算法

隨機爬山算法是一種隨機局部搜索優(yōu)化算法。它以起始點作為輸入和步長,步長是搜索空間內(nèi)的距離。該算法將初始點作為當前最佳候選解決方案,并在提供的點的步長距離內(nèi)生成一個新點。計算生成的點,如果它等于或好于當前點,則將其視為當前點。新點的生成使用隨機性,通常稱為隨機爬山。這意味著該算法可以跳過響應表面的顛簸,嘈雜,不連續(xù)或欺騙性區(qū)域,作為搜索的一部分。重要的是接受具有相等評估的不同點,因為它允許算法繼續(xù)探索搜索空間,例如在響應表面的平坦區(qū)域上。限制這些所謂的“橫向”移動以避免無限循環(huán)也可能是有幫助的。該過程一直持續(xù)到滿足停止條件,例如最大數(shù)量的功能評估或給定數(shù)量的功能評估內(nèi)沒有改善為止。該算法之所以得名,是因為它會(隨機地)爬到響應面的山坡上,達到局部最優(yōu)值。這并不意味著它只能用于最大化目標函數(shù)。這只是一個名字。實際上,通常,我們最小化功能而不是最大化它們。作為局部搜索算法,它可能會陷入局部最優(yōu)狀態(tài)。然而,多次重啟可以允許算法定位全局最優(yōu)。步長必須足夠大,以允許在搜索空間中找到更好的附近點,但步幅不能太大,以使搜索跳出包含局部最優(yōu)值的區(qū)域。

爬山算法的實現(xiàn)

在撰寫本文時,SciPy庫未提供隨機爬山的實現(xiàn)。但是,我們可以自己實現(xiàn)它。首先,我們必須定義目標函數(shù)和每個輸入變量到目標函數(shù)的界限。目標函數(shù)只是一個Python函數(shù),我們將其命名為Objective()。邊界將是一個2D數(shù)組,每個輸入變量都具有一個維度,該變量定義了變量的最小值和最大值。例如,一維目標函數(shù)和界限將定義如下: 

  1. # objective function  
  2. def objective(x):  
  3.  return 0   
  4. # define range for input  
  5. bounds = asarray([[-5.0, 5.0]]) 

接下來,我們可以生成初始解作為問題范圍內(nèi)的隨機點,然后使用目標函數(shù)對其進行評估。 

  1. # generate an initial point  
  2. solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])  
  3. # evaluate the initial point  
  4. solution_eval = objective(solution) 

現(xiàn)在我們可以遍歷定義為“ n_iterations”的算法的預定義迭代次數(shù),例如100或1,000。 

  1. # run the hill climb  
  2. for i in range(n_iterations): 

算法迭代的第一步是采取步驟。這需要預定義的“ step_size”參數(shù),該參數(shù)相對于搜索空間的邊界。我們將采用高斯分布的隨機步驟,其中均值是我們的當前點,標準偏差由“ step_size”定義。這意味著大約99%的步驟將在當前點的(3 * step_size)之內(nèi)。 

  1. # take a step  
  2. candidate = solution + randn(len(bounds)) * step_size 

我們不必采取這種方式。您可能希望使用0到步長之間的均勻分布。例如: 

  1. # take a step  
  2. candidate = solution + rand(len(bounds)) * step_size 

接下來,我們需要評估具有目標函數(shù)的新候選解決方案。 

  1. # evaluate candidate point  
  2. candidte_eval = objective(candidate) 

然后,我們需要檢查此新點的評估結(jié)果是否等于或優(yōu)于當前最佳點,如果是,則用此新點替換當前最佳點。 

  1. # check if we should keep the new point  
  2. if candidte_eval <= solution_eval:  
  3.  # store the new point  
  4.  solution, solution_eval = candidate, candidte_eval  
  5.  # report progress  
  6.  print('>%d f(%s) = %.5f' % (i, solution, solution_eval)) 

就是這樣。我們可以將此爬山算法實現(xiàn)為可重用函數(shù),該函數(shù)將目標函數(shù)的名稱,每個輸入變量的范圍,總迭代次數(shù)和步驟作為參數(shù),并返回找到的最佳解決方案及其評估。 

  1. # hill climbing local search algorithm  
  2. def hillclimbing(objective, bounds, n_iterations, step_size):  
  3.  # generate an initial point  
  4.  solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])  
  5.  # evaluate the initial point  
  6.  solution_eval = objective(solution)  
  7.  # run the hill climb  
  8.  for i in range(n_iterations):  
  9.   # take a step  
  10.   candidate = solution + randn(len(bounds)) * step_size  
  11.   # evaluate candidate point  
  12.   candidte_eval = objective(candidate)  
  13.   # check if we should keep the new point 
  14.   if candidte_eval <= solution_eval:  
  15.    # store the new point  
  16.    solution, solution_eval = candidate, candidte_eval  
  17.    # report progress  
  18.    print('>%d f(%s) = %.5f' % (i, solution, solution_eval))  
  19.  return [solution, solution_eval] 

現(xiàn)在,我們知道了如何在Python中實現(xiàn)爬山算法,讓我們看看如何使用它來優(yōu)化目標函數(shù)。

應用爬山算法的示例

在本節(jié)中,我們將把爬山優(yōu)化算法應用于目標函數(shù)。首先,讓我們定義目標函數(shù)。我們將使用一個簡單的一維x ^ 2目標函數(shù),其邊界為[-5,5]。下面的示例定義了函數(shù),然后為輸入值的網(wǎng)格創(chuàng)建了函數(shù)響應面的折線圖,并用紅線標記了f(0.0)= 0.0處的最佳值。 

  1. # convex unimodal optimization function  
  2. from numpy import arange  
  3. from matplotlib import pyplot   
  4. # objective function  
  5. def objective(x):  
  6.  return x[0]**2.0   
  7. # define range for input  
  8. r_min, r_max = -5.0, 5.0  
  9. # sample input range uniformly at 0.1 increments  
  10. inputs = arange(r_min, r_max, 0.1)  
  11. # compute targets  
  12. results = [objective([x]) for x in inputs]  
  13. # create a line plot of input vs result  
  14. pyplot.plot(inputs, results)  
  15. # define optimal input value  
  16. x_optima = 0.0  
  17. # draw a vertical line at the optimal input  
  18. pyplot.axvline(x=x_optimals='--'color='red' 
  19. # show the plot  
  20. pyplot.show() 

運行示例將創(chuàng)建目標函數(shù)的折線圖,并清晰地標記函數(shù)的最優(yōu)值。

接下來,我們可以將爬山算法應用于目標函數(shù)。首先,我們將播種偽隨機數(shù)生成器。通常這不是必需的,但是在這種情況下,我想確保每次運行算法時都得到相同的結(jié)果(相同的隨機數(shù)序列),以便以后可以繪制結(jié)果。 

  1. # seed the pseudorandom number generator  
  2. seed(5) 

接下來,我們可以定義搜索的配置。在這種情況下,我們將搜索算法的1,000次迭代,并使用0.1的步長。假設我們使用的是高斯函數(shù)來生成步長,這意味著大約99%的所有步長將位于給定點(0.1 * 3)的距離內(nèi),例如 三個標準差。 

  1. n_iterations = 1000  
  2. # define the maximum step size  
  3. step_size = 0.1 

接下來,我們可以執(zhí)行搜索并報告結(jié)果。 

  1. # perform the hill climbing search  
  2. best, score = hillclimbing(objective, bounds, n_iterations, step_size)  
  3. print('Done!')  
  4. print('f(%s) = %f' % (best, score)) 

結(jié)合在一起,下面列出了完整的示例。 

  1. # hill climbing search of a one-dimensional objective function  
  2. from numpy import asarray  
  3. from numpy.random import randn  
  4. from numpy.random import rand  
  5. from numpy.random import seed   
  6. # objective function  
  7. def objective(x):  
  8.  return x[0]**2.0   
  9. # hill climbing local search algorithm  
  10. def hillclimbing(objective, bounds, n_iterations, step_size):  
  11.  # generate an initial point  
  12.  solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])  
  13.  # evaluate the initial point  
  14.  solution_eval = objective(solution)  
  15.  # run the hill climb  
  16.  for i in range(n_iterations): 
  17.   # take a step  
  18.   candidate = solution + randn(len(bounds)) * step_size  
  19.   # evaluate candidate point  
  20.   candidte_eval = objective(candidate)  
  21.   # check if we should keep the new point  
  22.   if candidte_eval <= solution_eval:  
  23.    # store the new point  
  24.    solution, solution_eval = candidate, candidte_eval  
  25.    # report progress  
  26.    print('>%d f(%s) = %.5f' % (i, solution, solution_eval))  
  27.  return [solution, solution_eval]  
  28. # seed the pseudorandom number generator  
  29. seed(5)  
  30. # define range for input  
  31. bounds = asarray([[-5.0, 5.0]])  
  32. # define the total iterations 
  33. n_iterations = 1000  
  34. # define the maximum step size  
  35. step_size = 0.1  
  36. # perform the hill climbing search  
  37. best, score = hillclimbing(objective, bounds, n_iterations, step_size)  
  38. print('Done!')  
  39. print('f(%s) = %f' % (best, score)) 

運行該示例將報告搜索進度,包括每次檢測到改進時的迭代次數(shù),該函數(shù)的輸入以及來自目標函數(shù)的響應。搜索結(jié)束時,找到最佳解決方案,并報告其評估結(jié)果。在這種情況下,我們可以看到在算法的1,000次迭代中有36處改進,并且該解決方案非常接近于0.0的最佳輸入,其計算結(jié)果為f(0.0)= 0.0。 

  1. >1 f([-2.74290923]) = 7.52355  
  2. >3 f([-2.65873147]) = 7.06885  
  3. >4 f([-2.52197291]) = 6.36035  
  4. >5 f([-2.46450214]) = 6.07377  
  5. >7 f([-2.44740961]) = 5.98981  
  6. >9 f([-2.28364676]) = 5.21504  
  7. >12 f([-2.19245939]) = 4.80688  
  8. >14 f([-2.01001538]) = 4.04016  
  9. >15 f([-1.86425287]) = 3.47544  
  10. >22 f([-1.79913002]) = 3.23687  
  11. >24 f([-1.57525573]) = 2.48143  
  12. >25 f([-1.55047719]) = 2.40398  
  13. >26 f([-1.51783757]) = 2.30383  
  14. >27 f([-1.49118756]) = 2.22364  
  15. >28 f([-1.45344116]) = 2.11249  
  16. >30 f([-1.33055275]) = 1.77037  
  17. >32 f([-1.17805016]) = 1.38780  
  18. >33 f([-1.15189314]) = 1.32686  
  19. >36 f([-1.03852644]) = 1.07854  
  20. >37 f([-0.99135322]) = 0.98278  
  21. >38 f([-0.79448984]) = 0.63121  
  22. >39 f([-0.69837955]) = 0.48773  
  23. >42 f([-0.69317313]) = 0.48049  
  24. >46 f([-0.61801423]) = 0.38194  
  25. >48 f([-0.48799625]) = 0.23814  
  26. >50 f([-0.22149135]) = 0.04906  
  27. >54 f([-0.20017144]) = 0.04007  
  28. >57 f([-0.15994446]) = 0.02558  
  29. >60 f([-0.15492485]) = 0.02400  
  30. >61 f([-0.03572481]) = 0.00128  
  31. >64 f([-0.03051261]) = 0.00093  
  32. >66 f([-0.0074283]) = 0.00006  
  33. >78 f([-0.00202357]) = 0.00000  
  34. >119 f([0.00128373]) = 0.00000  
  35. >120 f([-0.00040911]) = 0.00000  
  36. >314 f([-0.00017051]) = 0.00000  
  37. Done!  
  38. f([-0.00017051]) = 0.000000 

以線圖的形式查看搜索的進度可能很有趣,該線圖顯示了每次改進后最佳解決方案的評估變化。每當有改進時,我們就可以更新hillclimbing()來跟蹤目標函數(shù)的評估,并返回此分數(shù)列表。 

  1. # hill climbing local search algorithm  
  2. def hillclimbing(objective, bounds, n_iterations, step_size):  
  3.  # generate an initial point  
  4.  solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])  
  5.  # evaluate the initial point  
  6.  solution_eval = objective(solution)  
  7.  # run the hill climb 
  8.  scores = list()  
  9.  scores.append(solution_eval)  
  10.  for i in range(n_iterations):  
  11.   # take a step  
  12.   candidate = solution + randn(len(bounds)) * step_size  
  13.   # evaluate candidate point  
  14.   candidte_eval = objective(candidate)  
  15.   # check if we should keep the new point  
  16.   if candidte_eval <= solution_eval:  
  17.    # store the new point  
  18.    solution, solution_eval = candidate, candidte_eval  
  19.    # keep track of scores  
  20.    scores.append(solution_eval)  
  21.    # report progress  
  22.    print('>%d f(%s) = %.5f' % (i, solution, solution_eval))  
  23.  return [solution, solution_eval, scores] 

然后,我們可以創(chuàng)建這些分數(shù)的折線圖,以查看搜索過程中發(fā)現(xiàn)的每個改進的目標函數(shù)的相對變化。 

  1. # line plot of best scores  
  2. pyplot.plot(scores, '.-')  
  3. pyplot.xlabel('Improvement Number')  
  4. pyplot.ylabel('Evaluation f(x)')  
  5. pyplot.show() 

結(jié)合在一起,下面列出了執(zhí)行搜索并繪制搜索過程中改進解決方案的目標函數(shù)得分的完整示例。 

  1. # hill climbing search of a one-dimensional objective function  
  2. from numpy import asarray  
  3. from numpy.random import randn  
  4. from numpy.random import rand  
  5. from numpy.random import seed  
  6. from matplotlib import pyplot   
  7. # objective function  
  8. def objective(x):  
  9.  return x[0]**2.0  
  10. # hill climbing local search algorithm  
  11. def hillclimbing(objective, bounds, n_iterations, step_size):  
  12.  # generate an initial point  
  13.  solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])  
  14.  # evaluate the initial point  
  15.  solution_eval = objective(solution)  
  16.  # run the hill climb  
  17.  scores = list()  
  18.  scores.append(solution_eval)  
  19.  for i in range(n_iterations):  
  20.   # take a step  
  21.   candidate = solution + randn(len(bounds)) * step_size  
  22.   # evaluate candidate point  
  23.   candidte_eval = objective(candidate)  
  24.   # check if we should keep the new point  
  25.   if candidte_eval <= solution_eval:  
  26.    # store the new point  
  27.    solution, solution_eval = candidate, candidte_eval  
  28.    # keep track of scores  
  29.    scores.append(solution_eval)  
  30.    # report progress  
  31.    print('>%d f(%s) = %.5f' % (i, solution, solution_eval))  
  32.  return [solution, solution_eval, scores]  
  33. # seed the pseudorandom number generator  
  34. seed(5)  
  35. # define range for input  
  36. bounds = asarray([[-5.0, 5.0]])  
  37. # define the total iterations  
  38. n_iterations = 1000  
  39. # define the maximum step size  
  40. step_size = 0.1  
  41. # perform the hill climbing search  
  42. best, score, scores = hillclimbing(objective, bounds, n_iterations, step_size)  
  43. print('Done!')  
  44. print('f(%s) = %f' % (best, score))  
  45. # line plot of best scores  
  46. pyplot.plot(scores, '.-')  
  47. pyplot.xlabel('Improvement Number')  
  48. pyplot.ylabel('Evaluation f(x)')  
  49. pyplot.show() 

運行示例將執(zhí)行搜索,并像以前一樣報告結(jié)果。創(chuàng)建一個線形圖,顯示在爬山搜索期間每個改進的目標函數(shù)評估。在搜索過程中,我們可以看到目標函數(shù)評估發(fā)生了約36個變化,隨著算法收斂到最優(yōu)值,初始變化較大,而在搜索結(jié)束時變化很小,難以察覺。

鑒于目標函數(shù)是一維的,因此可以像上面那樣直接繪制響應面。通過將在搜索過程中找到的最佳候選解決方案繪制為響應面中的點,來回顧搜索的進度可能會很有趣。我們期望沿著響應面到達最優(yōu)點的一系列點。這可以通過首先更新hillclimbing()函數(shù)以跟蹤每個最佳候選解決方案在搜索過程中的位置來實現(xiàn),然后返回最佳解決方案列表來實現(xiàn)。 

  1. # hill climbing local search algorithm  
  2. def hillclimbing(objective, bounds, n_iterations, step_size):  
  3.  # generate an initial point  
  4.  solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])  
  5.  # evaluate the initial point  
  6.  solution_eval = objective(solution) 
  7.  # run the hill climb  
  8.  solutions = list()  
  9.  solutions.append(solution)  
  10.  for i in range(n_iterations):  
  11.   # take a step  
  12.   candidate = solution + randn(len(bounds)) * step_size  
  13.   # evaluate candidate point 
  14.    candidte_eval = objective(candidate)  
  15.   # check if we should keep the new point  
  16.   if candidte_eval <= solution_eval:  
  17.    # store the new point  
  18.    solution, solution_eval = candidate, candidte_eval  
  19.    # keep track of solutions  
  20.    solutions.append(solution) 
  21.    # report progress  
  22.    print('>%d f(%s) = %.5f' % (i, solution, solution_eval))  
  23.  return [solution, solution_eval, solutions] 

然后,我們可以創(chuàng)建目標函數(shù)響應面的圖,并像以前那樣標記最優(yōu)值。 

  1. # sample input range uniformly at 0.1 increments  
  2. inputs = arange(bounds[0,0], bounds[0,1], 0.1)  
  3. # create a line plot of input vs result  
  4. pyplot.plot(inputs, [objective([x]) for x in inputs], '--')  
  5. # draw a vertical line at the optimal input  
  6. pyplot.axvline(x=[0.0], ls='--'color='red'

最后,我們可以將搜索找到的候選解的序列繪制成黑點。 

  1. # plot the sample as black circles  
  2. pyplot.plot(solutions, [objective(x) for x in solutions], 'o', color='black'

結(jié)合在一起,下面列出了在目標函數(shù)的響應面上繪制改進解序列的完整示例。 

  1. # hill climbing search of a one-dimensional objective function  
  2. from numpy import asarray  
  3. from numpy import arange  
  4. from numpy.random import randn  
  5. from numpy.random import rand  
  6. from numpy.random import seed  
  7. from matplotlib import pyplot  
  8. # objective function  
  9. def objective(x):  
  10.  return x[0]**2.0  
  11. # hill climbing local search algorithm  
  12. def hillclimbing(objective, bounds, n_iterations, step_size):  
  13.  # generate an initial point  
  14.  solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])  
  15.  # evaluate the initial point  
  16.  solution_eval = objective(solution)  
  17.  # run the hill climb  
  18.  solutions = list()  
  19.  solutions.append(solution)  
  20.  for i in range(n_iterations):  
  21.   # take a step  
  22.   candidate = solution + randn(len(bounds)) * step_size  
  23.   # evaluate candidate point  
  24.   candidte_eval = objective(candidate)  
  25.   # check if we should keep the new point  
  26.   if candidte_eval <= solution_eval:  
  27.    # store the new point  
  28.    solution, solution_eval = candidate, candidte_eval  
  29.    # keep track of solutions  
  30.    solutions.append(solution) 
  31.     # report progress  
  32.    print('>%d f(%s) = %.5f' % (i, solution, solution_eval))  
  33.  return [solution, solution_eval, solutions]  
  34. # seed the pseudorandom number generator  
  35. seed(5)  
  36. # define range for input  
  37. bounds = asarray([[-5.0, 5.0]])  
  38. # define the total iterations  
  39. n_iterations = 1000  
  40. # define the maximum step size  
  41. step_size = 0.1  
  42. # perform the hill climbing search  
  43. best, score, solutions = hillclimbing(objective, bounds, n_iterations, step_size)  
  44. print('Done!')  
  45. print('f(%s) = %f' % (best, score))  
  46. # sample input range uniformly at 0.1 increments  
  47. inputs = arange(bounds[0,0], bounds[0,1], 0.1)  
  48. # create a line plot of input vs result 
  49. pyplot.plot(inputs, [objective([x]) for x in inputs], '--')  
  50. # draw a vertical line at the optimal input  
  51. pyplot.axvline(x=[0.0], ls='--'color='red' 
  52. # plot the sample as black circles  
  53. pyplot.plot(solutions, [objective(x) for x in solutions], 'o', color='black' 
  54. pyplot.show() 

運行示例將執(zhí)行爬山搜索,并像以前一樣報告結(jié)果。像以前一樣創(chuàng)建一個響應面圖,顯示函數(shù)的熟悉的碗形,并用垂直的紅線標記函數(shù)的最佳狀態(tài)。在搜索過程中找到的最佳解決方案的順序顯示為黑點,沿著碗形延伸到最佳狀態(tài)。

 

 

責任編輯:龐桂玉 來源: Python中文社區(qū) (ID:python-china)
相關推薦

2021-03-23 15:35:36

Adam優(yōu)化語言

2020-12-17 10:00:16

Python協(xié)程線程

2021-03-12 09:45:00

Python關聯(lián)規(guī)則算法

2023-10-07 13:13:24

機器學習模型數(shù)據(jù)

2020-12-07 11:23:32

Scrapy爬蟲Python

2017-01-10 09:07:53

tcpdumpGET請求

2020-10-27 10:43:24

Redis字符串數(shù)據(jù)庫

2020-11-24 11:50:52

Python文件代碼

2020-12-01 12:44:44

PythonHook鉤子函數(shù)

2009-11-17 14:50:50

Oracle調(diào)優(yōu)

2021-06-07 09:51:22

原型模式序列化

2021-04-19 23:29:44

MakefilemacOSLinux

2018-01-30 05:04:06

2012-06-28 10:26:51

Silverlight

2025-01-24 08:38:47

2020-09-11 09:35:18

前端JavaScript策略模式

2021-04-27 10:16:51

優(yōu)化機器學習人工智能

2022-05-30 07:51:13

數(shù)據(jù)庫MySQLQPS

2021-01-11 09:33:37

Maven數(shù)目項目

2009-11-05 10:55:22

Visual Stud
點贊
收藏

51CTO技術棧公眾號

亚洲三区在线播放| 亚洲一区欧美在线| 成人综合日日夜夜| 一区二区久久久久| 国产亚洲福利社区| 日本丰满少妇做爰爽爽| 香蕉久久夜色精品国产更新时间| 欧美日韩另类字幕中文| 午夜精品一区二区三区四区| 一区二区三区免费在线视频| 韩日成人av| 亚洲欧美中文日韩在线| 波多野结衣免费观看| 国产伦理精品| 国产精品污www在线观看| 97超级碰碰| 日韩精品在线观看免费| 2023国产精品久久久精品双| 亚洲欧美中文日韩v在线观看| 久久综合在线观看| 裤袜国产欧美精品一区| 亚洲人成在线播放网站岛国| 免费成人看片网址| 亚洲AV无码乱码国产精品牛牛 | 2014亚洲片线观看视频免费| 国产欧美一区二区三区在线| 亚洲日本韩国在线| 午夜国产精品视频免费体验区| 亚洲男人天堂九九视频| 秋霞午夜鲁丝一区二区| 国产精品66| 色一区在线观看| 国产91沈先生在线播放| 最新电影电视剧在线观看免费观看| 成人动漫一区二区三区| 91在线视频免费| 嫩草影院一区二区三区| 亚洲永久免费精品| 欧美日韩成人网| 极品美妇后花庭翘臀娇吟小说| 亚洲图片久久| 亚洲国产精品人人爽夜夜爽| 国产又粗又猛大又黄又爽| 另类中文字幕国产精品| 亚洲mv在线观看| 国产一区二区三区在线免费| 欧美日韩xx| 中文字幕免费不卡| 日韩av不卡播放| 久久精品色图| 久久人人爽爽爽人久久久| 精品国产福利| 亚洲欧美日韩免费| av资源网一区| 国产综合色一区二区三区| 亚洲国产精品久久久久久6q| 国产精品亚洲一区二区三区妖精| 国产欧美婷婷中文| 一级黄色片在线看| 经典三级在线一区| 亚洲v日韩v综合v精品v| 国产人妻精品一区二区三区| 国产一区二区在线观看免费| 成人精品网站在线观看| 91麻豆一区二区| 韩国一区二区在线观看| 亚洲一区二区三区成人在线视频精品| 国产精品无码久久av| 国产综合久久久久久鬼色| 成人羞羞国产免费| 亚洲精品久久久蜜桃动漫| 成人深夜福利app| 精品伦精品一区二区三区视频| 神马午夜电影一区二区三区在线观看 | 91在线一区| 亚洲第一级黄色片| 视频免费在线观看| 亚洲精品亚洲人成在线观看| 亚洲欧美激情另类校园| 日本一卡二卡在线播放| 久久看人人摘| 久久成人亚洲精品| 免费观看一级视频| 免费在线播放第一区高清av| 国产精品久久婷婷六月丁香| 国产一区二区小视频| 成人性生交大片免费看中文| 久久精品一二三区| yiren22综合网成人| 亚洲精品一二三区| 乱妇乱女熟妇熟女网站| 免费高清视频在线一区| 9191精品国产综合久久久久久 | 日韩一区二区三区高清在线观看| 精品处破学生在线二十三| 插吧插吧综合网| 日韩精品一卡| 国内成人精品视频| 无码人妻一区二区三区线| 精品一区二区三区免费| 激情小说综合区| 免费a级人成a大片在线观看| 亚洲成人精品一区| 午夜国产福利在线观看| 欧美激情网址| 久久亚洲精品小早川怜子66| 天天操天天操天天操天天| 久久99久久精品欧美| 精品国产电影| www免费在线观看| 91久久一区二区| 女同性αv亚洲女同志| 九色精品国产蝌蚪| 欧美丰满片xxx777| 伊人免费在线观看高清版| 9l国产精品久久久久麻豆| 自拍另类欧美| 人人鲁人人莫人人爱精品| 69av一区二区三区| 卡一卡二卡三在线观看| 日韩午夜av在线| 亚洲一区二区三区四区视频| 精品亚洲成a人片在线观看| 亚洲影视在线观看| 国产资源中文字幕| 欧美一级本道电影免费专区| 2019中文字幕全在线观看| 国产xxxxxx| 日本一区二区三区dvd视频在线| 日韩一级性生活片| 日韩高清在线观看一区二区| 日韩有码片在线观看| 无码人妻丰满熟妇精品| heyzo一本久久综合| 成人手机在线播放| 久久免费影院| 最近免费中文字幕视频2019| 国产高清中文字幕| 9l国产精品久久久久麻豆| 无码熟妇人妻av在线电影| 高清久久一区| 日韩在线观看免费av| 亚洲熟妇av乱码在线观看| 国产亚洲综合在线| 国产中文字幕免费观看| 欧亚精品一区| 91po在线观看91精品国产性色| 亚洲精品久久久久avwww潮水| 亚洲欧美色一区| 韩国三级丰满少妇高潮| 91精品在线观看国产| 亚洲jizzjizz日本少妇| 黄色片网站在线| 91精品国产综合久久久蜜臀图片| 日日噜噜夜夜狠狠久久波多野| 久久激五月天综合精品| 一区二区免费电影| 99精品美女视频在线观看热舞| 日韩中文视频免费在线观看| 91在线你懂的| 亚洲精品一二三| 中文字幕乱码在线| 久久成人免费| 亚洲国产日韩欧美| 欧美亚洲综合视频| 欧美剧在线观看| 天天操天天干天天操| 欧美视频在线免费| 夫妇露脸对白88av| 国产在线日韩欧美| 福利在线一区二区| 日韩免费电影在线观看| 国产精品第100页| 日本在线免费| 欧美大片在线观看| 国偷自拍第113页| 国产欧美一区二区三区网站| www.com操| 欧美精品日本| 久久精品中文字幕一区二区三区 | 人人干在线视频| 日韩一区二区免费在线观看| 日韩免费一二三区| 久久人人97超碰com| 9l视频白拍9色9l视频| 亚洲区综合中文字幕日日| 国产精品免费区二区三区观看| 中文字幕高清在线播放| 深夜福利一区二区| 亚洲av无码国产综合专区| 色偷偷一区二区三区| 国产视频精品免费| gogo大胆日本视频一区| 爱情岛论坛亚洲首页入口章节| 国产精品久久久久久影院8一贰佰| 国产福利久久精品| 成人在线中文| 久久久久九九九九| h视频在线观看免费| 精品成人a区在线观看| 日韩国产亚洲欧美| 亚洲国产日产av| 日韩av网站在线播放| caoporm超碰国产精品| 国产福利在线免费| 午夜一区在线| 国产资源第一页| av中文一区| 国产一区二区精品免费| 日本黄色成人| 欧洲亚洲免费视频| 四虎影院观看视频在线观看 | 久久精品导航| 久操手机在线视频| 成人久久电影| 久久综合给合久久狠狠色| 国产精品久久免费视频| 国产精品黄色影片导航在线观看| 欧美人与性动交α欧美精品济南到 | 国产欧美亚洲视频| 国产日韩电影| 午夜精品一区二区三区在线播放| 精品国产99久久久久久| 亚洲性无码av在线| 日韩porn| 日韩久久免费视频| 日韩一区二区三区在线观看视频| 3atv一区二区三区| 亚洲专区在线播放| 色一情一乱一乱一91av| 天天干天天干天天干天天| 亚洲国产精品久久人人爱| 国产精品视频一区二区三| 国产欧美精品国产国产专区| 国产人妻人伦精品1国产丝袜| 福利一区二区在线| 国产又粗又猛大又黄又爽| 激情都市一区二区| 日韩一区二区三区久久| 青娱乐精品视频| 熟妇人妻va精品中文字幕| 99精品热视频只有精品10| 丝袜人妻一区二区三区| 国产精品99免费看| 国产精品三级一区二区| 99热国内精品永久免费观看| 新呦u视频一区二区| 深夜福利久久| 日本在线观看一区二区| 九九综合九九| 亚洲精品一区二区三区四区五区| 欧美少妇xxxx| 亚洲国产午夜伦理片大全在线观看网站 | 日本不卡的三区四区五区| 日日碰狠狠躁久久躁婷婷| 久久国产日韩| 亚洲最大综合网| 久久国产精品区| 亚洲精品20p| 国产乱子伦一区二区三区国色天香 | 黄毛片在线观看| 国内免费精品永久在线视频| www中文字幕在线观看| 91超碰中文字幕久久精品| 女人高潮被爽到呻吟在线观看 | 一区二区三区在线观看av| 欧美日韩在线视频首页| 四虎影院在线免费播放| 欧美午夜精品理论片a级按摩| 亚洲视频久久久| 欧美成人一区二区三区在线观看 | 一区二区欧美久久| 日本成人在线播放| 色综合天天狠天天透天天伊人| 丁香花高清在线观看完整版| 性色av一区二区三区红粉影视| gay欧美网站| 国产欧美在线观看| 亚洲一区二区三区在线免费| 久久综合一区| 99久久久久国产精品| 国产精品成人久久电影| 日韩在线播放一区二区| 国产在线观看中文字幕| 91亚洲国产成人精品一区二区三| 国产美女永久免费无遮挡| 亚洲视频一区二区在线| 日韩精品一卡二卡| 在线观看日韩高清av| av老司机久久| 亚洲免费一在线| gogogogo高清视频在线| 2019av中文字幕| 四虎国产精品永久在线国在线| 精品国产综合| 99久久影视| 欧美色图另类小说| 激情成人午夜视频| 国产传媒第一页| 亚洲欧美日韩系列| 亚洲精品中文字幕乱码三区91| 3d动漫精品啪啪一区二区竹菊| 亚洲欧美日韩综合在线| 久久偷看各类女兵18女厕嘘嘘| 蜜桃麻豆影像在线观看| 91免费高清视频| 亚洲精品**不卡在线播he| 可以免费看的黄色网址| 视频一区在线播放| 少妇熟女视频一区二区三区 | 曰韩不卡视频| 亚洲女人av| 韩国三级在线看| 中文字幕一区二区三区在线不卡 | 国内激情视频在线观看| 91在线观看免费网站| 欧美精品尤物在线观看| 日韩网站在线免费观看| 久热成人在线视频| 波多野结衣 在线| 亚洲成人第一页| 国产人妖一区二区| 最近2019年中文视频免费在线观看| av影院在线免费观看| 成人中文字幕+乱码+中文字幕| 免费一区二区三区视频导航| 国产曰肥老太婆无遮挡| 国产在线精品一区二区| 久久中文字幕精品| 欧美性xxxxxxxxx| 五月天丁香视频| 国内揄拍国内精品| 日本一区二区三区播放| 一道精品一区二区三区| 日韩电影一区二区三区四区| 色天使在线视频| 日韩欧美在线视频日韩欧美在线视频 | 日本一区中文字幕| xxxx日本免费| 一本大道久久a久久综合婷婷| 天天干在线观看| 国精产品一区一区三区有限在线| 亚洲精品视频一二三区| 糖心vlog在线免费观看| 国产一区美女在线| 91香蕉一区二区三区在线观看| 欧美日本国产视频| 日韩欧美小视频| 国产欧美久久久久久| 91欧美大片| 两性午夜免费视频| 亚洲精品视频在线看| www.天堂av.com| 欧美乱妇40p| 一区二区在线免费播放| 亚洲中文字幕无码一区二区三区 | 免费亚洲视频| 真实乱视频国产免费观看 | www香蕉视频| 色综合视频网站| 日韩精品免费一区二区夜夜嗨 | 精品一区二区三区免费播放| 91视频青青草| 日韩一级成人av| 福利小视频在线| 麻豆av一区二区三区久久| 爽好多水快深点欧美视频| 成人免费视频入口| 51精品秘密在线观看| 超级碰碰不卡在线视频| 久久久久高清| 免费在线视频一区| 欧美卡一卡二卡三| 亚洲国产小视频| 天堂久久午夜av| 欧美日韩午夜爽爽| 不卡一区二区在线| 亚洲av无码精品一区二区| 日韩天堂在线视频| 精品久久ai电影| 91淫黄看大片| 亚洲欧美另类小说视频| 特黄视频在线观看| 国产精品爱啪在线线免费观看| 99热国内精品永久免费观看| 折磨小男生性器羞耻的故事| 色香色香欲天天天影视综合网| 黄网站在线免费看| 精品国产乱码久久久久久久软件| 久久久人人人| 国产高潮流白浆| 精品爽片免费看久久| 免费成人高清在线视频| 国产手机免费视频| 中文一区二区完整视频在线观看 | 欧美大片网站| 97超碰人人澡| 国产精品国产三级国产a| 黄色福利在线观看| 国产精品亚洲一区二区三区|