อ่าน 6 นาที
การเขียนโปรแกรมแบบมีข้อจำกัด
การเขียนโปรแกรมแบบมีข้อจำกัด (CP) เป็นกระบวนทัศน์สำหรับการแก้ ปัญหา เชิงการจัดเรียงที่ดึงเอาเทคนิคที่หลากหลายจากปัญญาประดิษฐ์วิทยาศาสตร์คอมพิวเตอร์และการวิจัยการดำเนินงานมาใช้...
การเขียนโปรแกรมแบบมีข้อจำกัด
การเขียนโปรแกรมแบบมีข้อจำกัด (CP) [ 1 ]เป็นกระบวนทัศน์สำหรับการแก้ ปัญหา เชิงการจัดเรียงที่ดึงเอาเทคนิคที่หลากหลายจากปัญญาประดิษฐ์วิทยาศาสตร์คอมพิวเตอร์และการวิจัยการดำเนินงานมาใช้ ในการเขียนโปรแกรมแบบมีข้อจำกัด ผู้ใช้จะระบุข้อจำกัดของโซลูชันที่เป็นไปได้สำหรับชุดตัวแปรการตัดสินใจแบบประกาศ ข้อจำกัดแตกต่างจากพรีมิทีฟ ทั่วไป ของ ภาษา การเขียนโปรแกรมเชิงคำสั่งตรงที่ไม่ได้ระบุขั้นตอนหรือลำดับของขั้นตอนที่จะดำเนินการ แต่ระบุคุณสมบัติของโซลูชันที่จะค้นหา นอกจากข้อจำกัดแล้ว ผู้ใช้ยังต้องระบุวิธีการแก้ข้อจำกัดเหล่านี้ด้วย โดยทั่วไปจะใช้วิธีการมาตรฐาน เช่นการย้อนกลับ ตามลำดับเวลา และการแพร่กระจายข้อจำกัด แต่ก็อาจใช้โค้ดที่กำหนดเอง เช่น ฮิวริสติกแบบแยกสาขาเฉพาะปัญหาได้
การเขียนโปรแกรมแบบมีข้อจำกัดมีรากฐานมาจากและสามารถแสดงได้ในรูปแบบของการเขียนโปรแกรมเชิงตรรกะแบบมีข้อจำกัด ซึ่งฝังข้อจำกัดไว้ในโปรแกรมเชิงตรรกะรูปแบบการเขียนโปรแกรมเชิงตรรกะนี้เกิดจาก Jaffar และ Lassez [ 2 ]ซึ่งได้ขยายคลาสของข้อจำกัดเฉพาะที่ได้รับการแนะนำในProlog II ในปี 1987 การใช้งานการ เขียน โปรแกรมเชิงตรรกะแบบมีข้อจำกัดครั้งแรกคือProlog III , CLP(R)และCHIP
แทนที่จะใช้การเขียนโปรแกรมเชิงตรรกะ ข้อจำกัดสามารถผสมผสานกับการเขียนโปรแกรมเชิงฟังก์ชันการเขียนเทอมใหม่และภาษาเชิงคำสั่งได้ภาษาโปรแกรมที่มีการสนับสนุนข้อจำกัดในตัว ได้แก่Oz (การเขียนโปรแกรมเชิงฟังก์ชัน) และKaleidoscope (การเขียนโปรแกรมเชิงคำสั่ง) โดยส่วนใหญ่ ข้อจำกัดจะถูกนำไปใช้ในภาษาเชิงคำสั่งผ่านชุดเครื่องมือแก้ปัญหาข้อจำกัดซึ่งเป็นไลบรารีแยกต่างหากสำหรับภาษาเชิงคำสั่งที่มีอยู่แล้ว
การเขียนโปรแกรมตรรกะแบบมีข้อจำกัด
การเขียนโปรแกรมแบบมีข้อจำกัด (Constraint Programming) คือการฝังข้อจำกัดลงในภาษาหลัก ภาษาหลักกลุ่มแรกที่ใช้คือ ภาษา การเขียนโปรแกรมเชิงตรรกะดังนั้นในตอนแรกสาขานี้จึงเรียกว่าการเขียนโปรแกรมเชิงตรรกะแบบมีข้อจำกัด (Constraint Logic Programming ) ทั้งสองแนวคิดนี้มีคุณสมบัติสำคัญหลายอย่างร่วมกัน เช่น ตัวแปรเชิงตรรกะและการย้อนกลับ (Backtracking ) ปัจจุบัน การใช้งาน Prolog ส่วนใหญ่ มีไลบรารีสำหรับการเขียนโปรแกรมเชิงตรรกะแบบมีข้อจำกัดอย่างน้อยหนึ่งไลบรารี
ความแตกต่างระหว่างทั้งสองอย่างนั้นส่วนใหญ่อยู่ที่รูปแบบและวิธีการจำลองโลก ปัญหาบางอย่างเขียนได้ง่ายกว่า (และจึงง่ายกว่า) ในรูปแบบโปรแกรมเชิงตรรกะ ในขณะที่บางปัญหาเขียนได้ง่ายกว่าในรูปแบบโปรแกรมเชิงข้อจำกัด
วิธีการเขียนโปรแกรมแบบมีข้อจำกัด (Constraint Programming) คือการค้นหาสถานะของโลกที่ข้อจำกัดจำนวนมากได้รับการตอบสนองพร้อมกัน โดยทั่วไปแล้ว ปัญหาจะถูกกำหนดในรูปของสถานะของโลกที่มีตัวแปรที่ไม่ทราบค่าอยู่จำนวนหนึ่ง โปรแกรมแบบมีข้อจำกัดจะค้นหาค่าสำหรับตัวแปรทั้งหมดเหล่านั้น
การเขียนโปรแกรมแบบมีข้อจำกัดพร้อมกันเชิงเวลา (Temporal concurrent constraint programming: TCC) และการเขียนโปรแกรมแบบมีข้อจำกัดพร้อมกันเชิงเวลาแบบไม่กำหนด (Non-deterministic temporal concurrent constraint programming: MJV) เป็นรูปแบบหนึ่งของการเขียนโปรแกรมแบบมีข้อจำกัดที่สามารถจัดการกับเวลาได้
ปัญหาความพึงพอใจของข้อจำกัด
ข้อจำกัด คือ ความสัมพันธ์ระหว่างตัวแปรหลายตัวที่จำกัดค่าที่ตัวแปรเหล่านั้นสามารถรับได้พร้อมกัน
นิยาม—ปัญหาการแก้ข้อจำกัดบนโดเมนจำกัด (หรือ CSP) ถูกกำหนดโดยสามองค์ประกอบดังนี้:
- คือเซตของตัวแปรในปัญหา;
- คือเซตของโดเมนของตัวแปร กล่าวคือ สำหรับทั้งหมดที่เรามี;
- คือชุดของข้อจำกัด ข้อจำกัดถูกกำหนดโดยชุดของตัวแปรและความสัมพันธ์ที่กำหนดชุดของค่าที่อนุญาตพร้อมกันสำหรับตัวแปรเหล่านั้น
ข้อจำกัดมีสามประเภท:
- ข้อจำกัดเชิงขยาย: ข้อจำกัดถูกกำหนดโดยการระบุชุดของค่าที่จะทำให้ข้อจำกัดนั้นเป็นจริง
- ข้อจำกัดทางคณิตศาสตร์: ข้อจำกัดถูกกำหนดโดยนิพจน์ทางคณิตศาสตร์ กล่าวคือ โดยใช้เครื่องหมาย;
- ข้อจำกัดเชิงตรรกะ: ข้อจำกัดถูกกำหนดด้วยความหมายที่ชัดเจน เช่นAllDifferent , AtMost , ...
คำจำกัดความ—การมอบหมายงาน (หรือแบบจำลอง) ของ CSP นั้นถูกกำหนดโดยคู่รักโดยมีลักษณะดังนี้:
- เป็นส่วนย่อยของตัวแปร;
- คือทูเปิลของค่าที่ตัวแปรที่กำหนดไว้ได้รับ
การกำหนดค่า คือ การเชื่อมโยงตัวแปรกับค่าจากโดเมนของมัน การกำหนดค่าบางส่วน คือ การกำหนดค่าให้กับตัวแปรเพียงบางส่วนในปัญหา การกำหนดค่าทั้งหมด คือ การกำหนดค่าให้กับตัวแปรทั้งหมดในปัญหา
คุณสมบัติ—เมื่อกำหนดงาน (บางส่วนหรือทั้งหมด) ของ CSP และข้อจำกัดเช่นงานนั้นจะสอดคล้องกับข้อจำกัดก็ต่อเมื่อค่าทั้งหมดของตัวแปรในข้อจำกัดนั้นอยู่ ใน
นิยาม—คำตอบของปัญหา CSP คือการจัดสรรงานทั้งหมดซึ่งตรงตามข้อจำกัดทั้งหมดของปัญหา
ในระหว่างการค้นหาโซลูชันของ CSP ผู้ใช้สามารถต้องการสิ่งต่อไปนี้:
- การหาทางออก (ที่ตรงตามข้อจำกัดทั้งหมด)
- การค้นหาวิธีแก้ปัญหาทั้งหมด;
- เป็นการพิสูจน์ว่าปัญหานั้นไม่สามารถหาคำตอบได้
ปัญหาการเพิ่มประสิทธิภาพข้อจำกัด
ปัญหาการหาค่าเหมาะสมที่สุดภายใต้ข้อจำกัด (COP) คือปัญหาการแก้ข้อจำกัดที่เกี่ยวข้องกับฟังก์ชันเป้าหมาย
คำตอบที่เหมาะสมที่สุด สำหรับปัญหาการ หา ค่าต่ำสุด (ค่าสูงสุด) ของ COP คือคำตอบที่ทำให้ค่าของฟังก์ชันเป้าหมาย มีค่าต่ำสุด (ค่าสูงสุด)
ในระหว่างการค้นหาแนวทางแก้ไขปัญหาของ COP ผู้ใช้สามารถต้องการสิ่งต่อไปนี้:
- การหาทางออก (ที่ตรงตามข้อจำกัดทั้งหมด)
- การค้นหาวิธีแก้ปัญหาที่ดีที่สุดโดยคำนึงถึงวัตถุประสงค์
- พิสูจน์ความเหมาะสมที่สุดของวิธีแก้ปัญหาที่ดีที่สุดที่พบ
- เป็นการพิสูจน์ว่าปัญหานั้นไม่สามารถหาคำตอบได้
แบบจำลองการรบกวนเทียบกับแบบจำลองการปรับปรุง
ภาษาสำหรับการเขียนโปรแกรมตามข้อจำกัดจะใช้แนวทางใดแนวทางหนึ่งจากสองแนวทางดังนี้: [ 3 ]
- แบบจำลองการปรับปรุง: ตัวแปรในปัญหานั้นเริ่มต้นยังไม่มีการกำหนดค่า และแต่ละตัวแปรจะถือว่าสามารถมีค่าใดๆ ก็ได้ที่อยู่ในช่วงหรือโดเมนของมัน เมื่อการคำนวณดำเนินไป ค่าในโดเมนของตัวแปรจะถูกตัดออกหากพบว่าไม่เข้ากันกับค่าที่เป็นไปได้ของตัวแปรอื่นๆ จนกว่าจะพบค่าเดียวสำหรับแต่ละตัวแปร
- แบบจำลองการรบกวน: ตัวแปรในปัญหาจะถูกกำหนดค่าเริ่มต้นเพียงค่าเดียว ในช่วงเวลาต่างๆ ตัวแปรหนึ่งตัวหรือมากกว่านั้นจะได้รับการรบกวน (การเปลี่ยนแปลงค่าเดิม) และระบบจะเผยแพร่การเปลี่ยนแปลงนั้นโดยพยายามกำหนดค่าใหม่ให้กับตัวแปรอื่นๆ ที่สอดคล้องกับการรบกวนนั้น
การแพร่กระจายข้อจำกัดในปัญหาการแก้ข้อจำกัดเป็นตัวอย่างทั่วไปของแบบจำลองการปรับปรุง และการประเมินสูตรในสเปรดชีตเป็นตัวอย่างทั่วไปของแบบจำลองการรบกวน
แบบจำลองการปรับปรุงมีความทั่วไปมากกว่า เนื่องจากไม่ได้จำกัดตัวแปรให้มีค่าเดียว จึงสามารถนำไปสู่วิธีแก้ปัญหาเดียวกันได้หลายวิธี อย่างไรก็ตาม แบบจำลองการรบกวนนั้นเข้าใจง่ายกว่าสำหรับโปรแกรมเมอร์ที่ใช้ภาษาเชิงวัตถุแบบผสมผสานที่มีข้อจำกัดเชิงบังคับ[ 4 ]
โดเมน
ข้อจำกัดที่ใช้ในการเขียนโปรแกรมเชิงข้อจำกัดมักจะครอบคลุมโดเมนเฉพาะบางอย่าง โดเมนที่นิยมใช้ในการเขียนโปรแกรมเชิงข้อจำกัด ได้แก่:
- โดเมน บูลีนซึ่งใช้ข้อจำกัดแบบจริง/เท็จเท่านั้น ( ปัญหา SAT )
- โดเมนจำนวนเต็ม , โดเมนจำนวนตรรกยะ
- โดเมน ช่วงเวลาโดยเฉพาะอย่างยิ่งสำหรับปัญหาการจัดตารางเวลา[ 5 ]
- โดเมน เชิงเส้นซึ่งอธิบายและวิเคราะห์เฉพาะฟังก์ชันเชิงเส้น เท่านั้น (แม้ว่าจะมีแนวทางสำหรับ ปัญหาที่ไม่เป็นเชิงเส้น อยู่บ้างก็ตาม)
- โดเมน จำกัดซึ่งมีการกำหนดข้อจำกัดไว้บนเซตจำกัด
- โดเมนผสม ซึ่งเกี่ยวข้องกับสองโดเมนขึ้นไปจากที่กล่าวมาข้างต้น
โดเมนจำกัดเป็นหนึ่งในโดเมนที่ประสบความสำเร็จมากที่สุดของการเขียนโปรแกรมแบบมีข้อจำกัด ในบางสาขา (เช่นการวิจัยเชิงปฏิบัติการ ) การเขียนโปรแกรมแบบมีข้อจำกัดมักถูกระบุว่าเป็นการเขียนโปรแกรมแบบมีข้อจำกัดบนโดเมนจำกัด
การแพร่กระจายข้อจำกัด
เงื่อนไข ความสอดคล้องเฉพาะที่ (Local consistency conditions) คือคุณสมบัติของปัญหาการแก้ข้อจำกัดที่เกี่ยวข้องกับความสอดคล้องของกลุ่มย่อยของตัวแปรหรือข้อจำกัด เงื่อนไขเหล่านี้สามารถใช้เพื่อลดพื้นที่การค้นหาและทำให้การแก้ปัญหาง่ายขึ้น มีการใช้เงื่อนไขความสอดคล้องเฉพาะที่หลายประเภท เช่นความสอดคล้องของโหนด (node consistency ) ความสอดคล้องของส่วน โค้ง (arc consistency ) และความสอดคล้องของเส้นทาง (path consistency )
เงื่อนไขความสอดคล้องในระดับท้องถิ่นทุกเงื่อนไขสามารถบังคับใช้ได้ด้วยการแปลงที่เปลี่ยนแปลงปัญหาโดยไม่เปลี่ยนแปลงวิธีแก้ปัญหา การแปลงดังกล่าวเรียกว่าการแพร่กระจายข้อจำกัด[ 6 ]การแพร่กระจายข้อจำกัดทำงานโดยการลดโดเมนของตัวแปร เสริมความแข็งแกร่งของข้อจำกัด หรือสร้างข้อจำกัดใหม่ ซึ่งนำไปสู่การลดพื้นที่การค้นหา ทำให้ปัญหาแก้ไขได้ง่ายขึ้นด้วยอัลกอริทึมบางอย่าง การแพร่กระจายข้อจำกัดยังสามารถใช้เป็นตัวตรวจสอบความไม่สามารถพอใจได้ ซึ่งโดยทั่วไปจะไม่สมบูรณ์ แต่สมบูรณ์ในบางกรณีเฉพาะ
การแก้ปัญหาข้อจำกัด
มีเทคนิคอัลกอริธึมหลักสามประการสำหรับการแก้ปัญหาความพึงพอใจของข้อจำกัด ได้แก่ การค้นหาแบบย้อนกลับ การค้นหาแบบโลคอล และการเขียนโปรแกรมแบบไดนามิก[ 1 ]
การค้นหาแบบย้อนกลับ
การค้นหาแบบย้อนกลับ (Backtracking search ) เป็นอัลกอริธึม ทั่วไป สำหรับการค้นหาคำตอบทั้งหมด (หรือบางส่วน) ของปัญหาการคำนวณ บางอย่าง โดยเฉพาะอย่างยิ่งปัญหาการแก้ข้อจำกัดซึ่งจะสร้างตัวเลือกที่เป็นไปได้สำหรับคำตอบทีละน้อย และจะละทิ้งตัวเลือกนั้น ("ย้อนกลับ") ทันทีที่พบว่าตัวเลือกนั้นไม่สามารถนำไปสู่คำตอบที่ถูกต้องได้
การค้นหาในพื้นที่
การค้นหาแบบโลคอล (Local search)เป็นวิธีการที่ไม่สมบูรณ์ในการหาคำตอบของปัญหาโดยอาศัยการปรับปรุงการกำหนดค่าตัวแปรอย่างต่อเนื่องจนกว่าจะตรงตามข้อจำกัดทั้งหมด โดยเฉพาะอย่างยิ่ง อัลกอริทึมการค้นหาแบบโลคอลมักจะปรับเปลี่ยนค่าของตัวแปรในการกำหนดค่าในแต่ละขั้นตอน การกำหนดค่าใหม่จะใกล้เคียงกับการกำหนดค่าก่อนหน้าในพื้นที่ของการกำหนดค่า จึงเป็นที่มาของชื่อการค้นหาแบบโลคอล (Local search )
การเขียนโปรแกรมแบบไดนามิก
การเขียนโปรแกรมเชิงพลวัต (Dynamic programming)เป็นทั้ง วิธี การหาค่าเหมาะสมที่สุดทางคณิตศาสตร์และวิธีการเขียนโปรแกรมคอมพิวเตอร์ หมายถึงการทำให้ปัญหาที่ซับซ้อนง่ายขึ้นโดยการแบ่งปัญหาออกเป็นปัญหาย่อยที่ง่ายกว่าใน ลักษณะ แบบเรียกซ้ำแม้ว่าปัญหาการตัดสินใจ บางอย่าง จะไม่สามารถแบ่งแยกได้ด้วยวิธีนี้ แต่การตัดสินใจที่ครอบคลุมหลายช่วงเวลา มักจะสามารถแบ่งแยกได้แบบเรียกซ้ำ ในทำนองเดียวกัน ในวิทยาศาสตร์คอมพิวเตอร์ หากปัญหาใดสามารถแก้ไขได้อย่างเหมาะสมที่สุดโดยการแบ่งปัญหาออกเป็นปัญหาย่อย แล้วจึงค้นหาคำตอบที่เหมาะสมที่สุดสำหรับปัญหาย่อยเหล่านั้นแบบเรียกซ้ำ ปัญหานั้นก็จะมีโครงสร้างย่อยที่เหมาะสมที่สุด (optimal substructure )
ตัวอย่าง
ไวยากรณ์สำหรับการแสดงข้อจำกัดบนโดเมนจำกัดนั้นขึ้นอยู่กับภาษาหลัก โปรแกรม Prolog ต่อไปนี้ แก้ ปริศนาตัว อักษร คลาสสิก SEND+MORE=MONEY ในการเขียนโปรแกรมเชิงตรรกะแบบมีข้อจำกัด:
% โค้ดนี้ใช้งานได้ทั้งใน YAP และ SWI-Prolog โดยใช้ไลบรารีตัวแก้ข้อจำกัด CLPFD ที่จัดเตรียมโดยสภาพแวดล้อม % อาจต้องมีการแก้ไขเล็กน้อยเพื่อให้ใช้งานได้% ในสภาพแวดล้อม Prolog อื่นๆ หรือใช้ตัวแก้ข้อจำกัดอื่นๆ:- use_module ( library ( clpfd )). sendmore ( Digits ) :- Digits = [ S , E , N , D , M , O , R , Y ], % สร้างตัวแปรDigits ในช่วง0..9 , % เชื่อมโยงโดเมนกับตัวแปรS #\= 0 , % ข้อจำกัด: S ต้องแตกต่างจาก 0 M #\= 0 , all_different ( Digits ), % องค์ประกอบทั้งหมดต้องมีค่าแตกต่างกัน1000 * S + 100 * E + 10 * N + D % ข้อจำกัดอื่นๆ+ 1000 * M + 100 * O + 10 * R + E #= 10000 * M + 1000 * O + 100 * N + 10 * E + Y , label ( Digits ). % เริ่มการค้นหาตัวแปลภาษาสร้างตัวแปรสำหรับแต่ละตัวอักษรในปริศนา ตัวinsดำเนินการใช้เพื่อระบุโดเมนของตัวแปรเหล่านี้ เพื่อให้มีค่าอยู่ในช่วง {0, 1, 2, 3, ..., 9} ข้อจำกัดS#\=0และM#\=0หมายความว่าตัวแปรทั้งสองนี้ไม่สามารถมีค่าเป็นศูนย์ได้ เมื่อตัวแปลภาษาประเมินข้อจำกัดเหล่านี้ มันจะลดโดเมนของตัวแปรทั้งสองนี้โดยการลบค่า 0 ออก จากนั้น ข้อจำกัดall_different(Digits)จะถูกพิจารณา ข้อจำกัดนี้ไม่ได้ลดโดเมนใดๆ ดังนั้นจึงถูกจัดเก็บไว้เฉยๆ ข้อจำกัดสุดท้ายระบุว่าตัวเลขที่กำหนดให้กับตัวอักษรจะต้องเป็นเช่นนั้น "SEND+MORE=MONEY" เป็นจริงเมื่อแต่ละตัวอักษรถูกแทนที่ด้วยตัวเลขที่สอดคล้องกัน จากข้อจำกัดนี้ ตัวแก้ปัญหาจะอนุมานได้ว่า M=1 ข้อจำกัดที่จัดเก็บไว้ทั้งหมดที่เกี่ยวข้องกับตัวแปร M จะถูกปลุกขึ้นมา ในกรณีนี้การแพร่กระจายข้อจำกัดบนall_differentข้อจำกัดจะลบค่า 1 ออกจากโดเมนของตัวแปรที่เหลือทั้งหมด การแพร่กระจายข้อจำกัดอาจแก้ปัญหาได้โดยการลดโดเมนทั้งหมดให้เหลือค่าเดียว อาจพิสูจน์ได้ว่าปัญหานั้นไม่มีคำตอบโดยการลดโดเมนให้เหลือเซตว่าง แต่ก็อาจยุติลงโดยไม่สามารถพิสูจน์ได้ว่าปัญหานั้นสามารถหาคำตอบได้หรือไม่ ตัวอักษร ป้ายกำกับถูกใช้เพื่อทำการค้นหาคำตอบจริง ๆ
ดูเพิ่มเติม
- การเพิ่มประสิทธิภาพเชิงการจัดเรียง
- การเขียนโปรแกรมตรรกะข้อจำกัดแบบพร้อมกัน
- การเขียนโปรแกรมตรรกะแบบมีข้อจำกัด
- อัลกอริทึมฮิวริสติก
- รายชื่อภาษาการเขียนโปรแกรมแบบมีข้อจำกัด
- การเพิ่มประสิทธิภาพทางคณิตศาสตร์
- ปัญหาการจัดตารางเวลาพยาบาล
- ข้อจำกัดปกติ
- ความพึงพอใจตามทฤษฎี
- ปัญหาการแข่งขันที่ต้องเดินทางไปจัดต่างสถานที่
ลิงก์ภายนอก
- การประชุมวิชาการนานาชาติว่าด้วยหลักการและการปฏิบัติของการเขียนโปรแกรมแบบมีข้อจำกัดสมาคมการเขียนโปรแกรมแบบมีข้อจำกัด
- Barták, Roman (1998). "คู่มือออนไลน์เกี่ยวกับการเขียนโปรแกรมแบบมีข้อจำกัด"มหาวิทยาลัยชาร์ลส์ กรุงปราก
- ลิงก์ที่ล้าสมัยที่archive.today (เก็บถาวรเมื่อวันที่ 5 ธันวาคม 2012) ซอฟต์แวร์ฟรีบน Oz ( สไตล์ X Window System )
- ลิงก์ที่ล้าสมัยที่archive.today (เก็บถาวรเมื่อวันที่ 7 มกราคม 2013)
- Shirriff, Ken (ตุลาคม 2025). "การแก้ปริศนา NYTimes Pips ด้วยตัวแก้ข้อจำกัด" .
- สกาเซลลาติ, ไบรอัน (2019). "ปัญหาการแก้ข้อจำกัด" (PDF) . CPSC 470 – ปัญญาประดิษฐ์ . มหาวิทยาลัยเยล.
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การเขียนโปรแกรมแบบมีข้อจำกัด
การเขียนโปรแกรมแบบมีข้อจำกัด (CP) เป็นกระบวนทัศน์สำหรับการแก้ ปัญหา เชิงการจัดเรียงที่ดึงเอาเทคนิคที่หลากหลายจากปัญญาประดิษฐ์วิทยาศาสตร์คอมพิวเตอร์และการวิจัยการดำเนินงานมาใช้...
การเขียนโปรแกรมตรรกะแบบมีข้อจำกัด
การเขียนโปรแกรมแบบมีข้อจำกัด (Constraint Programming) คือการฝังข้อจำกัดลงในภาษาหลัก ภาษาหลักกลุ่มแรกที่ใช้คือ ภาษา การเขียนโปรแกรมเชิงตรรกะ ดังนั้นในตอนแรกสาขานี้จึงเรียกว่า การเขียนโปรแกรมเชิงตรรกะแบบมีข้อจำกัด (Constraint Logic Programming )...
ปัญหาความพึงพอใจของข้อจำกัด
ข้อจำกัด คือ ความสัมพันธ์ระหว่างตัวแปรหลายตัวที่จำกัดค่าที่ตัวแปรเหล่านั้นสามารถรับได้พร้อมกัน
ปัญหาการเพิ่มประสิทธิภาพข้อจำกัด
ปัญหาการหาค่าเหมาะสมที่สุดภายใต้ข้อจำกัด (COP) คือปัญหาการแก้ข้อจำกัดที่เกี่ยวข้องกับฟังก์ชันเป้าหมาย