Simulation Begins

posted on 21 Jul 2009 00:05 by interviewz

 

Simulation คืออะไร

คำว่า Simulation แปลเป็นภาษาไทยได้ว่า การลอกเลียนแบบ แต่ Simulation ที่เราจะพูดถึงคือ Computer Simulation ซึ่งหมายถึงการเลียนแบบ โดยการสร้าง Model ทางคณิตศาสตร์ในคอมพิวเตอร์ เพื่อศึกษาระบบต่าง ๆซึ่งสามารถนำมาใช้ได้ในหลากหลายฟิลด์ เช่น จำลองการบิน จำลองการจองตั๋วเครื่องบิน จำลองการแชร์ทรัพยากรในคอมพิวเตอร์ โดยโปรแกรมที่จะทำ Simulation นั้นเราจะใช้เครื่องมืออะไรก็ได้ เช่น Arena , Excel  

 

ประโยชน์ของ Simulation คือ ช่วยจำลองการทำงานที่ซับซ้อน ลดต้นทุนในการทำธุรกิจหรืออุตสาหกรรม ช่วยในการตัดสินใจ อย่างเช่น โปรแกรม Over Booking ทำการจำลองการจองตั๋วเครื่องบิน สมมติว่า สายการบินเรามีที่นั่งต่อเที่ยวบิน 100 ที่นั่ง ถ้าเราเปิดให้จอง เราจะได้รายได้จากการจอง ครั้งละ $100 แต่จากข้อมูลในอดีตที่เรามี พบว่าถ้ามีการจอง 100 ที่นั่ง จะมีผู้โดยสารไม่มา 15 ที่นั่ง ดังนั้นเราอาจจะเปิดให้จองเกินจำนวนที่นั่งจริง ๆ ที่มีก็ได้  แต่ถ้ามีผู้โดยสารมาเกินจำนวนที่นั่งที่มี เราจะต้องเสียค่าใช้จ่ายเพิ่มขึ้นอีก  $400 ต่อที่นั่ง ดังนั้นเราควรจะเปิดให้จองเกินเป็นจำนวนเท่าไหร่ เราจึงจะได้กำไรสูงสุด? เราสามารถใช้ มาช่วยจำลองและหาคำตอบให้เราได้ง่าย และให้ผลที่น่าเชื่อถือ Simulation

 

สิ่งที่จำเป็นในการทำ Simulation

1. ข้อมูลในอดีต

2. โมเดลทางคณิตศาสตร์

3. การสรุปรายงาน

 

Monte Carlo Simulation

คือการพยายามลอกเลียนแบบระบบจริง โดยใช้ข้อมูล (input) แบบสุ่ม และมีการกระจายแบบความน่าจะเป็น

หมายความว่า ข้อมูลที่เรามีอยู่ เราจะต้องรู้ว่ามันมีการกระจายแบบไหน เช่น  Normal, Uniform, Exponential, Triangular นอกจากนั้น เราจะต้องรู้ โมเดลทางคณิตศาสตร์ เพื่อให้มันไปคำนวณ ให้ได้ผลลัพธ์ (output) ออกม

 

 

 

 

ตัวอย่าง

ร้านหนังสือแห่งหนึ่ง ต้องตัดสินใจว่าจะเตรียมปฏิทินของปีหน้าไว้ขายกี่อัน โดยมีต้นทุนอันละ $7.50 และขายในราคาอันละ $10 หลังจากเดือนกุมภาพันธ์ไปแล้ว จะสามารถนำปฏิทินไปคืนได้ โดยได้เงินคืนอันละ $2.50

สรุปโจทย์ ปฏิทิน มีราคาทุน $7.50

ราคาขาย $10

ราคาคืน $2.50

จะสั่งมาเท่าไหร่ให้ได้กำไรสูงสุด โดยมีความต้องการตามตาราง

 

Demand

Probability

100

0.30

150

0.20

200

0.30

250

0.15

300

0.05

 

  จากตาราง แสดงว่ามีค่าที่เป็นไปได้ 5 ค่า คือ 100, 150, 200, 250 และ 300 แต่ในความเป็นจริงแล้วยังมีค่าอื่นที่เป็นไปได้อีก แต่เราลองใช้แค่ 5 ค่า เพราะมันง่ายในการเริ่มต้นทำโมเดล

 

วิธีทำ

ก่อนอื่น ตั้งชื่อให้ช่องต่าง ๆ ดังภาพ

 

1.  ใส่ราคาในช่อง B4:B6 ใส่จำนวนที่จะสั่งในช่อง B9

คอลัมน์ E แสดงความต้องการ

คอลัมน์ F แสดงความน่าจะเป็น

คอลัมน์ D ให้ใส่ค่าความถี่สะสม

โดยใส่ค่า 0 ในช่อง D5

ใส่สูตร =F5+D5 ลงในช่อง D6

จากนั้น copy แล้ววางลงในช่วง D7:D9

 

 

2. สร้างเลขสุ่ม โดยใส่สูตร =RAND( ) ในช่อง B19 แล้ว copy วางลงในช่วง B20:B1018

 

 

3. สร้าง demand ซึ่งเป็นส่วนสำคัญของการจำลอง คือการสร้างความต้องการของลูกค้าจากเลขสุ่มในคอลัมน์ B ไปไว้ในช่วง C19:C1018 โดยแบ่งช่วง 0 ถึง 1 ออกเป็น 5 ส่วน (เพราะมีค่าที่เป็นไปได้ 5 ค่า) โดยช่วงของแต่ละส่วน สัมพันธ์กับค่าของความน่าจะเป็นของความต้องการแต่ละอัน จากนั้นเรากำหนดให้ demand ขึ้นอยู่กับว่า เลขที่สุ่มได้ ตกอยู่ในช่วงไหน มีวิธีทำได้ 2 แบบ

                แบบแรก ใช้ IF ในช่อง C19 และ copy ลงไปในคอลัมน์ C

                แบบสอง ใช้ VLOOKUP โดยเราตั้งชื่อ ในช่วง D5:E9 ว่า LookupTable จากนั้นใส่สูตร =VLOOKUP(B19,LookupTable,2) ลงในช่อง C19 แล้ว copy ไปวางใน C20:C1018 ฟังก์ชั่น VLOOKUP จะเปรียบเทียบค่าเลขสุ่ม กับค่าในช่วง D5:D9 และคืนค่า demand ใน E5:E9

 

4. เมื่อรู้ค่าความต้องการแล้ว ทำการเปรียบเทียบจำนวนของปฏิทินที่ขายได้ กับจำนวนปฏิทินที่สั่งมา ว่าจำนวนอะไรน้อยกว่ากัน จากนั้นเอามาคูณกับราคาขาย โดยใส่สูตร =Unit_price*MIN(C19,Order_quantity) ลงในช่อง D19

[ รายได้ = ราคาขาย*MIN(ความต้องการ, จำนวนที่สั่งมา) ]

 

5.ต้นทุนขึ้นอยู่กับจำนวนปฏิทินที่เราสั่งมา ดังนั้นจึงใส่สูตร =Unit_cost*Order_quantity ลงในช่อง E19

[ ต้นทุน = ราคาทุน*จำนวนที่สั่งมา) ]

 

6. ถ้าจำนวนที่สั่งมา มีมากกว่าความต้องการ ก็จะเหลือปฏิทินที่ขายไม่ออก นำไปคืนได้ ดังนั้นใส่สูตร =Unit_refund*MAX(Order_quantity-C19,0) ในช่อง F19

[ เงินคืน = ราคาคืน*MAX(จำนวนที่สั่งมา-ความต้องการ,0)]

 

7. หากำไรได้จากสูตร =D19+F19-E19 ลงในช่อง G19

 

8. copy ช่วง D19:G19 ไปจนถึงช่วง D20:G1018

 

9. ในคอลัมน์ G จะเป็นค่ากำไร ที่ได้จากการจำลอง 1000 ครั้ง ดังนั้นเรามี 1000 profit ในตั้งชื่อช่วง G19:G1018 ว่า profit

เราจะหากำไรเฉลี่ยได้ โดยใช้สูตร =AVERAGE(Profit) ใส่ลงในช่อง B12

จากนั้นหาส่วนเบี่ยงเบนมาตรฐานโดยใช้สูตร =STDEV(Profit)

และแน่นอน เราหากำไรน้อยที่สุด โดยใช้ =MIN(Profit)

และหากำไรที่มากที่สุด โดยใช้ =MAX(Profit)

 

10. ใส่สูตร =B12-1.96*B13/SQRT(1000) ในช่อง E13

และใส่ =B12+1.96*B13/SQRT(1000) ในช่อง E14

 

11. คำตอบของกำไรที่ได้ มีอยู่แค่ 3 ค่า นั่นคือ -$250, $125, $500 ให้เราใส่ไว้ไนช่อง I19, I20, I21 ตามลำดับ

เราจะใช้ฟังก์ชั่น COUNTIF เพื่อนับจำนวนว่าได้คำตอบเป็น -$250 กี่ครั้ง เป็น $125 กี่ครั้ง เป็น $500 กี่ครั้ง โดยใส่สูตร =COUNTIF(Profit,I19) ลงในช่อง J19 แล้ว copy ลงมาจนถึงช่อง J21

 

สรุป

- ตั้งแค่แถวที่ 19 – 1018 เราสุ่มเลขความต้องการ 1000 เลข และคำนวณได้กำไรที่เกิดขึ้น

- เนื่องจากมีค่าความต้องการที่เป็นไปได้ 5 ค่า (100, 150, 200, 250, 300) จึงมีค่ากำไรแค่ ($250, $125, $500, $500, $500)

- สังเกตว่า สำหรับการสั่งปฏิทิน (order) มา 200 ชิ้นนั้น จะได้กำไร $500 ไม่ว่าจะมีความต้องการเป็น 200 ชิ้น 250 ชิ้น 300 ชิ้น

- จากตัวอย่างใน finished example พบว่า มี 299 แถว ที่กำไรเท่ากับ -$250, มี 191 แถวที่กำไรเท่ากับ $125 และมี 510 แถวที่กำไรเท่ากับ $500

- ค่าเฉลี่ยของกำไรทั้ง 1000 แถวนี้ คือ $204.13 และส่วนเบี่ยงเบนมาตรฐาน คือ $328.04

- การจำลองด้วยคอมพิวเตอร์ ในการรันแต่ละครั้งอาจได้คำตอบที่แตกต่างกันไปบ้าง นั่นคือเหตุผลที่เราสนใจ Confidence interval

- Confidence interval หรือ ช่วงความมั่นใจ (เรียกยังงี้รึป่าว?) อยู่ในช่อง E13 และ E14 ซึ่งช่วงนี้จะแสดงความไม่แน่นอนของค่ากำไรเฉลี่ย หมายความว่า ถ้ายิ่งช่วงมันกว้าง ความมั่นใจในค่ากำไรเฉลี่ยเรายิ่งน้อยลง

- แล้วเราจะรู้ได้ยังไงว่า ต้องสั่งปฏิทินมากี่อัน ถึงจะได้กำไรสูงสุด คำตอบคือ เราจะใช้ Data Table เข้ามาช่วย

-  ใส่เลขจำนวนที่สั่ง ในช่อง A1013:A1031 แล้วใส่สูตร =B12 ในช่อง B1022 จากนั้น เลือกช่วงของ data table

- ใช้ Data > Table แล้วใน column) input cell ให้ใส่  B9

- ผลที่ได้ คือสั่งมาจำนวน 150 อัน จะทำให้ได้กำไรสูงสุด

- อย่าลืมว่า นี่คือ Simulation หรือการจำลอง ดังนั้น กำไรเฉลี่ยที่ได้นั้นขึ้นอยู่กับ เลขสุ่ม ที่สุ่มขึ้นมาได้

- เราอาจทำการ Freeze ค่าเลขสุ่ม ในคอลัมน์ B ได้ ซึ่งจะทำให้เลขนั้นไม่มีการเปลี่ยนแปลงไปอีก เมื่อมีการกด F9 หรือแก้ไขอะไรใน spreadsheet วิธีการ Freeze คือ เลือกช่องที่ต้องการ Freeze จากนั้น คลิกขวา เลือก copy แล้วคลิกขวา เลือก Paste special แบบ Value

 

 

 

ฟังก์ชั่น

RAND() http://office.microsoft.com/th-th/excel/HP052092291054.aspx?pid=CH062528291054

VLOOKUP() http://office.microsoft.com/th-th/excel/HP052093351054.aspx

 

 

 

ข้อมูลเพิ่มเติม

Conputer Simulation กับภาพยนตร์เรื่อง Twister  


 

 ปล. อัพโหลดรูปขี้นไม่ได้ ไม่รู้เป็นไร ไว้เดี๋ยวมา edit ละกัน

 

 

 

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

เยี่ยมมากเลยอ่ะ ขอบคุณมากๆ

#1 By rung (124.122.96.12) on 2009-07-21 02:13

ขอบคุณครับ วิว ^^

#2 By boy (110.169.41.112) on 2009-07-21 16:42

confused smile

#3 By TonHor on 2009-07-21 19:25


สู้นะไปนะ... ตามอยู่ๆ 55

#4 By OaT (124.121.225.70) on 2009-07-21 21:10


นะไปนะ.. - -'''''''


สู้ต่อไปนะ*

#5 By OaT (124.121.225.70) on 2009-07-21 21:11

confused smile ขอบคุณจ้าวิว แหล่มเรย ^^;

#6 By ferizforze (125.25.221.81) on 2009-07-22 00:14

^^ double wink

#7 By cakeclub (112.143.7.198) on 2009-07-22 01:02

ขอบคุณมาน่ะจ่ะbig smile

#8 By patchii (58.137.15.211) on 2009-07-22 01:07

พระเจ้า
นี่บล๊อควิชา Stat ชิมิ
เป็นโรคกลัวตัวเลข ขึ้นสมองครับcry

#9 By มนุษย์กล่อง on 2009-07-22 13:11

เก่งจังคับ แล้วนำ VBA มาทำ simulation ใน Excel ยังไงอะคับ^^
ขอบคุณมากเลย

ตั้งแต่vbaแหละ

ขอบคุณมากนะ

#11 By mon (124.120.235.67) on 2009-07-22 18:59

ขอบใจมากน๊า ยังไงก็จะลองศึกษาดู^^
ขอขอบคุณวีวิกามากมายยยค่าาาาา

#13 By สปาตั้น on 2009-07-23 21:08