ผลต่างระหว่างรุ่นของ "204512/บรรยาย 10"
Jittat (คุย | มีส่วนร่วม) (ย้อน) |
|||
แถว 1: | แถว 1: | ||
− | + | จดบันทึกคำบรรยายโดย: | |
− | + | ::นายณัฐพล หล่อศิริ 50653781 และ<br> | |
− | :: | + | ::นายวรวุทธ นัมคนิสรณ์ 50653898 |
− | :: | ||
== Linear Programming == | == Linear Programming == | ||
− | '''''Note''''' Problem | + | '''''Note''''' Problem ต่างจาก Instant ของ Problem กล่าวคือ Problem จะเท่ากับ เซตของ Instant ของ Problem<br> |
− | '''''Note''''' | + | '''''Note''''' ตัวแปรทั้งหมดเป็นตัวแปรแบบเวกเตอร์ เพราะฉะนั้นจะขอละ ไม่ใส่เครื่องหมายเวกเตอร์ |
---- | ---- | ||
=== <u>Optimization Problem</u> === | === <u>Optimization Problem</u> === | ||
− | Instant | + | Instant ของปัญหา Optimization Problem จะประกอบด้วย |
− | *set F ( | + | *set F (เซตของคำตอบที่เป็นไปได้) |
− | *function cost | + | *function cost F→R (จำนวนจริง) |
− | + | ต้องการหา f∈F และ cost (f) ≤ cost (y) , สำหรับทุกๆ y∈F | |
---- | ---- | ||
=== <u>Linear Programming Problem</u> === | === <u>Linear Programming Problem</u> === | ||
− | Instant | + | Instant ของ linear programming คือ จำนวนเต็มบวก n, m เวกเตอร์ c ∈ R<sup>n</sup>, b ∈ R<sup>m</sup> และเมตริกซ์ A ของจำนวนจริงขนาด m x n จะได้ว่า |
− | :F = { x | + | :F = { x ∈ R<sup>n</sup> :Ax = b , x ≥0 } |
− | :Cost : x | + | :Cost : x → c'x |
− | ;<u>''' | + | ;<u>'''ตัวอย่าง'''</u>: |
− | + | กำหนดให้ n = 3, m = 1 | |
− | + | เขียนเป็นเมตริกซ์ ได้เป็น<br> | |
− | :[[ | + | :[[ภาพ:Image010.png]]<br> |
− | : | + | :หา x ที่ Ax = b ; x ≥ 0 แทนค่าจะได้<br> |
− | :[[ | + | :[[ภาพ:Image011.png]]<br> |
− | : | + | :หา x ที่ทำให้ <math>c_1x_1</math> + <math>c_2x_2</math> + <math>c_3x_3</math> น้อยที่สุด |
− | ;<u>''' | + | ;<u>'''ตัวอย่าง'''</u>: |
− | * | + | *การเขียนในรูปแบบ ''สมการ''<br> |
− | :- | + | :- การระบุเซต F (เป็น constraint ของปัญหา) |
::<math>x_1</math> + <math>x_2</math> = 5 | ::<math>x_1</math> + <math>x_2</math> = 5 | ||
− | ::<math>x_3</math> + <math>x_4</math> | + | ::<math>x_3</math> + <math>x_4</math> – <math>x_2</math> = 1 |
::<math>x_1</math> - <math>x_2</math> + <math>x_3</math> = 8 | ::<math>x_1</math> - <math>x_2</math> + <math>x_3</math> = 8 | ||
− | ::<math>x_5</math> | + | ::<math>x_5</math> – <math>x_3</math> = 7 |
− | ::<math>x_i</math> | + | ::<math>x_i</math> ≥ 0 ทุกๆ 1 ≤ i ≤5 |
− | :- | + | :- การระบุ c (เป็น objective ของปัญหา) |
− | ::minimize: <math>x_1</math> + <math>x_2</math> | + | ::minimize: <math>x_1</math> + <math>x_2</math> – <math>x_3</math> + <math>x_4</math> – <math>x_5</math> |
− | * | + | *การเขียนในรูปแบบ ''เมตริกซ์''<br> |
− | :[[ | + | :[[ภาพ:Image013.png]] , [[ภาพ:Image014.png]] , [[ภาพ:Image0142.png]] |
---- | ---- | ||
− | === <u>Form | + | === <u>Form ของ Linear Programming</u> === |
==== Standard form ==== | ==== Standard form ==== | ||
− | :''''' | + | :'''''เมตริกซ์''''' |
::minimize: cx | ::minimize: cx | ||
− | ::subject to: Ax = b ; x | + | ::subject to: Ax = b ; x ≥ 0 |
− | :''''' | + | :'''''สมการ''''' |
− | ::minimize: [[ | + | ::minimize: [[ภาพ:Image015.png]] |
− | ::subject to: [[ | + | ::subject to: [[ภาพ:Image016.png]] เมื่อ j = 1,…,n |
==== Canonical form ==== | ==== Canonical form ==== | ||
− | :''''' | + | :'''''เมตริกซ์''''' |
::minimize: cx | ::minimize: cx | ||
− | ::subject to: Ax | + | ::subject to: Ax ≥ b ; x ≥ 0 |
− | :''''' | + | :'''''สมการ''''' |
− | ::minimize: [[ | + | ::minimize: [[ภาพ:Image015.png]] |
− | ::subject to: [[ | + | ::subject to: [[ภาพ:Image017.png]] เมื่อ j = 1,…,n |
− | ;<u>''' | + | ;<u>'''ตัวอย่าง'''</u>: |
− | : | + | :เตรียมสอบมีเวลาอ่านหนังสือ 12 ชม. มี 3 วิชา Architect, Algo, Soft Com. อ่านอย่างน้อยวิชาละ 1 ชม., อ่าน architect & algo รวมกันไม่น้อยกว่า 5 ชม., อ่าน Soft Com. ไม่เกิน 8 ชม. |
− | + | ถ้าให้ | |
− | ::<math>x_1</math> = | + | ::<math>x_1</math> = เวลาอ่าน Architect |
− | ::<math>x_2</math> = | + | ::<math>x_2</math> = เวลาอ่าน Algo |
− | ::<math>x_3</math> = | + | ::<math>x_3</math> = เวลาอ่าน Soft Com. |
− | + | ให้ความเหนื่อยในการอ่านเป็น <math>x_1</math> + 5<math>x_2</math> + 2<math>x_3</math><br> | |
− | + | เป้าหมายคือ ต้องการอ่านหนังสือให้ได้ตามเงื่อนไข + ความเหนื่อยน้อยสุด<br> | |
− | <u> | + | <u>วิธีทำ</u> |
:minimize: <math>x_1</math> + 5<math>x_2</math> + 2<math>x_3</math> | :minimize: <math>x_1</math> + 5<math>x_2</math> + 2<math>x_3</math> | ||
:subject to: | :subject to: | ||
− | ::<math>x_1</math> + <math>x_2</math> + <math>x_3</math> | + | ::<math>x_1</math> + <math>x_2</math> + <math>x_3</math> ≤ 12 |
− | ::<math>x_1</math> | + | ::<math>x_1</math> ≥ 1 |
− | ::<math>x_2</math> | + | ::<math>x_2</math> ≥ 1 |
− | ::<math>x_3</math> | + | ::<math>x_3</math> ≥ 1 |
− | ::<math>x_1</math> + <math>x_2</math> | + | ::<math>x_1</math> + <math>x_2</math> ≥ 5 |
− | ::<math>x_3</math> | + | ::<math>x_3</math> ≤ 8 |
− | ::<math>x_1</math> , <math>x_2</math> , <math>x_3</math> | + | ::<math>x_1</math> , <math>x_2</math> , <math>x_3</math> ≥ 0<br> |
− | + | แปลงให้อยู่ในรูป canonical form การทำให้สมการที่เป็น ≤ ให้เป็น ≥ ให้หมดจะได้ว่า<br> | |
:minimize: <math>x_1</math> + 5<math>x_2</math> + 2<math>x_3</math> | :minimize: <math>x_1</math> + 5<math>x_2</math> + 2<math>x_3</math> | ||
:subject to: | :subject to: | ||
− | :: | + | ::จาก <math>x_1</math> + <math>x_2</math> + <math>x_3</math> ≤ 12 เอา -1 คูณตลอดจะได้ |
− | ::<math>-x_1</math> + <math>-x_2</math> + <math>-x_3</math> | + | ::<math>-x_1</math> + <math>-x_2</math> + <math>-x_3</math> ≥ -12 |
− | :: | + | ::จาก<math>x_3</math> ≤ 8 เอา -1 คูณตลอดจะได้ |
− | ::<math>-x_3</math> | + | ::<math>-x_3</math> ≥ -8 |
− | ::<math>x_1</math> | + | ::<math>x_1</math> ≥ 1 |
− | ::<math>x_2</math> | + | ::<math>x_2</math> ≥ 1 |
− | ::<math>x_3</math> | + | ::<math>x_3</math> ≥ 1 |
− | ::<math>x_1</math> + <math>x_2</math> | + | ::<math>x_1</math> + <math>x_2</math> ≥ 5 |
− | ::<math>x_1</math> , <math>x_2</math> , <math>x_3</math> | + | ::<math>x_1</math> , <math>x_2</math> , <math>x_3</math> ≥ 0<br> |
− | + | เขียนเป็น matrix ได้<br> | |
− | ::[[ | + | ::[[ภาพ:Image018.png]] |
− | ;<u>''' | + | ;<u>'''ตัวอย่าง'''</u>: |
− | : | + | :บริษัทเช่าเต๊นท์มหาสนุกจำกัด รับจัดหาเต็นท์ในเดือนๆหนึ่งมีเต็นท์ใช้ได้ไม่น้อยกว่าจำนวนที่ใช้ โดยมีเงื่อนไขว่าเต็นท์ซื้อขายได้ เก็บเต็นท์ในโกดังคิดค่าเช่าโกดัง จะซื้อขายหรือเก็บเต็นท์ยังไงให้ได้กำไรมากที่สุด<br> |
− | : | + | :กำหนด<br> |
− | ::<math>d_i</math> ; i = 1, | + | ::<math>d_i</math> ; i = 1, … ,12 เป็นจำนวนเต๊นท์ที่ต้องการในเดือนที่ i |
− | ::<math>t_0</math> ; | + | ::<math>t_0</math> ; เป็นจำนวนเต๊นท์ที่เหลือจากปีที่แล้ว |
− | ::<math>c_b</math> ; | + | ::<math>c_b</math> ; ราคาซื้อเต๊นท์ / เต๊นท์ |
− | ::<math>c_s</math> ; | + | ::<math>c_s</math> ; ราคาขายเต๊นท์ / เต๊นท์ |
− | ::<math>c_k</math> ; | + | ::<math>c_k</math> ; ราคาเก็บเต๊นท์ที่ไม่ได้ใช้ / เดือน<br> |
− | : | + | :ตัวแปร |
− | ::<math>t_1</math> , | + | ::<math>t_1</math> , … , <math>t_12</math> จำนวนเต๊นท์ที่เราครอบครองในเดือนที่ i |
− | ::<math>b_1</math> , | + | ::<math>b_1</math> , … , <math>b_12</math> จำนวนเต๊นท์ที่ซื้อในเดือนที่ i |
− | ::<math>s_1</math> , | + | ::<math>s_1</math> , … , <math>s_12</math> จำนวนเต๊นท์ที่ขายในเดือนที่ i |
− | ::<math>k_1</math> , | + | ::<math>k_1</math> , … , <math>k_12</math> จำนวนเต๊นท์ในโกดังในเดือนที่ i<br> |
− | : | + | :จะได้ว่า <br> |
− | ::minimize: [[ | + | ::minimize: [[ภาพ:Image019.png]]<br> |
::subject to: | ::subject to: | ||
− | :::<math>t_i</math> | + | :::<math>t_i</math> ≥ <math>d_i</math> ; i = 1, … ,12 |
− | :::<math>k_i</math> = <math>t_i</math> - <math>d_i</math> ; i = 1, | + | :::<math>k_i</math> = <math>t_i</math> - <math>d_i</math> ; i = 1, … ,12 |
− | :::<math>t_i</math> | + | :::<math>t_i</math> – <math>t_i</math>-1 ≤ <math>b_i</math> |
− | :::<math>b_i</math> | + | :::<math>b_i</math> ≥ 0 ; i = 1, … ,12 |
− | :::<math>t_i</math>-1 | + | :::<math>t_i</math>-1 – <math>t_i</math> ≤ <math>s_i</math> |
− | :::<math>s_i</math> | + | :::<math>s_i</math> ≥ 0 |
− | :::<math>t_i</math> | + | :::<math>t_i</math> ≥ 0 |
− | '''''Note''''' maximize | + | '''''Note''''' maximize เป็นส่วนกลับของ minimize สามารถแปลงกลับไปมาได้โดยเอา -1 คูณเงื่อนไข |
---- | ---- | ||
แถว 135: | แถว 134: | ||
− | ;<u>''' | + | ;<u>'''ตัวอย่าง'''</u>: |
− | [[ | + | [[ภาพ:Image020.jpg|350px]]<br>สมมติ path ดังรูป d1 = 0, ตัวแปร d1, … , d5 แทนระยะสั้นสุดจาก node 1 ไปยัง node ต่างๆ<br> |
− | + | ให้กราฟแบบมีทิศทาง G = (V,E) ความยาว l บนเส้นเชื่อม, จุดเริ่มต้น s∈V<br> | |
− | + | ให้ dv แทนระยะสั้นสุดจาก s ไป v สำหรับ v∈V<br> | |
− | + | จะได้ว่า<br> | |
− | :maximize: [[ | + | :maximize: [[ภาพ:Image023.png]] |
:subject to: | :subject to: | ||
− | ::dv | + | ::dv – du ≤ l(u,v) สำหรับทุกๆ (u,v)∈E |
::ds = 0 | ::ds = 0 | ||
− | ::dv | + | ::dv ≥ 0 สำหรับทุกๆ v∈V |
แถว 150: | แถว 149: | ||
== Integer Programming == | == Integer Programming == | ||
− | : | + | :คือการบอกว่า constraint (subject to) มีการกำหนดให้เป็นจำนวนเต็มค่าใดค่าหนึ่ง |
---- | ---- | ||
=== <u>Assignment Problem</u> === | === <u>Assignment Problem</u> === | ||
− | ;<u>''' | + | ;<u>'''ตัวอย่าง'''</u> |
− | : | + | :มีคน n คน มีงาน n งาน |
− | : | + | :คนที่ i ทำงาน j ใช้เวลา w_ij หน่วย |
− | <u> | + | <u>วิธีทำ</u> |
− | : | + | :ให้ตัวแปร [[ภาพ:Image025.png]] |
− | :minimize: [[ | + | :minimize: [[ภาพ:Image026.png]]<br> |
:subject to:<br> | :subject to:<br> | ||
− | ::[[ | + | ::[[ภาพ:Image027.png]] |
− | ::[[ | + | ::[[ภาพ:Image028.png]] |
− | ::[[ | + | ::[[ภาพ:Image029.png]] (เขียนแบบ integer programming) |
− | ::[[ | + | ::[[ภาพ:Image030.png]] (เขียนแบบ linear programming) |
---- | ---- | ||
− | |||
== Duality == | == Duality == | ||
− | ;<u>''' | + | ;<u>'''ตัวอย่าง'''</u>: |
:minimize: 7x<sub>1</sub> + x<sub>2</sub> + 5x<sub>3</sub> | :minimize: 7x<sub>1</sub> + x<sub>2</sub> + 5x<sub>3</sub> | ||
:subject to: | :subject to: | ||
− | ::x<sub>1</sub> | + | ::x<sub>1</sub> – x<sub>2</sub> + 3x<sub>3</sub> ≥ 10 …(1) |
− | ::5x<sub>1</sub> + 2x<sub>2</sub> | + | ::5x<sub>1</sub> + 2x<sub>2</sub> – x<sub>3</sub> ≥ 6 …(2) |
− | ::x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub> | + | ::x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub> ≥ 0 |
− | : | + | :ค่า objective ของคำตอบที่ดีที่สุด = Z<sup>*</sup> |
− | : | + | :สมมติ [[ภาพ:Image031.png]] แล้วบอกได้ว่า Z* ≤ 30 |
− | :(1)x 2 + (2); 7x<sub>1</sub> + 5x<sub>3</sub> | + | :(1)x 2 + (2); 7x<sub>1</sub> + 5x<sub>3</sub> ≥ 26<br> |
− | : | + | :สังเกตว่าคล้ายๆ minimize เพราะฉะนั้นบอกได้ว่า lower bound เป็น 26 |
− | :(1)x y<sub>1</sub> | + | :(1)x y<sub>1</sub> → y<sub>1</sub>x<sub>1</sub> – y<sub>1</sub>x<sub>2</sub> + 3y<sub>1</sub>x<sub>3</sub> ≥ 10y<sub>1</sub><br> |
− | :(2)x y<sub>2</sub> | + | :(2)x y<sub>2</sub> → 5y<sub>2</sub>x<sub>1</sub> + 2y<sub>2</sub>x<sub>2</sub> – y<sub>2</sub>x<sub>3</sub> ≥ 6y<sub>2</sub> |
− | : | + | :ต้องการ สัมประสิทธิ์ของ x<sub>1</sub> = 7, สัมประสิทธิ์ของ x<sub>2</sub> = 1, สัมประสิทธิ์ของ x<sub>3</sub> = 5<br> |
− | : | + | :เพราะฉะนั้นจะสร้าง linear program ได้อีกอันว่า |
:maximize: 10y<sub>1</sub> + 6y<sub>2</sub> | :maximize: 10y<sub>1</sub> + 6y<sub>2</sub> | ||
:subject to: | :subject to: | ||
− | ::y<sub>1</sub> + 5y<sub>2</sub> | + | ::y<sub>1</sub> + 5y<sub>2</sub> ≤ 7 …(3) |
− | ::-y<sub>1</sub> + 2y<sub>2</sub> | + | ::-y<sub>1</sub> + 2y<sub>2</sub> ≤ 1 …(4) |
− | ::3y<sub>1</sub> - y<sub>2</sub> | + | ::3y<sub>1</sub> - y<sub>2</sub> ≤ 5 …(5) |
− | ::y<sub>1</sub>, y<sub>2</sub> | + | ::y<sub>1</sub>, y<sub>2</sub> ≥ 0 |
− | : | + | :ค่า objective ของคำตอบที่ดีที่สุด = A<sup>*</sup> |
− | : | + | :เพราะฉะนั้น A<sup>*</sup> = Z<sup>*</sup> จะเรียกว่า strong duality |
− | : | + | :โดย |
− | :: | + | ::สมการที่ (1), (2) จะเรียกว่า ''Primal'' |
− | :: | + | ::สมการที่ (3), (4), (5) จะเรียกว่า ''Dual'' |
---- | ---- | ||
=== <u>Primal Linear Programming</u> === | === <u>Primal Linear Programming</u> === | ||
:minimize: | :minimize: | ||
− | ::[[ | + | ::[[ภาพ:Image015.png]] |
:subject to: | :subject to: | ||
− | ::[[ | + | ::[[ภาพ:Image034.png]] ; i = 1,…,m |
− | ::x<sub>i</sub> | + | ::x<sub>i</sub> ≥ 0 ; j = 1,…,n |
---- | ---- | ||
แถว 216: | แถว 214: | ||
=== <u>Dual Linear Programming</u> === | === <u>Dual Linear Programming</u> === | ||
:maximize: | :maximize: | ||
− | ::[[ | + | ::[[ภาพ:Image035.png]] |
:subject to: | :subject to: | ||
− | ::[[ | + | ::[[ภาพ:Image036.png]] ; j = 1,…,n |
− | ::y<sub>i</sub> | + | ::y<sub>i</sub> ≥ 0 ; i = 1,…,m |
---- | ---- | ||
=== <u>Max flow & Min Cut</u> === | === <u>Max flow & Min Cut</u> === | ||
− | + | ให้ P แทนเซตของ simple path ทั้งหมดจาก s ไป t สำหรับ path p∈P มี | |
− | + | ตัวแปร f<sub>p</sub> แทนปริมาณ flow ใน path นั้น | |
:''primal'' | :''primal'' | ||
− | ::maximize: [[ | + | ::maximize: [[ภาพ:Image038.png]] |
::subject to: | ::subject to: | ||
− | :::[[ | + | :::[[ภาพ:Image0392.png]] [[ภาพ:Image040.png]] |
− | :::[[ | + | :::[[ภาพ:Image041.png]] f<sub>p</sub> ≥ 0 |
:''dual'' | :''dual'' | ||
− | :: | + | ::กำหนดตัวแปร d<sub>e</sub> สำหรับ edge e |
− | ::minimize: [[ | + | ::minimize: [[ภาพ:Image042.png]] |
::subject to: | ::subject to: | ||
− | :::[[ | + | :::[[ภาพ:Image043.png]] [[ภาพ:Image044.png]] |
− | :::[[ | + | :::[[ภาพ:Image045.png]] d<sub>e</sub> ≥ 0 |
− | : | + | :ดังนั้นสรุปได้ว่า ''Min Cut'' เป็น '''Dual''' ของ ''Max Flow'' |
− | ;<u>''' | + | ;<u>'''ตัวอย่าง'''</u>: |
:''primal'' | :''primal'' | ||
::minimize: 2x<sub>1</sub> + 5x<sub>2</sub> | ::minimize: 2x<sub>1</sub> + 5x<sub>2</sub> | ||
::subject to: | ::subject to: | ||
− | :::x<sub>1</sub> + x<sub>2</sub> | + | :::x<sub>1</sub> + x<sub>2</sub> ≥ 5 …y1 |
− | :::-x<sub>1</sub> + x<sub>2</sub> | + | :::-x<sub>1</sub> + x<sub>2</sub> ≥ -1 …y2 |
− | :::x<sub>1</sub> + 2x<sub>2</sub> | + | :::x<sub>1</sub> + 2x<sub>2</sub> ≥ 4 …y3 |
− | :::x<sub>1</sub>, x<sub>2</sub> | + | :::x<sub>1</sub>, x<sub>2</sub> ≥ 0 |
− | : | + | :แปลงเป็น dual ได้ว่า |
:''dual'' | :''dual'' | ||
− | ::maximize: 5y<sub>1</sub> | + | ::maximize: 5y<sub>1</sub> – y<sub>2</sub> + 4y<sub>3</sub> |
::subject to: | ::subject to: | ||
− | :::y<sub>1</sub> | + | :::y<sub>1</sub> – y<sub>2</sub> + y<sub>3</sub> ≤ 2 |
− | :::y<sub>1</sub> + y<sub>2</sub> + 2y<sub>3</sub> | + | :::y<sub>1</sub> + y<sub>2</sub> + 2y<sub>3</sub> ≤ 5 |
− | :::y<sub>1</sub>, y<sub>2</sub>, y<sub>3</sub> | + | :::y<sub>1</sub>, y<sub>2</sub>, y<sub>3</sub> ≥ 0 |
รุ่นแก้ไขปัจจุบันเมื่อ 11:10, 23 กันยายน 2553
จดบันทึกคำบรรยายโดย:
- นายณัฐพล หล่อศิริ 50653781 และ
- นายวรวุทธ นัมคนิสรณ์ 50653898
- นายณัฐพล หล่อศิริ 50653781 และ
Linear Programming
Note Problem ต่างจาก Instant ของ Problem กล่าวคือ Problem จะเท่ากับ เซตของ Instant ของ Problem
Note ตัวแปรทั้งหมดเป็นตัวแปรแบบเวกเตอร์ เพราะฉะนั้นจะขอละ ไม่ใส่เครื่องหมายเวกเตอร์
Optimization Problem
Instant ของปัญหา Optimization Problem จะประกอบด้วย
- set F (เซตของคำตอบที่เป็นไปได้)
- function cost F→R (จำนวนจริง)
ต้องการหา f∈F และ cost (f) ≤ cost (y) , สำหรับทุกๆ y∈F
Linear Programming Problem
Instant ของ linear programming คือ จำนวนเต็มบวก n, m เวกเตอร์ c ∈ Rn, b ∈ Rm และเมตริกซ์ A ของจำนวนจริงขนาด m x n จะได้ว่า
- F = { x ∈ Rn :Ax = b , x ≥0 }
- Cost : x → c'x
- ตัวอย่าง
กำหนดให้ n = 3, m = 1
เขียนเป็นเมตริกซ์ ได้เป็น
- ตัวอย่าง
- การเขียนในรูปแบบ สมการ
- - การระบุเซต F (เป็น constraint ของปัญหา)
- + = 5
- + – = 1
- - + = 8
- – = 7
- ≥ 0 ทุกๆ 1 ≤ i ≤5
- - การระบุ c (เป็น objective ของปัญหา)
- minimize: + – + –
- การเขียนในรูปแบบ เมตริกซ์
Form ของ Linear Programming
Standard form
- เมตริกซ์
- minimize: cx
- subject to: Ax = b ; x ≥ 0
Canonical form
- เมตริกซ์
- minimize: cx
- subject to: Ax ≥ b ; x ≥ 0
- ตัวอย่าง
- เตรียมสอบมีเวลาอ่านหนังสือ 12 ชม. มี 3 วิชา Architect, Algo, Soft Com. อ่านอย่างน้อยวิชาละ 1 ชม., อ่าน architect & algo รวมกันไม่น้อยกว่า 5 ชม., อ่าน Soft Com. ไม่เกิน 8 ชม.
ถ้าให้
- = เวลาอ่าน Architect
- = เวลาอ่าน Algo
- = เวลาอ่าน Soft Com.
ให้ความเหนื่อยในการอ่านเป็น + 5 + 2
เป้าหมายคือ ต้องการอ่านหนังสือให้ได้ตามเงื่อนไข + ความเหนื่อยน้อยสุด
วิธีทำ
- minimize: + 5 + 2
- subject to:
- + + ≤ 12
- ≥ 1
- ≥ 1
- ≥ 1
- + ≥ 5
- ≤ 8
- , , ≥ 0
แปลงให้อยู่ในรูป canonical form การทำให้สมการที่เป็น ≤ ให้เป็น ≥ ให้หมดจะได้ว่า
- minimize: + 5 + 2
- subject to:
- จาก + + ≤ 12 เอา -1 คูณตลอดจะได้
- + + ≥ -12
- จาก ≤ 8 เอา -1 คูณตลอดจะได้
- ≥ -8
- ≥ 1
- ≥ 1
- ≥ 1
- + ≥ 5
- , , ≥ 0
เขียนเป็น matrix ได้
- ตัวอย่าง
- บริษัทเช่าเต๊นท์มหาสนุกจำกัด รับจัดหาเต็นท์ในเดือนๆหนึ่งมีเต็นท์ใช้ได้ไม่น้อยกว่าจำนวนที่ใช้ โดยมีเงื่อนไขว่าเต็นท์ซื้อขายได้ เก็บเต็นท์ในโกดังคิดค่าเช่าโกดัง จะซื้อขายหรือเก็บเต็นท์ยังไงให้ได้กำไรมากที่สุด
- กำหนด
- ; i = 1, … ,12 เป็นจำนวนเต๊นท์ที่ต้องการในเดือนที่ i
- ; เป็นจำนวนเต๊นท์ที่เหลือจากปีที่แล้ว
- ; ราคาซื้อเต๊นท์ / เต๊นท์
- ; ราคาขายเต๊นท์ / เต๊นท์
- ; ราคาเก็บเต๊นท์ที่ไม่ได้ใช้ / เดือน
- ตัวแปร
- , … , จำนวนเต๊นท์ที่เราครอบครองในเดือนที่ i
- , … , จำนวนเต๊นท์ที่ซื้อในเดือนที่ i
- , … , จำนวนเต๊นท์ที่ขายในเดือนที่ i
- , … , จำนวนเต๊นท์ในโกดังในเดือนที่ i
- จะได้ว่า
Note maximize เป็นส่วนกลับของ minimize สามารถแปลงกลับไปมาได้โดยเอา -1 คูณเงื่อนไข
Shortest path in Linear Programming
- ตัวอย่าง
สมมติ path ดังรูป d1 = 0, ตัวแปร d1, … , d5 แทนระยะสั้นสุดจาก node 1 ไปยัง node ต่างๆ
ให้กราฟแบบมีทิศทาง G = (V,E) ความยาว l บนเส้นเชื่อม, จุดเริ่มต้น s∈V
ให้ dv แทนระยะสั้นสุดจาก s ไป v สำหรับ v∈V
จะได้ว่า
Integer Programming
- คือการบอกว่า constraint (subject to) มีการกำหนดให้เป็นจำนวนเต็มค่าใดค่าหนึ่ง
Assignment Problem
- ตัวอย่าง
- มีคน n คน มีงาน n งาน
- คนที่ i ทำงาน j ใช้เวลา w_ij หน่วย
วิธีทำ
Duality
- ตัวอย่าง
- minimize: 7x1 + x2 + 5x3
- subject to:
- x1 – x2 + 3x3 ≥ 10 …(1)
- 5x1 + 2x2 – x3 ≥ 6 …(2)
- x1, x2, x3 ≥ 0
- ค่า objective ของคำตอบที่ดีที่สุด = Z*
- สมมติ แล้วบอกได้ว่า Z* ≤ 30
- (1)x 2 + (2); 7x1 + 5x3 ≥ 26
- สังเกตว่าคล้ายๆ minimize เพราะฉะนั้นบอกได้ว่า lower bound เป็น 26
- (1)x y1 → y1x1 – y1x2 + 3y1x3 ≥ 10y1
- (2)x y2 → 5y2x1 + 2y2x2 – y2x3 ≥ 6y2
- ต้องการ สัมประสิทธิ์ของ x1 = 7, สัมประสิทธิ์ของ x2 = 1, สัมประสิทธิ์ของ x3 = 5
- เพราะฉะนั้นจะสร้าง linear program ได้อีกอันว่า
- maximize: 10y1 + 6y2
- subject to:
- y1 + 5y2 ≤ 7 …(3)
- -y1 + 2y2 ≤ 1 …(4)
- 3y1 - y2 ≤ 5 …(5)
- y1, y2 ≥ 0
- ค่า objective ของคำตอบที่ดีที่สุด = A*
- เพราะฉะนั้น A* = Z* จะเรียกว่า strong duality
- โดย
- สมการที่ (1), (2) จะเรียกว่า Primal
- สมการที่ (3), (4), (5) จะเรียกว่า Dual
Primal Linear Programming
Dual Linear Programming
Max flow & Min Cut
ให้ P แทนเซตของ simple path ทั้งหมดจาก s ไป t สำหรับ path p∈P มี ตัวแปร fp แทนปริมาณ flow ใน path นั้น
- ดังนั้นสรุปได้ว่า Min Cut เป็น Dual ของ Max Flow
- ตัวอย่าง
- primal
- minimize: 2x1 + 5x2
- subject to:
- x1 + x2 ≥ 5 …y1
- -x1 + x2 ≥ -1 …y2
- x1 + 2x2 ≥ 4 …y3
- x1, x2 ≥ 0
- แปลงเป็น dual ได้ว่า
- dual
- maximize: 5y1 – y2 + 4y3
- subject to:
- y1 – y2 + y3 ≤ 2
- y1 + y2 + 2y3 ≤ 5
- y1, y2, y3 ≥ 0