BÁO CÁO THỰC HÀNH TRÍ TUỆ NHÂN TẠO,KHOA CÔNG NGHỆ THÔNG TIN, ĐH BÁCH KHOA ĐÀ NẴNG

31 182 1
BÁO CÁO THỰC HÀNH TRÍ TUỆ NHÂN TẠO,KHOA CÔNG NGHỆ THÔNG TIN, ĐH BÁCH KHOA ĐÀ NẴNG

Đ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

BÁO CÁO THỰC HÀNH, TRÍ TUỆ NHÂN TẠO,KHOA CÔNG NGHỆ THÔNG TIN, ĐH BÁCH KHOA ĐÀ NẴNG

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN  BÁO CÁO THỰC HÀNH TRÍ TUỆ NHÂN TẠO Giáo viên Sinh viên thực Lớp Nhóm : Võ Đức Hồng : NGUYỄN HẢI QUẢNG : 10T1 : 12B Đà Nẵng, 10/2013 Đà Nẵng, 05/2009 SVTH: Nguyễn Hải Quảng GVHD: Võ Đức Hoàng I Trò chơi quân cờ (Cờ ta canh): Bài tốn: Tám (8) qn cờ hình, gồm bảng kích thước 3x3với quân cờ dược đánh số từ đến ô trống Một qn cờ đứng cạnh trống đivào ô trống Mục tiêu luôn tiến tới vị trí qn cờ hình bên phải (trạng thái đích) Trạng thái đầu Trạng thái đích Hãy trình bày thuật tốn viết chương trình demo để di chuyển quân cờ cho số bước di chuyển thấp (tối ưu) Dữ liệu đọc từ file ma trận vng 3x3 Thuật tốn: Sử dụng hàm Heuristic để đánh giá độ tốt trạng thái Hàm heuristic F(n) = G(n) + H(n) Trong G(n) phí tổn thực từ trạng thái bắt đầu đến trạng thái xét ( Số bước biến đổi trạng thái) H(n) phí tổn ước lượng từ trạng thái xét đến trạng thái đích ( số quân cờ sai vị trí so với trạng thái đích ) Tạo mảng Open Close Mảng open chứa trạng thái chưa xét xếp theo thứ tự lớn dần F(n) Mảng Close chứa trạng thái đưa vào đường Mỗi lấy trạng thái nhỏ mảng open minOpen bỏ sang mảng close thêm trạng thái vừa sinh từ trạng thái minOpen vào mảng open xếp lại theo thứ tự lớn dần F(n) Cứ H(n) = ( trạng thái đích ) Chương trình: package javaapplication1; import java.io.*; import java.util.*; public class JavaApplication1 { static boolean result; static LinkedList stateQueue; SVTH: Nguyễn Hải Quảng Trang SVTH: Nguyễn Hải Quảng GVHD: Võ Đức Hoàng public static void main(String[] args) { result=false; State startState = new State(null); State finalState = new State(null); StateNode.ResetStateNode(); stateQueue = new LinkedList(); loadData(startState); setfinalState(finalState); startState.calStateValue(); finalState.calStateValue(); stateQueue.add(startState); State resultState = find(finalState); if (resultState!=null) printResult(resultState); else System.out.println("No result!"); } static void printResult(State st) { if (st!=null) { printResult(st.parentState); st.printOut(); } } static State find(State finalState) { State resultState=null; System.out.println("calculating "); while (!stateQueue.isEmpty() && !result) { System.out.println(stateQueue.size()); State tmpState = stateQueue.poll(); if (tmpState!=null) { if (State.isEqual(tmpState, finalState)) { result=true; resultState=tmpState; } SVTH: Nguyễn Hải Quảng Trang SVTH: Nguyễn Hải Quảng GVHD: Võ Đức Hoàng else { StateNode.addNode(tmpState.stateValue()); tmpState.findState(); for (int i=0;i N/2 Vậy đến lượt máy 2a > N/2 máy 2a để chiến thắng Ngược lại a + để giảm khả thắng người ( Nếu 2a < N/2 Đến lượt người 2a có khả > N/2 cao) Ở trường hợp máy khơng ln ln thắng Vì người tính vào 2a > N/2 để chiến thắng người làm bước tương tự máy Nhưng người có lợi từ đầu vào số chẵn Chương trình: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class Baiso2vietso { static int n, a = 1; public static void nhap() { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Nhập số N: "); try { n = Integer.parseInt(bf.readLine()); } catch (NumberFormatException | IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } while(a!=n) { try { SVTH: Nguyễn Hải Quảng Trang SVTH: Nguyễn Hải Quảng GVHD: Võ Đức Hoàng System.out.println("Player :"); int t = Integer.parseInt(bf.readLine()); if(t==2*a||t==a+1) a = t; else {System.out.println("Số không hợp lệ");continue;} if(a!=n){ System.out.println("Computer : "); tinh(); } else System.out.println("Player win"); } catch (NumberFormatException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void tinh() { if(n%2!=0) a++; else { if(2*a>n/2&&2*a

Ngày đăng: 28/09/2019, 09:48

Từ khóa liên quan

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

Tài liệu liên quan