Linear Optimization กับตัวอย่างการจัดการปัญหาในช่วง Covid-19 ด้วย Excel และ Python

Siravit Trongtranon
8 min readAug 17, 2021

--

Photo by Erik Mclean on Unsplash

​​​ ​ ​​​ ​ ​​​ ​ ​​​ ​ ​​คุณเคยมีความรู้สึกแบบนี้ไหมครับ พยายามทุกวิถีทางในการเลือกทางที่ดีที่สุด คุ้มค่าที่สุดให้กับตัวเองตลอดเวลา แต่ก็ยังคงไม่แน่ใจว่าทางที่เลือกนั้น ดีที่สุดแล้วหรือยัง…

  • คุณอาจจะเป็นนักช้อปมือทองคำ ที่ในช่วงวันเซลล์ของเดือน คุณพยายามซื้อของต่างๆให้คุ้มค่าที่สุด ภายใต้งบที่ตั้งไว้ และคูปองส่วนลดอันน้อยนิด
  • คุณอาจเป็นนักการตลาดหรือนักธุรกิจที่กำลังตัดสินใจว่าจะเลือกทำโปรโมชั่น เลือกลงทุน เลือกสินค้ามาขาย หรือแม้กระทั่งตั้งราคาสินค้าเท่าไรดี เพื่อให้ได้กำไรสูงสุด
  • คุณอาจจะเป็นนักกีฬาหรือนักโภชนาการ ที่กำลังสรรหาอาหารคลีนเพื่อให้กินในแต่ละมื้อโดยใช้เงินให้ประหยัดที่สุดและยังได้สารอาหารครบถ้วนในแต่ละวัน
  • หรือคุณอาจจะเป็น Travel blogger ที่อยากขับรถท่องเที่ยวเก็บรูปภาพต่างๆในสถานที่ที่ลิสไว้ให้ครบ โดยใช้ระยะทางสั้นที่สุด หรือไม่ก็อยากท่องเที่ยวในสถานที่ต่างๆให้ได้มากที่สุด ภายในช่วงเวลาที่จำกัด

​​​ ​ ​​​ ​ ​​​ ​ ​​​ ​ ​​ไม่ว่าคุณจะเป็นคนแบบไหน ผมเชื่อว่าคุณคงเคยพบเคยเหตุการณ์ที่ต้องตัดสินใจในสถานการณ์หนึ่งเพื่อให้เกิดประโยชน์สูงสุดมาอย่างแน่นอน ซึ่งปัญหาเหล่านี้เป็นตัวอย่างคร่าวๆที่เราสามารถใช้โมเดลคณิตศาตร์ในการช่วยแก้ปัญหาและตัดสินใจได้ โดยมีชื่อเรียกแบบเป็นทางก๊ารทางการว่า “Optimization model” 😀

ในบทความนี้ผมจะแบ่งออกเป็น 2 ตอนโดยใน Chapter ที่ 1 จะค่อยๆอธิบายคอนเซปต์คร่าวๆสำหรับ Linear Programming ซึ่งเป็น Optimization model แบบพื้นฐานที่สุด

หลังจากนั้น ผมจะพาทุกคน ท่องโลกจักรวาลคู่ขนาน 🚀 ไปใน Chapter ที่ 2 เพื่อดูว่า เราสามารถประยุกต์ทฤษฎีนี้เพื่อช่วยในการตัดสินใจจัดตั้งโรงพยาบาลสนามและการจัดหาวัคซีนเพื่อให้เกิดประโยชน์สูงสุดอย่างไรได้บ้าง 🏥

พร้อมกับวิธีการคิดด้วย Excel และ Python

ถ้าใครพอรู้พื้นฐานเบื้องต้นสามารถข้ามไปอ่าน 2nd Chapter ได้ ส่วนถ้าใครยังมือใหม่ สามารถค่อยๆอ่านตั้งแต่บทแรกได้เล้ยยยยย 😊

Here’s the time machine to each section!

1st Chapter — Little things you need to know

2nd Chapter — Bring your laptop and save Wakanda!

1st Chapter — Little things you need to know

Part I: Optimization in brief!

ถ้าพูดง่ายๆ Optimization คือการหาค่าที่ดีที่สุดหรือเหมาะสมที่สุดภายใต้ข้อจำกัดต่างๆในสถานการณ์นั้นๆ ซึ่ง

  • อยู่ในศาสตร์วิชาสาขาหนึ่งที่เรียกว่า Operation Research หรือ การวิจัยเชิงปฏิบัติการ ที่เด็กวิศวะ IE เรียกว่า OR (Oมายก้อดดด-Rไรว้าเนี่ยยยย!) 😳
  • เดิมทีมี goal เพื่อให้วิศวกรมีการตัดสินใจเพื่อใช้ทรัพยากรต่างๆในโรงงานเพื่อให้เกิดประโยชน์สูงสุด ไม่ว่าจะเป็นเรื่อง เงิน เวลา แรงงาน เครื่องจักร วัตถุดิบ หรือไดๆก็ตาม แต่ก็ยังสามารถ apply ไอเดียการแก้ปัญหาไปใช้ในทุกๆเรื่องในชีวิตประจำวันได้อีกมากมาย
  • เป็นประเภทหนึ่งของการทำ Data Analytics ในส่วนที่เรียกว่า Prescriptive Analytics
https://www.tbmcg.com/resources/blog/technology-prescriptive-analytics/
  • เป็น Key ที่สำคัญของ Machine Learning ในการหาค่าพารามิเตอร์ที่ดีที่สุดของโมเดล (Fine-tuning)
  • และแตกกิ่งก้านใบออกเป็นหลายๆรูปแบบปัญหา โดยรูปแบบการแก้ปัญหาที่ง่ายที่สุดและเราจะมาเล่าให้ฟังในวันนี้มีชื่อว่า Linear Programming หรือ Linear Optimization นั่นเองงง!!!

Part II: Basic Concepts in Linear Programming

Q: แล้ว Linear Programming หรือเจ้า Linear Optimization นี้มันคืออะไรล่ะ ?

A: จริงๆแล้วมันคือแปลงปัญหาที่เรามี ให้เป็นสมการเส้นตรง(หรืออสมการก็ได้) และตัวแปรทางคณิตศาสตร์ แล้ว solve ปัญหาเพื่อหาค่าที่ดีที่สุด(มากที่สุดหรือน้อยที่สุด)ของฟังก์ชันเป้าหมายของเรา

“Linear programming is a mathematical technique that determines the best way to use available resources. Managers use the process to help make decisions about the most efficient use of limited resources — like money, time, materials, and machinery.” (https://www.mindtools.com/pages/article/newTED_82.htm)

“Linear programming is a method to achieve the best outcome in a mathematical model whose requirements are represented by linear relationships.” (https://en.wikipedia.org/wiki/Linear_programming)

LP Model Formulation

1. Decision Variables (DV): ตัวแปรตัดสินใจ

  • สมมติตัวแปรที่ต้องการหาผลลัพธ์มาเป็นจำนวนจริงบวก

2. Objective function (Obj): สมการหรือฟังก์ชันเป้าหมาย (มีเพียงสมการเดียว)

  • สร้างฟังก์ชันที่ต้องการหาค่าสูงสุด (Maximization) หรือต่ำสุด (Minimization) จากตัวแปรตัดสินใจ
  • เป็นฟังก์ชันเชิงเส้นตรง (Linear function)

3. Constraints: ข้อจำกัดของปัญหา

  • เป็นสมการหรืออสมการเชิงเส้นตรง (Linear equations/ Linear equalities) ซึ่งมีหลายสมการได้ !

Solving Method

1. Plot กราฟ : เหมาะสำหรับปัญหาที่มี 2 ตัวแปร

2. วิธี Simplex Method: เป็นวิธีที่นิยมสุด

(สามารถอ่านเพิ่มได้ที่ https://www.youtube.com/watch?v=Jr4pCnSVq-A)

3. การใช้โปรแกรมต่างๆในการ solve

Types of Result (Objective function และ Decision Variables)

ขอแบ่งออกเป็น 3 แบบ หลักๆ

1. Infeasible Solution: ไม่มีผลลัพธ์ที่เป็นไปได้

2. Unbounded Solution: ผลลัพธ์ไม่มีขอบเขต

3. Optimal Solution: ผลลัพธที่ดีที่สุด (สูงสุดหรือต่ำสุด) ซึ่งอาจมีเพียงคำตอบเดียว หรือมีหลายคำตอบแต่ให้ค่าเป้าหมายเท่ากัน

Note:

ใน Linear Programming หากเรากำหนดเงื่อนไขว่าให้คำตอบของ Decision Variable ของเราเป็นจำนวนเต็มบวก จะเรียกว่าเป็นโจทย์แบบ Integer Programming

(หากเป็นบางตัวก็จะเรียก Mixed Integer Linear Programming หรือถ้า Decision Variable มีค่าได้แค่ 0 หรือ 1 ก็จะเรียกว่า Binary Integer Programming)

ส่วนถ้าสมการใน model ไม่เป็นเส้นตรง ก็จะจัดอยู่ในกลุ่ม Nonlinear Programming นั่นเอง

ถ้ายังงงไม่เป็นไร เราไปดูตัวอย่างกัน

Example

นาย ก กำลังตัดสินใจว่าจะทำคุกกี้ขาย ระหว่างรส Dark chocolate brownie กับรส Mandarin choc chip ซึ่งเขาไม่แน่ใจว่าควรจะทำขายอย่างละกี่ชิ้นดีจะได้กำไรสูงสุด? ซึ่งรสแรกทุน 2 บาท กำไร 6 บาทต่อชิ้น ส่วนรสที่สองแพงหน่อยทุน 3 บาทแต่ได้กำไร 8 บาท (สมมติว่าอร่อยทั้งคู่ ยังไงก็ขายหมด 555)

✍🏻 Steps in LP model ✍🏻

Step 1: define Decision Variables

ให้ จำนวนที่จะทำ Dark Chocolate Brownie เป็น x ชิ้น และจำนวนของ Choc Chip Mandarin เป็น y ชิ้นแล้วกัน step นี้เป็นแค่การ define Decision Variable

Step 2: set Objective function

ต่อมา set Objective function โดยปกติแล้วขายของเราก็ต้องการกำไรสูงสุดอยู่แล้วใช่ม้าาา ดังนั้น

Max Z = 6x + 8y — — — (1)

Step 3: add Constraints

หลังจากนั้นก็ระบุเงื่อนไขหรือ Constraints ต่างๆ

บังเอิ๊ญว่าเพื่อน Pre-order มาบ้างแล้ว เป็นรสแรก 5 ชิ้น ส่วนอีกรส 10 ชิ้น ซึ่งพอเปิดกระเป๋าสตางค์ กลับพบว่ามีเงินอยู่แค่ 200 บาท ก็กลายเป็นอีกเงื่อนไขหนึ่ง

x >= 5 — — — (2) จำนวนที่จะทำ Dark Chocolate Brownie ต้องมีอย่างน้อย 5 ชิ้น

y >=10 — — — (3) จำนวนที่จะทำ Choc Chip Mandarin ต้องมีอย่างน้อย 10 ชิ้น

2x+3y <= 200 — — — (4) ต้นทุนรวมต้องไม่เกิน 200 บาท

วิธีแก้แบบง่ายๆเลยก็คือการวาดกราฟ และแรเงาพื้นที่ตามเครื่องหมายใน constraints ซึ่งเหมาะสำหรับปัญหาที่มี 2 ตัวแปร

สุดท้ายก็มาดูจุดตัดต่างๆว่าจุดไหนที่ x และ y ทำให้ค่า Z หรือสมการกำไรเราสูงที่สุด

เมื่อแทนค่า x และ y ในสมการที่ (1) พบว่าที่

(x, y) = (5, 10) → Z = 110

(5, 63.33) → Z = 536.64

(85, 10) → Z = 590 → ดังนั้นเลือกทำ Dark Chocolate Brownie มาสัก 85 ชิ้น และ Choc Chip Mandarin มา 10 ชิ้นก็พอ จะได้กำไรสูงสุดที่ 590 บาท 😋

แต่การใช้กราฟในการคำนวณเนี่ยมัน works กับปัญหาที่มี 2 ตัวแปร ถ้ามากกว่านั้นจะต้องมีหลายแกน ทำให้หาคำตอบได้ยากขึ้น ดังนั้นเราจะลองใช้โปรแกรมอื่นช่วยในการ solve ปัญหากัน ลองไปดูที่ Chapter ถัดไปกันเล้ยยย…

2nd Chapter — Bring your laptop and save Wakanda!

Photo by Melyna Valle on Unsplash

ในส่วนนี้จะเป็นการอธิบายตัวอย่างสมมติของการใช้ Linear Optimization โดยใช้ โปรแกรม Spreadsheet อย่าง MS.Excel และการใช้ library Pulp บน Python

Part III: Crisis Management: Field Hospital Optimization model using Excel Solver

สมมติว่าคุณเป็นที่ปรึกษาในการวิเคราะห์ข้อมูลให้กับ Black Panther แห่งประเทศสมมติ Wakanda ที่แม้จะเป็นหนึ่งในประเทศที่มีวิทยาการล้ำหน้าที่สุดในโลก แต่กลับมีความยากจนอย่างมาก (Wikipedia)

ในปี 2019 เกิดวิกฤตโรคระบาด Covid-19 อย่างหนัก จำนวนผู้ป่วยเพิ่มขึ้นอย่างรวดเร็ว ทำให้เตียงในโรงพยาบาลต่างๆที่มีจำกัด มีแนวโน้มว่าจะเต็มในไม่ช้า!!!😱 โดย ณ ตอนนี้ มีอยู่ 5 แห่ง รองรับผู้ติดเชื้อได้ประมาณนี้

สถานีโทรทัศน์ได้เผยแพร่ผลการคาดการณ์ว่าในสัปดาห์หน้านั้น จำนวนผู้ติดเชื้อในแต่ละเมืองจะมี total cases เพิ่มขึ้นเป็นจำนวนตามรายงานด้านล่าง

ผู้คนที่ติดเชื้อเริ่มต้องออกเดินทางไปยังเมืองอื่นเพื่อหาโรงพยาบาลในพื้นที่ห่างไกล ตอนนี้มีความจำเป็นต้องจัดหาโรงพยาบาลสนาม (Field Hospital/ Hospitel) แบบชั่วคราวอย่างเร่งด่วน!

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

พร้อมกับข้อมูลระยะห่างระว่างแต่ละเมืองกับแต่ละสถานที่

คุณในฐานะที่ปรึกษาจำเป็นที่จะต้องวางแผนสำหรับสัปดาห์หน้าที่จะมาถึง ว่าจะเลือกสร้างโรงพยาบาลสนามที่ไดบ้างใน list ที่มี

เพื่อให้ระยะทางรวมที่ผู้ติดเชื้อแต่ละเมืองต้องไปโรงพยาบาลต่างๆมีค่าน้อยที่สุดเท่าที่จะเป็นไปได้!

แต่เนื่องจากงบและบุคลากรที่มีจำกัดทำให้เลือกสร้างได้มากที่สุดแค่ 2 ที่เท่านั้น !?!

ปัญหานี้มี concept คล้ายกับปัญหาประเภทการขนส่งสินค้า (แต่ผู้เขียนได้ idea มาจาก paper ชิ้นนี้ Facility Location Optimization Model for COVID-19 Resources (Technical Report) | OSTI.GOV )

เรามาเริ่มกันที่การแปลงปัญหาที่มีให้เป็น LP model กัน

✍🏻 LP model:

Step 1: Decision Variable

Step 2: Objective Function

  • เราต้องการ Minimize ระยะทางรวมของทุกๆการเคลื่อนย้ายจาก city i ไปยัง location j โดยให้เป็น function Z

Step 3: Constraints

  • ผลรวมของจำนวนคนที่จะเคลื่อนย้ายจากในแต่ละ city จะเท่ากับจำนวนคนติดเชื้อที่ Forecast ได้
  • จำนวนคนที่จะจัดสรรให้มาลงแต่ละโรงพยาบาลที่มี จะต้องน้อยกว่า max capacity ที่แต่ละโรงพยาบาลสามารถรองรับได้
  • จำนวนคนที่จะจัดสรรให้มาลงในแต่ละโรงพยาบาลสนามที่ได้ plan ว่าจะสร้างขึ้น จะต้องน้อยกว่า max capacity ที่แต่ละโรงพยาบาลสนามสามารถรองรับได้
  • โดยมีตัวแปร yi ผูกอยู่ หากเป็น 1 ก็จะเลือก location นั้น หากเป็น 0 ก็ไม่เลือก
  • โดยผลรวมของ yi เป็น 2 หมายถึง เลือกได้มากที่สุด 2 แห่ง

Let’s do it in Excel !!!

เรามาเริ่มด้วยการจัดวาง layout การคำนวณเพื่อรองรับการเขียนสูตรใน excel และให้ง่ายต่อการทำความเข้าใจ

  • สีเหลืองคือ decision variable ส่วนสีแดงคือ objective function
  • เราทำการ sum() แต่ละ row และ column ใน cell สีเหลืองสำหรับเป็น constraint
  • ผูกสูตรตามสมการ LP model ด้านบน (อาจจะต้องใช้เวลาทำความเข้าใจสักระยะนะครับ)
ตัวเลขในวงกลมจะใช้อ้างอิงต่อในรูป Solver Parameter***

formula ของ cell จะประมาณนี้ (โดย cell สีน้ำเงินจะผูกกับค่า y ไว้ด้วย)

ต่อมาเป็นขั้นตอนการใช้ Solver

ไปที่ File > Option > Add-ins เลือก Solver Add-in

Solver Button จะอยู่ตรงนี้

หลังจากนั้นก็สามารถกด Add แล้วใส่ค่าไปตามสมการที่เราเขียนไว้ก่อนหน้านี้ได้เลย (อิงตัวเลขจากในรูป Excel)

รูป Solver Parameter***

หลังกด solve ถ้าทุกอย่างถูกต้องจะขึ้นหน้าต่างแบบนี้ (Congratulations!!)

และนี่คือผลลัพธ์ที่เราได้ในช่องสีเหลือง (Decision Variables) และสีแดง (Minimized Objective Function)

Interpretation of Results 🤓

สรุปได้ว่า จากข้อจำกัดทั้งหมด เราควรจะสร้างโรงพยาบาลสนามแห่งใหม่ใน Location ที่ 7 และ 8 เพื่อให้ได้ระยะทางรวมทั้งระบบมีค่าน้อยที่สุด โดยมีระยะทางรวม 52600 km.

โดยในสัปดาห์หน้าผู้ป่วยจาก City 1 ที่จะมีทั้งหมด 2000 คน จะต้องกระจายไปที่ Location 1 จำนวน 700 คน Location 2 จำนวน 200 และ Location 7 และ 8 จำนวน 300 และ 800 คนตามลำดับ ส่วน City 2, 3, 4 ก็ตีความแบบเดียวกันน ✔️

ปัญหานี้เป็นแบบ Minimize ระยะทางรวมที่คนในเมืองต่างๆต้องเดินทางไปสถานพยาบาล ซึ่งจริงๆสามารถแปลงเป็นโจทย์เป็นแนว Cost Minimization แทนได้ โดยอาจจะเพิ่ม cost per km และ/หรือเพิ่มข้อมูลค่าใช้จ่ายในการสร้างโรงพยาบาลสนามแต่ละแห่งเพิ่มขึ้น

Part IV: Herd Immunity Policy: Vaccine Purchasing Optimization model using Python (Pulp library)

Photo by Towfiqu barbhuiya on Unsplash

หนึ่งสัปดาห์ผ่านไป คุณเริ่มที่จะแก้ปัญหาเตียงไม่พอชั่วคราวได้แล้ว แต่นั่นเป็นเพียงกระดุมเม็ดแรกเท่านั้น!!

คุณพบว่า Root cause ที่แท้จริง คือเรื่อง วัคซีน!! 💉 ที่จะช่วยสร้างภูมิคุ้มกันหมู่ (Herd immunity) และสามารถแก้ปัญหาเหล่านี้ได้อย่างยั่งยืน

คุณจำเป็นที่จะต้องแนะนำการจัดหาวัคซีนมาให้เพียงพอต่อประชากรทั้ง 100 ล้านคน คนละ 2 โดส

โดยในตลาดตอนนี้มีวัคซีนต่างชนิดที่มีประสิทธิภาพและราคาที่ไม่เท่ากัน

ผลวิจัยเผยว่าหากเราอยากจะสร้างภูมิคุ้มกันหมู่ได้ จำเป็นต้องฉีดวัคซีนให้ครอบคลุมร้อยละ 70 ประชากร โดยให้มีประสิทธิภาพการป้องกันการติดเชื้อโดยเฉลี่ยอย่างน้อย 80 เปอร์เซนต์

คุณจะแนะนำในการจัดซื้อวัคซีนชนิดไดบ้าง แล้วจะสั่งกี่โดสดีล่ะ เพื่อให้ประหยัดงบที่มีมากที่สุด

✍🏻 LP model:

Step 1: Decision Variable

Step 2: Objective Function

  • เราต้องการ minimize total cost จากการสั่งซื้อวัคซีนทุกชนิดทุกโดสรวมกัน

Step 3: Constraints

  • Contraint แรก คือเราต้องสั่งมาอย่างน้อยให้พอกับ 70% ของประชากรทั้งหมด โดยใช้คนละ 2 เข็ม
First Constraint
  • Constraint ที่สองคือเราอยากให้วัคซีนที่สั่งมาหลายๆชนิด มีประสิทธิภาพเฉลี่ยกันเกิน 80% ดูผิวเผินอสมการนี้ไม่เป็น linear แต่พอลองย้ายไปคูณแล้วย้ายข้างกลับมาลบก็พบว่า โอเครเป็นสมการรูปแบบเชิงเส้น สามารถแก้ได้
  • Note: ใน Pulp สามารถ solve ได้แต่ linear programming เราเลยจะใช้สมการสุดท้ายในการเขียน
Second Constraint

Let’s code in Python !!!

โดยปกติเวลาเขียน Optimization ใน Python จะมี 2 ส่วนที่ต้องคำนึงถึง คือ Interface และตัว Solver ซึ่งต้องไป install มาเพื่อเรียกใช้

Interface: ส่วนนี้เอาไว้เขียน LP model

  • SciPy, Pulp, Pyomo, OR-tools, Gurobi, CPLEX …

Solver: ส่วนนี้สำหรับการคำนวณ

  • CBC, CPLEX, GLPK, Gurobi …

About Pulp

  • Pulp เป็น library ที่เราสามารถ install มาใช้ใน Python ได้ เพื่อการแก้ปัญหา Optimization โดยเฉพาะ Linear Programming
  • เป็นที่นิยม มีมานานแล้ว สามารถหาวิธีแก้ปัญหาต่างๆในอินเตอร์เน็ตได้ไม่ยาก
  • สามารถเลือกใช้ solver สำหรับ Linear Programming ได้หลายตัว ไม่ว่าจะเป็น CBC, GLPK, CPLEX, Gurobi…
  • ที่สำคัญ เป็น open source software ทำให้มัน free!

เริ่มมาเราก็ต้อง install มันก่อน แล้ว import function ที่จะใช้ (หากปัญหาเป็นการ Minimize ให้ import LpMinimize หากเป็น Maximize ก็ import LpMaximize มาด้วย)

!pip install -U "pulp==2.5"from pulp import LpMinimize, LpProblem, LpStatus, lpSum, LpVariable

กำหนดปัญหาเป็นแบบ Minimization และกำหนด Decision Variables ที่เป็นจำนวนเต็มบวก

model = LpProblem(name="model", sense=LpMinimize)# Define the decision variables
x = {i: LpVariable(name=f"x{i}", lowBound=0, cat='Integer') for i in range(1, 6)}

ส่วนนี้เป็นการเตรียมข้อมูลคร่าวๆสำหรับใส่ใน Constraint และ Objective function

# vaccine_needed = population * 70percent * 2dose/person
vac_needed = 100000000*0.7*2
# Efficacy for each vaccine
eff = [75, 95, 95, 70, 82.5]
# New coefficient for linear constraint
new_coeff = eff.copy()
for i in range(len(eff)):
new_coeff[i] = eff[i] - 80
# Cost for each vaccine
cost = [4, 33, 20, 30, 70]

สร้าง 2 constraint

# Add constraints
model += (lpSum(x.values()) >= vac_needed, "doses_required_constraint")
model += (lpSum([new_coeff[i]*x[i+1] for i in range(len(x))]) >= 0, "expected_efficacy_constraint")

กำหนด Objective Function และ solve!

  • objective function ก็เป็นการ sumproduct ของ cost แต่ละตัว และ decision variables
  • ส่วนใน model.solve() นั้นโดย default แล้วจะใช้ตัว solver ที่ชื่อ 'PULP_CBC_CMD’ ซึ่งเราก็สามารถ install ตัวอื่นมาใส่ใน function นี้ได้เช่นกัน
# Set objective function
model += lpSum([cost[i]*x[i+1] for i in range(len(x))])
# Solve the optimization problem
status = model.solve()

Print ผลลัพธ์คร่าวๆสำหรับ model นี้

print(f"status: {LpStatus[model.status]}")
print(f"Total cost: {model.objective.value()}")
for var in model.variables():
print(f"{var.name} = {var.value()}")

Interpretation of Results 🤓

สรุปแล้ว เพื่อที่จะประหยัดงบมากที่สุด เราควรสั่งวัคซีนยี่ห้อที่ 1 และ 3 อย่างละ 105 ล้านโดส และ 35 ล้านโดสตามลำดับ โดยใช้งบไปทั้งสิ้น 112 ล้านดอลล์ !!! 💰

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

Fuiyohhh! 😝 finally we did it!

Conclusion

ขอบคุณผู้อ่านทุกคนมากคร้าบที่อ่านมาถึง Section สุดท้ายนี้ ซึ่งในบทความนี้ผู้อ่านก็ถูก inspired มาจากสถานการณ์ต่างๆที่เกิดขึ้นในปัจจุบัน การทำงาน การ revise ความรู้สมัยมหาลัย ประกอบกับการทดลอง research อะไรใหม่ๆเรื่อยๆ จนได้เป็นบทความบน medium ชิ้นนี้ 😜

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

Feedback is welcome นะครับ ใครที่อ่านจบแล้วสามารถติชมหรือแนะนำได้เลย 😇 หากผิดพลาดประการใดสามารถ comment ไว้หรือติดต่อมาได้ทาง siravit.bg@gmail.com

สุดท้ายก็ขอให้ทุกๆท่าน ผ่านเรื่องราวต่างๆไปได้ด้วยดี มีสุขภาพแข็งแรง สุขกาย สบายใจ และปลอดภัยในช่วงสถานการการระบาดของ Covid-19 นี้นะครับ

References & Further Readings

--

--

Siravit Trongtranon

Lifelong learner | Surfskating Enthusiast | Volunteering Lover | Data & Analytics Engineer