Sự khác biệt giữa heuristic và một thuật toán là gì?
Sự khác biệt giữa heuristic và một thuật toán là gì?
Câu trả lời:
Thuật toán là mô tả của một giải pháp tự động cho một vấn đề . Những gì thuật toán làm được xác định chính xác. Giải pháp có thể có hoặc không thể là giải pháp tốt nhất có thể nhưng bạn biết ngay từ đầu bạn sẽ nhận được loại kết quả nào. Bạn triển khai thuật toán bằng một số ngôn ngữ lập trình để lấy (một phần của) chương trình .
Bây giờ, một số vấn đề khó khăn và bạn có thể không có được một giải pháp chấp nhận được trong thời gian có thể chấp nhận được. Trong những trường hợp như vậy, bạn thường có thể nhận được một giải pháp không quá tệ nhanh hơn nhiều, bằng cách áp dụng một số lựa chọn tùy ý (phỏng đoán có giáo dục): đó là một phương pháp phỏng đoán .
Heuristic vẫn là một loại thuật toán, nhưng một thuật toán sẽ không khám phá tất cả các trạng thái có thể có của vấn đề hoặc sẽ bắt đầu bằng cách khám phá những trạng thái có khả năng xảy ra nhất.
Ví dụ điển hình là từ trò chơi. Khi viết một chương trình trò chơi cờ vua, bạn có thể tưởng tượng việc thử mọi nước đi có thể ở một mức độ sâu nào đó và áp dụng một số chức năng đánh giá cho bàn cờ. Một heuristic sẽ loại trừ đầy đủ các nhánh bắt đầu với các nước đi rõ ràng là xấu.
Trong một số trường hợp, bạn không tìm kiếm giải pháp tốt nhất, nhưng bất kỳ giải pháp nào phù hợp với một số hạn chế. Một kinh nghiệm luận tốt sẽ giúp tìm ra giải pháp trong thời gian ngắn, nhưng cũng có thể không tìm được giải pháp nào nếu giải pháp duy nhất nằm ở những trạng thái mà nó đã chọn không thử.
Nhiều vấn đề mà không có thuật toán hiệu quả nào để tìm ra giải pháp tối ưu được biết đến có các phương pháp tiếp cận heuristic mang lại kết quả gần tối ưu rất nhanh chóng.
Có một số điểm trùng lặp: "thuật toán di truyền" là một thuật ngữ được chấp nhận, nhưng nói một cách chính xác, đó là những khám nghiệm, không phải thuật toán.
Tóm lại, Heuristic là một "Dự đoán có giáo dục". Wikipedia giải thích nó độc đáo. Cuối cùng, một phương pháp "chấp nhận chung" được coi là một giải pháp tối ưu cho vấn đề được chỉ định.
Heuristic là một tính từ chỉ các kỹ thuật dựa trên kinh nghiệm giúp giải quyết vấn đề, học tập và khám phá. Phương pháp heuristic được sử dụng để nhanh chóng đi đến một giải pháp được hy vọng là gần với câu trả lời tốt nhất có thể, hoặc 'giải pháp tối ưu'. Heuristics là "quy tắc ngón tay cái", phỏng đoán được giáo dục, phán đoán trực quan hoặc đơn giản là nhận thức thông thường. Heuristic là một cách chung để giải quyết một vấn đề. Heuristics như một danh từ là một tên khác của phương pháp heuristic.
Nói một cách chính xác hơn, heuristics là viết tắt của các chiến lược sử dụng thông tin dễ tiếp cận, mặc dù có thể áp dụng lỏng lẻo, để kiểm soát việc giải quyết vấn đề ở con người và máy móc.
Trong khi thuật toán là một phương pháp chứa tập hợp hữu hạn các lệnh được sử dụng để giải quyết một vấn đề. Phương pháp này đã được chứng minh về mặt toán học hoặc khoa học để giải quyết vấn đề. Có phương pháp chính thức và chứng minh.
Thuật toán heuristic là một thuật toán có thể tạo ra một giải pháp chấp nhận được cho một vấn đề trong nhiều tình huống thực tế, theo kiểu phương pháp heuristic chung, nhưng không có bằng chứng chính thức về tính đúng đắn của nó.
Một thuật toán là một bước-by-step bộ khép kín của các hoạt động được thực hiện 4 , thường hiểu là một dãy hữu hạn các hướng dẫn (máy tính hay con người) để xác định một giải pháp cho một vấn đề như: có một đường đi từ A đến B, hoặc con đường nhỏ nhất giữa A và B. Trong trường hợp sau, bạn cũng có thể hài lòng với một giải pháp thay thế 'gần hợp lý'.
Có một số loại thuật toán nhất định, trong đó thuật toán heuristic là một. Tùy thuộc vào các thuộc tính (đã được chứng minh) của thuật toán trong trường hợp này, nó thuộc một trong ba loại sau (lưu ý 1):
Lưu ý rằng thuật toán xấp xỉ cũng là một thuật toán heuristic, nhưng với thuộc tính mạnh hơn là có một ràng buộc đã được chứng minh đối với giải pháp (giá trị) mà nó xuất ra.
Đối với một số vấn đề, chưa ai tìm ra thuật toán 'hiệu quả' để tính toán các giải pháp tối ưu (lưu ý 2). Một trong những vấn đề đó là Bài toán Nhân viên Bán hàng Đi du lịch nổi tiếng. Ví dụ, thuật toán của Christophides cho Bài toán Người bán hàng Đi du lịch, từng được gọi là phương pháp heuristic , vì nó không được chứng minh rằng nó nằm trong 50% giải pháp tối ưu. Tuy nhiên, vì nó đã được chứng minh, thuật toán Christophides được gọi chính xác hơn là một thuật toán xấp xỉ.
Do những hạn chế về những gì máy tính có thể làm, không phải lúc nào bạn cũng có thể tìm ra giải pháp tốt nhất có thể một cách hiệu quả . Nếu có đủ cấu trúc trong một bài toán, có thể có một cách hiệu quả để đi qua không gian lời giải, mặc dù không gian lời giải là rất lớn (tức là trong bài toán đường đi ngắn nhất).
Heuristics thường được áp dụng để cải thiện thời gian chạy của các thuật toán, bằng cách thêm 'thông tin chuyên gia' hoặc 'phỏng đoán được đào tạo' để hướng dẫn hướng tìm kiếm. Trong thực tế, heuristic cũng có thể là một quy trình phụ cho một thuật toán tối ưu, để xác định vị trí cần xem xét đầu tiên .
(lưu ý 1) : Ngoài ra, các thuật toán được đặc trưng bởi liệu chúng có bao gồm các yếu tố ngẫu nhiên hay không xác định. Một thuật toán luôn thực hiện theo cùng một cách và tạo ra cùng một câu trả lời, được gọi là xác định.
(lưu ý 2) : Đây được gọi là bài toán P vs NP và các bài toán được phân loại là NP-đầy đủ và NP-khó không có khả năng có một thuật toán 'hiệu quả'. Ghi chú; như @Kriss đã đề cập trong các nhận xét, thậm chí còn có những loại vấn đề 'tồi tệ hơn', có thể cần thời gian hoặc không gian theo cấp số nhân để tính toán.
Có một số câu trả lời trả lời một phần của câu hỏi. Tôi cho rằng chúng kém hoàn chỉnh và không đủ chính xác và quyết định không chỉnh sửa câu trả lời được chấp nhận bởi @Kriss
Thực sự tôi không nghĩ rằng có nhiều điểm chung giữa họ. Một số thuật toán sử dụng heuristics trong logic của chúng (thường để thực hiện ít phép tính hơn hoặc nhận được kết quả nhanh hơn). Thông thường heuristics được sử dụng trong cái gọi là thuật toán tham lam.
Heuristics là một số "kiến thức" mà chúng tôi cho là tốt để sử dụng để có được lựa chọn tốt nhất trong thuật toán của chúng tôi (khi một lựa chọn nên được thực hiện). Ví dụ ... một kinh nghiệm trong cờ vua có thể là (luôn lấy quân hậu của đối thủ nếu bạn có thể, vì bạn biết đây là con số mạnh hơn). Heuristics không đảm bảo rằng sẽ dẫn bạn đến câu trả lời chính xác, nhưng (nếu giả định là đúng) thường nhận được câu trả lời gần với câu trả lời tốt nhất trong thời gian ngắn hơn nhiều.
Heuristics là các thuật toán, vì vậy theo nghĩa đó không có, tuy nhiên, heuristics có cách tiếp cận 'phỏng đoán' để giải quyết vấn đề, mang lại câu trả lời 'đủ tốt', thay vì tìm ra giải pháp 'tốt nhất có thể'.
Một ví dụ điển hình là khi bạn gặp một vấn đề rất khó (đọc NP-đầy đủ), bạn muốn có giải pháp nhưng không có thời gian để giải quyết nó, vì vậy phải sử dụng một giải pháp đủ tốt dựa trên thuật toán heuristic, chẳng hạn như tìm giải pháp cho vấn đề nhân viên bán hàng đi du lịch bằng cách sử dụng thuật toán di truyền.
Thuật toán là một chuỗi gồm một số phép toán mà đầu vào sẽ tính toán một thứ gì đó (một hàm) và đưa ra kết quả.
Thuật toán có thể mang lại giá trị chính xác hoặc gần đúng.
Nó cũng có thể tính một giá trị ngẫu nhiên có xác suất cao gần với giá trị chính xác.
Thuật toán heuristic sử dụng một số thông tin chi tiết về các giá trị đầu vào và tính giá trị không chính xác (nhưng có thể gần với giá trị tối ưu). Trong một số trường hợp đặc biệt, heuristic có thể tìm ra giải pháp chính xác.
Thuật toán là một tập hợp các hướng dẫn được xác định rõ ràng để giải quyết một vấn đề, Heuristics liên quan đến việc sử dụng phương pháp tiếp cận học hỏi và khám phá để đạt được giải pháp.
Vì vậy, nếu bạn biết cách giải quyết một vấn đề thì hãy sử dụng một thuật toán. Nếu bạn cần phát triển một giải pháp thì đó là kinh nghiệm.
Heuristic thường là một tối ưu hóa hoặc một chiến lược thường cung cấp một câu trả lời đủ tốt, nhưng không phải lúc nào và hiếm khi là câu trả lời tốt nhất. Ví dụ, nếu bạn giải quyết vấn đề người bán hàng lưu động bằng thói vũ phu, việc loại bỏ giải pháp từng phần một khi chi phí của nó vượt quá giải pháp tốt nhất hiện tại là một sự suy xét: đôi khi có ích, lần khác thì không, và chắc chắn là không ' t cải thiện thời gian chạy lý thuyết (ký hiệu lớn) của thuật toán
Tôi nghĩ Heuristic là một hạn chế được sử dụng trong Mô hình Dựa trên Học tập trong Thông minh Nhân tạo vì các trạng thái giải pháp trong tương lai rất khó dự đoán.
Nhưng nghi ngờ của tôi sau khi đọc các câu trả lời ở trên là "Làm thế nào để Heuristic có thể được áp dụng thành công khi sử dụng Kỹ thuật Tối ưu hóa Stochastic? Hay chúng có thể hoạt động như các thuật toán chính thức khi được sử dụng với Tối ưu hóa Stochastic?"
Một trong những lời giải thích hay nhất mà tôi đã đọc đến từ cuốn sách tuyệt vời Code Complete , mà bây giờ tôi trích dẫn:
Khám phá là một kỹ thuật giúp bạn tìm kiếm câu trả lời. Kết quả của nó có thể tùy thuộc vào sự may rủi bởi vì một kinh nghiệm học chỉ cho bạn biết cách nhìn chứ không phải tìm cái gì. Nó không cho bạn biết làm thế nào để đi trực tiếp từ điểm A đến điểm B; nó thậm chí có thể không biết điểm A và điểm B ở đâu. Trên thực tế, heuristic là một thuật toán trong bộ đồ hề. Nó ít khả năng dự đoán hơn, nó thú vị hơn và nó đến mà không cần đảm bảo hoàn tiền trong 30 ngày.
Đây là một thuật toán để lái xe đến nhà của ai đó: Đi theo Quốc lộ 167 về phía nam đến Puy-allup. Đi theo lối Hill Mall Nam và lái xe 4,5 dặm lên đồi. Rẽ phải ở chỗ có đèn bên cửa hàng tạp hóa, rồi rẽ trái trước. Rẽ vào đường lái xe của ngôi nhà rám nắng lớn ở bên trái, tại 714 North Cedar.
Đây là một bí quyết để đến nhà ai đó: Tìm lá thư cuối cùng chúng tôi gửi cho bạn. Lái xe đến thị trấn trong địa chỉ trở lại. Khi bạn đến thị trấn, hãy hỏi ai đó xem nhà của chúng tôi ở đâu. Mọi người đều biết chúng tôi — ai đó sẽ sẵn lòng giúp đỡ bạn. Nếu bạn không tìm thấy ai, hãy gọi cho chúng tôi từ điện thoại công cộng, và chúng tôi sẽ đến tìm bạn.
Sự khác biệt giữa thuật toán và phương pháp heuristic là rất nhỏ, và hai thuật ngữ này có phần sai lệch. Đối với mục đích của cuốn sách này, sự khác biệt chính giữa cả hai là mức độ chuyển hướng từ giải pháp. Một thuật toán cung cấp cho bạn các hướng dẫn trực tiếp. Khám phá cho bạn biết cách khám phá các hướng dẫn cho chính bạn, hoặc ít nhất là nơi để tìm kiếm chúng.
Họ tìm thấy một giải pháp dưới mức tối ưu mà không có bất kỳ sự đảm bảo nào về chất lượng của giải pháp được tìm thấy, rõ ràng là nó có ý nghĩa đối với sự phát triển của heuristics chỉ đa thức. Ứng dụng của các phương pháp này phù hợp để giải các bài toán trong thế giới thực hoặc các bài toán lớn đến mức khó xử theo quan điểm tính toán mà đối với chúng, thậm chí không có thuật toán nào có khả năng tìm ra lời giải gần đúng trong thời gian đa thức.