Trình mô phỏng trong Python là gì?

Mô hình hóa và mô phỏng trong Python

Lập mô hình và mô phỏng trong Python#

của Allen B. Downey

Lập mô hình và mô phỏng trong Python là một cuốn sách miễn phí. Nó có sẵn theo Creative Commons Ghi công-Phi thương mại-Chia sẻ tương tự 4. 0 Quốc tế (CC BY-NC-SA 4. 0), có nghĩa là bạn có thể tự do sao chép và sửa đổi nó, miễn là bạn ghi nhận tác phẩm và không sử dụng nó cho mục đích thương mại

Sách miễn phí khác của Allen Downey có sẵn từ Green Tea Press

Chạy sổ ghi chép

Tải sổ ghi chép xuống dưới dạng tệp Zip

Hoặc sử dụng các liên kết này để chạy sổ ghi chép trên Colab

  • Chương 1

  • chương 2

  • Chương 3

  • Chương 4

  • Chương 5

  • Chương 6

  • Chương 7

  • Chương 8

  • Chương 9

  • Chương 10

  • chương 11

  • Chương 12

  • Chương 13

  • Chương 14

  • Chương 15

  • Chương 16

  • Chương 17

  • Chương 18

  • Chương 19

  • Chương 20

  • Chương 21

  • Chương 22

  • Chương 23

  • Chương 24

  • Chương 25

  • Chương 26

tiếp theo

lời nói đầu

Trong bài viết này, tôi chỉ cho bạn cách tạo một lớp Simulation đơn giản trong Python. Mục đích của lớp là chạy mô phỏng nhiều lần và sau đó trả về số liệu thống kê (e. g. , trung bình, trung bình, v.v. ) trên kết quả mô phỏng

Hãy bắt đầu với một lớp Die đơn giản có phương thức

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0 trả về một số nguyên trong khoảng từ 1 đến 6 (bao gồm)

import random


class Die:
    def __init__(self, sides=6):
        self.sides = sides

    def roll(self):
        return random.randint(1, self.sides)

Chúng tôi muốn lớp Simulation của chúng tôi nhận hai đối số. một chức năng để chạy và số lần để chạy nó (

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0) và sau đó để chạy chức năng
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0 lần và trả về một báo cáo như thế này

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124

Đây là lớp Simulation thực hiện điều này

import statistics as stats


class SimulationNumeric:
    """Runs a function that returns a number n times and prints stats

    Args:
        fnct_to_run (function): The function to run
        iterations (integer): The number of times to run it"""

    def __init__(self, fnct_to_run, iterations):
        self._fnct_to_run = fnct_to_run
        self._iterations = iterations
        self._results = []
        self.run()

    @property
    def mode(self):
        try:
            return stats.mode(self._results)
        except:
            return None

    def run(self):
        for i in range(self._iterations):
            result = self._fnct_to_run()
            self._results.append(result)

        self.report()

    def report(self):
        max_num = max(self._results)
        min_num = min(self._results)
        mean = stats.mean(self._results)
        median = stats.median(self._results)
        mode = self.mode
        std_dev = stats.stdev(self._results)
        variance = stats.variance(self._results)
        print(
            f"""Number of Simulations: {self._iterations:,}
Max: {max_num}
Min: {min_num}
Mean: {mean}
Median: {median}
Mode: {mode}
Standard Deviation: {std_dev}
Variance: {variance}"""
        )


die = Die()
sim = SimulationNumeric(die.roll, 1000)

Lớp này sẽ hoạt động tốt với một hàm trả về một số

Lưu ý rằng lý do

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
3 được viết dưới dạng thuộc tính là không phải tất cả các tập kết quả đều có chế độ. Ví dụ: nếu hai số được cuộn cùng số lần và cả hai số đó được cuộn thường xuyên hơn bất kỳ số nào khác, thì sẽ không có chế độ. Trong trường hợp đó,
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
4 sẽ báo lỗi. Mã của chúng tôi bắt lỗi đó và trả về
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
5 cho chế độ trong trường hợp đó

Mô phỏng đang bắt chước các hoạt động diễn ra trong một hệ thống để nghiên cứu hành vi của nó. Phân tích và tạo mô hình của một hệ thống để dự đoán hoạt động của nó được gọi là mô hình hóa mô phỏng

Mô phỏng bắt chước một quy trình thực tế để xác định hoặc dự đoán phản ứng của toàn bộ hệ thống. Điều này giúp hiểu được sự phụ thuộc của từng bộ phận trong hệ thống, mối quan hệ và tương tác của chúng. Quá trình mô phỏng trong cuộc sống thực có thể tốn kém. Do đó, chúng tôi xây dựng một mô hình để giải quyết các ý tưởng tốn kém và phức tạp một cách hiệu quả. Xây dựng mô hình mô phỏng trong cơ quan, tổ chức giúp tăng lợi nhuận

Một mô hình là một bản sao của một bản gốc / vật thật. Một mô hình có thể là tất định hoặc xác suất. Một mô hình tất định là một mô hình không liên quan đến bất kỳ sự ngẫu nhiên nào. Đối với một điều kiện ban đầu nhất định, bạn luôn nhận được cùng một điều kiện cuối cùng

Một mô hình xác suất bao gồm tính ngẫu nhiên của các yếu tố. Ví dụ. tung đồng xu, có thể là ngửa hoặc sấp

Trình mô phỏng trong Python là gì?

Bây giờ hãy hiểu mô hình mô phỏng trong một lượt

Giả sử bạn phải mở một nhà hàng pizza và biết bạn sẽ cần bao nhiêu nhân viên để điều hành tốt. Các loại pizza khác nhau cần nhiều thời gian khác nhau để chuẩn bị. Ngoài ra, đơn đặt hàng không đến thống nhất với thời gian. Bạn muốn cung cấp cho họ dịch vụ tốt nhất có thể trong khi vẫn duy trì ngân sách của mình. Bạn không thể thuê rồi sa thải nhân viên để tìm ra số lượng tối ưu cần thiết để thiết kế một mô hình mô phỏng. Chúng ta có thể giải bài toán tìm số lượng nhân viên tối ưu ở trên bằng cách xây dựng mô hình mô phỏng theo các cách sau

  • thiết kế. xem xét các dịch vụ khác nhau do công ty cung cấp và do đó, các loại nhân viên khác nhau được yêu cầu cho các công việc khác nhau
  • Cuộc thí nghiệm. Xu hướng khách hàng đến vào các ngày trong tuần, cuối tuần và các dịp đặc biệt và do đó cần có nhân viên phù hợp
  • Tối ưu hóa. Tối ưu hóa số lượng công nhân sử dụng lâu dài bằng cách xem xét thử nghiệm
  • phân tích. Nếu tạo công ăn việc làm cho nhiều người đó phải chăng hoặc yêu cầu nhân viên làm thêm giờ, có thể kiếm thêm nhân công vào mùa lễ hội
  • Cải thiện. Tiếp tục giảm việc làm để đưa ra khi trực quan hóa kết quả phân tích

Trình mô phỏng trong Python là gì?

Các mô hình mô phỏng được xây dựng trước khi xây dựng một hệ thống mới hoặc thay đổi một hệ thống hiện có để tối ưu hóa hiệu suất của hệ thống và giảm khả năng xảy ra lỗi. Một trong những mô hình mô phỏng hàng đầu trong kịch bản ngày nay là Mô phỏng Monte Carlo

Mô phỏng Monte Carlo

Mô phỏng Monte Carlo là một kỹ thuật toán học giúp ước tính phân bố xác suất của các kết quả sự kiện khác nhau. Dựa trên những xác suất đó, nhóm phân tích rủi ro quyết định xem họ có sẵn sàng chấp nhận rủi ro hay không. Kỹ thuật này liên tục lấy các số ngẫu nhiên giữa giới hạn tối thiểu và tối đa và dự đoán kết quả của nó. Thông thường, việc lấy mẫu được thực hiện trên quy mô lớn, vì vậy chúng tôi nhận được tất cả các kết quả có thể xảy ra. Sau đó, chúng tôi vẽ biểu đồ phân phối xác suất bằng cách sử dụng các nhà phân tích rủi ro tính toán xác suất rủi ro

Ví dụ: hãy xem xét ví dụ trên, sự xuất hiện của khách hàng có thể thay đổi trong một phạm vi cụ thể. Chúng tôi có thể tạo một mô hình tạo ra một số ngẫu nhiên giữa số lượng tối đa và tối thiểu và có thể hình dung phạm vi công nhân được yêu cầu tương ứng

Hãy lấy một ví dụ cơ bản khác để hiểu mô phỏng Monte Carlo bằng cách tung xúc xắc. Giả sử chúng ta tung hai con xúc xắc và chúng ta muốn dự đoán xác suất nhận được tổng là 12.  

Dưới đây là mã python để thực hiện với các nhận xét để hiểu rõ hơn

Python3




Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
3

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
4
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
5

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
4
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
7

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
4
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
9

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
2

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
40
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
41

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
42
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
43
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
44
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
45
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
46
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
47
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
48

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
51

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
52

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
53
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
54
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
55

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
56
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
57
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
58
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
59
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
40
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
41
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
46
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
43
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
44

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
42
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
46
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
54
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
48
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
49
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
48

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
42
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
72

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
0

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
75

Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
76
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
54
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
78
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
79
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
54
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
41
Number of Simulations: 1,000
Max: 6
Min: 1
Mean: 3.522
Median: 4.0
Mode: 4
Standard Deviation: 1.7018849586304041
Variance: 2.8964124124124124
48

đầu ra

Trình mô phỏng trong Python là gì?

Từ đường cong phân phối xác suất trên, ta nhận được giá trị của xác suất là 0. 025 để nhận được 12. Tương tự, chúng ta có thể áp dụng kỹ thuật Monte Carlo để giải các bài toán khác nhau

Trình mô phỏng trong Python là gì?

Mô phỏng là bắt chước các hoạt động diễn ra trong một hệ thống để nghiên cứu hành vi của hệ thống đó . Phân tích và tạo mô hình của một hệ thống để dự đoán hoạt động của nó được gọi là mô hình hóa mô phỏng.

Tại sao giả lập được sử dụng cho?

Mô phỏng có thể được sử dụng để điều chỉnh hiệu suất, tối ưu hóa quy trình, cải thiện độ an toàn, thử nghiệm lý thuyết, đào tạo nhân viên và thậm chí để giải trí trong trò chơi điện tử! Scientifically modelling systems allows a user to gain an insight into the effects of different conditions and courses of action.

Giả lập trong lập trình hệ thống là gì?

Trình mô phỏng là gói máy tính cho phép một người mô phỏng hệ thống có trong một lớp hệ thống cụ thể mà không cần hoặc có rất ít lập trình . Ví dụ: hiện tại có sẵn các trình mô phỏng cho một số loại hệ thống sản xuất, máy tính và thông tin liên lạc [7].

Python có được sử dụng để mô phỏng không?

Python là ngôn ngữ lập trình cho mô phỏng thần kinh .