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

ARTICLE DETAIL

資訊詳情

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

用Python實(shí)現(xiàn)愛(ài)因斯坦棋AI:規(guī)則、搜索與調(diào)參指南

用Python實(shí)現(xiàn)愛(ài)因斯坦棋AI:規(guī)則、搜索與調(diào)參指南 簡(jiǎn)介棋類博弈是人工智能中經(jīng)典且易于上手的研究場(chǎng)景。從國(guó)際象棋到各類棋類變體博弈樹搜索與剪枝算法構(gòu)成了許多AI程序的核心。愛(ài)因斯坦棋是一種5×5小棋盤上的棋類變體規(guī)則簡(jiǎn)潔但戰(zhàn)術(shù)豐富非常適合作為棋類AI的入門實(shí)驗(yàn)場(chǎng)。圍繞這一棋盤可以用Python搭建一套完整可對(duì)弈的棋類引擎涵蓋走法生成、將軍判定、minimax搜索、alpha-beta剪枝、評(píng)估函數(shù)與迭代加深等關(guān)鍵技術(shù)。通過(guò)參數(shù)調(diào)優(yōu)與批量自我對(duì)弈驗(yàn)證開發(fā)者能夠快速掌握搜索算法在具體博弈項(xiàng)目中的工程落地方法并規(guī)避規(guī)則版本差異、棋子阻擋判斷、GUI線程卡死等常見(jiàn)陷阱。從簡(jiǎn)單棋類入手理解AI決策原理是通往更復(fù)雜棋類與強(qiáng)化學(xué)習(xí)路徑的務(wù)實(shí)起點(diǎn)。1. 愛(ài)因斯坦棋一個(gè)比國(guó)際象棋更容易上手的AI實(shí)驗(yàn)場(chǎng)如果你手上有一塊5x5的棋盤和雙方各5枚棋子別急著擺國(guó)際象棋——試試愛(ài)因斯坦棋。這個(gè)常被稱為“小國(guó)際象棋”的變體規(guī)則是每方擁有王、后、車、象、馬各一枚沒(méi)有兵也沒(méi)有升變30秒就能講完規(guī)則但搜索空間和戰(zhàn)術(shù)組合又足以讓AI程序忙一陣子。我最早接觸它是在給一個(gè)教學(xué)項(xiàng)目找棋類引擎時(shí)標(biāo)準(zhǔn)國(guó)際象棋的走法生成和評(píng)估太成熟拿來(lái)練手沒(méi)有挑戰(zhàn)而愛(ài)因斯坦棋足夠新沒(méi)有現(xiàn)成滿大街的開局庫(kù)反而適合把決策樹、剪枝、評(píng)估函數(shù)這些概念從頭跑一遍。這篇筆記會(huì)從規(guī)則說(shuō)清楚給出一套Python實(shí)現(xiàn)再把AI搜索的調(diào)參經(jīng)驗(yàn)和你容易踩的坑一次性攤開。2. 愛(ài)因斯坦棋規(guī)則拆解為什么5x5棋盤是天然的AI測(cè)試床網(wǎng)上的愛(ài)因斯坦棋規(guī)則有不少版本有的用6x6棋盤有的加了兵和升變甚至還有人把它和“愛(ài)因斯坦謎題”混在一起。為了避免代碼對(duì)著一個(gè)永遠(yuǎn)跑不起來(lái)的黑匣子發(fā)呆我先把這套實(shí)現(xiàn)所采用的規(guī)則固定下來(lái)棋盤為5行5列雙方各持5枚棋子目標(biāo)是將死對(duì)方王。你可以在這個(gè)基礎(chǔ)上小幅調(diào)整后面我會(huì)明確指出哪個(gè)地方最容易受版本差異影響。2.1 棋盤、棋子與初始布局把物理規(guī)則變成數(shù)據(jù)字典棋盤坐標(biāo)用(row, col)表示白方初始在第0行黑方初始在第4行中間三行空置。雙方棋子從左到右分別是車、馬、象、后、王黑方從自己的視角看也是車、馬、象、后、王所以從鏡像角度看黑方的排列是王、后、象、馬、車。我把棋子的移動(dòng)能力先匯總成一張表方便后面寫方向向量時(shí)對(duì)照棋子數(shù)量走法距離越子王1橫豎斜八個(gè)方向1格否后1橫豎斜八個(gè)方向任意格否車1橫豎四個(gè)方向任意格否象1斜向四個(gè)方向任意格否馬1L形橫走2豎走1或相反1步是為什么把王和后都放在5格的行里因?yàn)?列剛好放滿5枚棋子沒(méi)有兵的位置也就沒(méi)有過(guò)路兵、升變、王車易位這些“邊角規(guī)則”。對(duì)于AI程序來(lái)說(shuō)狀態(tài)空間比標(biāo)準(zhǔn)國(guó)際象棋小幾個(gè)數(shù)量級(jí)但棋子走法仍然有“阻擋”“僅馬可越子”的判定足夠練習(xí)走法生成器的健壯性。在代碼里我習(xí)慣用枚舉表示棋子類型而不是字符串因?yàn)槊杜e在debug時(shí)更直觀還能避免手寫字符大小寫帶來(lái)的混亂。下面這段是初始布局的最小表示# constants.py import enum WHITE, BLACK 0, 1 class Kind(enum.Enum): KING K QUEEN Q ROOK R BISHOP B KNIGHT N def empty_board(): return [[None for _ in range(5)] for _ in range(5)] def initial_board(): board empty_board() # 白方 row 0黑方 row 4 top [Kind.ROOK, Kind.KNIGHT, Kind.BISHOP, Kind.QUEEN, Kind.KING] bottom [Kind.KING, Kind.QUEEN, Kind.BISHOP, Kind.KNIGHT, Kind.ROOK] for c, kind in enumerate(top): board[0][c] kind for c, kind in enumerate(bottom): board[4][c] kind return board這里把board直接存Kind枚舉空位存None。這個(gè)版本的代碼只記錄棋子種類還沒(méi)記錄顏色真實(shí)引擎里必須額外用一個(gè)數(shù)組或把顏色編進(jìn)棋子類。我特意先展示這種“半成品”是想說(shuō)明一個(gè)取舍棋盤只有25格用二維列表足夠快沒(méi)必要在入門階段上位棋盤bitboard。位棋盤在8x8棋盤上能大幅加速并行位運(yùn)算但在這里反而會(huì)增加調(diào)試成本尤其對(duì)于剛接觸棋類編程的人你會(huì)發(fā)現(xiàn)自己一整天都在算位掩碼。2.2 走法與勝負(fù)將軍、將死、還有“送將”違例大多數(shù)棋類走法生成都要分兩步走先生成“偽合法走法”再過(guò)濾掉會(huì)讓己方王被吃的走法。許多人一上來(lái)就寫遞歸生成器卻忘了送將檢查最后AI會(huì)走出把自己的王送到對(duì)方嘴里的棋那感覺(jué)就像看了半天棋譜發(fā)現(xiàn)第一步就是錯(cuò)的。偽合法走法指的是“按照棋子移動(dòng)規(guī)則走完不越界且不落到己方棋子上的走法”。它不管走完之后自己王是否處于被攻擊狀態(tài)。比如王從角落走到中心如果對(duì)方車正好控制這一行這個(gè)走法在偽合法階段會(huì)被放進(jìn)列表但在第二階段的合法性過(guò)濾時(shí)必須刪掉。過(guò)濾邏輯很簡(jiǎn)單模擬每一步然后調(diào)用將軍判定函數(shù)如果己方王在對(duì)手攻擊范圍內(nèi)該走法不合法。這一步會(huì)反復(fù)執(zhí)行所以將軍判定一定要寫得高效。判斷一個(gè)格子是否被某顏色棋子攻擊通常用反向掃描站在目標(biāo)格子上逆推是否有棋子能按自己的走法到達(dá)這里。棋盤小直接枚舉對(duì)手所有棋子的攻擊目標(biāo)也行。下面是一個(gè)更貼近代碼的思路def is_square_attacked(board, r, c, by_color): # 枚舉 by_color 的所有棋子檢查它們能否一步到達(dá) (r,c) # 注意馬不需要檢查中間阻擋車、象、后必須檢查路徑是否被堵 for each piece owned by by_color: if piece_can_reach(board, piece, r, c): return True return False將軍與將死的判定不能只用“能吃到王”來(lái)推。正確順序是先獲取當(dāng)前玩家的全部合法走法列表如果列表為空再檢查己方王是否正被攻擊——被攻擊就是將死否則就是無(wú)棋可動(dòng)。在國(guó)際象棋標(biāo)準(zhǔn)規(guī)則里無(wú)棋可動(dòng)判和棋但在愛(ài)因斯坦棋的某些流傳版本里無(wú)棋可動(dòng)直接判負(fù)。我建議在代碼里做成配置項(xiàng)因?yàn)槲乙?jiàn)過(guò)同一個(gè)項(xiàng)目里兩種寫法都有人用最后在判負(fù)判和上吵了三天。3. 用 Python 寫出可對(duì)弈的愛(ài)因斯坦棋走法生成與狀態(tài)管理現(xiàn)在進(jìn)入能跑的代碼。我采用一個(gè)自定義Piecedataclass來(lái)同時(shí)記錄種類和顏色比單純存枚舉更完整。棋盤狀態(tài)就用二維列表每格元素是Piece或None。這一章給出的代碼可以直接復(fù)用也可以作為你寫其他小型棋類引擎的骨架。3.1 棋盤類設(shè)計(jì)從格子坐標(biāo)到合法走法列表先定義基礎(chǔ)類和棋盤初始化from dataclasses import dataclass from enum import Enum class Kind(Enum): KING K QUEEN Q ROOK R BISHOP B KNIGHT N WHITE, BLACK 0, 1 dataclass(frozenTrue) class Piece: kind: Kind color: int def __str__(self): return self.kind.value if self.color WHITE else self.kind.value.lower() class EinsteinBoard: def __init__(self): self.board self._initial_board() self.turn WHITE self.state_stack [] # 悔棋/搜索用 def _initial_board(self): board [[None for _ in range(5)] for _ in range(5)] top [Kind.ROOK, Kind.KNIGHT, Kind.BISHOP, Kind.QUEEN, Kind.KING] bottom [Kind.KING, Kind.QUEEN, Kind.BISHOP, Kind.KNIGHT, Kind.ROOK] for c, kind in enumerate(top): board[0][c] Piece(kind, WHITE) for c, kind in enumerate(bottom): board[4][c] Piece(kind, BLACK) return boardPiece是frozen dataclass保證哈希和比較都可靠后面在走法集合里做去重很方便。state_stack用來(lái)配合悔棋和AI搜索時(shí)的狀態(tài)回退這個(gè)設(shè)計(jì)在3.2里會(huì)展開。核心的走法生成器按“方向向量最大步數(shù)”來(lái)組織。車、象、后能走任意格但中途遇到棋子就必須停馬直接跳到目標(biāo)格不受阻擋。我寫了一個(gè)_attacks_from函數(shù)它會(huì)返回一個(gè)棋子能到達(dá)的所有格子def _attacks_from(self, r, c): piece self.board[r][c] if piece is None: return [] vectors { Kind.KING: [(1,0,1),(-1,0,1),(0,1,1),(0,-1,1), (1,1,1),(1,-1,1),(-1,1,1),(-1,-1,1)], Kind.QUEEN: [(1,0,5),(-1,0,5),(0,1,5),(0,-1,5), (1,1,5),(1,-1,5),(-1,1,5),(-1,-1,5)], Kind.ROOK: [(1,0,5),(-1,0,5),(0,1,5),(0,-1,5)], Kind.BISHOP: [(1,1,5),(1,-1,5),(-1,1,5),(-1,-1,5)], Kind.KNIGHT: [(2,1,1),(2,-1,1),(-2,1,1),(-2,-1,1), (1,2,1),(1,-2,1),(-1,2,1),(-1,-2,1)], } result [] for dr, dc, max_step in vectors[piece.kind]: for step in range(1, max_step 1): nr, nc r dr * step, c dc * step if not (0 nr 5 and 0 nc 5): break target self.board[nr][nc] if target is None: result.append((nr, nc)) elif target.color ! piece.color: result.append((nr, nc)) break else: break return result這里有個(gè)細(xì)節(jié)馬的方向向量步長(zhǎng)為1但用了(2,1)這種二元組和max_step1的組合所以馬不會(huì)進(jìn)入“連續(xù)走多步”的路徑檢查。其他棋子的max_step設(shè)為5但棋盤只有5行所以range(1, 6)也會(huì)自然越界退出。這個(gè)實(shí)現(xiàn)簡(jiǎn)單缺點(diǎn)是每次都要重新構(gòu)造vectors字典如果你追求性能可以把這個(gè)字典提到類屬性或模塊常量里避免高頻搜索時(shí)反復(fù)分配。有了單子走法再匯總整個(gè)棋盤所有己方棋子的偽合法走法然后逐條模擬并過(guò)濾送將def get_legal_moves(self, color): pseudo [] for r in range(5): for c in range(5): piece self.board[r][c] if piece is None or piece.color ! color: continue for tr, tc in self._attacks_from(r, c): pseudo.append((r, c, tr, tc)) legal [] for move in pseudo: state self._snapshot() self._apply_move(*move) if not self.is_in_check(color): legal.append(move) self._restore(state) return legal_snapshot和_restore這對(duì)方法在3.2里實(shí)現(xiàn)作用是對(duì)整盤狀態(tài)做深拷貝。為什么要深拷貝因?yàn)槠灞P只有25格拷貝一次開銷極小而且能避免增量回退時(shí)的邊界錯(cuò)誤——比如你吃掉對(duì)方馬之后悔棋要恢復(fù)如果你不拷貝就得額外保存“吃掉的棋子是什么”邏輯容易漏。3.2 落子、吃子與悔棋狀態(tài)棧和“悔棋”按鈕的實(shí)現(xiàn)def _snapshot(self): import copy return (copy.deepcopy(self.board), self.turn) def _restore(self, state): self.board, self.turn state def _apply_move(self, r, c, tr, tc): self.board[tr][tc] self.board[r][c] self.board[r][c] None self.turn BLACK if self.turn WHITE else WHITE def push_move(self, move): self.state_stack.append(self._snapshot()) self._apply_move(*move) def undo(self): 悔棋回退到上一個(gè)狀態(tài)并取出棧頂狀態(tài)。 if self.state_stack: self.board, self.turn self.state_stack.pop() return True return Falsepush_move在落子前快照再落子。undo用于GUI里的“悔棋”按鈕也用于AI搜索時(shí)的回退。你可能會(huì)擔(dān)心深拷貝會(huì)讓搜索變慢但實(shí)測(cè)在5x5棋盤上一次deepcopy大約幾微秒一次alpha_beta搜索幾千個(gè)節(jié)點(diǎn)總耗時(shí)不過(guò)幾十毫秒完全可以接受。如果你以后要移植到C或要做更深的搜索再改成“保存被吃棋子起點(diǎn)”的增量回退不遲。有一點(diǎn)要提醒如果你在搜索循環(huán)里用push_move和undo每次進(jìn)入子節(jié)點(diǎn)都要_snapshot那棧會(huì)越積越大。正確做法是直接用_apply_move_restore不要經(jīng)過(guò)state_stack。所以我在3.1的走法過(guò)濾里用的是_snapshot和_restore而不是push_move。搜索時(shí)的回退應(yīng)該手動(dòng)保存舊狀態(tài)而不是依賴undo因?yàn)閡ndo面向的是人機(jī)對(duì)弈的“悔棋?!眱商讞2荒芑煊?。3.3 命令行對(duì)弈最小可玩版本跑起來(lái)既然有了棋盤和走法先用命令行跑一個(gè)能雙人對(duì)戰(zhàn)的版本。輸入格式是r c tr tc從起點(diǎn)到終點(diǎn)q退出def print_board(board): for r in range(5): row [] for c in range(5): p board.board[r][c] row.append(str(p) if p else .) print( .join(row)) def main(): b EinsteinBoard() while True: print_board(b) print(Turn:, White if b.turn WHITE else Black) moves b.get_legal_moves(b.turn) if not moves: print(No legal moves. Game over.) break cmd input(enter move: r c tr tc (q to quit): ) if cmd.strip().lower() q: break try: r, c, tr, tc map(int, cmd.split()) except ValueError: print(bad input) continue move (r, c, tr, tc) if move not in moves: print(illegal move) continue b.push_move(move) opponent BLACK if b.turn WHITE else WHITE if b.is_in_check(opponent): print(Check!)這個(gè)主循環(huán)沒(méi)有任何AI但它能幫你驗(yàn)證規(guī)則自己跟自己下幾盤檢查有沒(méi)有走法漏生成有沒(méi)有把無(wú)棋可動(dòng)判成將死。命令行版本是后面加AI的基礎(chǔ)不要跳過(guò)。4. 給愛(ài)因斯坦棋裝上大腦minimax 搜索與 alpha-beta 剪枝的參數(shù)調(diào)優(yōu)黑白棋、五子棋、國(guó)際象棋的AI思路在愛(ài)因斯坦棋上完全通用核心就是帶剪枝的深度優(yōu)先搜索。不要一上來(lái)就上強(qiáng)化學(xué)習(xí)因?yàn)閻?ài)因斯坦棋是完美信息確定狀態(tài)搜索樹小到能用經(jīng)典方法解沒(méi)必要讓一局棋的訓(xùn)練時(shí)間長(zhǎng)得像練一個(gè)深度網(wǎng)絡(luò)。4.1 先算復(fù)雜度為什么要剪枝而不是直接上強(qiáng)化學(xué)習(xí)我粗略統(tǒng)計(jì)過(guò)空棋盤中間位置的車大約能走8格象能走4格左右后能走8到10格馬最多8格王3格。平均每個(gè)棋子大約能走6到8步每方5個(gè)棋子分支因子B大約在10到15之間。這是可觀的。如果做4層深度搜索B15時(shí)未剪枝的葉子節(jié)點(diǎn)是15^450625非常輕松6層深度是15^6≈1130萬(wàn)單層遍歷勉強(qiáng)能算但已經(jīng)不夠優(yōu)雅。alpha-beta剪枝在理想情況下能把復(fù)雜度從O(B^d)降到O(B^(d/2))也就是搜索同樣深度只需要大約sqrt(1130萬(wàn))≈3400個(gè)節(jié)點(diǎn)完全可以在毫秒級(jí)完成。因此先寫minimax和alpha-beta是你投入產(chǎn)出比最高的方案。那么強(qiáng)化學(xué)習(xí)呢它的價(jià)值在于棋類狀態(tài)特征復(fù)雜、評(píng)估函數(shù)難以手工設(shè)計(jì)或者你需要一個(gè)能從自我對(duì)弈中自動(dòng)學(xué)習(xí)評(píng)估的網(wǎng)絡(luò)。但愛(ài)因斯坦棋棋盤小、棋子少一個(gè)幾十行的評(píng)估函數(shù)已經(jīng)夠用強(qiáng)化學(xué)習(xí)要處理獎(jiǎng)勵(lì)稀疏、回合長(zhǎng)、對(duì)局?jǐn)?shù)量大這些工程問(wèn)題不適合作為入門首選。4.2 最小可用的評(píng)估函數(shù)子力位置機(jī)動(dòng)性評(píng)估函數(shù)是AI風(fēng)格的“黑匣子”但我們可以先手工打開它。最簡(jiǎn)單的評(píng)估用子力價(jià)值后9分、車5分、象3分、馬3分、王10000分因?yàn)橥醣怀粤擞螒蚪Y(jié)束。在此基礎(chǔ)上給靠近中心的棋子加一點(diǎn)點(diǎn)位置分因?yàn)橹行目刂屏Ω鼜?qiáng)。代碼長(zhǎng)這樣PIECE_VALUES { Kind.KING: 10000, Kind.QUEEN: 9, Kind.ROOK: 5, Kind.BISHOP: 3, Kind.KNIGHT: 3, } POSITION_BONUS [ [0, 1, 2, 1, 0], [1, 2, 3, 2, 1], [2, 3, 4, 3, 2], [1, 2, 3, 2, 1], [0, 1, 2, 1, 0], ] def evaluate(board): score 0 for r in range(5): for c in range(5): p board.board[r][c] if p is None: continue bonus POSITION_BONUS[r][c] if p.color WHITE else POSITION_BONUS[4 - r][4 - c] value PIECE_VALUES[p.kind] bonus * 0.1 score value if p.color WHITE else -value return score if board.turn WHITE else -scorebonus * 0.1是為了讓位置分遠(yuǎn)小于一個(gè)兵的價(jià)值不至于出現(xiàn)“為了搶中心而白送一個(gè)馬”的蠢事。實(shí)際上這個(gè)0.1本身就是可以調(diào)的參數(shù)我建議在0.05到0.3之間實(shí)驗(yàn)。更大的系數(shù)會(huì)讓AI更激進(jìn)地?fù)屨贾行牡菀缀鲆曌恿Π踩?。機(jī)動(dòng)性評(píng)估沒(méi)有寫進(jìn)代碼因?yàn)橛?jì)算合法走法數(shù)量在搜索中已經(jīng)天然存在不需要額外統(tǒng)計(jì)。如果你發(fā)現(xiàn)AI總是走成僵局再考慮加上“己方合法走法數(shù)減去對(duì)方合法走法數(shù)”這一項(xiàng)。但記住評(píng)估函數(shù)不是越復(fù)雜越好加項(xiàng)越多越難調(diào)你先跑通0.1版再說(shuō)。4.3 迭代加深與超時(shí)控制三個(gè)必調(diào)參數(shù)正式對(duì)弈時(shí)你不能只固定搜索深度因?yàn)椴煌置鎻?fù)雜度不一樣。常見(jiàn)做法是迭代加深從深度1開始逐步加深直到時(shí)間預(yù)算用完采用最近一次完整搜索的最佳走法。這樣你能精確控制在3秒內(nèi)返回一步棋而不是在最差局面里卡死。import time def alpha_beta(board, depth, alpha, beta, maximizing): moves board.get_legal_moves(board.turn) if depth 0 or not moves: return evaluate(board) if maximizing: value -float(inf) for move in moves: board._apply_move(*move) value max(value, alpha_beta(board, depth - 1, alpha, beta, False)) board._restore((board_copy_state, board.turn)) # 需要保存狀態(tài) alpha max(alpha, value) if alpha beta: break return value else: value float(inf) for move in moves: board._apply_move(*move) value min(value, alpha_beta(board, depth - 1, alpha, beta, True)) board._restore((board_copy_state, board.turn)) beta min(beta, value) if alpha beta: break return value上面這段代碼省略了_apply_move前后的狀態(tài)保存實(shí)際使用時(shí)你需要在每次進(jìn)入子節(jié)點(diǎn)前把board.board和board.turn存到臨時(shí)變量里。我在這里不展開完整搜索類因?yàn)樗蜆?biāo)準(zhǔn)國(guó)際象棋AI完全一致。關(guān)鍵是下面的迭代加深循環(huán)def iterative_deepening(board, time_budget2.0, max_depth6): deadline time.time() time_budget best_move None depth 1 while depth max_depth and time.time() deadline: # 每層先保存一個(gè)候選最佳走法層結(jié)束才更新 current_best None best_value -float(inf) for move in board.get_legal_moves(board.turn): board.push_move(move) value alpha_beta(board, depth - 1, -float(inf), float(inf), False) board.undo() if value best_value: best_value value current_best move if current_best is not None: best_move current_best depth 1 return best_move這里三個(gè)必調(diào)參數(shù)是參數(shù)推薦起點(diǎn)作用調(diào)整方向max_depth6硬性最大深度上限防止時(shí)間預(yù)算失效時(shí)無(wú)限加深想棋力更強(qiáng)就加到8但要配合更快的走法生成time_budget2.0秒每次落子的時(shí)間預(yù)算實(shí)時(shí)對(duì)戰(zhàn)設(shè)1秒分析模式可設(shè)5秒evaluation_coeff0.1位置分系數(shù)影響評(píng)估函數(shù)的激進(jìn)度0.05保穩(wěn)0.3冒險(xiǎn)吃中心迭代加深還有一個(gè)隱藏好處如果你實(shí)現(xiàn)了“上一步搜索的最佳走法在開局庫(kù)附近”它可以用在啟發(fā)排序里讓alpha-beta剪枝更容易觸發(fā)。不過(guò)在愛(ài)因斯坦棋上你先把這三個(gè)參數(shù)調(diào)好已經(jīng)能打敗絕大多數(shù)隨便下棋的人類玩家。5. 避坑指南愛(ài)因斯坦棋實(shí)現(xiàn)中的 5 個(gè)常見(jiàn)翻車現(xiàn)場(chǎng)這一章是血淚經(jīng)驗(yàn)。我確實(shí)在這些地方翻過(guò)車每次都要花至少一個(gè)晚上排查。按現(xiàn)象→原因→解決的方式寫希望你不用走回頭路。5.1 規(guī)則版本不同兵/升變引發(fā)的連鎖反應(yīng)現(xiàn)象從網(wǎng)上下載的“愛(ài)因斯坦棋”代碼開局第一排除了重子以外還有一排兵走幾步就報(bào)索引越界。原因愛(ài)因斯坦棋本身有多個(gè)變體有的版本是6x6棋盤加兵有的版本甚至允許兵升變。解決入手前先確認(rèn)規(guī)則版本。如果你手中的項(xiàng)目確實(shí)帶兵就在Kind里加PAWN并在_attacks_from里實(shí)現(xiàn)兵的單步前進(jìn)和斜吃同時(shí)處理升變。如果按我這套無(wú)兵規(guī)則遇到“對(duì)方底線出現(xiàn)第6個(gè)子”要直接報(bào)錯(cuò)防止靜默bug。5.2 重復(fù)局面與“無(wú)棋可動(dòng)”把和棋判成輸棋怎么辦現(xiàn)象AI走到只剩兩個(gè)王時(shí)程序提示“Game over”但明明合法走法沒(méi)了王也沒(méi)被將軍應(yīng)該是和棋。原因我在剛開始寫勝負(fù)判定時(shí)只檢查了legal_moves為空就判定對(duì)方贏了沒(méi)進(jìn)一步查王的攻擊狀態(tài)。解決把將死和無(wú)棋可動(dòng)分開。先判斷l(xiāng)en(legal_moves)0再用is_in_check檢查當(dāng)前玩家王是否被攻擊。無(wú)棋可動(dòng)默認(rèn)判和但保留一個(gè)STALEMATE_IS_LOSS開關(guān)應(yīng)對(duì)那些把“無(wú)棋可動(dòng)”當(dāng)輸棋的規(guī)則版本。5.3 馬能跳其他棋子不能穿人實(shí)現(xiàn)阻擋時(shí)的邊界錯(cuò)誤現(xiàn)象AI在殘局里經(jīng)常用車穿過(guò)自己的兵走到后方評(píng)估分看起來(lái)很高但按規(guī)則就是非法走法。原因_attacks_from里車、象、后沿方向逐格走但我的第一版沒(méi)有在碰到第一個(gè)棋子后break導(dǎo)致繼續(xù)掃描后方格子。馬則不需要檢查路徑所以馬的邏輯是獨(dú)立的。解決在偽合法走法生成時(shí)遇到第一個(gè)非空格就分支若是我方棋子停止若是對(duì)方棋子記錄格子并停止。馬的馬步直接跳過(guò)該檢查。一個(gè)快速自測(cè)是在5x5棋盤上把車圍在中心一圈棋子車應(yīng)該一個(gè)格都走不出去。5.4 GUI線程卡死遞歸搜索別放在渲染線程現(xiàn)象在Qt里點(diǎn)“AI下棋”按鈕后整個(gè)窗口變成“未響應(yīng)”點(diǎn)哪都沒(méi)反應(yīng)要等好幾秒才恢復(fù)。原因AI搜索的alpha_beta是同步遞歸主線程被占滿事件循環(huán)無(wú)法刷新。解決把搜索放到子線程用queue或者信號(hào)把結(jié)果傳回UI。更簡(jiǎn)單的做法是先用命令行版本驗(yàn)證AI再接GUI。我自己的習(xí)慣是讓AI計(jì)算線程每次只搜一個(gè)深度等迭代加深結(jié)束后回到主線程更新棋盤。如果不想引入多線程至少要在搜索循環(huán)中插入time.sleep(0)或QCoreApplication.processEvents()但這不是根治只是喘口氣。5.5 評(píng)估函數(shù)像玄學(xué)用自我對(duì)弈代替肉眼調(diào)參現(xiàn)象我把位置分系數(shù)從0.1改成0.3肉眼看了幾局覺(jué)得AI更兇了但和人下反倒輸多贏少。原因肉眼評(píng)估有巨大偏差位置分過(guò)高讓AI為了占中心狂送棋子。解決把兩個(gè)不同參數(shù)的AI放在一起自我對(duì)弈200局統(tǒng)計(jì)勝負(fù)和平局。勝率差異不到5%時(shí)基本可以認(rèn)為是噪聲跑滿200局再看通常能找到趨勢(shì)。不要只調(diào)一個(gè)參數(shù)就下結(jié)論至少要用固定對(duì)手和固定隨機(jī)種子跑批量對(duì)局。這也是我后來(lái)養(yǎng)成的習(xí)慣任何評(píng)估函數(shù)的改動(dòng)都要用--games參數(shù)跑批量測(cè)試不憑“感覺(jué)還不錯(cuò)”上線。6. 進(jìn)階玩法從“會(huì)下”到“下得好”的驗(yàn)證閉環(huán)現(xiàn)在你已經(jīng)有一個(gè)能下棋、能搜索、能悔棋的程序。想讓它更強(qiáng)不用急著換強(qiáng)化學(xué)習(xí)框架先把這三個(gè)進(jìn)階動(dòng)作做扎實(shí)。6.1 用自我對(duì)弈生成離線數(shù)據(jù)反哺評(píng)估函數(shù)把兩個(gè)不同評(píng)估參數(shù)的AI寫進(jìn)同一個(gè)腳本里讓它們自動(dòng)對(duì)弈200局記錄每局的走法序列、棋子被吃情況和最終結(jié)果。你不需要人工標(biāo)注因?yàn)閯儇?fù)天然就是標(biāo)簽。用這些對(duì)局可以回歸出“哪種子力比值更優(yōu)”的經(jīng)驗(yàn)值甚至可以訓(xùn)練一個(gè)簡(jiǎn)單的線性評(píng)估模型替代原來(lái)拍腦袋的PIECE_VALUES。6.2 做個(gè)開局庫(kù)前5步不再“天馬行空”棋盤這么小AI搜到第4層時(shí)已經(jīng)能穩(wěn)定判斷前幾步。但為了節(jié)省時(shí)間預(yù)算你可以用高深度AI離線生成前5步的最優(yōu)走法存成一個(gè)字典鍵是“棋盤狀態(tài)”值是好走法。對(duì)局時(shí)前5步直接查表把時(shí)間預(yù)算留給中殘局。我自己試過(guò)用8層搜索跑一晚上能覆蓋絕大多數(shù)前期變體線上AI前5步的思考時(shí)間直接降到0。6.3 驗(yàn)證方法讓兩個(gè)AI打一場(chǎng)用勝率和平均回合數(shù)說(shuō)話不要再用“哪一步讓我感覺(jué)厲害”來(lái)驗(yàn)證。正確做法是用同一套引擎、不同參數(shù)跑200局記錄勝率、平均回合數(shù)、每步平均耗時(shí)。表格比感覺(jué)可靠得多版本勝率平均回合平均耗時(shí)v0.1 位置系數(shù)0.158%42.31.8sv0.2 位置系數(shù)0.342%38.71.9s這組數(shù)據(jù)一眼就能看出位置系數(shù)0.1更穩(wěn)。那怎么選我會(huì)把勝率作為第一指標(biāo)平均回合數(shù)作為調(diào)優(yōu)參考因?yàn)榭焖仝A棋不一定意味著棋力強(qiáng)。慢慢養(yǎng)成這個(gè)習(xí)慣后你會(huì)發(fā)現(xiàn)所謂“棋感”變成了可重復(fù)的實(shí)驗(yàn)而不是玄學(xué)。希望這套從規(guī)則到驗(yàn)證的流程能讓你在下一個(gè)棋類項(xiàng)目里少花幾個(gè)通宵。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
啊啊啊啊啊啊好多水| 超97在线精品视频| 无套后入双马尾| av东京热男人的天堂| 啪啪91| 五月丁香六月| 人人色97| 国产欧美美女免费观看视频| 97色在线观看| 久草精品一区 | 国产精品成人无码a v毛片| 亚洲国产成人7777| 国产精品福利资源在线尤物| 日产欧美电影一区二区三区| 啪啪啪综合网| 嗯嗯嗯嗯啊啊啊好紧好大| 成人综合色网| 精品中文一区二区| 大粗鳼巴久久久久| 亚洲日韩人妻中文字幕一区| 3028国产精品| 色婷网| 亚洲五月天激情| 中文字幕一区二区三区视频播放| 99精品视频在线观看| 狠狠久久亚洲欧美专区| 三级片大波波| 成人精品欧洲亚洲| 亚洲天堂资源网| 久久国产逼| 无码 黑人一区二区三区| se吧提供国产乱老熟视频胖女人| 免费操逼视频下载| 国产欧美日韩在线观看麻豆传媒公司| 亚洲欧美中日韩| 美女淫穴| 97在线观看视频| 久草资源在线| 久久东京伊人一本到鬼色| 日韩AV无码中文一区二区| 激情专区综合| 国产夜夜操| 精品无码不卡视频| 噜噜在线| 撸撸成人在线视频| 日本亚洲嫩草影院啪啪| 国产女人91精品嗷嗷嗷嗷| 中文字幕永久在线| 精品视频久久区| 草草草视频| 啪啪啪东京| 91碰碰碰| 中文字幕AV片| 猛猛干| 夜夜草我| 婷婷成人久久久精品| 日韩一级二级三级免费看完整版国语版 | 99热精品在线观看| 91美女在线视频| 色亚洲欧美| 亚洲精品乱码线路中文字幕| 六月丁香婷| 另类av综合久久| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 岛国福利在线精品播放| 日韩美女久久一区二区三区| 国产91美女视频| 黄视频免费| 超碰97中文| 啪一啪免费视频| 91 在线亚洲| 久久久久久裸体| 男女一进一出视频久久| 丁香六月婷婷久久综合| 91操熟女视频 | 第四色色综合91| 少妇天堂| 欧美色图天堂在线| 一本色道久久综合狠狠操| 成人小说视频在线精品欧美| 久操B网| 国产蜜臀精品一区二区尤物| 欧美在线观看综合国产| 精品夜夜澡人妻无码AV| 婷婷中文网| 人妻黑丝袜电影| 乱伦熟女专区| 美日韩一卡二卡三卡免费人妻精品| 综合欧美色图| 欧美在线干| 97视频在线免费| 欧美成人四级在线播放| 日本孕妇孕交| 国岛片视频| 男生女生啊啊啊啊| 最新av中文字幕高清| 中文字幕 一区二区 亚洲无码| 97亚洲色图| 91精品久久久久久综合五月天| 99精品高潮| 亚洲欧美自拍偷拍| 综合色拍| 欧美熟女操屄| 青青草在线视频美女| 久久直播国产| 精品免费成人久久| 日本 欧美 国产一区| 999熟女精品| 精品久久人妻成人网| 精品久久久久成人码免| 欧美激情在线观看视频| 人妻出轨一区二区三区| 亚洲国产精品久久久久婷婷老年| 日韩高清黄片| 啊啊在线| 成人情色一区二区| 日韩精品-原创伙伴| 六月婷婷五月丁香| 欧美亚洲中文字幕| 99自拍视频在线| 亚洲欧美内射| 欧美后进式| 加勒比中文av| 久久国产精品,久久国产| 午夜超碰| 91在线美女| 啊啊啊啊网站| 久久久久久大| 亚洲精品成人激情在线| 欧美色图片色哟哟| 久久国色天香香蕉| 欧美一二三级精品在线| 欧美九一精品久久久熟妇| 成人乱码一区二区三少妇| 蜜臀久久久国产| 国产专区第一页| 亚洲97网站| 国内三级自拍小视频在线观看| 欧美少妇高潮视频| 亚洲熟女诱惑| 亚91亚洲网| 国产精品亚洲高清在线| 成人九九| 95人妻爽爽人人做人人澡| 欧美淫乱视频| 亚洲欧美91√| 99热综合| 日本操逼无码| 亚洲麻豆18发?| 丁香六月婷婷| 亚洲国产成人7777| 后入式999| 午夜人妻精品综合在线| 秋霞免费AV| 国产嫩草精品A88AV| 久久久久久夜夜夜夜夜| 婷婷五月天在线观看| 精品一级毛片在线观看| 欧美玖玖爱免费玖玖| www.色五月| 中文字幕久久婷婷丁香五月天| 国产精品久久久九九九| 日本在线不卡123| 尤物网址| 20cm女自慰在线日韩欧美| 大香蕉琪琪日本女优不卡| 久久久久9| 欧美视频一| 综合情欲网| 色综合一区二区三区| 中日韩久久人妻一区二区| 天天色播亚洲综合网站| 中文字幕日韩专区精品系列| 夜夜高潮夜夜爽国产伦精品| 欧美天天综| 97人人干人人操| a男人的天堂久久一级A毛片| 亚洲综合嫩| 久久久专区| 色香阁在线| 亚洲各类熟们中文字幕| 欧美精品一区二区少妇免费A片| 亚洲不雅视频1区二区| 国产日韩欧美| 91成人在线| 欧日韩不卡视.频| 国产熟女免费观看久久| 青娱乐国产精品| 九九九九9999| 校园激情狠狠四射| 亚洲色图日韩丝袜制服一区二区五月在线| 丝袜美女诱惑 91 视频| 亚洲AO在线| 嗯啊不要啊在线 | 欧美在线播放aaaa| 搡老女人老妇女AAA一VU麻豆| 亚洲天天综合| 97爱综合| 天天上日日上日韩精品| 欧美色图综合| 亚洲色图 欧美| 加勒比aⅴ| 四虎免费在线播放| 97超碰影音| 91痴汉| 超碰久久综合| 中文字幕熟女人妻丝袜丝| 美女网站黄页| 综合色久欲| 综合一区二区影视| 欧美激情一| 亚洲少妇免费视频\| 日本高清加勒比| 国产av波波国产精品| 黄色香蕉视频网站一区| 亚洲国产ⅴ高清在线观看| 久久日韩精品一区二区| 激情网色| 激情五月天网站| 黄色网址久久精品欧美喷水| 人人手机欧洲亚洲国产人妻| 国产AV人人夜夜澡人人爽麻豆| 在线情色电影 91大| 天天综合麻豆视频| 怡春院久久| 可乐操在线| 欧美人妻少妇| 中文字幕高清精品一区| 黄色大香焦1级‘′‘| 精品-91人妻子系列| 久久久精品国产亚洲AV无码| 日韩pv中文| 欧美三级免费伊人| av 模特一区了| 午夜福利一区二区三区四区五区色婷婷| 青青青草伊人精品| 亚洲毛片久久| 操操逼视频| wwwcaobibi| 夜夜操2028| 夜夜福利| 欧美性爽xyxOOOO| 黄色AAAAA欧美| 亚洲国产日韩欧美熟妇在线| 东京太热久久久| 亚洲婷婷综合网| 久久无码电影| 久久只有精品一区二区三区| 制服丝袜第二页| 丰满人妻-区二区三区| 日本人妻中文字幕 | 丝袜内射| 亚洲欧洲综合| 久久国产热视频97电影| 在线天堂999| 中国熟妇| 免费又黄又裸乳的视频| 欧美日韩99精品麻豆传媒| 东京热不卡视频| 91人妻人人澡人人爽人人精品| 岛国1区2区3区在线观看| HEYZO高无码国产精品227| 岛国小电影| 中文字幕色AV| 国产精品一区二区校花| 91扒丝袜综合在线| 国产精品久久久啊| 五月丁香啪啪网| 人人妻人人色| 少妇被c 黄 免费观看| 亚洲欧美日韩精品久久久一区二区| 毛片中心9视频99| 国产91丝袜 在线播放| 久久久久亚洲Aⅴ无码| 狠肏骚人妻| 久久久偷拍| 思思性爱| 欧美日韩精品青青| 国产一级作爱毛片| 好一吊区二区| 国产免费永久精品无码| 亚州九九九精品视频| 精品九九国产无码| 国产亚洲精品美女| 自怕偷自怕亚洲精品| 超碰资源亚洲97| 东京热毛片177b2viP| 人妻精品视频一区二区| 果冻传媒一区二区三区| 欧美色爱综合| 日本亚洲熟女视频| 91国模| 九九这里只有精品| 亚洲色图91| 一区二区激情国产熟女| 国产女同在线观看视频| 制服中出中文人人精品| 日本东京热加勒比久久| 男人的天堂2000| 久热在线精品免费观看| 色麻豆AV| 日韩AV熟女乱伦| 色天使AV天堂| 午夜免费视频1000| 秋霞色色影院| 成人精品一区二区三区| 日韩精品中文字幕二区| 97视频播放| 国产玖玖| 国产大学生口爆吞精合集| 欧美在线综合| 蜜臀在线免费观看在线免费观看| 色综合av男人天堂| 色逼综合| 免费97视频| 最新国产精品久久精品| 高潮精品| 9 1超碰九色| 五月婷婷色色| 翔田千里AⅤHD无码| 日韩专区久久久| 狠狠狠狠狠| 狠狠色伊人亚洲综合网站色| 中文字幕精品专区搜索结果91| 精品一区二区成人动漫| 日本人妻最新在线中| 少妇内射www在线观看视频| 99精品在线观看| 成年人黄色视频免费| 熟女中出视频| 五月天综合| 不卡中文字幕aⅴ在线| 强奸乱伦大香蕉| 国产国产亚洲一二三久久| 少妇被玩视频二三区| 日本熟妇人妻中出视频| 丁香七月婷婷| 亚洲乱熟女一区二区| 天堂蜜桃无码视频一区二区| 人、人、摸,人、人、草| 成人AV超碰免费在线| 国产AV人人 夜夜人人澡| 亚洲欧美在线观看2021 | 久久国产性爱| 后入国产| 怡红院成人视频| 伊人 俄罗斯 a v| 久久精品一区二区三区不卡| 国产福利小视频高清在线观看| 男人的天堂一区| 2019午夜福利视频| 欧美aⅴ99久久黑人专区| 柠檬AV导航| 五月天久久综合网| 最新无码国产| 60秒不遮不挡| 97色欧洲| 99草精| 日韩丝袜高跟制服在线观看| 青青爽| 婷婷激情四射| 久久久成人国产精品无码| 国产成年精品高清在线观看91| 91久久久久久久久18| 另类欧美| 亚洲精品久久一区二区三区蜜桃臀| 九久久九精品视频| 九一综合精品视品av| 天天综合青苹果| 一区二区三区色综合| 91色综合激情| 69AV女优男人的天堂| 99色热| 国产激情片在线观看| 日韩欧美午夜视频在线| 岛国毛片在线观看免费| 国产成人自拍视频视频| 欧美大波激情xxxx| 久久精品国产亚洲AV高清演员表| 操一操摸一摸| 白丝被操91| 亚洲 欧美 日韩 国产一区二区| 992视频一区| 97欧美资源| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 亚洲精品aa久久伊人| 强奸乱伦大香蕉| 黄色片,com| 久操网视频| 黄片aaaaa一区| 亚洲午夜福利在线影院| 99ri在线视频| 精品国产一区二区三区av在线资源| 无码伊人久久大杳蕉中文无码| 亚洲精品日日夜夜52| 日韩午夜啪啪视频| 亚洲 综合 欧美| 天天淫人人妻日日色| 伊人色综合超碰| 大香蕉男人的天堂| 亚洲玖玖爱| 国产激情久久| 观看免费区二区三区二| 四季AV一区二区凹凸精品小说| 精品性爱久久视频| 国产sv美女内射| 精品亚洲| 日本高清_区二区三区| 乱伦系列一区二区| 久久亚洲不卡| 国产精品视频| 91成人无码| 久久久久久久久久久免费精品| 视频在线观看免费一区二区三区| 爱射综合| 综合激情一一91| 美女9118禁| 国产无马在线| 人妻AV 中文字幕的| 久久超碰免费的| 天天操熟妇| AV中亚| AA特级绝黄| 熟女丝袜视频| 国产自偷| 老司机深夜18禁污污网站| 97人人操人人摸人人爱| 精品精品精品| 国产91专区| 国产乱伦视频污| 女人 A一级| 91狠婷| 91女优在线观看 | 欧州一区二区三区四区| 国产AV高清AV无码| 国产久久日| 91亚洲欧洲| 国产精品香蕉热久久新品| 91啪9色| 福利在线观看一区二区| 精品视频日日夜夜| 人妻蜜桃臀| 18禁免费视频| 久久熟妇五十路一区| 熟女精品日韩一区二区三区| 91天堂色男人的天堂| 国产传媒一区日韩| 欧美Ⅴ性爱| 欧美精品99久久久| 亚洲国产亚洲天堂| 日本精品无码三级网站| 四虎在线播放| 天天色黄色影院天天操| 蜜臀AV成人精品蜜臀AV久久| 人人看黄色视频| 日本在线一二 | 在线无码操| 男人天堂综合| 国内偷自视频区视频综合| 中文字幕大片三级狠狠干| 日韩欧美麻豆 | 国产天天骚| 夜夜爽夜夜操| 伊人天堂在线| 亚洲精品99999| 情色AV电影| 97天天摸天天爽| 亚洲麻豆精品二区三区| 97欧美| 蜜臀av一区二区三区免费观看| 91蜜桃传媒精品久久久一区二区| 国产又大又硬又长又粗| 久啪视频| 920日本午夜免费| 九九久久久| 精品久久久久,69国产成人精| 美女9118禁| 色蜜AV| 国产h小视频在线观看免费| av天天在线观看| 最新国产精品| 青青草在线视频欧美| 国产视频一区二区三区在线免费观看| 日本啊啊啊啊啊视频| 91九九九小逼| 国产精品久久久无码AV网站| 国产97在线播放| 亚洲中文字幕精品久久久久久直播 | 97久久网| 久久久国产精品人妻丝袜| 亚洲性爱电影| 情色五月天就去干| 精品国产乱码久久久久久久久1| 国产高清自拍视频| 91激情综合| 婷婷五月天成人| 农村女一级毛卡片| 精品少妇人妻| 九色97| 素人一区二区三区日韩| 骚妻少妇精品性色无码四色A V| 日本三级日本三级99| 亚洲久久久久| 午夜AV污污污| 97精彩视频网站| 亚欧视频在线| 日韩中文字墓| 干美女人妻| 九九十八精品| 欧美日韩性爱精品| 日韩欧美午夜一区二区| 中文字幕一区二区三区四五区| 淫淫总合网| av最新免费中文字幕| 亚洲欧美洲综合| 亚熟hd视频在线| 五月天激情国产综合婷婷婷| 欧美精品成人在线播放| 日韩97在线| 美女骚尻视频| 吉田爱美AV在线| av九九| 久草网站免费在线观看| 2017av无码免费无线播| 欧美综合色图片| 大香蕉欧美国产日韩高潮| 99这里都是精品| 91成人久久| 黑人美精品 A片| 在线视频亚洲无码| 综合久久9| 天天天做天天天爱天天天爽| 亚洲美女 晚间男人天堂| 精品四五区| 色综合婷婷| 国产小黄片在线免费观看 | 伊人久久大香线综合无码| 夜夜高潮夜夜爽夜夜爱爱一区| 青久操| 熟妇人妻一区二区| 色香色香欲天天天影视综合网| 秋霞影音一区二区三区| 欧美精品99久久久**| 日韩激情电影中文字幕| 9久在线视频只有精品| 9久热这里只有精品| 蜜桃臀AV在线| 欧美九一精品久久久熟妇| 美女黑人91神马| 97大色网| 日本999精品| 亚洲大色堂| 精品人妻一区二区乱码一区二区| 人人操天天爽| 天天综合网91入口| 亚洲大色堂| 欧美在线l亚洲| 情色五月天久久久| 性爱欧美五月| 国产久久一区二区| 中文字幕伊人| 免费观看啪视频| 屁股久久久久久| 亚欧成人中文字幕一区| 国产人伦精品一区二区三区| 超碰9 7女人| 两性色网| 99色婷婷中文字幕乱色| 亚洲丝袜诱惑| 91啪啪| 国产精品69久久久久久久| 日韩欧美tv一区二区在线观看| 色蜜AV| 中文一区二区三区影院| 一个国产在线综合网站| 变态乱伦伪娘灌肠一区二区| 国产 无码 一区二区| 欧美一级色| 人妻在线中出视频| 五月婷婷青青草娱乐伊人| 影视综合无码少妇| 久久久精品视频欧州站| 国产高清成人mv在线观看| 日产操逼| 99热婷婷| 超碰97玖玖爱| 怡红院一区二区熟女人妻| 欧美伦乱| 夜夜爽33333| 免费观看性欧美一级| 色狠狠综合噜一二三区| 国产精品久久久久久久免牛肉蒲团| 国产精品美女在线一区| 久久99精品视频| 国语av最新自产拍在线观看| 色呦呦呦在线观看视频| 蜜臀th| 亚洲第一狼人丝袜美女另类 | 91熟女熟妇视频网站| 精品 码产区一区二-1080P高清在线www-B029AV| 色女99一级片在线观看| 亚洲同性aV综合| 久久久久久综合久久伊人蜜月| 51久久夜色精品国产麻豆| 九九九九精品在线| 5252色欧美在线| 狠狠爱夜夜| 91丨九色丨国产丨人妻在线| 黄色污污污污污污网站| 亚州综合| 久操视频资源站公开| 91美女在线视频| 亚洲欧美综合| 亚洲精品男人的天堂| 97在线播放 | 午夜欧美神马久久久久| 97超碰色色| 少妇超碰在线| 不卡在线观看视频| 婷婷月色| 大JI巴好深好爽又大又粗视频| 日韩无码专区| 亚洲黑人在线| 狠狠 91| 国产精品小视频一区二区三区| 开心五月深爱五月| 亚洲aV性爱| 欧亚性爱视频免费看| av在线观看不卡网站| PMv在线观看| 精品人妻免费观看| 永久免费av无码网站国产app| 92一区二区| 一起草三级AV电影在线观看| 秋霞怕怕片| 日韩操逼性鲍| 黄色小视频日本txt| 日本女优在线视频福利| 天天做日日爱夜夜爽| 国产精品一区二区三区,亚洲综合| 隔壁邻居波多野结衣中文字幕| 手机在线免费看的av| 男人天堂欧美| 欧美日韩性爱无码| 欧美精品宗合| 国产成人AV麻豆| 亚洲欧美综合| 日韩一区二区高清在线观看的| 久久精彩免费视频| 精品国产乱码久久久影院| 欧美综合色图片| 天天影视综合色| 天天日天天爽| 99九九久久| 91性| 欧美91网| 香蕉在线一区二区三区| 亚州操逼网| 日本亚欧爱爱| 91丝袜美腿片| 久久伊人大香蕉| 五十路熟女人妻一区二区在线观看| 97AV爱| 激情看片网站| a级免费在线观看| 日韩无码精品综合久久| 亚洲免费看片| 亚洲国产亚洲天堂| 国产成人在线观看网址| 亚洲综合中文字幕有码| 91成人在线| 97超碰久久| 开心五月婷婷激情| 97超碰人操| 欧美成人A√在线一区二区| 五月天婷婷色色| 亚洲有薄码区久久在线一区| 操逼逼一区视频| 91av天美性媒精品视频| 欧美后入| 丝袜性亚洲| 精品无码一区二区三区| 校园春色制服丝袜中文字亚洲| 麻豆一区二区三区在线看| 岛国黄色大片网站| 中文字幕精品专区搜索结果91| 天天操天天干一区二区 | 我爱大香蕉| 精品制服美女中文一区二区三区| 男女激烈网站最新| 激情四射五月天| 日本一级二级三级网站| 久久妇| 色99在线| 性饥渴少妇av无码毛片| 成人天天看站长推荐 | 大香蕉综合在线| 在线观看啊啊啊啊啊| 婷婷99狠狠| 久久鲁夜| 97资源站国产精品| 亚洲国产综合图区中文字幕| 97精品视频免费| 五月丁香| 日韩在线观看中文字幕视频| 日本人妻伦在线中文字幕| 97色爱| 综合网亚洲| 国产综合网站在线播放| AV色五月天| 欧美白嫩女HD| 澳门特级毛片免费观看| 蜜色网色哟哟| 久久久久成人网| 超清福利精品视频在线| 国产无马av| 日欧美色| 日韩9999| 十八禁啪啦拍视频无遮挡| 成全动漫视频观看免费下载| 碰超人人在线一区二区三区| 啪啪视频mP4| 99久久婷婷国产综合精品草原| 欧美日韩大香蕉| 超碰91在线| AV女资源| 啊啊啊啊好疼| 情色五月天就去干| 日本三级韩国三级美三级91| 亚洲综合113页| 国语人妻精彩刺激| 精品超碰中文在线| 免费视频a级毛片免费视频| 蜜乳AV网址| 亚洲精品影视老司机| 国产性久久久| 狠日操| 91久久精品中文字幕| 国产精品女久久久久av爽| 黄色av网站在线播放| 一起草欧美| 男女激情黄色网址| 久久久久国产无av| 婷婷尹人大香蕉免费| 婷婷五月天网| 久操视频免费在线观看| 爱爱动态120秒| 加勒比日本在线 | 99热精品在线观看| 色九九综合| 久久久久亚洲三级电影| 亚洲综合97中文网| 久久只有精品一区二区三区| 夜夜爽爽夜夜精品视频| 人妻久久| 欧美日韩黄片精品在线| 国产精品成人久久一区二区三区 | www.狠狠操| 97亚洲综合| 欧美精品第四五页中文字幕在线观看| 手机在线播放国产福利| 色色无码| 神马午夜久久| 夂久色| 欧美与日韩97| 熟人人妻少妇精品久久| 人妻内射一区二区在线视频| 超碰性爱97| 狠狠91| 中文字幕欧洲有码| 嫩草 人人网精品| 91性感网站| 麻豆2区1区天美| 被窝影院午夜看片无码| 午夜精品久久久99热蜜桃的功能特点| 国产一区二区在线看| 97视频网站在线观看| 野狼激情网| av天堂手机版追回| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 亚洲色图亚洲无码强奸乱伦| 无码99| 丝袜 中出 制服 人妻 美腿 中文字幕| 人人贴人人摸| 人人综合| 国产最火爆久久国产网站网站| 中文字幕在线24| 啊啊啊久久| 人妻碰碰碰碰碰碰| 欧美综合第一页| 亚洲色图大香| 国产一级内射高清视频| 狠狠色综合网| 成人久久久| 色婷婷综合久久久久中文一区二区| 精品78| 91成人在线| 日韩成人精品视频自拍| 2019午夜福利视频| 亚洲一区二区精品福利| 欧美激情高清性猛交| 丁香六月激情综合| 最新国产精品| 国产一| 久久五月份| 韩三级a视频在线观看| 亚洲男人天堂2016| 欧美成人黄网色网站| 欧美A片中文字幕| 熟女六十路| 另类小色呦| 91高潮| 精品人妻伦一区二区三区久久| 五月婷婷影院| 91丨豆花丨熟女| 78精品| 91美女視頻| 夜夜骑夜夜操| 人妻美腿丝袜日韩| 日韩卡一卡二卡三在线| 亚洲 中文 女同| 蜜臀网址在线| 日产欧美电影一区二区三区| 91网站18禁| 人妻丝袜一区二区三区在线| 中文字幕一二三av| 国产亚洲色婷婷99精品91| 丁香六月婷婷久久综合| 玖玖综合网| 色天天野狼综合社区| 欧美.亚洲.另类.丝袜.制服.诱惑| 鸥美插入视频| 97在线精品| 久久久久久亚洲中文| 手机在线免费看的av| 成人av性爱电影在线观看| 天天射影院| 久久久久成人网| 大香蕉久| 亚洲欧洲无码bt精品合集| 天天爽爽爽爽| 视频国产精品未满十八禁止在线观看| 啊嗯好大视频在线观看| 午夜AV人气不卡| a片亚洲一本通视频| 国产成年女人免费视频播放a| 狠狠躁日日躁夜夜躁A| 久久综合女优| 亚洲涩涩| 日韩无码服务区| 麻豆色99999| 欧美成人精品欧美一级乱黄一区二…| 色五月av| 桃花色涩综合影院| 亚州色图第三区| 狼天天狼天天大香蕉| 中文字幕55555| a片亚洲一本通视频| 超碰色大香蕉| 日韩操啪| 国产 热久久久久国产精品| 婷婷香蕉欧美在线一区二区三区| 极品色电影院| 欧美色宗合| 午夜.DJ高清在线观看免费7| 91亚洲黑人| 久草线上视频免费看| 97综合国产| 强奸乱伦动态污图免费 | 97久久久精品| 人人妻人人色一区二区三区| 色综合加勒比| 亚洲精品精品一区二区| 男人的天堂成人的社区| 99久在线精品99re8| 欧洲黄色网| 色五月综合网| 久草线上视频免费看| 少妇熟女1区2区3区| 五月丁香啪啪| 视频一区二区免费在线| 九七人妻在线| 国产农村妇女精品一二区| 大香蕉伊人75| 亚洲少妇中文字幕网址| 人人妻人人色| 看免费的黄片| 男人的天堂.com| 东京热天堂网| 中文字幕一区 二 区 三 四 五 区日 日 骚| 欧美少妇性乱| 中文人妻av高清一区| 性爱视频免费网址| 麻豆 欧美 日韩| 红杏大香蕉| 天美麻豆精品视频99| a在线视频免费观看| 无码av永久免费专区网站| 91天天爱| 婷婷五月影院| 91色狼| 久久久久久久久久久97| V A在线| 1204金沙人妻懂旧版免费| 超碰97人妻在线| 超碰 av 女人天堂| 久久久精品九| 成人三级片无码| 日日摸天天爽夜夜欢| 超碰99热中文字幕| 超碰97护士| 欧美成人9797| 亚洲综合在线91| 国产成年精品高清在线观看91| 久久久久久电影| 欧美亚洲成人在线一区二区三区| 久久久久熟女| WWW黄片COM| 国产白嫩精品久久| 12一15性XXXX粉嫩国产| 色99视频| 一区二区三区在线日韩影院观看| 日本欧美亚洲高清在线看| 91搡老女人老妇女老熟女歌词翻译| 国产99999久久精品| 色综合久久av| 二男一女成人A片| 日韩精品在线观看网站| 国产精品交换一区二区| 欧中日成人免费影视| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 亚州五月| 日韩激情电影中文字幕| 欧美72网页| 混色激情av| 人人爱操| 色婷婷九月| 成人免费福利网站国产| 人妻干天天| 日本性感人妻91| 天天肏天天干| 亚洲日韩天堂| 99热一区二区三区四区| 亚洲,欧美,综合网| 午夜毛片高清免费不卡| 青青草视频导航官网| 婷婷伊人一区| 日本有码影片下载| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 操高情无码| 日韩乱伦AⅤ| 激情五月天插| 国产成人手机视频激情| 最新中文字幕在线亚洲| 国语精品内射在线观看| 国产福利影视| 五月激情影院| 欧美久久九九| 亚洲综合小视频小说在线观看 | 欧美熟妇亚洲版| 少妇熟女视频一区二区三区| 久久激情四射婷婷丁香五月天| 肥佬影院91| PMv在线观看| 五月婷网站| 丁香五月婷婷五月| 蜜桃久久久久久久| 97在线资源| 精品在线蜜臀| 国产精品一区二区亚洲人成毛片| 久久精品毛片免费不卡| 99热久| 高潮综合网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 日韩中文字幕在线视频观看| 97摸视频| 人妻无码后入| 国产400孕妇孕交群| 亚洲成人无码影院| 午夜视频久久久久一区| 青青草吊丝| 97网址97| 啊啊啊想要| 国产精品福利视频| 91岛国动作片| 中文字幕中文字幕一区二区| 377p欧洲日本亚洲大胆| 人人操我人人干| 无码一区二区精品视频久久久春药 | 伊人成人中文字幕久久网| 啊啊啊不要好爽日韩无码一区| 女生久久网| 亚洲国产日韩欧美熟妇在线| 秋霞一区二区三区四区五区六区七区| 日韩无码一区二区三区| 久久99精品视频| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 男人夜色天堂ss| 91M一社| 亚洲超碰在线| 91精品久久久久久| 日本在线不卡v二区| 941超碰| 看日韩操逼| 后入合集| 欧美 亚洲 制服 精品| 中文乱码字幕观看视频| 青青国产精品在线| 91在线视频国产网站| 色妹子A V| 在线无码视频| 97视频在线视频| 99视频在线| 免费岛国一级片| 亚熟hd视频在线| 99精品成人免费看| 欧美性性性| 免费农村成人少妇人妻Aa一区二区视频 | 熟妇的味道HD中文字幕| 国产精品国产| 日日狠狠久久偷偷色综合免费| 韩国三级一线观看久| yy少妇精品久久| 五月天社区| 欧美日韩不卡a片| 人妻熟女一区二区在线视频| 黄页大片在线观看| 久操视频资源站公开| 夜色91| 亚洲区限制级 99| 区一在线观看| 热久久这里只有精品| 九九精品99| 91丨人妻丨国产丨丝袜| 色亚州人久干视频在线观看免费版| 五月天社区| 日韩欧美一级特黄大片| 91综合网站| 老鸭窝在线视频播放| 激情视频一二三| 久久9亚洲| 欧美久久九九| 婷婷色婷婷| 欧美v亚洲v日韩v最新在线二区 | 天美传媒av在线| 射欧美综合| 亚洲春色一区二区三区| 超碰在线综合97| 91操熟女| 欧美性爱另类综合| 国产精品熟女九九九| 少妇激情AV| 啪啪啪东京| 3p国产色噜噜一区| 男人的天堂2019AV| 六月丁香五月婷婷| 午夜精品99久久久久传媒| 激情久久久| 久久精品店| 亚洲AV无码AV吞精久久久久| 青娱乐欧美激情一区二区| 欧美日韩不卡传媒| 九九国产热| 天天干夜夜操一区二区| 亚洲男人的天堂V| 日本不卡三级网在线播放| 日韩一级片| A片大香蕉在线| 91熟女丨91老女人| 78精品在线| 国产9熟妇视频网站| 日韩中文字幕2020| 亚洲精品欧洲精品| 亚洲和欧美裸体美女双飞视频| 诱惑人妻欧美一区在线播放| 国产热av| 床戏久久久av一区二区麻豆| 超碰精品| 91女优在线观看| 96麻豆精品一区二区三区| av一区二区三区不卡| 香蕉人欧美综合| 亚洲天天自拍| 四虎影视 亚洲无码| 操死我了啊啊啊| 福利一级版子| 人人妻人人爽| 欧美性爱综合,免费| 日本熟女免费視颖| 大香蕉免| 日本精品无码三级网站| 久久久久久久九九九九九九| 在线观看一级α片刺激高潮视频| 青娱乐亚洲自拍| 99国内精品| 992视频一区| 麻豆国产96在线| 人妻素股| 天天躁日日躁xxxxx| av大香蕉网站| 性综合网| 日韩美一区| 久久ww| 久久性爱精品一区| 久草电影网| 国产欧美日韩精品中文| 日欧毛片久久| 中文字幕中文字幕一区二区| 超碰碰97| 99这里只有精品国产| 亚洲 欧美 另类 日韩 人妻一区| 亚洲高清视频在线免费观看| 狠狠欧美| 9色国产精品一区粉嫩| 蜜桃臀 后入 一区 二区 三区 在线| 色婷婷国产精品一区在线观看| 三级三级三级日本99| 欧美 亚洲 另类 综合| 99超碰色| 大香蕉啪啪啪| www.久久制服糖| 综合激情一一91| 亚洲超碰在线| 精品国产乱码久久久| 久偷拍欧美日韩三区| 黑操B| 成人亚欧免费视频| 久久三区四区| 天天天乱色综合全| 人人考人人摸人人干| 美女91网站| 97天天在线| 人人澡人人爽人人精品| 中文字幕成人理论在线| 国产成人亚洲精品无| 色悠久久久av| 欧美日韩淫加| 欧美性爱1080p| 亚洲综合五月天| 日本三级一区二区 在线| 欧美激情内射| 天天摸天天舔天天操| 国产av白丝| 五月天综合| 粉嫩绯色AV一区二区在线| 国产丝袜欧美在线视频| 国产激情在线| 91日日夜夜| 亚洲综合性网址| 欧美色图片91| 啊啊啊 在线观看| 激情文学网伊人| 中文字幕 码精品视频网站| 欧美十八禁网站| 综合欧美激情网| 欧美日韩不卡a片| 天堂а√在线最新版在线| 黄色片A级一区二区三区| 粉嫩av平台| a久久|