ขั้นตอนวิธีซิมเพล็กซ์

จาก testwiki
รุ่นแก้ไขเมื่อ 10:23, 18 พฤศจิกายน 2567 โดย imported>JasperBot (แทนที่ {lang-??} ด้วย {langx|??})
(ต่าง) ←รุ่นแก้ไขก่อนหน้า | รุ่นแก้ไขล่าสุด (ต่าง) | รุ่นแก้ไขถัดไป→ (ต่าง)
ไปยังการนำทาง ไปยังการค้นหา

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

บทนำ

การแก้ปัญหาโปรแกรมเชิงเส้น หรือ กำหนดการเชิงเส้น (Linear programming) สำหรับโมเดลคณิตศาสตร์ที่มีตัวแปรไม่มาก เราก็สามารถหาคำตอบได้ไม่ยากนัก แต่หากตัวแปรมีมากขึ้น ก็จำเป็นต้องหาวิธีการอื่นเข้ามาช่วยในการหาคำตอบของโมเดล ซึ่งวิธีซิมเพล็กซ์เป็นวิธีการหนึ่งที่ให้ผลดี และเข้าใจได้ง่าย

ขั้นตอนวิธีซิมเพล็กซ์ เป็นวีธีการของ จอร์จ แดนท์ซิก (George Dantzig) ที่ได้รับความนิยมอย่างมากในการแก้ปัญหาโปรแกรมเชิงเส้น ซึ่งชื่อของขั้นตอนวิธีนี้ มาจากแนวคิดของ ซิมเพล็กซ์ นั่นเอง

วิธีซิมเพล็กซ์เป็นวิธีที่มีประสิทธิภาพมากในการแก้ปัญหากำหนดการเชิงเส้น (Linear programming) ซึ่งเป็นกระบวนการทางพีชคณิตที่ประกอบด้วยการกระทำซ้ำ ๆ กันเพื่อให้ได้คำตอบที่ดีที่สุด ยกตัวอย่างเช่น

ค่าที่มากที่สุดของ Z=3x1+2x2

ภายใต้เงื่อนไข

4x1+2x216x1+2x28x1+x25x10,x20

ปัญหาในลักษณะเช่นนี้จะสามารถใช้วิธีซิมเพล็กซ์ในการหาคำตอบได้ โดยจำเป็นจะต้องเปลี่ยนปัญหาที่กำหนดให้อยู่ในรูปมาตรฐาน (Standard Form) โดยจะต้องแปลงอสมการของปัญหาให้เป็นสมการ ซึ่งจะมีการเพิ่มตัวแปรเข้าไปในแต่ละอสมการเรียกว่าตัวแปรแบบ Slack หรือ Surplus ดังนั้น เราจะเขียนตัวอย่างข้างต้นได้ใหม่เป็น

ค่าที่มากที่สุดของ Z=3x1+2x2

ภายใต้เงื่อนไข

4x1+2x2+s116x1+2x2+s28x1+x2+s35x10,x20,s10,s20,s30

รูปมาตรฐาน

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

ค่าที่มากที่สุดของ Z=c1x1+c2x2++cnxn

ภายใต้เงื่อนไข

a11x1+a12x2++a1nxnb1a21x1+a22x2++a2nxnb2  an1x1+an2x2++annxnbnx10,x20,,xn0

จากรูปแบบโมเดลคณิตศาสตร์ของโปรแกรมเชิงเส้น

ค่าที่มากที่สุดของ Z=c1x1+c2x2+c3x3

ภายใต้เงื่อนไข

a11x1+a12x2+a13x3b1a21x1+a22x2+a23x3b2a31x1+a32x2+a33x3b3x10,x20,x30

เขียนสมการเพื่อเพิ่มเติมตัวแปรช่วย ได้ดังนี้

Zc1x1c2x2c3x3=0a11x1+a12x2+a13x3+x4b1a21x1+a22x2+a23x3+x5b2a31x1+a32x2+a33x3+x6b3x10,x20,x30,x40,x50,x60

ตัวแปรที่เพิ่มเข้ามา

  • ตัวแปรแบบ Slack

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

จากข้อจำกัด 7x1+34x2125 สามารถเขียนเป็น 7x1+34x2+x3=125 เมื่อ x30

  • ตัวแปรแบบ Surplus

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

จากข้อจำกัด 7x1+34x2125 สามารถเขียนเป็น 7x1+34x2x3=125 เมื่อ x30

ขั้นตอนวิธี

วิธีการต่อไปนี้จะเป็นการดำเนินการตามขั้นตอนวิธีซิมเพล็กซ์ เพื่อหาผลเฉลยที่มีค่ามากที่สุด แต่หากต้องการหาผลเฉลยที่มีค่าน้อยสุดสามารถทำได้โดย ค่าน้อยสุดของ Z=( ค่ามากสุดของ Z)

วิธีการ

1. จัดรูป กำหนดการเชิงเส้น ให้อยู่ในรูปมาตรฐาน

2. สร้างตารางซิมเพล็กซ์ดังนี้

Z x1 x2 x3 x4 x5 x6 b
Z 1 c1 c2 c3 0 0 0 0
x4 0 a11 a12 a13 1 0 0 b1
x5 0 a21 a22 a23 0 1 0 b2
x6 0 a31 a32 a33 0 0 1 b3

3. เลือกตัวแปรขาเข้า (entering variable) คือการเลือกตัวแปรที่ไม่เป็นตัวแปรมูลฐาน (non-basic variable) ให้เป็นตัวแปรมูลฐาน (basic variable) โดยดูจากสัมประสิทธิ์ของตัวแปรในสมการเป้าหมาย (แถว Z) ที่ติดลบมากที่สุด แต่ถ้าสัมประสิทธิ์ของตัวแปรทุกตัวเป็นบวกหรือศูนย์แล้ว แสดงว่าถึงจุดที่เหมาะสม (optimal solution) ไม่ต้องทำต่อไปอีก

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

5. เปลี่ยนตัวแปรมูลฐาน ด้วยการแลกที่กันระหว่างตัวแปรขาเข้าและตัวแปรขาออก ด้วยการคำนวณโดยใช้การดำเนินการตามแถว (row operation)

6. ให้กลับไปทำขั้นที่ 3 - 5 ต่อไปเรื่อย ๆ จนกระทั่งถึงจุดที่เหมาะสมแล้ว

ตัวอย่าง

ค่ามากที่สุด Z=6x1+4x2

จากข้อจำกัด

2x1+3x21004x1+2x2120x1,x20

สามารถเขียนเป็นรูปแบบมาตรฐานได้ดังนี้

ค่ามากที่สุด Z6x14x2=0

จากข้อจำกัด

2x1+3x2+x31004x1+2x2+x4120x1,x2,x3,x40

นำรูปแบบมาตรฐานที่ได้ไปสร้างตารางซิมเพล็กซ์ ได้ดังนี้

Z x1 x2 x3 x4 b
Z 1 6 4 0 0 0
x3 0 2 3 1 0 100
x4 0 4 2 0 1 120

พิจารณาแถวแรก Z ค่าสัมประสิทธิ์ที่มีค่าน้อยสุด คือ 6 จึงเลือก x1 เป็นตัวแปรขาเข้า จากนั้นพิจารณาอัตราส่วนของค่า b กับสัมประสิทธิ์ของตัวแปรขาเข้า จะได้ว่า แถวที่ x3 มีอัตราส่วนเป็น 1002=50 และแถวที่ x4 มีอัตราส่วนเป็น 1204=30 ดังนั้นจึงเลือก x4 เป็นตัวแปรขาออก

เปลี่ยนให้ x1 เป็นตัวแปรมูลฐาน โดยแลกที่กับ x4 ด้วยวิธีการดำเนินการตามแถว จะได้ตารางซิมเพล็กซ์ ดังนี้

R3:=14R3R2:=2R3+R2R1:=6R3+R1
Z x1 x2 x3 x4 b
Z 1 0 1 0 32 180
x3 0 0 2 1 12 40
x1 0 1 12 0 14 30

พิจารณาแถวแรก Z ค่าสัมประสิทธิ์ที่มีค่าน้อยสุด คือ 1 จึงเลือก x2 เป็นตัวแปรขาเข้า จากนั้นพิจารณาอัตราส่วนของค่า b กับสัมประสิทธิ์ของตัวแปรขาเข้า จะได้ว่า แถวที่ x3 มีอัตราส่วนเป็น 402=20 และแถวที่ x1 มีอัตราส่วนเป็น 301/2=60 ดังนั้นจึงเลือก x3 เป็นตัวแปรขาออก

เปลี่ยนให้ x2 เป็นตัวแปรมูลฐาน โดยแลกที่กับ x3 ด้วยวิธีการดำเนินการตามแถว จะได้ตารางซิมเพล็กซ์ ดังนี้

R2:=12R2R3:=12R2+R3R1:=R2+R1
Z x1 x2 x3 x4 b
Z 1 0 0 12 54 200
x2 0 0 1 12 14 20
x1 0 1 0 14 38 20

เมื่อพิจารณาตารางซิมเพล็กซ์ก็จะเห็นว่า สัมประสิทธิ์ในสมการเป้าหมาย (พิจารณาแถว Z) มีค่าไม่ติดลบทั้งหมด ดังนั้นเราก็ได้ผลเฉลยที่เหมาะสมที่สุดแล้วดังนี้

x1=20, x2=20, ค่ามากที่สุดของ Z=200

ประสิทธิภาพ

ขั้นตอนวิธีซิมเพล็กซ์ เป็นวิธีการที่มีประสิทธิภาพในทางปฏิบัติ และได้รับการพัฒนามากกว่าวิธีที่คิดค้นขึ้นมาก่อนหน้า อย่างไรก็ตามในปี พ.ศ. 2515 Klee และ Minty ได้เสนอตัวอย่างที่ที่แสดงให้เห็นว่าในกรณีเลวร้ายที่สุด ประสิทธิภาพการทำงานของขั้นตอนวิธีซิมเพล็กซ์จะใช้เวลาเป็นเอกซ์โพเนนเชียล ตั้งแต่นั้นมาการกระทำหรือการดำเนินการด้วยขั้นตอนวิธีนี้ก็ถูกแสดงว่าเป็นขั้นตอนวิธีที่มีประสิทธิภาพที่แย่

การวิเคราะห์เชิงปริมาณและการสังเกตว่าขั้นตอนวิธีซิมเพล็กซ์มีประสิทธิภาพในทางปฏิบัติแม้ว่าจะมีใช้เวลาเป็นเอกซ์โพแนนเชียลในกรณีที่เลวร้ายที่สุดก็ตาม และได้นำไปสู่​​การพัฒนาที่จะวัดประสิทธิภาพในรูปแบบอื่น ซึ่งจริงๆ แล้ว ขั้นตอนวิธีซิมเพล็กซ์จะใช้เวลาเป็นโพลิโนเมียลในกรณีเฉลี่ยทั่วไป ภายใต้การแจกแจงความน่าจะเป็น ซึ่งความแม่นยำของประสิทธิภาพในเชิงเฉลี่ยนี้จะขึ้นอยู่กับการเลือกการแจกแจงความน่าเป็นของโมเดลทางคณิตศาสตร์ และการนำเสนออื่นๆ ได้แสดงให้เห็นว่ากรณีที่เลวร้ายที่สุดสำหรับขั้นตอนวิธีซิมเพล็กซ์นั้นมีผลน้อยมากต่อประสิทธิภาพโดยรวม

อ้างอิง