วิธีการจำลองทั้งหมดเป็นรูปแบบของ Monte Carlo หรือไม่?


35

มีวิธีการจำลองที่ไม่ใช่ Monte Carlo หรือไม่? วิธีการจำลองทั้งหมดเกี่ยวข้องกับการแทนที่ตัวเลขสุ่มในฟังก์ชันเพื่อค้นหาช่วงของค่าสำหรับฟังก์ชัน ดังนั้นวิธีการจำลองทั้งหมดในสาระสำคัญของวิธี Monte Carlo คืออะไร?


2
ฉันคิดว่า "สแตน" เป็นเพียงชื่อแรกของอุลามไม่ใช่นามสกุลของใครเลย
Nick Cox

สแตนเป็นตัวย่อของStanislasแน่นอน นี่คือเหตุผลที่ Andrew Gelman เลือกSTANสำหรับภาษาจำลองใหม่ของเขา
ซีอาน

เมื่อพิจารณาถึงปัญหาเล็ก ๆ น้อย ๆ ที่อาจจะเป็นปัญหาเชิงเส้นเขตแดนการค้นหาที่ละเอียดถี่ถ้วนจะยังคงเป็น "Monte Carlo" หรือไม่?
Nick T

3
สิ่งที่ฉันจำได้จากการบรรยายอัลกอริธึมแบบสุ่มของฉันคือวิธีการมอนติคาร์โลมีผลการสุ่มที่มีระยะเวลาที่รู้จักซึ่งตรงกันข้ามกับวิธีการลาสเวกัสที่มีการสุ่มหยุดนิ่ง แต่ผลลัพธ์ที่ถูกต้อง ไม่มีการอ้างอิงนี้ยกเว้นสคริปต์ที่เขียนด้วยลายมืออายุห้าขวบในลิ้นชักของฉัน แก้ไข:หน้าวิกิพีเดียในmonte carloและlas vegasดูเหมือนจะเห็นด้วยกับเรื่องนี้
bayerj

การค้นหาที่ละเอียดถี่ถ้วนน่าจะเป็นการคำนวณแรงเดรัจฉาน วิธีการมอนติคาร์โลดึงออกมาจากพื้นที่ตัวอย่าง ตัวอย่างนี้มักเป็นส่วนย่อยของจักรวาลของผลลัพธ์ซึ่งทำให้การวิเคราะห์ทางสถิติสามารถจัดการได้
Alex Reynolds

คำตอบ:


41

มีการจำลองที่ไม่ใช่ Monte Carlo โดยพื้นฐานแล้ววิธีการมอนติคาร์โลทั้งหมดใช้กฎ (อ่อนแอ) ของคนจำนวนมาก: ค่าเฉลี่ยมาบรรจบกับความคาดหวัง

จากนั้นก็มีวิธี Quasi Monte Carlo สิ่งเหล่านี้ถูกจำลองด้วยการสุ่มตัวเลขและช่องว่างที่เท่ากันเพื่อให้เกิดการลู่เข้าที่เร็วขึ้น

การจำลองที่ไม่ใช่ Monte Carlo นั้นถูกใช้ในการคำนวณพลศาสตร์ของไหล เป็นการง่ายที่จะสร้างแบบจำลองพลศาสตร์ของของไหลบน "ไมโครสเกล" ของส่วนเดียวของของไหล ส่วนเหล่านี้มีความเร็วความดันและขนาดเริ่มต้นและได้รับผลกระทบจากกองกำลังจากส่วนที่อยู่ใกล้เคียงหรือจากวัตถุที่เป็นของแข็ง แบบจำลองคำนวณพฤติกรรมทั้งหมดของของไหลโดยการคำนวณส่วนทั้งหมดและการโต้ตอบ การทำสิ่งนี้อย่างมีประสิทธิภาพทำให้นี่เป็นวิทยาศาสตร์ ไม่จำเป็นต้องมีตัวเลขสุ่ม

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

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


5
การแก้ไขเล็กน้อย: การจำลอง monte-carlo สามารถใช้การคำนวณแบบไม่สุ่ม มันถูกต้องเพื่อเรียกการจำลอง "monte-carlo" ถ้ามันแตกต่างกันไปตามเงื่อนไขเริ่มต้นและจากนั้นใช้การคำนวณที่ไม่ใช่แบบสุ่มจากที่นั่น สถานการณ์ CFD จำนวนมากเรียกร้องให้มอนเต้คาร์โลเนื่องจากเงื่อนไขขอบเขตถูกกำหนดทางสถิติ
Cort Ammon

14

วิธีมอนติคาร์โลเป็นวิธีแรกที่ใช้การจำลองด้วยคอมพิวเตอร์สำหรับปัญหาทางสถิติ ได้รับการพัฒนาโดย John von Neumann, Stanisław Ulam และทีมงาน Nicholas Metropolis จากห้องปฏิบัติการ Los Alamos ที่ทำงานในโครงการแมนฮัตตันในช่วงสงครามโลกครั้งที่สอง มันถูกอธิบายครั้งแรกในปี 1949 โดย Metropolis & Ulamและมันเป็นครั้งแรกที่ชื่อปรากฏในการพิมพ์ เป็นไปได้เพราะนักวิทยาศาสตร์ที่ค้นพบว่ามันยังสามารถใช้หนึ่งในคอมพิวเตอร์เครื่องแรกที่พวกเขากำลังทำงานอยู่ ในงานของพวกเขาพวกเขาใช้วิธีการ Monte Carlo สำหรับการจำลองปัญหาทางกายภาพและแนวคิดก็คือคุณสามารถจำลองปัญหาที่ซับซ้อนด้วยการสุ่มตัวอย่างตัวอย่างบางส่วนของกระบวนการนี้ มีบทความที่น่าสนใจมากมายเกี่ยวกับประวัติศาสตร์ของ Monte Carlo เช่นโดยMetropolis ตัวเองหรือบางคนเมื่อเร็ว ๆ นี้เช่นโดยโรเบิร์ตและ Casella

ดังนั้น "Monte Carlo" จึงเป็นชื่อของวิธีแรกที่อธิบายไว้เพื่อจุดประสงค์ในการจำลองด้วยคอมพิวเตอร์เพื่อแก้ปัญหาทางสถิติ จากนั้นชื่อก็กลายเป็นชื่อทั่วไปสำหรับทั้งครอบครัวของวิธีการจำลองและเป็นที่นิยมใช้ในแบบนี้

มีวิธีการจำลองที่ถือว่าไม่ใช่มอนติคาร์โลแต่ในขณะที่มอนติคาร์โลเป็นครั้งแรกที่ใช้คอมพิวเตอร์จำลองมันเป็นเรื่องธรรมดาที่ "คอมพิวเตอร์จำลอง" และ "มอนติคาร์โล" ใช้แทนกันได้

มีคำจำกัดความที่แตกต่างกันว่า "การจำลอง" คืออะไร

พจนานุกรม Merriam-Webster :

3 a: การลอกเลียนแบบของการทำงานของระบบหรือกระบวนการหนึ่งโดยใช้การทำงานของอีกระบบข: การตรวจสอบปัญหามักไม่ได้รับการทดลองโดยตรงโดยใช้อุปกรณ์จำลอง

พจนานุกรมเคมบริดจ์ :

ทำหรือทำสิ่งที่มีพฤติกรรมหรือดูเหมือนของจริง แต่ไม่ใช่ของจริง

Wikipedia :

การเลียนแบบการทำงานของกระบวนการหรือระบบในโลกแห่งความเป็นจริงในช่วงเวลาหนึ่ง

สิ่งที่การจำลองต้องการทำงานคือความสามารถในการเลียนแบบระบบหรือกระบวนการบางอย่าง นี้ไม่จำเป็นต้องมีแบบแผนใด ๆ ที่เกี่ยวข้อง (เช่นเดียวกับ Monte Carlo) แต่ถ้าเป็นไปได้ทั้งหมดจะถูกทดสอบแล้วขั้นตอนค่อนข้างค้นหาหมดจดหรือทั่วไปและปัญหาการเพิ่มประสิทธิภาพ หากองค์ประกอบแบบสุ่มมีส่วนเกี่ยวข้องและใช้คอมพิวเตอร์ในการรันแบบจำลองของบางรุ่นการจำลองนี้จะคล้ายกับจิตวิญญาณของวิธีมอนติคาร์โลเริ่มต้น (เช่น Metropolis และ Ulam, 1949) มีการกล่าวถึงองค์ประกอบแบบสุ่มซึ่งเป็นส่วนสำคัญของการจำลองเช่นโดย Ross (2006, Simulation). เอลส์) อย่างไรก็ตามคำตอบสำหรับคำถามนั้นขึ้นอยู่กับคำจำกัดความของการจำลองที่คุณสมมติ ตัวอย่างเช่นหากคุณสมมติว่าอัลกอริธึมที่กำหนดขึ้นซึ่งใช้การเพิ่มประสิทธิภาพหรือการค้นหาที่ละเอียดถี่ถ้วนเป็นเรื่องจริงแล้วเราจำเป็นต้องพิจารณาอัลกอริธึมที่หลากหลายเพื่อจำลองสถานการณ์และทำให้นิยามของการจำลองต่อพร่ามัวมาก

แท้จริงทุกขั้นตอนทางสถิติใช้แบบจำลองหรือการประมาณค่าความเป็นจริงนั่นคือ "ลอง" และประเมินผล สิ่งนี้สอดคล้องกับคำจำกัดความของการจำลองพจนานุกรม อย่างไรก็ตามเราไม่ได้พิจารณาสถิติทั้งหมดว่าเป็นแบบจำลอง คำถามและการสนทนาดูเหมือนจะเกิดขึ้นจากการขาดคำจำกัดความที่แม่นยำของ "การจำลอง" Monte Carlo น่าจะเป็นตัวอย่างของการจำลองแบบอย่าง (และแรก) อย่างไรก็ตามถ้าเราพิจารณาคำจำกัดความทั่วไปของการจำลองแล้ววิธีการที่ไม่ใช่ Monte Carlo จำนวนมากตกอยู่ในคำจำกัดความ ดังนั้นจึงมีการจำลองที่ไม่ใช่มอนติคาร์โล แต่วิธีการจำลองที่ชัดเจนทั้งหมดนั้นคล้ายคลึงกับจิตวิญญาณของมอนติคาร์โลเกี่ยวข้องกับมันในทางใดทางหนึ่งหรือได้รับแรงบันดาลใจจากมัน นั่นคือเหตุผลที่มักใช้ "Monte Carlo" เป็นคำพ้องสำหรับ "การจำลอง"


3
ฉันคิดว่า "สแตน" เป็นเพียงชื่อแรกของอุลามไม่ใช่นามสกุลของใครเลย
Nick Cox

1
สแตนเป็นตัวย่อของStanislasแน่นอน นี่คือเหตุผลที่ Andrew Gelman เลือกSTANสำหรับภาษาจำลองใหม่ของเขา
ซีอาน

เมื่อพิจารณาถึงปัญหาเล็ก ๆ น้อย ๆ ที่อาจจะเป็นปัญหาเชิงเส้นเขตแดนการค้นหาที่ละเอียดถี่ถ้วนจะยังคงเป็น "Monte Carlo" หรือไม่?
Nick T

6
ฉันไม่เข้าใจ: นี่จะตอบคำถามได้อย่างไร
o0 '

1
@ ซีอานมันเป็นStanisławเขียนด้วย "Ł" (อ่านว่า "แสวงหา" เป็นภาษาอังกฤษ)
ทิม

13

วิธีการจำลองทั้งหมดเกี่ยวข้องกับการแทนที่ตัวเลขสุ่มในฟังก์ชันเพื่อค้นหาช่วงของค่าสำหรับฟังก์ชัน

ฉันไม่เคยได้ยินคำจำกัดความของการจำลอง ตัวอย่างเช่นบทความของ Wikipedia เกี่ยวกับการจำลองและการจำลองด้วยคอมพิวเตอร์พูดถึงคำต่างๆเช่นการสุ่มและสุ่มสุ่มตัวอย่างสั้น ๆ เท่านั้น

ตัวอย่างง่ายๆของการจำลองที่ไม่เกี่ยวข้องกับการสุ่มดังนั้นจึงไม่ชัดเจนว่าการจำลองแบบมอนติคาร์โลจะเป็นดังต่อไปนี้:

ฉันต้องการจำลองพฤติกรรมของลูกตุ้มแบบง่ายและตั้งสมมติฐานที่ทำให้เข้าใจง่ายบางอย่าง (สายที่ไม่มีมวล, มวลที่ตรงต่อเวลา, ไม่มีแรงเสียดทาน, ไม่มีแรงภายนอกเช่นแรงโคลิโอลิส) จากนั้นฉันก็ได้ลูกตุ้มทางคณิตศาสตร์และสามารถเขียนสมการเชิงอนุพันธ์ที่อธิบายการเคลื่อนที่ของมันได้ จากนั้นฉันสามารถใช้ตัวแก้ปัญหาบางตัวสำหรับสมการเชิงอนุพันธ์เช่นวิธีRunge – Kuttaเพื่อจำลองวิถีของมันสำหรับเงื่อนไขเริ่มต้นที่กำหนด (ฉันยังสามารถโต้แย้งในทางทฤษฎีว่าฉันไม่จำเป็นต้องพิจารณาเงื่อนไขเริ่มต้นเพิ่มเติม)

วิธีนี้ฉันได้รับการจำลองค่อนข้างดีของลูกตุ้มจริงโดยไม่ต้องใช้หมายเลขสุ่ม ดังนั้นนี่ไม่ใช่การจำลอง Monte-Carlo

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


7

ไม่ได้การจำลองอนุภาคภายใต้แรงสามารถทำได้โดยใช้ Runge-Kutta หรืออัลกอริธึมที่กำหนดขึ้นมาอื่น ๆ ซึ่งไม่ใช่มอนติคาร์โล

Monte Carlo ใช้ในการคำนวณอินทิกรัล (คุณสามารถเรียกมันว่าการจำลอง แต่ในที่สุดมันก็แค่คำนวณการประมาณค่าตัวเลขของตัวประมาณ) อีกครั้งคุณสามารถใช้วิธีกำหนดขึ้นเพื่อทำเช่นนั้น (เช่นกฎสี่เหลี่ยมคางหมู)

ในวงกว้างคุณสามารถแยกอัลกอริทึมเพื่อคำนวณอินทิกรัลในแบบกำหนดขึ้นและไม่กำหนดได้ Monte Carlo เป็นวิธีการที่ไม่สามารถกำหนดได้ Quasi-Monte Carlo เป็นอีกหนึ่ง กฎรูปสี่เหลี่ยมคางหมูเป็นอัลกอริทึมที่กำหนดไว้ล่วงหน้า


4

ขอผมใช้คำอธิบายที่ง่ายกว่านี้ แบบจำลอง "what-if" คือการจำลอง (แบบกำหนดขึ้นเอง) สมมติว่าคุณมีระบบที่ซับซ้อนเช่นโรงงานแปรรูปวิดเจ็ต คุณต้องการประเมินพารามิเตอร์ประสิทธิภาพบางค่าเช่นราคา คุณสร้างแบบจำลองทางคณิตศาสตร์ของโรงงานแล้วเลือกสมมติฐานต่าง ๆ สำหรับปัจจัยเฉพาะในแบบจำลองเช่นความเร็วที่วิดเจ็ตเคลื่อนที่ผ่านการดำเนินการต่าง ๆ หรือเปอร์เซ็นต์การไหลในทิศทางต่าง ๆ หรือจำนวนวิดเจ็ตที่คุณจะประมวลผล แบบจำลองเป็นการจำลองของโรงงานและสมมติฐานแต่ละชุดจะให้ค่าประมาณของพารามิเตอร์ประสิทธิภาพนั้น

ตอนนี้แนะนำความไม่แน่นอน คุณไม่รู้ว่าอุปสงค์สำหรับวิดเจ็ตจะเป็นอย่างไรในเดือนหน้า แต่คุณต้องประเมินค่าใช้จ่าย ดังนั้นแทนที่จะบอกว่าความต้องการจะเป็น 1,000 วิดเจ็ตคุณประเมินการกระจายความน่าจะเป็นสำหรับความต้องการ จากนั้นคุณสุ่มตัวอย่างค่าความต้องการจากการแจกแจงนั้นและใช้ค่าเหล่านั้นสำหรับการสมมติของคุณ ในขณะที่คุณอยู่ในนั้นคุณสามารถใช้การแจกแจงความน่าจะเป็นสำหรับสมมติฐานอื่น ๆ ได้เช่นกัน คุณใช้แบบจำลองซ้ำแล้วซ้ำอีกเสียบปลั๊กในสมมติฐานที่สุ่มตัวอย่างจากการแจกแจงความน่าจะเป็นต่าง ๆ ผลลัพธ์จะเป็นการกระจายตัวของประมาณการต้นทุน นั่นคือแง่มุมของ Monte Carlo

Monte Carlo เป็น "คุณสมบัติ" หรือ "เครื่องมือ" ที่อยู่ด้านบนของแบบจำลองสถานการณ์ แทนที่จะเป็นการจำลองด้วยชุดข้อสมมติฐานชุดเดียวสำหรับการประมาณค่าเดียวมันทำการรวบรวมแบบจำลองโดยใช้การสุ่มเลือกแบบสุ่ม


2

ในทฤษฎีเกมโดยเฉพาะวิธีการที่ใช้การสุ่มในแบบจำลองเรียกว่าเทคนิคมอนเตคาร์โล โดยทั่วไปจะใช้เป็นส่วนหนึ่งของMonte Carlo Tree Search (MCTS)ในโปรแกรมที่ทันสมัย

(คำถามเดิมไม่ได้แยกความแตกต่างระหว่าง " monte carlo algorithm " และ " monte carlo method " ซึ่งอาจอธิบายความไม่เห็นด้วยกับคำตอบบางส่วนได้ที่นี่)

ตัวอย่างเช่นในเกมที่กำลังเดินทาง (และเกมอื่น ๆ ทั้งหมดที่ฉันรู้จักในการใช้ MCTS) การจำลองเรียกว่า playouts การเล่นแบบสุ่มใช้กฎชุดที่สุด Light playouts เป็นคำพ้องสำหรับ playouts สุ่มหรือกรองสิ่งที่ไม่ดีที่ตรวจพบได้ง่าย playouts หนักใช้ heuristic เพิ่มเติมเพื่อกรองการเคลื่อนไหวมากขึ้น (โดยวิธีการเล่นมักจะจบเกมดังนั้นการเล่นแต่ละครั้งใช้เวลาโดยประมาณเท่ากัน) แต่ทั้งหมดถูกอ้างถึงเป็นแบบจำลอง "monte carlo"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.