ทำไม Prolog ถึงดีสำหรับการเขียนโปรแกรม AI [ปิด]


25

ฉันกำลังค้นคว้าภาษาการเขียนโปรแกรมที่ใช้สำหรับการเขียนโปรแกรม AI ฉันรู้ว่า LISP ถูกสอนเป็นภาษาโปรแกรม AI ในมหาวิทยาลัยของฉัน แต่ Prolog ไม่ค่อยเป็น ฉันชอบ Prolog แต่ฉันไม่ใช่โปรแกรมเมอร์ AI ดังนั้นฉันไม่คิดว่าฉันมีคุณสมบัติที่จะตัดสินด้วยตัวเองว่าทำไม Prolog ดีกว่า LISP / Scheme ฉันสงสัยว่าโปรแกรมเมอร์มีอินพุตในหัวข้อนี้หรือไม่

คุณจะยืนยันได้อย่างไรว่า Prolog จะมีประโยชน์มากกว่าสำหรับการเขียนโปรแกรม AI?

ฉันได้ทำการค้นคว้ามาบ้างแล้วและข้อโต้แย้งพื้นฐานที่ฉันได้เห็นบ่อยครั้งก็คือความคิดนั้นถูกนำเสนอในเชิงตรรกะและ Prolog เป็นภาษาการเขียนโปรแกรมเชิงตรรกะ Prolog สามารถสร้างเครื่องตัดสินใจได้อย่างง่ายดาย

มีอะไรอีกบ้างที่สามารถพูดได้สำหรับ Prolog ใน AI?


1
การเขียนคอมไพเลอร์ / ล่าม Prolog ใน Lisp ไม่ได้เป็นเรื่องยาก พอลเกรแฮมมีตัวอย่างในในเสียงกระเพื่อม
Larry Coleman

เพื่อนร่วมชั้นคนหนึ่งของฉันกำลังบอกฉันเช่นกัน ฉันพบว่ามันน่าสนใจจริง ๆ ที่การจัดการสัญลักษณ์ของ LISP จะให้ฉันสร้าง Prolog ขึ้นใหม่ ขอบคุณสำหรับความดีกัน!
2rs2ts

4
@ Larry Coleman: มันไม่ได้เป็นงานที่ต้องเขียน Prolog / interpreter ที่ไร้เดียงสาใน Lisp การทำสิ่งที่มีประสิทธิภาพและสามารถใช้งานได้อย่างเต็มที่นั้นไม่ยุ่งยากในภาษาใด ๆ
เพียงความคิดเห็นที่ถูกต้องของฉัน

คำตอบ:


19

จากคำนำหน้าถึงProlog Programming สำหรับปัญญาประดิษฐ์ :

Prolog เป็นภาษาการเขียนโปรแกรมที่มีศูนย์กลางอยู่ที่ชุดเล็กของกลไกพื้นฐานรวมถึงการจับคู่รูปแบบการจัดโครงสร้างข้อมูลแบบทรีและการย้อนรอยอัตโนมัติ ชุดเล็กนี้ถือเป็นกรอบการเขียนโปรแกรมที่ทรงพลังและยืดหยุ่น อารัมภบทเหมาะอย่างยิ่งสำหรับปัญหาที่เกี่ยวข้องกับวัตถุ - โดยเฉพาะอย่างยิ่งวัตถุที่มีโครงสร้าง - และความสัมพันธ์ระหว่างพวกเขา ยกตัวอย่างเช่นเป็นการออกกำลังกายอย่างง่ายใน Prolog เพื่อแสดงความสัมพันธ์เชิงพื้นที่ระหว่างวัตถุเช่นทรงกลมสีน้ำเงินอยู่ด้านหลังสีเขียว นอกจากนี้ยังง่ายต่อการระบุกฎทั่วไป: ถ้าวัตถุ X ใกล้กับผู้สังเกตการณ์มากกว่าวัตถุ Y และ Y ใกล้กว่า Z ดังนั้น X จะต้องอยู่ใกล้กว่า Z ตอนนี้อารัมภบทสามารถเหตุผลเกี่ยวกับความสัมพันธ์เชิงพื้นที่และความสอดคล้องกับ เคารพกฎทั่วไป คุณลักษณะเช่นนี้ทำให้ Prolog เป็นภาษาที่มีประสิทธิภาพสำหรับปัญญาประดิษฐ์ (AI) และการเขียนโปรแกรมที่ไม่ใช่ตัวเลขโดยทั่วไป มีตัวอย่างที่รู้จักกันดีของการคำนวณเชิงสัญลักษณ์ซึ่งการใช้งานในภาษามาตรฐานอื่น ๆ นั้นใช้เวลาหลายสิบหน้าของโค้ดที่ไม่สามารถย่อยได้ เมื่ออัลกอริทึมเดียวกันถูกนำไปใช้ใน Prolog ผลที่ได้คือโปรแกรมที่ชัดใสในหน้าเดียว

โดยทั่วไปมันเป็นภาษาที่ยอดเยี่ยมสำหรับการแสดงความสัมพันธ์และเป้าหมายที่หลากหลายในรวบรัด (ส่วนใหญ่ -) ที่อ่านได้และ (กึ่ง -) ตามธรรมชาติ รหัสเทียบเท่าใน Lisps มีแนวโน้มที่จะ verbose มากขึ้นและสับสนมากขึ้นในความตั้งใจเพราะคุณใช้เวลามากในความกล้าและท่อประปาของการจัดการและการให้เหตุผลเกี่ยวกับความสัมพันธ์


การเติมเล็ก ๆ น้อย ๆ ของฉันที่นี่คือ Prolog ช่วยให้คุณสามารถประกาศข้อเท็จจริงและกฎตามข้อเท็จจริงเหล่านั้น กฎของคุณก็จะสามารถนำมาใช้โดยเปิดฉากเพื่อเหตุผลและตอบข้อสงสัยอื่น ๆ โดยมีเหตุผลdeducingตอบ ตัวอย่างเช่นหากข้อเท็จจริงระบุว่า A เป็นบรรพบุรุษของ B และข้อเท็จจริงอื่นระบุว่า B เป็นบรรพบุรุษของ C ดังนั้น Prolog สามารถอนุมานได้ว่า A ต้องเป็นบรรพบุรุษของ C โดยที่คุณไม่ต้องเขียนอัลกอริทึมเพื่อตรวจสอบ
code_dredd

25

ฉันแนะนำหลักสูตร AI ในระดับปริญญาตรีของฉันซึ่งใช้ Prolog เพื่อให้เราใช้ระบบผู้เชี่ยวชาญ

ระบบผู้เชี่ยวชาญคือชิ้นส่วนของซอฟต์แวร์ที่ใช้ในการแก้ปัญหาที่เฉพาะเจาะจงซึ่งการแก้ปัญหานั้นขึ้นอยู่กับกฎและตัวแปรจำนวนมาก

ตัวอย่างเช่นคุณสามารถจินตนาการระบบผู้เชี่ยวชาญที่บอกคุณว่าคุณควรเอาร่มติดตัวไปด้วยเมื่อคุณออกไปข้างนอกหรือไม่ คุณจะให้ชุดข้อมูล (ไม่ว่าจะมีเมฆมากไม่ว่าฝนจะตกเมื่อวันก่อนฤดูกาลใดเป็นอย่างไร) และระบบผู้เชี่ยวชาญจะทำตามกฎเพื่อให้คำตอบ (ถ้ามีเมฆมากและฝนตก วันก่อนจากนั้นคุณควรพกร่ม)

ธรรมชาติของ Prolog ทำให้การใช้กฎและข้อเท็จจริงนั้นตรงไปตรงมามาก (ใน Prolog ทุกอย่างเป็นกฎหรือข้อเท็จจริง) จากนั้น "ค้นหาฐานข้อมูล" (รับคำตอบสำหรับคำถามของคุณ) แม้ว่าคุณจะมีกฎและข้อเท็จจริงหลายพันข้อ .

หากคุณสนใจในหัวข้อนี้ฉันขอแนะนำให้คุณติดตั้ง Prolog interpreter และลองใช้ระบบผู้เชี่ยวชาญขั้นพื้นฐานเพื่อทำความเข้าใจกับมัน - มันอาจช่วยให้คุณเข้าใจว่าทำไมมันถึงเป็นเครื่องมือที่ทรงพลังสำหรับงานเหล่านี้


ฉันอ่านงานวิจัยของฉันว่า Prolog ทำให้ระบบผู้เชี่ยวชาญใช้งานง่าย ขอบคุณสำหรับการสนับสนุนที่ขึ้นกับคำอธิบายบาง :)
2rs2ts

16

ความแตกต่างนั้นค่อนข้างเหมือนกับการใช้ SQL สำหรับเคียวรีฐานข้อมูลแทนที่จะเขียนโปรแกรมใน, พูด, C. ใน SQL, คุณพูดในสิ่งที่คุณต้องการ - แต่คุณไม่จำเป็นต้องระบุอัลกอริธึมที่ใช้เพื่อให้ได้มาโดยตรง (โดยตรง)

โปรแกรม Prolog บางครั้งเรียกว่าฐานข้อมูล แต่จริงๆแล้วเป็นชุดของคำสั่งเชิงตรรกะ กลไกการประเมินผลใช้แบบสอบถามและดำเนินการทดแทนตามคำสั่งตรรกะตรรกะทำค้นหาเพื่อค้นหาวิธีการแก้ไขที่ถูกต้อง อัลกอริธึมการค้นหาทั้งหมดที่ต้องการ (เกี่ยวข้องมากกว่าแบบสอบถาม SQL) สร้างขึ้นในคอมไพเลอร์ Prolog

แบบสอบถาม SQL ถ้าคุณใช้ตรรกะเดียวกันอย่างไร้เดียงสาใน C ไม่จำเป็นต้องมากไปกว่าการวนซ้ำและ / หรือเงื่อนไขอื่น ๆ

แบบสอบถามแบบ Prolog ซึ่งมีการใช้งานใน C จะต้องมี (อย่างน้อย) การค้นหาย้อนรอยโดยใช้เทคนิคการค้นหาแบบรวม และนั่นก็เป็นทางออกที่ไร้เดียงสา

การเขียนโปรแกรม AI บางประเภทเกี่ยวข้องกับการค้นหาหลายประเภทที่ Prolog ทำ น่าแปลกใจจริงๆแล้ว - โดยปกติแล้วการเขียนโปรแกรม AI นั้นทำใน Lisp หรือภาษาอื่น ๆ แต่ Prolog ถูกเขียนขึ้นเป็นพิเศษเพื่อทำงาน

ลอจิกคำกริยาเป็นวิธีธรรมชาติในการกำหนดสไตล์ของปัญหา AI และใน Prolog เมื่อคุณมีคำจำกัดความที่คุณสามารถเรียกใช้ได้โดยตรงโดยไม่ต้องใช้อัลกอริทึมการค้นหาที่น่าอึดอัดใจทั้งหมด


3

ฉันใช้โมดูล Prolog 2 ชุดที่มหาวิทยาลัยและสนุกมากในการพัฒนาภาษา

มันดีอย่างยิ่งสำหรับระบบผู้เชี่ยวชาญฉันเขียนการวินิจฉัย symtom ทางการแพทย์

วิธีที่อธิบายให้ฉันฟังคือ Lisp มีแนวโน้มที่จะใช้งานได้มากขึ้นในบางประเทศและใช้ภาษา Prolog ในประเทศอื่น ๆ

ในแง่ที่ดีที่สุดฉันครอบคลุม Lisp สั้น ๆ เมื่อฉันทำแลมบ์ดาแคลคูลัสในวิชาวิทยาการคอมพิวเตอร์ทฤษฎีดังนั้นฉันจึงมีอคติต่อ Prolog

หากคุณกำลังพัฒนาแอพพลิเคชั่นเพื่อรับมือกับกฎเกณฑ์และข้อเท็จจริงเพื่อให้ได้คำตอบ Prolog นั้นดีมากและสนับสนุนการย้อนรอยตามธรรมชาติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.