CÀI đặt THUẬT TOÁN MINMAX áp DỤNG cài đặt GAME cờ CARO

33 1.5K 3
CÀI đặt THUẬT TOÁN MINMAX áp DỤNG cài đặt GAME cờ CARO

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu là báo cáo nằm trong chương trình học Trí tuệ nhân tạo, bao gồm file báo cáo lý thuyết giải thích rõ ràng thuật toán tìm kiếm minimax và đính kèm file lập trình giúp bạn đọc hiểu sâu và kỹ hơn về thuật toán minimax cũng như cải thiện kỹ năng lập trình

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG KHOA CÔNG NGHỆ THÔNG TIN -o0o BÁO CÁO THỰC TẬP SỞ ĐỀ TÀI: CÀI ĐẶT THUẬT TOÁN MINMAX ÁP DỤNG CÀI ĐẶT GAME CỜ CARO SINH VIÊN THỰC HIỆN: PHẠM THỊ LIÊN Thái Nguyên, tháng 03 năm 2018 MỤC LỤC CHƯƠNG I: sở lý thuyết – Lựa chọn ngôn ngữ lập trình 1.1 Giới thiệu lý thuyết trò chơi ứng dụng 1.2 Tổng quan ngôn ngữ lập trình C# 1.2.1 Giới thiệu chung .4 1.2.3 Tại phải sử dụng ngôn ngữ lập trình C# 11 1.3 Tổng quan winform C# 14 1.3.1 Tổng quan winform 14 1.3.2 Ví dụ đơn giản cấu trúc chương trình Winform 18 CHƯƠNG 2: Cài đặt thuật toán .20 2.1 Thuật toán tìm kiếm tốt - đầu tiên 20 2.2 Mô tả toán .22 2.2.1 Giới thiệu game dò mìn 22 2.2.2 Hướng dẫn chơi 22 2.3 Cài đặt thuật toán 23 2.3.1 Các bước thực thuật toán 23 2.3.2 Giao diện chương trình 24 CHƯƠNG I SỞ LÝ THUYẾT – LỰA CHỌN NGÔN NGỮ LẬP TRÌNH 1.1 Giới thiệu lý thuyết trò chơi ứng dụng Theo số tài liệu thì lần đầu tiên lý thuyết trò chơi xuất lá thư viết bởi James Waldegrave năm 1713, lá thư thì tác giả đưa lời giải chiến thuật hỗn hợp Minimax cho trò đánh người Leher.Tuy nhiên thì Lý thuyết trò chơi thực sự tồn ngành John von Neumann xuất mốt loạt các báo năm 1828.John von Neumann người đầu tiên hình thức hóa Lý thút trò chơi thời ký trước chiến tranh lạnh, chủ yếu áp dụng chiến lược quân sự, nổi tiếng khái niệm đảm bảo phá hủy lẫn (mutual assured destruction) Sau nhiều năm phát triển thì Lý thuyết trò chơi sử dụng rộng rãi nhiều ngành khác : Kinh tế kinh doanh, sinh học, trị học, triết học, khoa học máy tính logic, viễn thơng, số show game truyền hình … Trong thời đại Công nghệ thông tin phát triển thì Lý thút trò chơi đóng vai trò hết sức quan trọng, đặc biệt logic khoa học máy tính.Một sớ lý thút logic sở ngữ nghĩa trò chơi.Thêm vào những khoa học gia máy tính sử dụng trò chơi để mơ những tính toán tương tác với Một sớ tḥt toán Lý thuyết trò chơi giúp xây dựng, phát triển những trò chơi hay, : thiết kế trò chơi Nim; thiết kế kiểu trò chơi nhân, tính đới xứng; tḥt toán liên quan đến chiến lược tìm kiếm,…Bài báo cáo đề cập đến thuật toán tìm kiếm MinMax thuật toán cắt tỉa Alpha-Beta việc xây dựng chương trình trò chơi cờ caro (Gomoku) 1.2 Tởng quan ngơn ngữ lập trình C# 1.2.1 Giới thiệu chung - C# ngôn ngữ lập trình đơn giản, đại, mục đích tởng quát, hướng đối tượng phát triển bởi Microsoft phê chuẩn bởi European Computer Manufacturers Association (ECMA) International Standards Organization (ISO) - C# phát triển bởi Anders Hejlsberg kiến trúc sư phần mềm nổi tiếng với các sản phẩm Turbo Pascal, Delphi, J++, WFC team ông phát triển Net Framework - C# thiết kế cho Common Language Infrastructure (CLI), mà gồm Executable Code Runtime Environment, cho phép sử dụng các ngôn ngữ high-level đa dạng các tảng cấu trúc máy tính khác - So sánh với C C++, ngôn ngữ bị giới hạn nâng cao ở vài đặc điểm đó, không bao gồm các giới hạn sau đây: + Các trỏ sử dụng chế độ khơng an tồn Hầu hết các đới tượng tham chiếu an tồn, các phép tính kiểm tra tràn đệm Các trỏ sử dụng để gọi các loại kiểu giá trị; những đới tượng thuộc thu rác (garbage-collector) thì gọi cách tham chiếu + Các đối tượng khơng thể giải phóng tường minh + Chỉ đơn kế thừa, cài đặt nhiều interface trừu tượng (abstract interfaces) Chức làm đơn giản hóa sự thực thi thời gian thực thi + C# thì an-toàn-kiểu (typesafe) C++ + Cú pháp khai báo mảng khác nhau(“int[] a = new int[5]” thay vì “int a[5]”) + Kiểu thứ tự thay thế tên miền khơng gian (namespace) + C# khơng tiêu + thêm Properties, các phương pháp gọi các Properties để truy cập dữ liệu + reflection - C# Microsoft giới thiệu lần đầu vào năm 2002 phiên visual Studio.Net 2002 tới trải qua các phiên sau: Phiên C# Phiên visual studio C# C# 1.1 Visual Studio NET 2002 Visual Studio NET 2003 C# Visual Studio NET 2005 C# Visual Studio NET 2008 C# Visual Studio NET 2010 Các đặc điểm First release #line pragma and xml doc comments Anonymous methods, generics, nullable types, iterators/yield, static classes, co/contra variance for delegates Object and collection initializers, lambda expressions, extension methods, anonymous types, automatic properties, Language Integrated Query (LINQ), anonymous types, local var type inference, LINQ Dynamic, named arguments, optional parameters, generic co/contra variance Visual Studio NET 2012 Async / await, attributes C# information Bug fixes, performance improvements, and technology previews of NET Compiler Platform (“Roslyn”) Visual Studio NET 2013 C# caller nameof, String Interpolation,Nullconditional Member Access and Indexing, Index Initializers, Collection Initializer and Add Extension Methods, Overload Resolution, Exception Filters, Await in Catch and Finally Blocks, Auto-property Initializers, Getter-only Auto-properites, Function Members with Expression Bodies, Using Static Visual Studio NET 2015 1.2.2 Đặc điểm ngôn ngữ lập trình C# 1.2.2.1 Các đặc điểm quan trọng C# - Điều kiện Boolean, - Tự động dọn rác bởi Garbage-Collector (GC), - Thư viện chuẩn (Standard Library), - Assembly, - Property sự kiện (Event), - Delegate Quản lý sự kiện, - Dễ dàng để sử dụng Generic, - Indexer, - Biên dịch điều kiện (Conditional Compilation), - Đa luồng dễ dàng (Multithreading), - LINQ Lambda Expression, - Tích hợp với Windows 1.2.2.2 Các kiểu liệu C# - Các biến C# phân chia thành các kiểu sau: + Kiểu giá trị (Value type) + Kiểu tham chiếu (Reference type) + Kiểu trỏ (Pointer type) a) Kiểu giá trị - Các biến kiểu giá trị gán giá trị cách trực tiếp Chúng kế thừa từ lớp System.ValueType - Kiểu giá trị trực tiếp chứa dữ liệu Một sớ ví dụ int, char, float, tương ứng giữ số nguyên, chữ cái, số thực Khi bạn khai báo kiểu int, hệ thống cấp phát nhớ để lưu giá trị Bảng sau liệt kê các kiểu giá trị sẵn C# 2010 Kiểu Biểu diễn Dãy giá trị GTMĐ bool Giá trị Boolean True hoặc False byte Kiểu unsigned integer (8 tới 255 bit) char Kiểu Unicode character U +0000 tới U +ffff (16 bit) '\0' decimal Kiểu thập phân (128 bit) (-7.9x 1028tới7.9 x 1028) / 100 to 28 False 0.0M double Kiểu double (64 bit) (+/-)5.0 x 10-324 tới (+/-)1.7 x 10308 0.0D float Kiểu float (32 bit) -3.4 x 1038 tới + 3.4 x 1038 0.0F int Kiểu integer (32 bit) -2,147,483,648 tới 2,147,483,647 long Kiểu signed integer (64 -9,223,372,036,854,775,808 bit) 9,223,372,036,854,775,807 sbyte Kiểu signed integer (8 -128 tới 127 bit) short Kiểu signed integer (16 -32,768 tới 32,767 bit) uint Kiểu unsigned integer tới 4,294,967,295 (32 bit) ulong Kiểu unsigned integer tới 18,446,744,073,709,551,615 (64 bit) ushort Kiểu unsigned integer tới 65,535 (16 bit) tới 0L b) Kiểu tham chiếu - Kiểu tham chiếu không chứa dữ liệu thực sự lưu giữ biến, chúng chứa tham chiếu tới các biến - Nói cách khác, chúng tham chiếu tới vị trí nhớ Việc sử dụng nhiều biến, thì kiểu tham chiếu tham chiếu tới tới vị trí nhớ Nếu dữ liệu vị trí nhớ bị thay đổi bởi số các biến, thì biến khác tự động phản ánh sự thay đổi giá trị - Ví dụ các kiểu tham chiếu sẵn C# là: object, dynamic, string Kiểu object C# - Kiểu object lớp sở cho tất kiểu dữ liệu C# Common Type System (CTS) Object alias cho lớp System.Object Các kiểu object gán giá trị kiểu, kiểu giá trị, kiểu tham chiếu, kiểu tự định nghĩa (user-defined) khác Tuy nhiên, trước gán các giá trị, cần sự chuyển đổi kiểu - Khi kiểu giá trị chuyển đởi thành kiểu object, gọi boxing ngược lại, kiểu object chuyển đổi thành kiểu giá trị, gọi unboxing Kiểu Dynamic C# - Bạn lưu giữ kiểu giá trị biến kiểu dữ liệu dynamic Việc kiểm tra các kiểu biến diễn run time - Cú pháp để khai báo kiểu dynamic C# là: dynamic = giá_trị; Ví dụ dynamic d = 20; - Kiểu dynamic tương tự với kiểu object, ngoại trừ việc kiểm tra cho các biến kiểu object diễn compile time, việc kiểm tra các biến kiểu dynamic diễn run time Kiểu string C# - Kiểu string C# cho phép bạn gán giá trị chuỗi cho biến Kiểu string alias cho lớp System.String Nó kế thừa từ kiểu object Giá trị cho kiểu string gán bởi sử dụng các chuỗi hai mẫu quoted @quoted Ví dụ: String str = "Hello C#"; Và chuỗi @quoted trông sau: @"Hello C#"; c) Kiểu trỏ - Các biến kiểu trỏ lưu giữ địa nhớ kiểu khác Các trỏ C# khả trỏ C hoặc C++ - Cú pháp để khai báo kiểu trỏ C# là: type* identifier; Ví dụ: char* cptr; 1.2.2.2 Các câu lệnh điều khiển C# a) Các câu lệnh điều khiển lựa chọn i Câu lệnh if-else Mục đích chúng dùng để điều khiển chương trình thực thi nhiệm vụ thỏa mãn điều kiện biểu thức Cú pháp câu lệnh : if(điều kiện 1) các câu lệnh ; else if(điều kiện 2) các câu lệnh ; else các câu lệnh ; ii Câu lệnh switch-case Cũng giống câu lệnh if-else, switch-case câu lệnh rẽ nhánh, sử dụng biểu thức để quyết định chương trình theo hướng Switch – case hỗ trợ hầu hết các ngôn ngữ lập trình C,C++, java, javascript C# Khác với câu lệnh if-else nơi mà biểu thức dựa so sánh giá trị biểu thức với kiểu boolean để quyết định rẽ nhánh Biểu thức switch case dựa việc so sánh với biểu thức với nhiều giá trị cụ thể Trong C#, giá trị mà biểu thức so sánh kiểu dữ liệu sớ, chuỗi, hoặc enum với các biểu thức so sánh với tập các giá trị ý nghĩa, nên đặt tập các giá trị ý nghĩa thành enum sử dụng switch-case Cú pháp câu lệnh: switch (điều kiện) { case giá trị lệnh 1; case giá trị lệnh 2; … Case giá trị n lệnh n; } b) Các câu lệnh điều khiển lặp i Câu lệnh for Câu lệnh for bốn câu lệnh lặp phổ biến các ngôn ngữ lập trình đại Cú pháp câu lệnh for ngơn ngữ lập trình C# sự tương đồng các ngôn ngữ lập trình C, ++, Java, javascript Mục đích: Câu lệnh for thường sử dụng để thực những cơng việc mang tính lặp lặp lại nhiều lần Trong sớtởng sớ lần cơng việc cần thực lặp người lập trình phải tiên đoán trước Cú pháp: for(giá trị khởi tạo; đk để vòng lặp dừng; sớ bước nhảy) { //cơng việc cần thực hiện; 10 Một Control bản: - Label: hiển thị icons hoặc text không sửa - Textbox: nhập dữ liệu từ bàn phím hoặc hiển thị - Button: bắt các sự kiện kích chuột - CheckBox: cho người dùng chọn hoặc không chọn - ComboBox: danh sách đổ xuống - ListBox: danh sách các item để chọn - PictureBox: hiển thị ảnh - MenuStrip: hiển thị menu - ProgressBar: hiển thị tiến trình tác vụ - ToolStrip… Một Event bản: - Click: Sự kiện click vào Button form - Double Click: Sự kiện click đúp vào Button form - Enter: sự kiện ấn Enter - KeyDown: - KeyUp: - MouseClick: Sự kiện kích chuột - MouseMove: Sự kiện di chuyển chuột - MouseUp: - Move: - FormClosing: 1.3.2 Ví dụ đơn giản cấu trúc chương trình Winform 19 Ví dụ: Chương trình Winform đơn giản H12: Code Demo -Một chương trình Winform thường bắt đầu các thư viện ví dụ “using system” , “ using system.Winform.Forms”… Tiếp đến từ khóa “namespace DemoWinform” tên Project tạo Tiếp theo ta cho ứng dụng kế thừa từ Form “public partial class HelloWorld : Form” Bất kỳ ứng dụng Windows Form thừa kế từ đới tượng Form, ta dùng đới tượng để tạo các cửa sổ chuẩn : các cửa sổ trôi (floating form), công cụ (tools), hộp thoại (dialog box) … Mọi Điều khiển công cụ Windows Form (Label, Button, Listbox …) thuộc vùng tên 20 Kết ví dụ ta bấm vào Button OK thì MessageBox lên kèm với dòng chữ “Hello World” H13: Kết 21 CHƯƠNG CÀI ĐẶT THUẬT TỐN 2.1 Thuật tốn minmax 2.1.1 Ý tưởng thuật tốn Hai đới thủ trò chơi gọi MIN MAX luân phiên thay thế MAX đại diện cho người quyết dành thắng lợi cớ gắng tới đa hóa ưu thế mình, ngược lại người chơi đại diện cho MIN lại cố gắng giảm điểm số MAX cố gắng làm cho điểm số mình âm tớt Giả thiết đưa MIN MAX kiến thức khơng gian trạng thái trò chơi hai đối thủ cố gắng Mỗi Node biểu diễn cho trạng thái trò chơi Node lá Node chứa trạng thái kết thúc trò chơi Giải thuật Minimax thể cách định trị các Node trò chơi:  Node thuộc lớp MAX thì gán cho giá trị lớn Node  Node thuộc lớp MIN thì gán cho giá trị nhỏ Node Từ các giá trị người chơi lựa chọn cho mình nước tiếp theo hợp lý 2.1.2 Ví dụ mơ giải thuật Minimax cho trò chơi Tic-Tac-toe  MAX đại diện quân O  MIN đại diện quân X Trạng thái kết thúc trạng thái liên tiếp ngang, dọc, chéo quân cờ X hoặc O, nếu X tức MIN thắng O tức MAX thắng nếu tất các cờ trạng thái chưa kết thúc thì bàn cờ hòa Điểm thắng X -1, O 1, bàn cờ hòa Áp dụng giải thuật Minimax: Từ trạng thái bàn cờ ta dự đoán nước trạng thái tiếp theo nếu trạng thái tiếp theo ta tiến hành lượng giá trò chơi cách ta tiến hành quét cạn tất các trạng thái tiếp theo cho đến lúc gặp trạng thái chiến thắng (Node lá) tính điểm cho Node lá cách: 22  Nếu ở trạng thái mà ta gặp chiến thắng nếu lượt quân X thì đánh giá điểm trạng thái -1  Nếu ở trạng thái ta gặp chiến thắng nếu lượt quân O thì đánh giá điểm trạng thái  Nếu hòa thì điểm trạng thái Sau tính ngược lại trò chơi theo quy tắc:  Nút thuộc lớp MAX thì gán cho giá trị lớn các Node Node  Nút thuộc lớp MAX thì gán cho giá trị nhỏ các Node Node Sau lượng giá hết trò chơi ta tiến hành chọn bước tiếp theo nguyên tắc:  Nếu lớp tiếp theo MAX ta chọn Node giá trị lớn Nếu lớp tiếp theo MIN ta chọn Node giá trị nhỏ  Ưu điểm Tìm kiếm mọi nước tiếp theo sau lựa chọn nước tớt nhất, vì giải tḥt tính chất vét cạn nên khơng bỏ soát trạng thái  Khuyết điểm Đới với các trò chơi khơng gian trạng thái lớn caro, cờ tướng… việc áp dụng giải tḥt Minimax lẽ khơng hiệu nữa sự bùng nở tở hợp quá lớn Giải thuật áp dụng nguyên lý vét cạn không tận dụng thông tin trạng thái để lựa chọn nước đi, vì duyệt hết các trạng thái nên tốn thời gian 2.2 Giới thiệu game cờ caro Cờ caro game phổ biến, đặc biệt giới thiếu niên Đây trò chơi đối kháng giữa người Ván cờ chơi bàn cờ ô vuông Hai bên thay phiên tích vào những vng bàn cờ Ký hiệu nước người X hoặc O Người chơi phải dùng chiến thuật kinh nghiệm để tạo thành hàng ngang, dọc, chéo quân cờ mình 23 Lưu ý quân cờ không phép chặn đầu bởi các quân cờ đối phương Người chiến thắng người tạo hàng đầu tiên Kết thúc ván chơi, kết thắng thua hiển thị hình game Số phỉnh cập nhật vào tài khoản bạn Đặc biệt sớ điểm cúp tính theo luật Elo quốc tế Khi bạn chơi với đối thủ mạnh, nếu thắng bạn cộng nhiều điểm đới thủ bình thường 2.3 Cài đặt thuật tốn 2.3.1 Cài đặt thuật toán 2.3.1.1 Phân tích thuật toán Hai đới thủ trò chơi gọi Max Min Max đại diện cho đối thủ qút giành thắng lợi hay cớ gắng tới đa hóa ưu thế mình Ngược lại Min đối thủ cớ gắng tới thiểu hóa điểm sớ Max Ta giả thiết Min dùng những thông tin Max Một trò chơi vậy biểu diễn trò chơi Mỗi nút biểu diễn cho trạng thái Nút gốc biểu diễn cho trạng thái bắt đầu chơi Mỗi nút lá biểu diễn trạng thái kết thúc trò chơi (trạng thái thắng, thua hoặc hòa) Nếu trạng thái x biểu diễn bởi nút n thì các n biểu diễn cho tất trạng thái kết các nước xuất phát từ trạng thái x Do hai đối thủ luân phiên nước mình nên các mức trò chơi luân phiên Max Min Cây trò chơi vì thế tên Min-Max Trên trò chơi các nút ứng dụng với trạng thái mà từ người chơi Max chọn nước thuộc lớp Max, các nút ứng với trạng thái mà từ người chơi Min chọn nước thuộc lớp Min Chiến lược minimax thể qua quy tắc định trị cho các nút trò chơi sau: - Nếu nút nút gán cho nút giá trị để phản ánh trạng thái thắng thua hay hòa các đới thủ - Sử dụng giá trị các nút để xác định giá trị các nút ở các mức trò chơi theo quy tắc: + Nút thuộc lớp Max thì gán cho giá trị lớn các nút nút 24 + Nút thuộc lớp Min thì gán cho giá trị nhỏ các nút nút Giá trị gán cho trạng thái theo quy tắc ghi rõ giá trị trạng thái tớt mà đới thủ hy vọng đạt Người chơi Max đến lượt đi, người chơi chọn nước ứng với trạng thái giá trị cao các trạng thái con, với người chơi Min đến lượt chọn nước ứng với trạng thái giá trị nhỏ các trạng thái Ví dụ: Xét trò chơi Tic Tac Toe Hai người Max Min thay phiên X hoặc O Người ô thẳng hàng(ngang, dọc, chéo) thì thắng Nếu hết ô mà chưa phân thắng bại thì hai đấu thủ hòa Một phần trò chơi biểu diễn bởi sau: Hình 10: Một phần trò chơi Tic Tac Toe 25 Trong trò chơi trên, các nút tô viền khung đôi để dễ phân biệt với các nút khác Ta gán cho nút lá giá trị để phản ánh trạng thái thắng thua hay hòa các đấu thủ Chẳng hạn ta gán cho nút lá các giá trị sau: + nếu người X thắng + -1 nếu người X thua + ếu hai đấu thủ hòa Như vậy từ trạng tahis bất kỳ, đến lượt mình , người X cho mình nước cho dẫn đến trạng thái giá trị lớn nhất( trường hợp 1) Ta nói X chọn nước Max, nút mà từ X chọn nước mình gọi nút Max Người O đến lượt mình chọn nước cho dẫn đến trạng thái giá trị nhỏ nhất( trường hợp -1), X thua O thắng) Ta nói O chọn nước Min, nút mmaf từ O chọn nước mình gọi nút Min Áp dụng chiến lược Minimax cho nhánh trò chơi trò chơi Tic Tac Toe ta giá trị (phía nút) các nút thể hình 2.3.1.2 Áp dụng giải thuật Minimax đến độ sâu lớp cố định Khi áp dụng Minimax cho các trò chơi phức tạp, hiếm khả mở rộng đồ thị không gian trạng thái đến các nút lá Thay vào khơng gian trạng thái triển khai sớ mức xác định phụ thuộc vào tiềm thời gian nhớ đệm chẳng hạn Chiến lược gọi tính trước n nước Vì giá trị các nút đồ thị trạng thái kêt thúc trò chơi nên chúng khơng phản ánh giá trị thắng hay thua Chúng gán giá trị phù hợp với hàm đánh giá heuristic Giá trị truyền ngược nút gốc không cung cấp thông tin thắng hay thua cuộ mà giá trị heuristic trạng thái tớt tiếp cận sau n nước kể từ nút xuất phát Việc tính trước làm tăng hiệu heuristic vì áp dụng vào phạm vi lớn 26 không gian trạng thái Minimax hợp tất các giá trị các nút cháy trạng thái thành giá trị trạng thái Trong các trò chơi tìm kiếm mức hay lớp, Max Min luân phiên chọn các nước Mỗi nước đối thủ xác định lớp Các chương trình trò chơi nói chung dự tính trước độ sâu lớp cớ định( thường xác định các giới hạn không gian hoặc thời gian máy tính) Các trạng thái mức đánh giá theo các heuristic các giá trị truyền nược lên thủ tục Minimax, sau thuật toán tìm kiếm dùng các giá trị vừa nhận để chọn lựa nước số các nước kế tiếp Bằng cách tới đa hóa cho các cha mẹ Max tới thiểu hóa cho các cha mẹ Min, những giá trị lùi theo đồ thị đến trạng thái hành Sau trạng thái hành dùng chúng để tiến hành lựa chọn các Hình 12: Minimax khơng gian trạng thái giả 2.3.2 Thủ tục Minimax Giả sử phân tích thế cờ áp dụng tất các luật, các phương pháp đánh cờ khác vào thế cờ chuyển đổi chúng thành số đại diện( cho điểm thế cờ) Mặt khác, ta giả sử sớ 27 dương áp dụng cho thế cờ đấu thủ( gọi người chơi cực đại – người chơi Max), âm áp dụng cho đấu thủ bên kia( gọi người chơi cực tiểu – người chơi Min) Quá trình tính toán cho điểm thế cờ gọi lượng giá tĩnh Hàm thực việc tính toán gọi lượng giá tĩnh giá trị nhận điểm lượng giá tĩnh Cả hai đấu thủ cố gắng thế để đạt điểm tuyệt đối lớn Người chơi cực đại( Max) tìm những nước dẫn đến điểm mình trở nên lớn hơn( hay cao thể) hay điểm đới thủ bớt âm hơn( nhỏ giá trị tuyệt đới) Còn đấu thủ anh ta, người chơi cực tiểu (Min), lại sức phản kháng lại , để dẫn tới điểm âm âm hay điểm dương đới thủ nhỏ Hình 14: Minh họa chiến lược chơi cờ người lẫn máy Các nút trắng các thế cờ trung gian phải trải qua để đến các thế cờ đích Khơng cần phải xét đến xấu các thế cờ trung gian Các nút đen các thế cờ đích phải xem xét độ tốt xấu để so sánh chúng với Từ tìm đường để đến thế cờ tớt được( ý thế cờ tớt sớ phải xem xét cách chống trả đối phương) Từ ý tưởng ta suy các bước thuật toán Minimax sau: 28 - Nếu đạt đến giới hạn tìm kiếm (đến tầng tìm kiếm tức nút lá), tính giá trị tĩnh thế cờ ứng với người chơi ở Ghi nhớ kết - Nếu mức xét người chơi cực tiểu( nút Min), áp dụng thủ tục Minimax cho các Ghi nhớ kết nhỏ - Nếu mức xét người chơi cực đại (nút Max), áp dụng thủ tục Minimax cho các Ghi nhớ kết lớn Từ ý nghĩ ta xây dựng thủ tục Minimax sau: Hàm Minimax nhận vào thế cờ pos trả giá trị thế cờ Nếu thế cờ pos tương ứng với nút trò chơi thì trả giá trị gián cho nút lá Ngược lại ta cho pos giá trị tạm value -∞ hoặc +∞ tùy thuộc pos nút Max hay Min xét các thế cờ pos Sau pos giá trị V thì đặt lại value = max(value, V) nếu n nút Max value = min(value, V) nếu n nút Min Khi tất các n xét thì giá trị tạm value pos trờ thành giá trị (Infinity thể cho giá trị vơ cùng) Ta giả mã sau: Mã 1: Function Minimax(pos) : integer; Value, best : integer; Begin If pos nút lá then return eval(pos) Else begin { Khởi tạo giá trị cho best} if pos nút Max then best:= -Infinity else bes:=Infinity; {hàm genpos sinh mọi nước cho thế cờ pos} 29 genpos(pos) {xét tất các pos, lần xác định giá trị nút con, ta phải đặt lại giá trị tạm value Khi xét hết các thì value giá trị n} while(còn lấy nước m) begin pos := Tình thế cờ nhờ m; value = Minimax(pos); if pos nút Max then if (value > best) then best := value; if pos nút Min then if(value < best) then best:= value; end; Minimax := best; end; end; Xét code ta thấy: hai hàm eval(pos) hàm genpos(pos) Hàm eval(pos) thực việc tính giá trị (lượng giá) thế cờ pos Hàm genpos(pos) sinh tất các nước từ thế cờ pos Việc xây dựng hai hàm phụ thuộc vào trò chơi cụ thể Hàm đánh giá eval ứng với trạng thái pos trò chơi với giá trị sớ eval(pos) Giá trị sự đánh giá độ lợi thế trạng thái pos Trạng thái pos thuận lợi cho Max thì eval(pos) số dương lớn, pos thuận lợi cho Min thì eval(pos) số âm nỏ, eval(pos) ≈ đối với trạng thái không lợi thế cho Chất lượng chương trình chơi cờ phục thuộc vào hàm đánh giá Nếu hàm đánh giá cho ta dự đánh giá khơng xác các trạng thái, thế hướng ta tới trạng thái xem tốt, thực 30 tế lại lợi cho ta Thiết kế hàm đánh giá tớt việc khó Đòi hỏi ta phải quan tâm đến nhiều nhân tớ Ở sự mâu thuẫn giữa độ xác hàm đánh giá thời gian tính Hàm đánh giá xác đòi hỏi nhiều thời gian tính toán, mà người chơi lại bị giới hạn bởi thời gian phải đưa nước Mã 2: Function Minmax(pos, depth): integer; If depth = then // Đạt đến giới hạn Minimax = eval(pos) //Tính giá trị thế cờ pos Else Genpos(pos) // sinh mọi nước từ thế cờ pos While (còn lấy nước m ) Pos = tính thế cờ nhờ m; Value = Minimax(pos, depth -1); //Tính điểm pos End; End; Tham số depth – độ sâu tìm kiếm giúp ta biết phải tìm đến đâu, tham số pos cho biết thế cờ để từ biết cách tính tiếp Giá trị trả hàm điểm thế cờ pos Hàm lượng giá eval đánh giá chất lượng thế cờ pos Các thế cờ pos’ các thế cờ tạo từ pos cách nước x hợp lệ Do ta phải các lệnh thực quân để đến các thế cờ Để biết từ thế cờ pos những nước nào, ta dùng thủ tục gen tham sớ thế cờ pos Thủ tục cất các thế cờ pos’ vào nhớ(dạng danh sách) Việc tiếp theo ta lấy thế cờ áp dụng tiếp thủ tục Minimax cho để tính điểm value Mã 3: Function Minmax(pos, depth): integer; If depth = then // Đạt đến giới hạn Minimax = eval(pos) //Tính giá trị thế cờ pos 31 Else Best = -Infinity; Genpos(pos) // sinh mọi nước từ thế cờ pos While (còn lấy nước m ) Pos = tính thế cờ nhờ m; Value = Minimax(pos, depth -1); //Tính điểm pos If value > best then best = value; End; Minimax = best; //trả giá trị tốt End; End Thông thường bàn cờ biểu diễn biến tồn cục Dó thay cho truyền tham sớ bàn cờ pos vào thủ tục Minimax thì ngưởi ta biến đởi ln biến tồn cục nhờ thực nước “ thử” (nước dẫn đến bàn cờ pos) Sau MinMax thực việc tính toán dựa vào bàn cờ lưu ở biến tồn cục thì thuật toán dùng số thủ tục để loại bỏ nước Như vậy MinMax bỏ các tham số pos sau: Mã 4: Function MinMax(depth): integer; { if depth = then MinMax = eval // tính thế cờ pos biến tồn cục else{ best = -Infinity; Gen; //sinh mọi nước từ thế cờ pos While( lấy nước m) { Thực nước m; Value = -MinMax(depth-1); Bỏ thực nước m; If value > best then best = value; } MinMax = best; } } 32 Hình 13: Minimax hai lớp áp dụng vào nước mở đầu trò chơi Tic Tac Toe Ở sử dụng heuristic phức tạp hơn, cớ đo mức độ tranh chấp trò chơi Heuristic chọn trạng thái cần đo, tính tất các đường thắng mở cho Max, trừ tổng số các đường thắng mở cho Min Giải thuật tìm kiếm cớ gắng tới đa hóa sự chênh lệch (hiệu sớ) Nếu trạng thái bắt buộc thắng cho Max, đánh giá +∞, với trạng thái bắt buộc thắng cho Min thì đánh giá -∞ 2.4 Demo trò chơi Caro sử dụng thuật toán Minimax 33 ... Giới thiệu game cờ caro Cờ caro game phổ biến, đặc biệt giới thiếu niên Đây trò chơi đới kháng giữa người Ván cờ chơi bàn cờ ô vuông Hai bên thay phiên tích vào những vuông bàn cờ Ký hiệu... thủ mạnh, nếu thắng bạn cộng nhiều điểm đối thủ bình thường 2.3 Cài đặt thuật toán 2.3.1 Cài đặt thuật toán 2.3.1.1 Phân tích thuật tốn Hai đới thủ trò chơi gọi Max Min Max đại diện cho đối... thế cờ áp dụng tất các luật, các phương pháp đánh cờ khác vào thế cờ chuyển đổi chúng thành số đại diện( cho điểm thế cờ) Mặt khác, ta giả sử sớ 27 dương áp dụng cho thế cờ đấu

Ngày đăng: 05/12/2018, 07:54

Từ khóa liên quan

Mục lục

  • CHƯƠNG I

  • CƠ SỞ LÝ THUYẾT – LỰA CHỌN NGÔN NGỮ LẬP TRÌNH

    • 1.1 Giới thiệu về lý thuyết trò chơi và ứng dụng

    • 1.2 Tổng quan về ngôn ngữ lập trình C#

    • 1.2.1 Giới thiệu chung

      • 1.2.2 Đặc điểm cơ bản của ngôn ngữ lập trình C#

      • 1.2.3 Tại sao phải sử dụng ngôn ngữ lập trình C#

      • 1.3 Tổng quan về winform trong C#

        • 1.3.1 Tổng quan về winform

        • 1.3.2 Ví dụ đơn giản và cấu trúc 1 chương trình Winform.

        • CHƯƠNG 2

        • CÀI ĐẶT THUẬT TOÁN

          • 2.1 Thuật toán minmax

          • 2.3.1 Cài đặt thuật toán

            • 2.3.1.1 Phân tích thuật toán

Tài liệu cùng người dùng

Tài liệu liên quan