Just algorithm!
คณิตศาสตร์ กับการกระจายงานผลิต

ผมเคยเห็นคำถามมากมายว่าคณิตศาสตร์เอามาใช้ประโยชน์ได้อย่างไร
จริง ๆ มันก็แล้วแต่สายงานที่ทำครับ
อย่างผม งานเกี่ยวกับคอมพิวเตอร์ ก็มีหลาย ๆ Project ที่ต้องใช้คณิตศาสตร์มาช่วย
ล่าสุดมีงานเกี่ยวกับ Application วางแผนการผลิต
แล้วคณิตศาสตร์ได้เข้ามาช่วยให้สามารถจัดตารางงานได้อย่างอัตโนมัติ และคำนวนได้อย่างรวดเร็ว
เลยอยากจะแชร์ประสบการณ์จริงกันครับ Smiley

จริง ๆ โจทย์ซับซ้อนกว่านี้มาก แต่ผมลดปัญหาเรื่องอื่นลง จะได้เข้าใจง่ายขึ้น
โจทย์มีอยู่ว่าแต่ละ Workstation มี Machine หลายเครื่อง
แต่ละเครื่องใช้เวลาในการผลิตต่อหน่วยไม่เท่ากัน (A)
แต่ละเครื่องเริ่มผลิตในเวลาที่ไม่เท่ากัน (B)
ต้องกระจายงานแต่ละเครื่องเท่าไหร่ (X)
ให้งานจบในเวลาที่เท่ากันทุกเครื่อง (Y)

ดังนั้น สูตรแต่ละ Machine ก็เป็นอย่างนี้
Y = AnXn + Bn
ถ้ามี Machine 10 เครื่อง ก็จะมี X1, X2, X3, ..., X10
จะเห็นว่าเป็นปัญหาแบบหลายสมการ หลายตัวแปร
ถ้าใครรู้จัก Gauss-Jordan elimination ก็จะรู้ได้เลยว่าแก้ปัญหานี้ได้แน่ Smiley

ก่อนจะเริ่มต้องจัดสมการใหม่ก่อน
สมการที่ Solve ได้ต้องมีหน้าตาอย่างนี้
A1X1 + A2X2 + A3X3 + ... + AmXm = N

ต้องเปลี่ยน Y = AnXn + Bn ให้อยู่ในรูปด้านบน
ก็จะเป็น AnX+ -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 ธรรมดาเลยครับ Smiley

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 สั้นดีไหมครับ Smiley
ใน Loop ก็แค่เอาเวลาในการผลิต และเวลาเริ่มต้นของแต่ละ Machine ไปหยอดในช่องต่าง ๆ ของ Matrix
หลังจากแปลง Matrix เป็น Reduced Echelon Form แล้ว
จำนวนที่ต้องผลิตของแต่ละ Machine ก็อยู่ที่ matrix[i, b]

แค่นี้ก็แก้ปัญหาได้แล้วครับ Smiley




Create Date : 17 ตุลาคม 2553
Last Update : 17 ตุลาคม 2553 4:17:53 น. 2 comments
Counter : 862 Pageviews.

 
อันนี้ใช้แก้ปัญหาเรื่อง Assignment หรือเปล่าครับ


โดย: tezz IP: 192.168.200.250, 110.164.149.211 วันที่: 31 ตุลาคม 2553 เวลา:15:25:18 น.  

 
กำลังรอบทความใหม่ๆ
มาเขียนเร็วๆนะท่านเจ้าของ blog


โดย: fanclub IP: 202.176.137.119 วันที่: 9 มกราคม 2554 เวลา:12:17:30 น.  

ชื่อ :
Comment :
  *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

chaowman
Location :
กรุงเทพฯ Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]





New Comments
Group Blog
 
All Blogs
 
Friends' blogs
[Add chaowman's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.