Dynamic programming — การโปรแกรมพลวัต

From Systems analysis wiki
Jump to navigation Jump to search

การโปรแกรมพลวัต (DP; อังกฤษ dynamic programming, DP) — คือวิธีการแก้ปัญหาการหาค่าเหมาะสมที่ซับซ้อน โดยอาศัยการแบ่งปัญหาเริ่มต้นออกเป็นลำดับของปัญหาย่อยที่ง่ายกว่า[1][2] วิธีการนี้ประยุกต์ใช้กับกระบวนการตัดสินใจแบบหลายขั้นตอน ซึ่งคำตอบที่ดีที่สุดของปัญหาทั้งหมดสามารถสร้างขึ้นจากคำตอบที่ดีที่สุดของปัญหาย่อยของมัน

คำศัพท์นี้ถูกบัญญัติขึ้นโดยนักคณิตศาสตร์ชาวอเมริกัน Richard Bellman ในช่วงทศวรรษ 1950[3] ในบริบทนี้ คำว่า "programming" ใช้ในความหมายของ "การวางแผน" หรือ "การจัดทำแผนปฏิบัติการที่เหมาะสมที่สุด" มิใช่การเขียนโค้ดคอมพิวเตอร์[4]

คุณสมบัติและทฤษฎีบทสำคัญ

ความสามารถในการประยุกต์ใช้การโปรแกรมพลวัตกับปัญหาหนึ่ง ๆ ถูกกำหนดโดยการมีอยู่ของคุณสมบัติพื้นฐานสองประการ

หลักการความเหมาะสมของ Bellman

แนวคิดหลักของวิธีการนี้คือ หลักการความเหมาะสมของ Bellman (อังกฤษ Bellman's principle of optimality) ซึ่งกล่าวว่า ไม่ว่าสถานะเริ่มต้นและการตัดสินใจเริ่มต้นจะเป็นอย่างไร การตัดสินใจในขั้นถัดไปจะต้องประกอบกันเป็นกลยุทธ์ที่เหมาะสมที่สุดเทียบกับสถานะที่ได้มาจากการตัดสินใจครั้งแรก[3]

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

ปัญหาย่อยที่ทับซ้อนกัน

ปัญหาจะมีคุณสมบัติ ปัญหาย่อยที่ทับซ้อนกัน (อังกฤษ overlapping subproblems) หากในการแก้ปัญหาแบบ recursive ปัญหาย่อยเดิมเกิดขึ้นซ้ำหลายครั้ง DP ช่วยหลีกเลี่ยงการคำนวณซ้ำโดยการเก็บบันทึกคำตอบของปัญหาย่อยที่พบแล้ว (เทคนิคนี้เรียกว่า memoization หรือ tabulation) ซึ่งเพิ่มประสิทธิภาพได้อย่างมากเมื่อเทียบกับการค้นหาแบบ recursive แบบธรรมดา

สมการ Bellman

จากหลักการความเหมาะสมจะได้ความสัมพันธ์เวียนเกิดพื้นฐานของวิธีการ ซึ่งเรียกว่า สมการ Bellman[1] มันเชื่อมโยง "มูลค่า" (ผลตอบแทนหรือต้นทุนที่เหมาะสมที่สุด) ของสถานะปัจจุบันกับมูลค่าของสถานะถัดไป ในรูปแบบทั่วไปสำหรับกระบวนการหลายขั้นตอนแบบ deterministic ที่มีฟังก์ชันเป้าหมายแบบ additive มีรูปแบบดังนี้:

Vk1(x)=maxyU(x){φk(x,y)+Vk(fk(x,y))}

โดยที่:

  • k — หมายเลขขั้นตอน (จาก m ถึง 1);
  • x — สถานะของระบบที่ขั้นตอน k1;
  • y — การตัดสินใจที่ควบคุมได้ซึ่งทำในขั้นตอน k;
  • φk(x,y) — ผลตอบแทน (หรือต้นทุน) ที่ขั้นตอน k;
  • fk(x,y) — ฟังก์ชันที่กำหนดสถานะใหม่ของระบบ;
  • Vk(s) — ค่าเหมาะสมที่สุดของฟังก์ชันเป้าหมายสำหรับปัญหาย่อยที่เริ่มต้นที่ขั้นตอน k ในสถานะ s

สมการนี้แก้ตามลำดับ โดยทั่วไปจะแก้ "จากท้าย" โดยเคลื่อนจากขั้นตอนสุดท้ายไปยังขั้นตอนแรก

ตัวอย่างการประยุกต์ใช้

  • ปัญหาเส้นทางสั้นที่สุดในกราฟ: ปัญหานี้มีคุณสมบัติโครงสร้างย่อยที่เหมาะสมที่สุด เนื่องจากส่วนใดก็ตามของเส้นทางสั้นที่สุดก็เป็นเส้นทางสั้นที่สุดในตัวเอง อัลกอริทึม Bellman-Ford และ Floyd-Warshall เป็นตัวอย่างคลาสสิกของการประยุกต์ใช้ DP เพื่อแก้ปัญหานี้[5]
  • ปัญหากระเป๋าเป้: ปัญหาการบรรจุกระเป๋าเป้ที่มีความจุจำกัดด้วยสิ่งของที่มีมูลค่าและน้ำหนักต่างกันให้เหมาะสมที่สุด DP ช่วยให้แก้ปัญหานี้ได้โดยพิจารณาสิ่งของทีละชิ้นและคำนวณมูลค่าสูงสุดสำหรับค่าความจุที่เหลือทุกค่าในแต่ละขั้นตอน
  • ปัญหาการจัดสรรทรัพยากร: การจัดสรรทรัพยากรที่จำกัด (เช่น การลงทุน) ระหว่างโครงการหลายโครงการเพื่อให้ได้ผลรวมสูงสุด

ข้อจำกัด

ข้อจำกัดหลักของวิธีการนี้คือ คำสาปแห่งมิติ (อังกฤษ curse of dimensionality) — คำศัพท์ที่ Bellman บัญญัติขึ้นเพื่อบ่งบอกถึงการเพิ่มขึ้นแบบ exponential ของจำนวนสถานะ และด้วยเหตุนี้จึงเพิ่มความซับซ้อนในการคำนวณ เมื่อจำนวนตัวแปรที่อธิบายสถานะของระบบเพิ่มขึ้น[6][7] สิ่งนี้จำกัดการประยุกต์ใช้งานจริงของ DP แบบแม่นยำสำหรับปัญหาที่มีขนาดใหญ่มาก

แนวคิดที่เกี่ยวข้อง

  • การวิจัยเชิงปฏิบัติการ
  • ทฤษฎีการควบคุมที่เหมาะสมที่สุด
  • กระบวนการตัดสินใจแบบ Markov (การขยายแบบ stochastic)
  • สมการ Hamilton–Jacobi–Bellman (สมการแอนะล็อกสำหรับเวลาต่อเนื่อง)

หมายเหตุ

[1] [2] [3] [4] [5] [6] [7] </references>

  1. 1.0 1.1 1.2 "Динамическое программирование". Большая российская энциклопедия. [1]
  2. 2.0 2.1 "Динамическое программирование". Википедия. [2]
  3. 3.0 3.1 3.2 Решетников А. Н., Коченков А. В., Пиров Д. М., Рябоконь Д. А. (2011). Динамическое программирование. Примеры применения. Учебное пособие, ННГУ им. Лобачевского (ВМиК). [3]
  4. 4.0 4.1 "Dynamic programming". Wikipedia. [4]
  5. 5.0 5.1 Bradley S. P., Hax A. C., Magnanti T. L. (1977). Applied Mathematical Programming. Addison-Wesley. [5]
  6. 6.0 6.1 "Проклятие размерности". Википедия. [6]
  7. 7.0 7.1 Jensen P. A. (2004). Dynamic Programming – Models. Operations Research Models and Methods, Univ. of Texas. [7]