ความแตกต่างระหว่างการจำลองและการจำลองคืออะไร


97

ฉันเห็นการจำลองและการจำลองทางวิทยาศาสตร์คอมพิวเตอร์บ่อยครั้ง คำสองคำนี้ดูเหมือนตรงกัน มีความแตกต่างระหว่างการจำลองและการจำลองหรือไม่?

คำตอบ:


108

ใช่แนวคิดแตกต่างกัน


การจำลอง

A simulationเป็นระบบที่ทำงานคล้ายกับอย่างอื่น แต่มีการใช้งานในวิธีที่แตกต่างอย่างสิ้นเชิง มันแสดงพฤติกรรมพื้นฐานของระบบ แต่อาจไม่จำเป็นต้องยึดตามกฎทั้งหมดของระบบที่กำลังจำลอง มันอยู่ที่นั่นเพื่อให้คุณมีความคิดเกี่ยวกับสิ่งที่ทำงาน

ตัวอย่าง

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


การแข่งขัน

An emulationเป็นระบบที่ทำงานเหมือนอย่างอื่นและปฏิบัติตามกฎทั้งหมดของระบบที่ถูกจำลอง เป็นการจำลองแบบสมบูรณ์ของระบบอื่นได้อย่างมีประสิทธิภาพลงไปสู่ระบบฐานสองที่เข้ากันได้กับอินพุตและเอาต์พุตของระบบที่จำลองระบบ แต่ทำงานในสภาพแวดล้อมที่แตกต่างกับสภาพแวดล้อมของระบบที่จำลองแบบดั้งเดิม กฎได้รับการแก้ไขและไม่สามารถเปลี่ยนแปลงได้หรือระบบล้มเหลว

ตัวอย่าง

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


18
"ทำตัวเหมือน exacly ... " อาจไม่จำเป็น สิ่งสำคัญคือมัน "ทำซ้ำพฤติกรรมภายนอกที่แน่นอน" ในส่วนที่เกี่ยวกับสิ่งที่ใช้
Emilio Garavaglia

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

16

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

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


การจำลองเป็นการทำงานของซอฟต์แวร์ X ที่สร้างขึ้นสำหรับแพลตฟอร์ม A บนแพลตฟอร์ม B โดยไม่ต้องเปลี่ยนซอฟต์แวร์เอง สิ่งนี้ต้องการสร้างแบบจำลองของ A ที่ทำงานบน B และแน่นอนว่าต้องสร้างแบบจำลองทุกอย่างเกี่ยวกับ A ที่เกี่ยวข้องกับการเรียกใช้โค้ด (ในทางทฤษฎีคุณสามารถละเว้นการสนับสนุน opcodes ที่คุณรู้ว่าซอฟต์แวร์นี้ไม่เคยใช้ แต่หายาก - การทำอีมูเลเตอร์นั้นเป็นงานหนักและคุ้มค่ากว่าที่จะทำอย่างละเอียดและมีสิ่งที่สามารถนำกลับมาใช้ใหม่ได้กว่า kludge ใช้งานได้เฉพาะกับ S. )


7

ทั้งสองหมายถึงสิ่งที่ทำงานของอย่างอื่น

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

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

กล่าวอีกนัยหนึ่งการจำลองเกิดขึ้นใน "โลกคู่ขนาน" ในขณะที่การจำลองเกิดขึ้นใน "โลกที่ถูกแทนที่"


3
สิ่งนี้จะตอบคำถามของ OP ในแง่ของวิทยาศาสตร์คอมพิวเตอร์ได้อย่างไร ไม่มีสิ่งใดที่ใส่ใจหรือหมดสติเกี่ยวกับพวกเขา การจำลองเป็นจริงเช่นเดียวกับการจำลอง จุดประสงค์ของพวกเขานั้นแตกต่างกันมาก
S.Robins

@ S.Robins: สติ / หมดสติ! = จริง / ไม่จริง สติ = สิ่งที่คุณตัดสินใจอย่างชัดเจนไม่ได้สติสิ่งที่คุณไม่ได้ตัดสินใจด้วยตัวเองอย่างชัดเจน แอปที่ทำงานบนระบบ "จำลอง" ไม่ทราบเกี่ยวกับการจำลองนั้น แอปที่ทำงานบนระบบ "จำลอง" ต้องรู้เกี่ยวกับแอปเนื่องจากมันจะไม่จำเป็นต้องมีพฤติกรรมเหมือนกัน
Emilio Garavaglia

1
ไม่มีส่วนเกี่ยวข้องกับแอพที่ใช้งานอยู่และไม่มีส่วนเกี่ยวข้องกับการตัดสินใจอย่างมีสติหรือไม่รู้สึกตัว ความแตกต่างพื้นฐานคือว่าระบบนั้นถูกสร้างแบบจำลองโดยทั่วไปหรือทำซ้ำทั้งหมด
S.Robins

@ S.Robins: ฉันเห็นด้วยกับแนวคิดที่คุณหมายถึง แต่มีบางสิ่งบางอย่างที่มันไม่เข้าใจ: "emulator" มักจะคิดที่จะทำงานบางอย่างที่ด้านบนแทนที่บางสิ่งภายใต้ขอบเขตของแอปพลิเคชัน โดยทั่วไปแล้ว "ตัวจำลอง" จะถูกคิดให้รันด้วยตัวเองแทนที่จะเป็นแอปพลิเคชันจริง พวกเขาไม่ได้อยู่ในระดับที่เป็นนามธรรมเดียวกัน
Emilio Garavaglia

6

ในทางเทคนิคแล้วพวกเขาทั้งสองทำสิ่งเดียวกัน: ทำบางสิ่งในสภาพแวดล้อมที่ทำหน้าที่เหมือนเป็นของจริง

อย่างไรก็ตามแนวคิดมีความแตกต่างที่สำคัญคือ

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

การจำลองมักจะมีเป้าหมายในการทดสอบหรือทำนายกระบวนการชีวิตจริงในสภาพแวดล้อมที่ปลอดภัย เนื่องจากการจำลองถูกตัดการเชื่อมต่อจากโลกแห่งความเป็นจริงไม่มีอะไรเลวร้ายเกิดขึ้นได้ (การจำลองเครื่องบินตกไม่เคยฆ่าคนจริง)


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

เป้าหมายของการแข่งขันคือการเปลี่ยนฮาร์ดแวร์หรือซอฟต์แวร์ส่วนประกอบเทียบเท่ากับการทำงานเมื่อโมดูลเดิมจะไม่สามารถใช้ได้ (หรือได้กลายเป็นแพงเกินไปถ้าเพียง แต่จะรักษา) การจำลองสามารถตอบสนองเป้าหมายของการใช้ฮาร์ดแวร์ที่มีความยืดหยุ่นได้มากขึ้น - ไมโครคอนโทรลเลอร์ที่สามารถตั้งโปรแกรมได้สามารถเพิ่มตัวควบคุมที่ง่ายขึ้นได้หลายตัวสลับโหมดการจำลองตามต้องการ


3
"technically"พวกเขาแตกต่างอย่างสิ้นเชิง ความแตกต่างทางแนวคิดที่คุณอธิบายเป็นพื้นฐานของความแตกต่างนี้
S.Robins

@ S.Robins: โดย 'ทางเทคนิค' ฉันหมายถึงการใช้งานทางเทคนิคมักจะคล้ายกันหรือเทียบเท่า ความแตกต่างส่วนใหญ่เป็นสิ่งที่คุณใช้เพื่อ
tdammers

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

@ S.Robins - ฉันไม่เห็นด้วย ไม่ว่าคุณจะจำลองหรือจำลองไมโครโปรเซสเซอร์ที่กำหนดไม่ได้สร้างความแตกต่างให้กับการติดตั้งใช้งานมากนัก แต่สิ่งที่คุณทำจะทำเช่นนั้น
tdammers

1
@ ผู้ส่งสัญญาณ: โดยทั่วไปเป้าหมายการออกแบบหลักของอีมูเลเตอร์คือทำหน้าที่แทน "เรียลไทม์" สำหรับสิ่งที่ถูกจำลองในขณะที่เป้าหมายการออกแบบที่สำคัญของเครื่องจำลองคือการอนุญาตให้ทำการวิเคราะห์แบบเรียลไทม์ไม่จำเป็น และอาจมีปฏิสัมพันธ์กับกระบวนการพื้นฐาน ตัวจำลองบางตัวอาจเร็วและตัวเลียนแบบบางตัวอาจให้ความสามารถอย่างมากในการวิเคราะห์และ / หรือโต้ตอบกับกระบวนการพื้นฐาน แต่ลำดับความสำคัญทางวิศวกรรมแตกต่างกัน
supercat

1

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

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

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


1
ดูเหมือนว่ามีความเข้าใจผิดร่วมกันว่าการจำลองและการจำลองนั้นเหมือนกันอย่างมีประสิทธิภาพ อาจเป็นเพราะคำเลียนแบบนั้นอาจหมายถึงการสะท้อนพฤติกรรมของผู้อื่น (เช่นเด็กเลียนแบบพ่อของเขา) สิ่งนี้ไม่ถูกต้องทางเทคนิคเมื่อพูดถึงในแง่ของวิทยาศาสตร์คอมพิวเตอร์ โปรแกรมจำลองการบินไม่ใช่การจำลองเพราะอินพุต / เอาท์พุตทั้งหมดได้รับการจัดการผ่านโปรแกรมที่สร้างขึ้นเพื่อวัตถุประสงค์ - เครื่องจำลอง - ซึ่งไม่ได้จำลองพฤติกรรมของเครื่องบินที่จำลองไว้อย่างแน่นอนเนื่องจากไม่ได้ใช้คอมพิวเตอร์เครื่องเดียวกัน โปรแกรมที่เครื่องบินทำ ถ้ามันเป็นเช่นนั้นมันจะเป็นอีมูเลเตอร์
S.Robins

0

ทั้งสองคำมีความคล้ายคลึงกันมากในแนวคิด - ล้อเลียน

การจำลองหรือการจำลองใช้ประโยชน์จากซอฟต์แวร์เพื่อสร้างระบบจำลองที่คล้ายกับแบบจำลองเป้าหมายในส่วนที่เกี่ยวกับฟังก์ชั่นหลักพื้นฐานของมัน (โดยเฉพาะวิธีการพื้นฐาน)

ในทางกลับกันอีมูเลเตอร์ให้ความสำคัญกับความเหมือนภายนอกมากกว่าเมื่อเปรียบเทียบกับระบบเป้าหมาย มันมีความกังวลน้อยที่สุดสำหรับ "วิธี" ฟังก์ชั่นที่เลียนแบบ โดยทั่วไปแล้วตัวเลียนแบบจะใช้เมื่อทำงานในสภาพแวดล้อมที่แตกต่างอย่างสิ้นเชิง (ตัวอย่างเช่นระบบปฏิบัติการที่แตกต่างกัน) เมื่อเปรียบเทียบกับระบบดั้งเดิม


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