ບົດຮຽນ › ບົດທີ 3 – ການຄົ້ນຫາໃນເກມ

3.3 Minimax ກັບການຕັດກິ່ງ Alpha-Beta

ຕັດກິ່ງທີ່ບໍ່ມີຜົນຕໍ່ການຕັດສິນໃຈ ໂດຍໄດ້ຜົນຄືກັນກັບ Minimax.

ແນວຄິດ

ຫຼາຍກິ່ງໃນຕົ້ນໄມ້ເກມ ບໍ່ມີທາງ ປ່ຽນການຕັດສິນໃຈທີ່ຮາກໄດ້ → ບໍ່ຈຳເປັນຕ້ອງສຳຫຼວດ!

  • α (alpha) = ຄ່າດີທີ່ສຸດທີ່ MAX ຮັບປະກັນໄດ້ແລ້ວ (ຂອບລຸ່ມ).
  • β (beta) = ຄ່າດີທີ່ສຸດທີ່ MIN ຮັບປະກັນໄດ້ແລ້ວ (ຂອບເທິງ).
  • ເມື່ອ α ≥ β → ຕັດກິ່ງ ທີ່ເຫຼືອ.
def alphabeta(s, depth, alpha, beta, is_max):
    if depth == 0 or s.is_terminal():
        return eval(s)
    if is_max:
        v = -INF
        for c in s.children():
            v = max(v, alphabeta(c, depth-1, alpha, beta, False))
            alpha = max(alpha, v)
            if alpha >= beta:
                break          # ຕັດ β
        return v
    else:
        v = +INF
        for c in s.children():
            v = min(v, alphabeta(c, depth-1, alpha, beta, True))
            beta = min(beta, v)
            if alpha >= beta:
                break          # ຕັດ α
        return v

ຕົວຢ່າງສັ້ນ

MAX ຢູ່ຮາກ. ລູກທຳອິດ (MIN) ໄດ້ຄ່າ 3 → α = 3. ລູກທີສອງ (MIN): ໃບທຳອິດມີຄ່າ 2 → MIN ຈະໄດ້ ≤ 2 < 3 → MAX ບໍ່ເລືອກທາງນີ້ແນ່ນອນ → ຕັດໃບທີ່ເຫຼືອ!

ປະສິດທິພາບ

  • ຜົນລັບ ຄືກັນທຸກຢ່າງ ກັບ Minimax.
  • ຖ້າຮຽງລູກດີ (ທາງທີ່ດີກ່ອນ) → ສຳຫຼວດພຽງ ~O(b^(d/2)) ຈຸດ → ຄິດໄດ້ ເລິກເປັນ 2 ເທົ່າ ໃນເວລາເທົ່າເກົ່າ.

🌳 ໃນຫ້ອງທົດລອງ ກົດ "ສຸ່ມຕົ້ນໄມ້" ແລ້ວປຽບທຽບຈຳນວນໃບທີ່ຖືກປະເມີນ ລະຫວ່າງ Minimax ແລະ Alpha-Beta.

🧪 ເປີດຫ້ອງທົດລອງສຳລັບບົດນີ້

📝 ແບບທົດສອບ

ເຂົ້າສູ່ລະບົບ ເພື່ອເຮັດແບບທົດສອບ.

← 3.2 Minimax ຈຳກັດຄວາມເລິກ ແລະ ຟັງຊັນປະເມີນ 4.1 ຕັກກະປະພົດ ແລະ ການອະນຸມານ →

💬 ຊ່ວຍເຫຼືອ