290 likes | 408 Views
259201 Computer Programming for Engineers. Week 8 Engineering Problem#1. ปัญหาด้านการจัดการสินค้าคงคลัง (Inventory Problem). การผลิต (Production) คือ การแปลงสภาพของวัตถุดิบ ด้วยกระบวนการต่างๆ เพื่อให้ได้มาซึ่งสินค้าหรือผลิตภัณฑ์ที่ตรงตามความต้องการของลูกค้า โดยอาศัยทรัพยากรต่างๆในระบบการผลิต
E N D
259201Computer Programming for Engineers Week 8 Engineering Problem#1
ปัญหาด้านการจัดการสินค้าคงคลัง (Inventory Problem) • การผลิต (Production) คือ การแปลงสภาพของวัตถุดิบ ด้วยกระบวนการต่างๆ เพื่อให้ได้มาซึ่งสินค้าหรือผลิตภัณฑ์ที่ตรงตามความต้องการของลูกค้า โดยอาศัยทรัพยากรต่างๆในระบบการผลิต • วัตถุดิบ จึงเป็นปัจจัยสำคัญของระบบการผลิตในภาคอุตสาหกรรม และเป็นส่วนหนึ่งในการกำหนดราคาของสินค้า • ดังนั้น การจัดการเพื่อลดต้นทุนของการจัดการวัตถุดิบ จึงเป็นอีกทางเลือกหนึ่งในการเพิ่มโอกาสในการทำกำไรให้แก่องค์กร
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง • เราสามารถแบ่งต้นทุนในการจัดการสินค้าคงคลัง ออกเป็น 3 ประเภทหลักๆ ได้แก่ • ต้นทุนราคาของวัตถุดิบ (บาท/ชิ้น) • ต้นทุนในการสั่งซื้อแต่ละครั้ง (บาท/ครั้ง) เช่น ต้นทุนการขนส่ง เป็นต้น • ต้นทุนในการเก็บรักษาวัตถุดิบ (บาท/ชิ้น/ปี) เช่น ต้นทุนค่าเช่าพื้นที่เก็บสินค้า, เงินเดือนของพนักงานที่ดูแลคลังสินค้า เป็นต้น หน่วยของต้นทุนในการเก็บรักษาวัตถุดิบ อาจเป็น บาท/ชิ้น/เดือน หรือ บาท/ชิ้น/วัน ก็ได้ขึ้นอยู่กับความเหมาะสมของการหมุนเวียนวัตถุดิบในคลัง Material Cost Ordering Cost Holding Cost
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง • ร้านขายก๋วยเตี๋ยว วิเคราะห์ต้นทุนที่เกิดขึ้นของลูกชิ้นหมู พบว่า ในการซื้อและเก็บรักษาลูกชิ้นหมูของที่ร้าน มีต้นทุนต่างๆ ดังนี้ • ต้นทุนค่าลูกชิ้นหมู กิโลกรัมละ 140 บาท • ในการซื้อลูกชิ้นหมูแต่ละครั้ง เสียค่าน้ำมันรถ 15 บาท/ครั้ง • ตู้เย็นที่ใช้ในการเก็บลูกชิ้น กินไฟเฉลี่ยวันละ 25 บาท และสามารถเก็บลูกชิ้นได้สูงสุด 100 กิโลกรัม คิดเป็นค่าไฟ = 25/100 = 0.25 บาท/กก./วัน • เจ้าของร้านวิเคราะห์ต้นทุนลูกชิ้นหมู ได้ดังนี้ • Material Cost = ค่าลูกชิ้นหมู = 140 บาท/กิโลกรัม • Ordering Cost = ค่าน้ำมันในการซื้อลูกชิ้นแต่ละครั้ง = 15 บาท / ครั้ง • Holding Cost = ค่าไฟตู้เย็นที่ใช้เก็บลูกชิ้น = 0.25 บาท / กก. / วัน
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง • เจ้าของร้านพบว่า โดยเฉลี่ยแล้วใน 1 เดือน จะต้องใช้ลูกชิ้นหมูในการทำก๋วยเตี๋ยว 60 กิโลกรัม เจ้าของร้านจะซื้อลูกชิ้นหมูครั้งละกี่กิโลกรัม? และควรซื้อเดือนละกี่ครั้ง? จึงจะทำให้ต้นทุนต่ำที่สุด • หากกำหนดให้ จำนวนลูกชิ้นหมูที่อยู่ในตู้เย็นโดยเฉลี่ยแล้ว มีจำนวนเท่ากับ ครึ่งหนึ่งของการสั่งซื้อแต่ละครั้ง • ซื้อครั้งเดียว ครั้งละ 60 กิโลกรัม? • ซื้อ 2 ครั้ง ครั้งละ 30 กิโลกรัม ? • ซื้อ 3 ครั้ง ครั้งละ 20 กิโลกรัม? • ซื้อ 4 ครั้ง ครั้งละ 15 กิโลกรัม? การสั่งซื้อแบบไหนที่จะทำให้ต้นทุนต่ำที่สุด??? ......
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง • เจ้าของร้านจึงได้ ใช้โปรแกรม MATLAB ชื่อ meatball.m ในการคำนวณค่าใช้จ่ายที่เกิดขึ้น ดังนี้ N = input('Number of Ordering (order/month): '); Q = input('Quantity per order (unit/order): '); M = input('Input material cost (baht/unit): '); O = input('Input ordering cost (baht/order): '); H = input('Input holding cost (baht/unit/day): '); MC = Q*N*M; OC = N*O; HC = Q/2*H*30; TC = MC+OC+HC; fprintf('Total Cost is: %.0f baht/month \n',TC)
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง • เจ้าของร้านทำการ Trial and error ใส่จำนวนครั้ง และปริมาณการซื้อแต่ละครั้ง ได้ผลลัพธ์ ดังนี้ Minimum cost
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง • จะมีวิธีใดบ้าง ที่เจ้าของร้าน ไม่ต้องเสียเวลาทดลองสุ่มค่าตัวเลขใส่ลงไปเอง? • โปรแกรมสามารถหาคำตอบที่เป็นต้นทุนที่ต่ำที่สุด ได้อย่างไร??? • สังเกตุจำนวนการสั่งซื้อ และปริมาณการสั่งซื้อต่อครั้ง ที่สัมพันธ์กับต้นทุน
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง จุดที่ต้นทุนต่ำที่สุดจากสถานการณ์ทั้งหมดที่ทดสอบ หมายเหตุ: เนื่องจากต้นทุนค่า วัตถุดิบ มีค่าเท่ากันหมดในทุกกรณี จึงไม่ได้นำมาพิจารณาในการเขียนกราฟ
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง เจ้าของร้าน จึงทดลองเปลี่ยนปริมาณการสั่งซื้อต่อครั้งไปเรื่อยๆ ตั้งแต่ 1 kg – 60 kg และเขียนกราฟ จุดที่ต้นทุนต่ำที่สุดจากสถานการณ์ทั้งหมดที่ทดสอบ
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง • เจ้าของร้านได้พัฒนาโปรแกรม จากโปรแกรมเดิมที่มีอยู่ โดยให้โปรแกรมเพิ่มจำนวนการสั่งซื้อลูกชิ้นหมูทีละ 1 kg เพื่อคำนวณหาต้นทุนที่เกิดขึ้นทั้งหมด แล้วเลือกปริมาณการสั่งซื้อที่ทำให้ต้นทุนต่ำที่สุด • เจ้าของร้านก๋วยเตี๋ยว ควรออกแบบให้โปรแกรมทำงานอย่างไรบ้าง??? • เมื่อต้องการผลลัพธ์ของโปรแกรม ดังนี้
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง • OutputQ = ปริมาณในการซื้อลูกชิ้นต่อครั้ง (kg/order)N = จำนวนครั้งในการซื้อลูกชิ้นต่อเดือน (order/month)TC = ต้นทุนรวมในการจัดซื้อจัดเก็บลูกชิ้น (baht/month) • InputD = ปริมาณลูกชิ้นที่ต้องการใช้ตลอดทั้งเดือน = 60 kg/monthM = ต้นทุนลูกชิ้นต่อกิโลกรัม = 140 baht/kgO = ต้นทุนในการซื้อลูกชิ้นต่อครั้ง = 15 baht/orderH = ต้นทุนในการจัดเก็บลูกชิ้น (โดยเฉลี่ยมีลูกชิ้นอยู่ในตู้เย็น Q/2) = 0.25 baht.kg/day หรือ = 0.25baht/kg/day * 30 day/month = 7.5 baht/month
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง วิธีที่ 1: • ให้โปรแกรมคำนวณต้นทุนกรณีที่สั่งซื้อลูกชิ้นหมู ตั้งแต่ 1 kg – 60 kg และเก็บค่าต้นทุน ปริมาณสั่งซื้อ และจำนวนการสั่งซื้อ ที่ต่ำที่สุดไว้ • สรุปปริมาณสั่งซื้อ จำนวนครั้งในการสั่งซื้อ และต้นทุนที่ต่ำที่สุด
แนวความคิดของวิธีที่ 1 Annual Cost หาต้นทุนที่เกิดขึ้นในทุกๆ จุด แล้วเปรียบเทียบว่าเป็นค่าต่ำสุดหรือไม่ minTC Total Cost Curve TC(1) TC(2) Holding Cost Curve TC(3) ...... ...... ...... Order (Setup) Cost Curve Order Quantity Optimal Order Quantity (Q*)
แนวความคิดของวิธีที่ 1 D = input('Input demand of material (unit/month): '); M = input('Input material cost (baht/unit): '); O = input('Input ordering cost (baht/order): '); H = input('Input holding cost (baht/unit/day): '); minTC = 100000; for i = 1:D Q = i; N = D/Q; MC = Q*N*M; OC = N*O; HC = Q/2*H*30; TC = MC+OC+HC; if TC < minTC minTC = TC; Qo = Q; %Qoคือ ปริมาณการสั่งซื้อที่ทำให้เกิดต้นทุนต่ำที่สุด No = N; %No คือ จำนวนครั้งในการซื้อของที่ทำให้เกิดต้นทุนต่ำที่สุด TCo = TC; % TCoคือ ต้นทุนที่ต่ำที่สุดที่เกิดขึ้น end end fprintf('The best quantity is: %.2f kg/order \n',Qo) fprintf('Number of order is: %.2f order/month \n',No) fprintf('Total Cost is: %.0f baht/month \n',TCo)
ต้นทุนในการจัดการสินค้าคงคลังต้นทุนในการจัดการสินค้าคงคลัง วิธีที่ 2: • ให้โปรแกรมคำนวณต้นทุนกรณีที่สั่งซื้อลูกชิ้นหมู เริ่มจาก 1 kg • โปรแกรมคำนวณต้นทุนที่เกิดขึ้น จากปริมาณการสั่งซื้อนั้นๆ • โปรแกรมทำการเปรียบเทียบ ว่าต้นทุนที่เกิดขึ้นต่ำกว่าปริมาณการสั่งซื้อก่อนหน้านั้นหรือไม่หากต้นทุนที่เกิดขึ้นต่ำกว่าปริมาณสั่งซื้อก่อนหน้า ให้รันโปรแกรมต่อไปหากต้นทุนที่เกิดขึ้นสูงกว่า ปริมาณการสั่งซื้อก่อนหน้านั้น แสดงว่าปริมาณการสั่งซื้อก่อนหน้านี้ เป็นปริมาณการสั่งซื้อที่ต่ำที่สุดแล้ว ให้โปรแกรมออกจากลูป • สรุปปริมาณการสั่งซื้อที่ต่ำที่สุด จำนวนครั้งในการสั่งซื้อ และต้นทุนที่ต่ำที่สุด
แนวความคิดของวิธีที่ 2 Annual Cost Total Cost เมื่อเทียบกับปริมาณการสั่งซื้อก่อนหน้า เริ่มมีค่ามากขึ้น แสดงว่า TC (i-1) มีค่าต่ำสุด Total Cost Curve TC(1) TC(i) TC(2) TC(i-1) TC(3) Holding Cost Curve ...... โปรแกรมออกจากลูป และไม่รันในส่วนนี้ต่อ Order (Setup) Cost Curve Order Quantity Optimal Order Quantity (Q*)
แนวความคิดของวิธีที่ 2 D = input('Input demand of material (unit/month): '); M = input('Input material cost (baht/unit): '); O = input('Input ordering cost (baht/order): '); H = input('Input holding cost (baht/unit/day): '); for i = 1:D Q = i; N = D/Q; MC = Q*N*M; OC = N*O; HC = Q/2*H*30; TC(i) = MC+OC+HC; if i >1 if TC(i)> TC (i-1) Qo = i-1; %Qoคือ ปริมาณการสั่งซื้อที่ทำให้เกิดต้นทุนต่ำที่สุด No = D/(i-1); %No คือ จำนวนครั้งในการซื้อของที่ทำให้เกิดต้นทุนต่ำที่สุด TCo = TC(i-1); % TCoคือ ต้นทุนที่ต่ำที่สุดที่เกิดขึ้น break end end end disp('---------------------------------------------------') fprintf('The best quantity is: %.2f kg/order \n',Qo) fprintf('Number of order is: %.2f order/month \n',No) fprintf('Total Cost is: %.2f baht/month \n',TCo) disp('===================================================') ข้อดี ของวิธีที่ 2 คือ เมื่อเจอคำตอบแล้ว โปรแกรมจะออกจากลูปทันที ไม่จำเป็นต้องรันจนครบทุกรอบ
เปรียบเทียบผลลัพธ์จากวิธีคิดที่ 1 และ 2 • จากการเปรียบเทียบ พบว่า • การซื้อลูกชิ้นครั้ง 15 หรือ 16 kg ทำให้เกิดต้นทุนเท่ากัน คือ 8,516.25 บาท • นั่นแสดงว่า เจ้าของร้านจะเลือกซื้อครั้งละ 15 หรือ 16 kg ก็ไม่ต่างกัน • พิจารณาจำนวนครั้งในการสั่งซื้อ4 ครั้ง/เดือน = ซื้อทุกๆ 7.5 วัน3.75 ครั้ง/เดือน = ซื้อทุกๆ 8 วัน • ดังนั้น เจ้าของร้านจะเลือกทางเลือกใดก็ได้ ต้นทุนที่เกิดขึ้นเท่ากัน
ตัวอย่างที่ 1: Inventory Problem • บริษัทผลิตเฟอร์นิเจอร์ ต้องการคำนวณหาปริมาณการสั่งซื้อ ในการสั่งซื้อวัสดุของการผลิตโคมไฟ ที่ทำให้เกิดต้นทุนในการสั่งซื้อ และการจัดเก็บวัสดุน้อยที่สุด ซึ่งค่าใช้จ่ายต่างๆ ของวัสดุในการผลิตโคมไฟ ได้แก่ • ราคาวัตถุดิบที่ใช้ทำโคมไฟ = 120 บาท/ชิ้น • ค่าใช้จ่ายในการสั่งซื้อ = 160 บาท/ครั้ง • ค่าใช้จ่ายในการเก็บรักษา = 40 บาท/ชิ้น/ปี • หากความต้องการของลูกค้าเท่ากับ 6,000 ชิ้น/ปี บริษัทควรสั่งซื้อปีละกี่ครั้ง ครั้งละกี่ชิ้น และทำให้เกิดต้นทุนเท่าใด
ตัวอย่างที่ 1: Inventory Problem • นักศึกษาสามารถแก้ไข/ดัดแปลง จากโปรแกรม meatball2.m หรือ meatball3.m • จะต้องมีการแก้ไขโปรแกรมที่บรรทัดใดบ้าง??? หากต้องการผลลัพธ์ ดังนี้
ตัวอย่างที่ 2: Advanced Inventory Problem • จากตัวอย่างที่ 1 หากผู้ผลิตวัตถุดิบ จัดส่งวัตถุดิบให้เป็นกล่อง โดย 1 กล่อง บรรจุ จำนวนวัตถุดิบ 1 โหล • ดังนั้น ปริมาณการสั่งซื้อที่ซื้อจริง จะไม่เท่ากับปริมาณการสั่งซื้อที่ดีที่สุดที่คำนวณได้ • เช่น ถ้าปริมาณการสั่งซื้อที่ดีที่สุด = 18 ชิ้น (อยู่ระหว่าง 1 โหล และ 2 โหล)จะต้องพิจารณาว่า ซื้อ 12 ชิ้น หรือ 24 ชิ้น ที่จะทำให้ต้นทุนต่ำกว่ากัน 12 ชิ้น 12 ชิ้น จำนวนที่ซื้อได้ (Upper case) เปรียบเทียบต้นทุน ** 18 ชิ้น ** ปริมาณการสั่งซื้อที่ดีที่สุด 12 ชิ้น จำนวนที่ซื้อได้ (Lower case)
ตัวอย่างที่ 2: Advanced Inventory Problem • ดังนั้น เมื่อคำนวณปริมาณการสั่งซื้อที่ดีที่สุดได้แล้ว จะต้องปัดให้เป็นจำนวนที่บรรจุในกล่องได้พอดี (บรรจุกล่องละ 12 ชิ้น) • ตรวจสอบเงื่อนไข ว่าจำนวนที่คำนวณได้หาร 12 ลงตัวหรือไม่ • mod(Qo,12) • คำนวณต้นทุนกรณี Lower Case • LBox = floor(Qo/12); • LQ = 12*LBox; • LN = D/LQ; • LTC = (LQ*LN*M)+(LN*O)+(LQ/2*H); คำสั่ง mod(x,y) ใช้ในการตรวจสอบว่า x หารด้วย y ลงตัวหรือไม่ ถ้าหารลงตัว ผลลัพธ์ของ mod จะมีค่าเท่ากับ 0 คำสั่ง floor ใช้ในการปัดเศษของสมาชิกของอาร์เรย์ลง ปริมาณการสั่งซื้อด้าน Lower จำนวนครั้งในการสั่งซื้อ ด้าน Lower ต้นทุนรวมในการสั่งซื้อ ด้าน Lower Material cost Ordering cost Holding cost
ตัวอย่างที่ 2: Advanced Inventory Problem • คำนวณต้นทุนกรณี Upper Case • UBox = ceil(Qo/12); • UQ = 12*UBox; • UN = D/UQ; • UTC = (UQ*UN*M)+(UN*O)+(UQ/2*H); • จากนั้นทำการเปรียบเทียบ LTC และ UTC ว่าต้นทุนด้านใดน้อยกว่า • เลือกทางเลือกที่ทำให้เกิดต้นทุนต่ำกว่า • สรุปและประมวลผล คำสั่ง ceil ใช้ในการปัดเศษของสมาชิกของอาร์เรย์ขึ้น ปริมาณการสั่งซื้อด้าน Upper จำนวนครั้งในการสั่งซื้อ ด้าน Upper ต้นทุนรวมในการสั่งซื้อ ด้าน Lower Material cost Ordering cost Holding cost
ผลลัพธ์จากตัวอย่างที่ 2 • ให้นักศึกษาทดลองเขียนโปรแกรม MATLAB ของตัวอย่างนี้
เฉลย ตัวอย่างที่ 1 (lamp.m) D = input('Input demand of material (unit/year): '); M = input('Input material cost (baht/unit): '); O = input('Input ordering cost (baht/order): '); H = input('Input holding cost (baht/year): '); for i = 1:D Q = i; N = D/Q; MC = Q*N*M; OC = N*O; HC = Q/2*H; TC(i) = MC+OC+HC; if i >1 if TC(i)> TC (i-1) Qo = i-1; %Qoคือ ปริมาณการสั่งซื้อที่ทำให้เกิดต้นทุนต่ำที่สุด No = D/(i-1); %No คือ จำนวนครั้งในการซื้อของที่ทำให้เกิดต้นทุนต่ำที่สุด TCo = TC(i-1); % TCoคือ ต้นทุนที่ต่ำที่สุดที่เกิดขึ้น MCo = Qo*No*M; OCo = No*O; HCo = Qo/2*H; break end end end disp('---------------------------------------------------') fprintf('The best quantity is: %.2f units/order \n',Qo) fprintf('Number of order is: %.2f orders/year \n',No) fprintf('Total Cost is: %.2f baht/year \n',TCo) fprintf('\t Total material cost is: %.2f baht/year\n',MCo) fprintf('\t Total ordering cost is: %.2f baht/year\n',OCo) fprintf('\t Total holding cost is: %.2f baht/year\n',HCo) disp('===================================================')
เฉลย ตัวอย่างที่ 2 (lamp2.m) ส่วนที่ 1/2 D = input('Input demand of material (unit/year): '); M = input('Input material cost (baht/unit): '); O = input('Input ordering cost (baht/order): '); H = input('Input holding cost (baht/year): '); for i = 1:D Q = i; N = D/Q; MC = Q*N*M; OC = N*O; HC = Q/2*H; TC(i) = MC+OC+HC; if i >1 if TC(i)> TC (i-1) Qo = i-1; %Qoคือ ปริมาณการสั่งซื้อที่ทำให้เกิดต้นทุนต่ำที่สุด No = D/(i-1); %No คือ จำนวนครั้งในการซื้อของที่ทำให้เกิดต้นทุนต่ำที่สุด if mod(Qo,12) == 0 TCo = TC(i-1); MCo = Qo*No*M; OCo = No*O; HCo = Qo/2*H; else %คำนวณด้าน Lower case LBox = floor(Qo/12); LQ = 12*LBox; LN = D/LQ; LTC = (LQ*LN*M)+(LN*O)+(LQ/2*H); %คำนวณด้าน Upper case UBox = ceil(Qo/12); UQ = 12*UBox; UN = D/UQ; UTC = (UQ*UN*M)+(UN*O)+(UQ/2*H); ตรวจสอบว่า Qoหารด้วย 12 ลงตัวหรือไม่ คำนวณต้นทุนกรณี Lower case
เฉลย ตัวอย่างที่ 2 (lamp2.m) ส่วนที่ 2/2 %เปรียบเทียบต้นทุน LTC และ UTC if LTC < UTC Qo = LQ; Box = LBox; No = LN; TCo = LTC; MCo = LQ*LN*M; OCo = LN*O; HCo = LQ/2*H; else Qo = UQ; Box = UBox; No = UN; TCo = UTC; MCo = UQ*LN*M; OCo = UN*O; HCo = UQ/2*H; end end break end end end disp('---------------------------------------------------') fprintf('The best quantity is: %.2f units/order or %.2f boxes/order \n',Qo,Box) fprintf('Number of order is: %.2f orders/year \n',No) fprintf('Total Cost is: %.2f baht/year \n',TCo) fprintf('\t Total material cost is: %.2f baht/year\n',MCo) fprintf('\t Total ordering cost is: %.2f baht/year\n',OCo) fprintf('\t Total holding cost is: %.2f baht/year\n',HCo) disp('===================================================‘) เปรียบเทียบต้นทุน กรณี Lower และ Upper case