คณิตศาสตร์ กับการกระจายงานผลิต
ผมเคยเห็นคำถามมากมายว่าคณิตศาสตร์เอามาใช้ประโยชน์ได้อย่างไร จริง ๆ มันก็แล้วแต่สายงานที่ทำครับ อย่างผม งานเกี่ยวกับคอมพิวเตอร์ ก็มีหลาย ๆ Project ที่ต้องใช้คณิตศาสตร์มาช่วย ล่าสุดมีงานเกี่ยวกับ Application วางแผนการผลิต แล้วคณิตศาสตร์ได้เข้ามาช่วยให้สามารถจัดตารางงานได้อย่างอัตโนมัติ และคำนวนได้อย่างรวดเร็ว เลยอยากจะแชร์ประสบการณ์จริงกันครับ
จริง ๆ โจทย์ซับซ้อนกว่านี้มาก แต่ผมลดปัญหาเรื่องอื่นลง จะได้เข้าใจง่ายขึ้น โจทย์มีอยู่ว่าแต่ละ Workstation มี Machine หลายเครื่อง แต่ละเครื่องใช้เวลาในการผลิตต่อหน่วยไม่เท่ากัน (A) แต่ละเครื่องเริ่มผลิตในเวลาที่ไม่เท่ากัน (B) ต้องกระจายงานแต่ละเครื่องเท่าไหร่ (X) ให้งานจบในเวลาที่เท่ากันทุกเครื่อง (Y)
ดังนั้น สูตรแต่ละ Machine ก็เป็นอย่างนี้ Y = AnXn + Bn ถ้ามี Machine 10 เครื่อง ก็จะมี X1, X2, X3, ..., X10 จะเห็นว่าเป็นปัญหาแบบหลายสมการ หลายตัวแปร ถ้าใครรู้จัก Gauss-Jordan elimination ก็จะรู้ได้เลยว่าแก้ปัญหานี้ได้แน่
ก่อนจะเริ่มต้องจัดสมการใหม่ก่อน สมการที่ Solve ได้ต้องมีหน้าตาอย่างนี้ A1X1 + A2X2 + A3X3 + ... + AmXm = N
ต้องเปลี่ยน Y = AnXn + Bn ให้อยู่ในรูปด้านบน ก็จะเป็น AnXn + -1Y = -Bn
ดังนั้น Machine 3 เครื่องก็จะได้เป็นสมการนี้ A1X1 + 0X2 + 0X3 + -1Y = -B1 0X1 + A2X2 + 0X3 + -1Y = -B2 0X1 + 0X2 + A3X3 + -1Y = -B3 1X1 + 1X2 + 1X3 + 0Y = C
บรรทัดสุดท้าย คือ เอางานที่กระจายแต่ละเครื่องบวกกัน ได้ออกมาเป็นจำนวนงานทั้งหมด (C)
พอรู้ Pattern แล้วก็เริ่มเขียนได้เลยครับ ก่อนอื่นต้องมี Class Matrix ก่อน จากนั้นก็ Loop ธรรมดาเลยครับ
var matrix = new Matrix(machines.Count + 1, machines.Count + 2); int y = machines.Count; int b = machines.Count + 1; for (int i = 0; i < machines.Count; i++) { matrix[i, i] = machines[i].CycleTime; matrix[i, y] = -1; matrix[i, b] = -machines[i].StartTime; matrix[y, i] = 1; } matrix[y, b] = total_qty; matrix = matrix.ReducedEchelonForm(); Code สั้นดีไหมครับ ใน Loop ก็แค่เอาเวลาในการผลิต และเวลาเริ่มต้นของแต่ละ Machine ไปหยอดในช่องต่าง ๆ ของ Matrix หลังจากแปลง Matrix เป็น Reduced Echelon Form แล้ว จำนวนที่ต้องผลิตของแต่ละ Machine ก็อยู่ที่ matrix[i, b]
แค่นี้ก็แก้ปัญหาได้แล้วครับ
Create Date : 17 ตุลาคม 2553 |
Last Update : 17 ตุลาคม 2553 4:17:53 น. |
|
2 comments
|
Counter : 862 Pageviews. |
|
|