Hướng dẫn what is simulator in python? - trình mô phỏng trong python là gì?

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Mô phỏng các quy trình trong thế giới thực bằng Python với Simpy This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Simulating Real-World Processes in Python With SimPy

Thế giới thực có đầy đủ các hệ thống, như sân bay và đường cao tốc, thường xuyên bị tắc nghẽn và chậm trễ. Khi các hệ thống này không được tối ưu hóa, sự kém hiệu quả của chúng có thể dẫn đến vô số khách hàng không hài lòng và thời gian lãng phí. Trong hướng dẫn này, bạn sẽ học cách sử dụng khung Python từ ____27 để tạo các mô phỏng ảo sẽ giúp bạn giải quyết các vấn đề như thế này.

import simpy
import random
import statistics
7 framework to create virtual simulations that will help you solve problems like these.

Trong hướng dẫn này, bạn sẽ học cách:

  • Sử dụng mô phỏng để mô hình hóa quy trình thực tế a simulation to model a real-world process
  • Tạo thuật toán từng bước để gần đúng một hệ thống phức tạp a step-by-step algorithm to approximate a complex system
  • Thiết kế và điều hành mô phỏng trong thế giới thực bằng Python với
    import simpy
    import random
    import statistics
    
    7
    and run a real-world simulation in Python with
    import simpy
    import random
    import statistics
    
    7

Trong hướng dẫn này, bạn sẽ tạo ra một mô phỏng cho một rạp chiếu phim địa phương. Mục tiêu của bạn là cung cấp cho người quản lý một kịch bản để giúp tìm số lượng nhân viên tối ưu để có nhân viên. Bạn có thể tải xuống mã nguồn cho tập lệnh này bằng cách nhấp vào liên kết bên dưới:

Mô phỏng là gì

Một mô phỏng là một đại diện của một hệ thống trong thế giới thực. Người ta có thể sử dụng các mô hình toán học hoặc tính toán của hệ thống này để nghiên cứu cách thức hoạt động của nó hoặc những gì xảy ra khi các phần của nó được thay đổi. Mô phỏng được sử dụng trong các sân bay, nhà hàng, cơ học, cơ quan chính phủ và nhiều hệ thống khác nơi phân bổ nguồn lực kém có thể dẫn đến tắc nghẽn, không hài lòng của khách hàng và sự chậm trễ vận chuyển quan trọng.simulation is a representation of a real-world system. One can use mathematical or computational models of this system to study how it works, or what happens when parts of it are changed. Simulations are used in airports, restaurants, mechanics, government agencies, and many other systems where poor resource allocation can lead to congestion, customer dissatisfaction, and critical transportation delays.

Một hệ thống có thể là bất kỳ môi trường nơi mọi thứ xảy ra. Ví dụ về các hệ thống trong thế giới thực bao gồm rửa xe, ngân hàng, nhà máy sản xuất, sân bay, bưu điện, trung tâm cuộc gọi, v.v. Các hệ thống này có các tác nhân trải qua các quá trình trong đó. Ví dụ:system can be any environment where things happen. Examples of real-world systems include car washes, banks, manufacturing plants, airports, post offices, call centers, and more. These systems have agents that undergo processes within them. For instance:

  • Rửa xe sẽ có xe trải qua quá trình giặt. will have cars go through the washing process.
  • Một sân bay sẽ có hành khách trải qua quá trình kiểm tra an ninh. will have passengers go through the security check process.
  • Một trung tâm cuộc gọi sẽ có khách hàng trải qua quá trình nói chuyện với một công cụ tiếp thị qua điện thoại. will have customers go through the process of speaking with a telemarketer.

Mối quan hệ này được tóm tắt trong bảng dưới đây:

Hệ thốngĐại lýQuá trình
Rửa xeXe hơiRửa sạch
Phi trườngHành kháchKiểm tra an ninh
Trung tâm cuộc gọikhách hàngNói chuyện với một người tiếp thị qua điện thoại

Hiểu các quá trình mà các tác nhân trải qua trong một hệ thống là một thành phần quan trọng của lập kế hoạch hậu cần, đặc biệt là đối với các tổ chức quy mô lớn. Ví dụ, một sân bay có thể thấy thời gian chờ đợi của hành khách tại một điểm kiểm tra an ninh tăng vọt nếu có đủ công nhân ngày hôm đó. Tương tự, thư nhạy cảm với thời gian có thể bị trì hoãn theo ngày (hoặc thậm chí vài tuần) nếu nó được định tuyến đúng cách.

Những trường hợp tắc nghẽn này có thể gây ra hậu quả thực tế về thời gian và tiền bạc, vì vậy, điều quan trọng là có thể mô hình hóa các quy trình này trước đó. Điều này cung cấp cho bạn một ý tưởng về nơi hệ thống có thể gặp vấn đề và cách phân bổ tài nguyên trước để giải quyết những vấn đề đó theo cách hiệu quả nhất có thể.real-life consequences on time and money, so it’s important to be able to model these processes beforehand. This gives you an idea of where the system might run into problems and how resources should be allocated ahead of time to solve those problems in the most efficient way possible.

Cách mô phỏng hoạt động

Trong Python, bạn có thể sử dụng khung

import simpy
import random
import statistics
7 để mô phỏng sự kiện. Đầu tiên, hãy xem nhanh cách một quá trình mô phỏng sẽ chạy trong Python. Dưới đây là đoạn mã từ mô phỏng hệ thống điểm kiểm tra bảo mật. Ba dòng mã sau đây thiết lập môi trường, vượt qua tất cả các chức năng cần thiết và chạy mô phỏng:

# Set up the environment
env = simpy.Environment()

# Assume you've defined checkpoint_run() beforehand
env.process(checkpoint_run(env, num_booths, check_time, passenger_arrival))

# Let's go!
env.run(until=10)

Dòng mã đầu tiên ở trên thiết lập môi trường. Bạn sẽ làm điều này bằng cách gán

class Theater(object):
    def __init__(self):
        # More to come!
0 cho biến mong muốn. Ở đây, nó có tên đơn giản là
class Theater(object):
    def __init__(self):
        # More to come!
1. Điều này nói với
import simpy
import random
import statistics
7 để tạo một đối tượng môi trường có tên
class Theater(object):
    def __init__(self):
        # More to come!
1 sẽ quản lý thời gian mô phỏng và di chuyển mô phỏng qua từng bước thời gian tiếp theo.environment. You’ll do this by assigning
class Theater(object):
    def __init__(self):
        # More to come!
0 to the desired variable. Here, it’s simply named
class Theater(object):
    def __init__(self):
        # More to come!
1. This tells
import simpy
import random
import statistics
7 to create an environment object named
class Theater(object):
    def __init__(self):
        # More to come!
1 that will manage the simulation time and move the simulation through each subsequent time step.

Khi bạn đã thiết lập môi trường của mình, bạn sẽ vượt qua tất cả các biến sẽ hoạt động như các tham số của bạn. Đây là những điều bạn có thể thay đổi để xem hệ thống sẽ phản ứng như thế nào với các thay đổi. Đối với hệ thống điểm kiểm tra bảo mật này, bạn đã sử dụng các tham số sau:parameters. These are the things you can vary to see how the system will react to changes. For this security checkpoint system, you’re using the following parameters:

  1. class Theater(object):
        def __init__(self):
            # More to come!
    
    1: Đối tượng môi trường để lên lịch và xử lý các sự kiện
    the environment object to schedule and process events
  2. class Theater(object):
        def __init__(self):
            # More to come!
    
    5: Số lượng gian hàng kiểm tra ID
    the number of ID check booths
  3. class Theater(object):
        def __init__(self):
            # More to come!
    
    6 thời gian cần thiết để kiểm tra ID hành khách
    the length of time it takes to check a passenger’s ID
  4. class Theater(object):
        def __init__(self):
            # More to come!
    
    7: Tỷ lệ hành khách đến hàng đợi
    the rate at which passengers arrive at the queue

Sau đó, nó thời gian để chạy mô phỏng! Bạn có thể làm điều này bằng cách gọi

class Theater(object):
    def __init__(self):
        # More to come!
8 và chỉ định thời gian bạn muốn mô phỏng chạy. Mô phỏng chạy trong vài phút, vì vậy mã mẫu này sẽ chạy mô phỏng trong 10 phút thời gian thực.

Tóm lại, đây là ba bước để chạy mô phỏng trong Python:

  1. Thiết lập môi trường. the environment.
  2. Vượt qua các tham số. in the parameters.
  3. Chạy mô phỏng. the simulation.

Nhưng có rất nhiều thứ đang diễn ra bên dưới mui xe! Bạn cần phải hiểu cách chọn các tham số đó và bạn sẽ phải xác định tất cả các chức năng sẽ được gọi khi mô phỏng được chạy.

Bắt đầu nào!

Làm thế nào để bắt đầu với import simpy import random import statistics 7

Có một vài việc cần làm bạn nên kiểm tra danh sách của mình trước khi tạo các mô phỏng trong Python. Điều đầu tiên bạn cần làm là đảm bảo bạn có một sự hiểu biết vững chắc về những điều cơ bản của Python. Cụ thể, bạn sẽ cần phải nắm bắt tốt các lớp học và máy phát điện.

Điều tiếp theo bạn sẽ muốn làm là cài đặt gói yêu cầu. Khung chính mà bạn sẽ sử dụng là

import simpy
import random
import statistics
7. Đây là gói cốt lõi sẽ tạo, quản lý và chạy mô phỏng của bạn. Bạn có thể cài đặt nó bằng
class Theater(object):
    def __init__(self, env):
        self.env = env
1:

$ python3 -m pip install simpy

Bạn cũng sẽ cần một vài mô-đun Python tích hợp. Bạn sẽ sử dụng mô -đun

class Theater(object):
    def __init__(self, env):
        self.env = env
2 để tính thời gian chờ trung bình và mô -đun
class Theater(object):
    def __init__(self, env):
        self.env = env
3 để tạo số ngẫu nhiên. Chúng đến như một phần của thư viện tiêu chuẩn Python, vì vậy bạn không cần phải cài đặt bất cứ điều gì mới.

Cuối cùng, bạn sẽ cần chọn cách bạn muốn chạy mô phỏng của mình. Nói chung, bạn có thể chọn một trong hai tùy chọn:

  1. Chạy nó một cách tương tác: Sử dụng sổ ghi chép Jupyter, trong đó mỗi khối mã sẽ chứa định nghĩa lớp hoặc chức năng của riêng nó. Đầu ra sẽ được hiển thị ở dưới cùng của máy tính xách tay. Use a Jupyter Notebook, where each code block will contain its own class or function definition. The output will be displayed at the bottom of the notebook.
  2. Chạy nó trong shell: Lưu mô phỏng của bạn dưới dạng tệp
    class Theater(object):
        def __init__(self, env):
            self.env = env
    
    4 và bảo Python chạy nó trong thiết bị đầu cuối của bạn. Đầu ra sẽ được in trực tiếp vào bảng điều khiển.
    Save your simulation as a
    class Theater(object):
        def __init__(self, env):
            self.env = env
    
    4 file and tell Python to run it in your terminal. The output will be printed directly to the console.

Chọn bất kỳ phương pháp nào bạn thoải mái nhất! Kết quả nên giống nhau.

Trong suốt hướng dẫn này, bạn sẽ thấy các tài liệu tham khảo về một tệp độc lập có tên

class Theater(object):
    def __init__(self, env):
        self.env = env
5. Khi bạn di chuyển qua hướng dẫn này, các khối mã sẽ tham chiếu
class Theater(object):
    def __init__(self, env):
        self.env = env
5 để giúp bạn theo dõi cách tất cả các phần khớp với nhau. Để tham khảo của bạn, bạn có thể truy cập toàn bộ mã cho
class Theater(object):
    def __init__(self, env):
        self.env = env
5 tại liên kết bên dưới:

Vui lòng lưu tệp

class Theater(object):
    def __init__(self, env):
        self.env = env
5 và theo dõi trong trình soạn thảo yêu thích của bạn!

Cách mô phỏng với gói import simpy import random import statistics 7

Bước đầu tiên để chạy mô phỏng trong

import simpy
import random
import statistics
7 là chọn một quy trình để mô hình hóa. Mô phỏng là tất cả về việc tạo ra một môi trường ảo để phản ánh một hệ thống trong thế giới thực. Trong cùng tinh thần đó, bạn sẽ mô phỏng một tình huống cho mô phỏng của bạn!

Hãy tưởng tượng bạn đã được thuê để giúp người quản lý cho một rạp chiếu phim nhỏ, địa phương. Nhà hát đã nhận được đánh giá kém do thời gian chờ đợi lâu. Người quản lý, người cũng quan tâm đến chi phí như anh ta về sự hài lòng của khách hàng, chỉ có thể đủ khả năng để giữ rất nhiều nhân viên trong đội ngũ nhân viên.long wait times. The manager, who is just as concerned about cost as he is about customer satisfaction, can only afford to keep so many employees on staff.

Người quản lý đặc biệt lo lắng về những gì sự hỗn loạn có thể mở ra khi những bộ phim bom tấn đó bắt đầu ra mắt: các dòng quấn quanh nhà hát, các nhân viên kéo dài đến giới hạn của họ, những người xem phim tức giận bỏ lỡ những cảnh mở đầu, đây chắc chắn là một tình huống cần tránh!

Sau khi kiểm tra các đánh giá, người quản lý đã có thể xác định rằng một người xem phim nhất định đến nhà hát của họ sẵn sàng dành nhiều nhất 10 phút kể từ khi họ đến cho đến khi họ đặt mông của họ vào một chỗ ngồi. Nói cách khác, thời gian chờ đợi trung bình cho một đêm tại nhà hát cần phải là 10 phút hoặc ít hơn. Người quản lý đã yêu cầu sự giúp đỡ của bạn để tìm ra một giải pháp để có được thời gian chờ đợi của khách hàng theo yêu cầu 10 phút này.average wait time for a night at the theater needs to be 10 minutes or less. The manager has asked for your help to figure out a solution to getting customer wait times under this 10 minute requirement.

Động não một thuật toán mô phỏng

Trước khi bạn viết ra một dòng mã duy nhất, điều quan trọng là trước tiên bạn phải tìm ra quá trình của bạn sẽ chạy trong cuộc sống thực như thế nào. Điều này là để đảm bảo rằng, khi bạn chuyển nó cho máy, quá trình này là một sự phản ánh chính xác về những gì khách hàng sẽ thực sự trải nghiệm. Tại đây, cách bạn có thể nghĩ qua các bước mà người xem phim có thể thực hiện để viết ra thuật toán của bạn:

  1. Đến nhà hát, xếp hàng và chờ đợi để mua vé. at the theater, get in line, and wait to purchase a ticket.
  2. Mua một vé từ phòng vé. a ticket from the box office.
  3. Chờ xếp hàng để kiểm tra vé. in line to have the ticket checked.
  4. Nhận vé được kiểm tra bởi một người mở. the ticket checked by an usher.
  5. Chọn có hay không để xếp hàng cho giá đỡ nhượng bộ: whether or not to get in line for the concession stand:
    • Nếu họ xếp hàng, thì họ mua thực phẩm. then they purchase food.
    • Nếu họ không xếp hàng, thì họ bỏ qua bước cuối cùng. then they skip to the last step.
  6. Đi tìm chỗ ngồi của họ. find their seat.

Đây là một lần lặp từng bước cho một người xem phim mua vé của họ tại phòng vé nhà hát. Bạn đã có thể thấy phần nào của quá trình này có thể được kiểm soát. Bạn có thể ảnh hưởng đến thời gian khách hàng chờ đợi bằng cách có nhiều nhân viên thu ngân hơn tại phòng vé.

Ngoài ra còn có những phần của quá trình có thể được kiểm soát, giống như bước đầu tiên. Bạn có thể kiểm soát số lượng khách hàng sẽ đến, hoặc họ sẽ làm như thế nào. Bạn có thể đoán, nhưng bạn có thể chỉ cần chọn một số, bởi vì đó sẽ là một sự phản ánh kém của thực tế. Đối với tham số này, điều tốt nhất bạn có thể làm là sử dụng dữ liệu có sẵn để xác định thời gian đến thích hợp.use available data to determine an appropriate arrival time.

Với những điều này trong tâm trí, đó là thời gian để xây dựng mô phỏng của bạn!

Thiết lập môi trường

Trước khi bạn bắt đầu xây dựng mô phỏng của mình, bạn cần đảm bảo rằng môi trường phát triển của bạn được cấu hình đúng. Điều đầu tiên bạn muốn làm là nhập các gói cần thiết. Bạn có thể làm điều này bằng cách khai báo các câu lệnh

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
1 ở đầu tệp của bạn:

import simpy
import random
import statistics

Đây là những thư viện chính mà bạn sẽ sử dụng để xây dựng một kịch bản cho người quản lý nhà hát. Hãy nhớ rằng, mục tiêu là tìm số lượng nhân viên tối ưu cho thời gian chờ trung bình dưới 10 phút. Để làm điều này, bạn sẽ cần phải thu thập khoảng thời gian mà mỗi người xem phim phải đến chỗ ngồi của họ. Bước tiếp theo là khai báo một danh sách để giữ những lần sau:

Danh sách này sẽ chứa tổng thời gian mỗi người xem phim dành cho việc di chuyển qua nhà hát, từ khi đến ngồi trên ghế của họ. Bạn khai báo danh sách này ở đầu tệp để bạn có thể sử dụng nó bên trong bất kỳ chức năng nào bạn xác định sau này.

Tạo môi trường: Định nghĩa lớp

Phần đầu tiên của mô phỏng mà bạn muốn xây dựng là bản thiết kế cho hệ thống. Đây sẽ là môi trường tổng thể bên trong mà mọi thứ xảy ra, và con người hoặc đối tượng di chuyển từ nơi này sang nơi khác. Hãy nhớ rằng, một môi trường có thể là một trong nhiều hệ thống khác nhau, như ngân hàng, rửa xe hoặc trạm kiểm soát bảo mật. Trong trường hợp này, môi trường là một rạp chiếu phim, vì vậy đó sẽ là tên của lớp của bạn:environment can be one of many different systems, like a bank, a car wash, or a security checkpoint. In this case, the environment is a movie theater, so that will be the name of your class:

class Theater(object):
    def __init__(self):
        # More to come!

Bây giờ, thời gian để suy nghĩ thông qua các phần của rạp chiếu phim. Tất nhiên, có chính nhà hát, đó là những gì bạn đã gọi là môi trường của bạn. Sau đó, bạn sẽ tuyên bố rõ ràng nhà hát là một

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
2 thực tế bằng cách sử dụng một trong các chức năng ____27. Ngay bây giờ, hãy gọi nó là
class Theater(object):
    def __init__(self):
        # More to come!
1 và thêm nó vào định nghĩa lớp:movie theater. Of course, there’s the theater itself, which is what you’ve called your environment. Later, you’ll explicitly declare the theater as an actual
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
2 using one of the
import simpy
import random
import statistics
7 functions. For now, call it
class Theater(object):
    def __init__(self):
        # More to come!
1 for short and add it to the class definition:

class Theater(object):
    def __init__(self, env):
        self.env = env

Được rồi, những gì khác có thể có trong một nhà hát? Bạn có thể tìm ra điều này bằng cách suy nghĩ thông qua thuật toán mô phỏng mà bạn đã lên kế hoạch trước đó. Khi một người xem phim đến, họ sẽ cần phải xếp hàng tại phòng vé, nơi một nhân viên thu ngân sẽ chờ đợi để giúp đỡ họ. Bây giờ bạn đã phát hiện ra hai điều về môi trường nhà hát:

  1. Có nhân viên thu ngân.cashiers.
  2. Người xem phim có thể mua vé từ họ.purchase tickets from them.

Nhân viên thu ngân là một nguồn tài nguyên mà nhà hát cung cấp cho khách hàng của mình và họ giúp những người xem phim thông qua quá trình mua vé. Ngay bây giờ, bạn không biết có bao nhiêu nhân viên thu ngân trong nhà hát mô phỏng. Trên thực tế, đó là vấn đề chính mà bạn đang cố gắng giải quyết. Làm thế nào để thời gian chờ thay đổi, tùy thuộc vào số lượng nhân viên thu ngân làm việc trong một đêm nhất định?resource that the theater makes available to its customers, and they help moviegoers through the process of purchasing a ticket. Right now, you don’t know how many cashiers are available in the simulated theater. In fact, that’s the very problem you’re trying to solve. How do wait times change, depending on the number of cashiers working on a given night?

Bạn có thể đi trước và gọi đây là biến không xác định

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
5. Giá trị chính xác mà biến này sẽ có thể được sắp xếp sau. Hiện tại, chỉ cần biết rằng nó là một phần không thể thiếu của môi trường nhà hát. Thêm nó vào định nghĩa lớp:

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

Tại đây, bạn thêm tham số mới

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
5 vào định nghĩa
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
7 của bạn. Sau đó, bạn tạo một tài nguyên
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
8 và sử dụng
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
9 để khai báo số lượng có thể có trong môi trường này tại bất kỳ thời điểm nào.

Có một bước nữa mà bạn sẽ cần phải thực hiện. Một nhân viên thu ngân sẽ không mua vé cho mình, phải không? Họ sẽ giúp người xem phim! Một lần nữa, bạn biết rằng quá trình mua vé này sẽ mất một khoảng thời gian nhất định. Nhưng chỉ là bao nhiêu thời gian?

Giả sử bạn đã yêu cầu người quản lý dữ liệu lịch sử về nhà hát, như đánh giá hiệu suất của nhân viên hoặc biên lai mua vé. Dựa trên dữ liệu này, bạn đã biết rằng trung bình, trung bình, từ 1 đến 2 phút để cấp vé tại phòng vé. Làm thế nào để bạn có được

import simpy
import random
import statistics
7 để bắt chước hành vi này? Nó chỉ mất một dòng mã:

yield self.env.timeout(random.randint(1, 3))

yield self.env.timeout(random.randint(1, 3))
1 bảo
import simpy
import random
import statistics
7 kích hoạt một sự kiện sau một khoảng thời gian nhất định đã trôi qua. Trong trường hợp này, sự kiện là một vé đã được mua.

Thời gian này mất một phút, hai phút hoặc ba phút. Bạn muốn mỗi người xem phim dành một lượng thời gian khác nhau tại nhân viên thu ngân. Để làm điều này, bạn sử dụng

yield self.env.timeout(random.randint(1, 3))
3 để chọn một số ngẫu nhiên giữa các giá trị thấp và cao đã cho. Sau đó, đối với mỗi người xem phim, mô phỏng sẽ chờ đợi khoảng thời gian được chọn.

Hãy cùng loại bỏ điều này trong một hàm gọn gàng và thêm nó vào định nghĩa lớp:

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

Một trong những sự kiện bắt đầu sự kiện trong

yield self.env.timeout(random.randint(1, 3))
4 là
yield self.env.timeout(random.randint(1, 3))
5, vì vậy chúng phải được thông qua như một đối số bắt buộc.

Đó là nó! Bạn đã chọn một tài nguyên giới hạn thời gian, xác định quy trình liên quan của nó và được mã hóa điều này trong định nghĩa lớp của bạn. Đối với hướng dẫn này, có thêm hai tài nguyên mà bạn cần phải khai báo:

  1. Ushers để kiểm tra vé to check tickets
  2. Máy chủ bán thực phẩm to sell food

Sau khi kiểm tra dữ liệu mà người quản lý đã gửi qua, bạn xác định rằng các máy chủ mất từ ​​1 đến 5 phút để hoàn thành đơn đặt hàng. Ngoài ra, những người sử dụng rất nhanh trong việc kiểm tra vé, với tốc độ trung bình là 3 giây!

Bạn cần phải thêm các tài nguyên này vào lớp của mình và xác định các chức năng tương ứng

yield self.env.timeout(random.randint(1, 3))
6 và
yield self.env.timeout(random.randint(1, 3))
7. Bạn có thể tìm ra mã sẽ trông như thế nào không? Khi bạn có một ý tưởng, bạn có thể mở rộng khối mã bên dưới để kiểm tra sự hiểu biết của bạn:

class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))

Hãy xem xét kỹ các tài nguyên và chức năng mới. Lưu ý cách họ tuân theo định dạng giống như mô tả ở trên.

yield self.env.timeout(random.randint(1, 3))
7 sử dụng
yield self.env.timeout(random.randint(1, 3))
3 để tạo số ngẫu nhiên trong khoảng từ 1 đến 5 phút, đại diện cho thời gian cần một người xem phim để đặt hàng và nhận thức ăn của họ.

Thời gian trễ đối với

yield self.env.timeout(random.randint(1, 3))
6 hơi khác một chút vì việc sử dụng chỉ mất 3 giây. Vì
import simpy
import random
import statistics
7 hoạt động trong vài phút, giá trị này cần được thông qua dưới dạng một phần của một phút, hoặc
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
2.

Di chuyển qua môi trường: Định nghĩa chức năng

Được rồi, bạn đã thiết lập môi trường bằng cách xác định một lớp. Bạn có tài nguyên và quy trình. Bây giờ bạn cần một

yield self.env.timeout(random.randint(1, 3))
5 để sử dụng chúng. Khi một
yield self.env.timeout(random.randint(1, 3))
5 đến nhà hát, họ sẽ yêu cầu một tài nguyên, chờ quá trình của nó hoàn thành, sau đó rời đi. Bạn sẽ tạo một chức năng, được gọi là
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
5, để theo dõi điều này:
yield self.env.timeout(random.randint(1, 3))
5
to use them. When a
yield self.env.timeout(random.randint(1, 3))
5 arrives at the theater, they’ll request a resource, wait for its process to complete, and then leave. You’ll create a function, called
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
5, to keep track of this:

def go_to_movies(env, moviegoer, theater):
    # Moviegoer arrives at the theater
    arrival_time = env.now

Có ba đối số được truyền cho chức năng này:

  1. class Theater(object):
        def __init__(self):
            # More to come!
    
    1:
    yield self.env.timeout(random.randint(1, 3))
    
    5 sẽ được điều khiển bởi môi trường, do đó, bạn sẽ vượt qua đây là đối số đầu tiên.
    The
    yield self.env.timeout(random.randint(1, 3))
    
    5 will be controlled by the environment, so you’ll pass this as the first argument.
  2. yield self.env.timeout(random.randint(1, 3))
    
    5: Biến này theo dõi mỗi người khi họ di chuyển qua hệ thống.
    This variable tracks each person as they move through the system.
  3. class Theater(object):
        def __init__(self, env, num_cashiers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
    9: Tham số này cho phép bạn truy cập vào các quy trình bạn đã xác định trong định nghĩa lớp tổng thể.
    This parameter gives you access to the processes you defined in the overall class definition.

Bạn cũng tuyên bố một biến

class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
0 để giữ thời gian mà mỗi
yield self.env.timeout(random.randint(1, 3))
5 đến nhà hát. Bạn có thể nhận được thời gian này bằng cách sử dụng cuộc gọi
import simpy
import random
import statistics
7 tới
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
3.

Bạn sẽ muốn mỗi quy trình từ

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
9 của bạn có các yêu cầu tương ứng trong
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
5. Ví dụ: quy trình đầu tiên trong lớp là
yield self.env.timeout(random.randint(1, 3))
4, sử dụng tài nguyên
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
7.
yield self.env.timeout(random.randint(1, 3))
5 sẽ cần đưa ra yêu cầu đối với tài nguyên
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
7 để giúp họ thông qua quy trình
yield self.env.timeout(random.randint(1, 3))
4. Ở đây, một bảng để tóm tắt điều này:requests in
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
5. For example, the first process in the class is
yield self.env.timeout(random.randint(1, 3))
4, which uses a
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
7 resource. The
yield self.env.timeout(random.randint(1, 3))
5 will need to make a request to the
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
7 resource to help them through the
yield self.env.timeout(random.randint(1, 3))
4 process. Here’s a table to summarize this:

Quá trình trong
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
9
Yêu cầu trong
class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
5
yield self.env.timeout(random.randint(1, 3))
4
Yêu cầu một
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
7
yield self.env.timeout(random.randint(1, 3))
6
Yêu cầu một
def go_to_movies(env, moviegoer, theater):
    # Moviegoer arrives at the theater
    arrival_time = env.now
6
yield self.env.timeout(random.randint(1, 3))
7
Yêu cầu một
def go_to_movies(env, moviegoer, theater):
    # Moviegoer arrives at the theater
    arrival_time = env.now
8

Nhân viên thu ngân là một tài nguyên được chia sẻ, có nghĩa là nhiều người xem phim sẽ sử dụng cùng một nhân viên thu ngân. Tuy nhiên, một nhân viên thu ngân chỉ có thể giúp một người xem phim tại một thời điểm, vì vậy bạn sẽ cần phải đưa một số hành vi chờ đợi vào mã của bạn. Ở đây, cách thức hoạt động của nó:

$ python3 -m pip install simpy
0

Ở đây, cách thức hoạt động của mã này:

  1. def go_to_movies(env, moviegoer, theater):
        # Moviegoer arrives at the theater
        arrival_time = env.now
    
    9:
    yield self.env.timeout(random.randint(1, 3))
    
    5 tạo yêu cầu sử dụng
    class Theater(object):
        def __init__(self, env, num_cashiers, num_servers, num_ushers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
            self.server = simpy.Resource(env, num_servers)
            self.usher = simpy.Resource(env, num_ushers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
        def check_ticket(self, moviegoer):
            yield self.env.timeout(3 / 60)
    
        def sell_food(self, moviegoer):
            yield self.env.timeout(random.randint(1, 5))
    
    7.
    yield self.env.timeout(random.randint(1, 3))
    
    5 generates a request to use a
    class Theater(object):
        def __init__(self, env, num_cashiers, num_servers, num_ushers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
            self.server = simpy.Resource(env, num_servers)
            self.usher = simpy.Resource(env, num_ushers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
        def check_ticket(self, moviegoer):
            yield self.env.timeout(3 / 60)
    
        def sell_food(self, moviegoer):
            yield self.env.timeout(random.randint(1, 5))
    
    7.
  2. $ python3 -m pip install simpy
    
    02:
    yield self.env.timeout(random.randint(1, 3))
    
    5 chờ
    class Theater(object):
        def __init__(self, env, num_cashiers, num_servers, num_ushers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
            self.server = simpy.Resource(env, num_servers)
            self.usher = simpy.Resource(env, num_ushers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
        def check_ticket(self, moviegoer):
            yield self.env.timeout(3 / 60)
    
        def sell_food(self, moviegoer):
            yield self.env.timeout(random.randint(1, 5))
    
    7 có sẵn nếu tất cả hiện đang được sử dụng. Để tìm hiểu thêm về từ khóa
    $ python3 -m pip install simpy
    
    05, hãy xem cách sử dụng máy phát điện và mang lại trong Python.
    yield self.env.timeout(random.randint(1, 3))
    
    5 waits for a
    class Theater(object):
        def __init__(self, env, num_cashiers, num_servers, num_ushers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
            self.server = simpy.Resource(env, num_servers)
            self.usher = simpy.Resource(env, num_ushers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
        def check_ticket(self, moviegoer):
            yield self.env.timeout(3 / 60)
    
        def sell_food(self, moviegoer):
            yield self.env.timeout(random.randint(1, 5))
    
    7 to become available if all are currently in use. To learn more about the
    $ python3 -m pip install simpy
    
    05 keyword, check out How to Use Generators and yield in Python.
  3. $ python3 -m pip install simpy
    
    06:
    yield self.env.timeout(random.randint(1, 3))
    
    5 sử dụng
    class Theater(object):
        def __init__(self, env, num_cashiers, num_servers, num_ushers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
            self.server = simpy.Resource(env, num_servers)
            self.usher = simpy.Resource(env, num_ushers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
        def check_ticket(self, moviegoer):
            yield self.env.timeout(3 / 60)
    
        def sell_food(self, moviegoer):
            yield self.env.timeout(random.randint(1, 5))
    
    7 có sẵn để hoàn thành quy trình đã cho. Trong trường hợp này, đó là để mua một vé với một cuộc gọi đến
    $ python3 -m pip install simpy
    
    09.
    yield self.env.timeout(random.randint(1, 3))
    
    5 uses an available
    class Theater(object):
        def __init__(self, env, num_cashiers, num_servers, num_ushers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
            self.server = simpy.Resource(env, num_servers)
            self.usher = simpy.Resource(env, num_ushers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
        def check_ticket(self, moviegoer):
            yield self.env.timeout(3 / 60)
    
        def sell_food(self, moviegoer):
            yield self.env.timeout(random.randint(1, 5))
    
    7 to complete the given process. In this case, that’s to purchase a ticket with a call to
    $ python3 -m pip install simpy
    
    09.

Sau khi một tài nguyên được sử dụng, nó phải được giải phóng cho tác nhân tiếp theo sử dụng. Bạn có thể làm điều này một cách rõ ràng với

$ python3 -m pip install simpy
10, nhưng trong mã trên, bạn sử dụng câu lệnh
$ python3 -m pip install simpy
11 thay thế. Phím tắt này cho biết mô phỏng tự động giải phóng tài nguyên sau khi quá trình hoàn tất. Nói cách khác, một khi vé được mua,
yield self.env.timeout(random.randint(1, 3))
5 sẽ rời đi và nhân viên thu ngân sẽ tự động sẵn sàng lấy khách hàng tiếp theo.

Khi một nhân viên thu ngân được giải phóng,

yield self.env.timeout(random.randint(1, 3))
5 sẽ dành thời gian mua vé của họ.
$ python3 -m pip install simpy
14 bảo mô phỏng đi đến ví dụ
$ python3 -m pip install simpy
15 và chạy quy trình
yield self.env.timeout(random.randint(1, 3))
4 trên
yield self.env.timeout(random.randint(1, 3))
5 này.
yield self.env.timeout(random.randint(1, 3))
5 sẽ lặp lại yêu cầu này, sử dụng, chu kỳ phát hành để kiểm tra vé của họ:request, use, release cycle to have their ticket checked:

$ python3 -m pip install simpy
1

Ở đây, cấu trúc cho mã là như nhau.

Sau đó, có một bước tùy chọn để mua thực phẩm từ giá đỡ. Bạn có thể biết liệu một người xem phim có muốn mua đồ ăn nhẹ và đồ uống hay không. Một cách để đối phó với sự không chắc chắn này là giới thiệu một chút ngẫu nhiên cho chức năng.randomness to the function.

Mỗi

yield self.env.timeout(random.randint(1, 3))
5 hoặc sẽ không muốn mua thực phẩm, mà bạn có thể lưu trữ dưới dạng giá trị boolean
$ python3 -m pip install simpy
20 hoặc
$ python3 -m pip install simpy
21. Sau đó, sử dụng mô -đun
class Theater(object):
    def __init__(self, env):
        self.env = env
3 để mô phỏng ngẫu nhiên quyết định xem
yield self.env.timeout(random.randint(1, 3))
5 cụ thể này có tiến hành đứng trên giá đỡ hay không:

$ python3 -m pip install simpy
2

Tuyên bố có điều kiện này sẽ trả về một trong hai kết quả:

  1. $ python3 -m pip install simpy
    
    20:
    yield self.env.timeout(random.randint(1, 3))
    
    5 sẽ yêu cầu một máy chủ và đặt hàng thực phẩm.
    The
    yield self.env.timeout(random.randint(1, 3))
    
    5 will request a server and order food.
  2. $ python3 -m pip install simpy
    
    21: Thay vào đó,
    yield self.env.timeout(random.randint(1, 3))
    
    5 sẽ đi tìm chỗ ngồi của họ mà không mua bất kỳ đồ ăn nhẹ nào.
    The
    yield self.env.timeout(random.randint(1, 3))
    
    5 will instead go to find their seats without purchasing any snacks.

Bây giờ, hãy nhớ mục tiêu của mô phỏng này là xác định số lượng nhân viên thu ngân, sử dụng và máy chủ nên có trong đội ngũ nhân viên để giữ thời gian chờ đợi dưới 10 phút. Để làm điều này, bạn sẽ cần phải biết mất bao lâu

yield self.env.timeout(random.randint(1, 3))
5 để đưa nó lên chỗ ngồi của họ. Bạn sử dụng
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
3 khi bắt đầu chức năng để theo dõi
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
0 và một lần nữa ở cuối khi mỗi
yield self.env.timeout(random.randint(1, 3))
5 được kết thúc với tất cả các quy trình và hướng vào nhà hát:

$ python3 -m pip install simpy
3

Bạn sử dụng

class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
3 để có thời gian mà
yield self.env.timeout(random.randint(1, 3))
5 đã hoàn thành tất cả các quy trình và đưa nó lên ghế của họ. Bạn trừ đi bộ phim phim ảnh
class Theater(object):
    def __init__(self, env, num_cashiers, num_servers, num_ushers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)
        self.server = simpy.Resource(env, num_servers)
        self.usher = simpy.Resource(env, num_ushers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))

    def check_ticket(self, moviegoer):
        yield self.env.timeout(3 / 60)

    def sell_food(self, moviegoer):
        yield self.env.timeout(random.randint(1, 5))
0 từ thời gian khởi hành này và thêm sự khác biệt về thời gian kết quả vào danh sách chờ của bạn,
$ python3 -m pip install simpy
35.

yield self.env.timeout(random.randint(1, 3))
5 này đã sẵn sàng để xem một số bản xem trước!

Làm cho mọi thứ xảy ra: Định nghĩa chức năng

Bây giờ bạn sẽ cần xác định một chức năng để chạy mô phỏng.

$ python3 -m pip install simpy
37 sẽ chịu trách nhiệm tạo ra một ví dụ của một nhà hát và tạo ra những người xem phim cho đến khi mô phỏng dừng lại. Điều đầu tiên chức năng này nên làm là tạo một thể hiện của một nhà hát:

$ python3 -m pip install simpy
4

Vì đây là quá trình chính, bạn sẽ cần phải vượt qua tất cả những điều chưa biết mà bạn đã tuyên bố cho đến nay:

  • class Theater(object):
        def __init__(self, env, num_cashiers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
    
    5
  • $ python3 -m pip install simpy
    
    39
  • $ python3 -m pip install simpy
    
    40

Đây là tất cả các biến mà mô phỏng cần tạo ra và kiểm soát môi trường, vì vậy, nó rất quan trọng để vượt qua tất cả. Sau đó, bạn xác định một biến

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
9 và nói với mô phỏng để thiết lập nhà hát với một số lượng nhân viên thu ngân, máy chủ và sử dụng nhất định.

Bạn cũng có thể muốn bắt đầu mô phỏng của mình với một vài người xem phim đang chờ tại nhà hát. Có lẽ sẽ có một vài người sẵn sàng để đi ngay khi cánh cửa mở ra! Người quản lý nói rằng sẽ mong đợi khoảng 3 người xem phim phù hợp để mua vé ngay khi phòng vé mở cửa. Bạn có thể bảo mô phỏng đi trước và di chuyển qua nhóm ban đầu này như vậy:

$ python3 -m pip install simpy
5

Bạn sử dụng

$ python3 -m pip install simpy
42 để điền vào nhà hát với 3 người xem phim. Sau đó, bạn sử dụng
$ python3 -m pip install simpy
14 để nói với mô phỏng để chuẩn bị di chuyển chúng qua nhà hát. Phần còn lại của những người xem phim sẽ đến nhà hát trong thời gian riêng của họ. Vì vậy, chức năng nên tiếp tục gửi khách hàng mới vào nhà hát miễn là mô phỏng đang chạy.

Bạn không biết rằng những người xem phim mới sẽ mất bao lâu để đến nhà hát, vì vậy bạn quyết định xem dữ liệu trong quá khứ. Sử dụng biên lai thời gian từ phòng vé, bạn biết rằng những người xem phim có xu hướng đến nhà hát, trung bình, cứ sau 12 giây. Bây giờ tất cả những gì bạn phải làm là nói với chức năng chờ đợi điều này từ lâu trước khi tạo ra một người mới:

$ python3 -m pip install simpy
6

Lưu ý rằng bạn sử dụng số thập phân

$ python3 -m pip install simpy
44 để biểu thị 12 giây. Để có được số này, bạn chỉ cần chia 12 giây cho 60 giây, đó là số giây trong một phút.

Sau khi chờ đợi, chức năng sẽ tăng

yield self.env.timeout(random.randint(1, 3))
5 thêm 1 và tạo người tiếp theo. Chức năng của Trình tạo là cùng một chức năng bạn đã sử dụng để khởi tạo 3 người xem phim đầu tiên:

$ python3 -m pip install simpy
7

Đó là nó! Khi bạn gọi chức năng này, mô phỏng sẽ tạo ra 3 người xem phim để bắt đầu và bắt đầu di chuyển chúng qua nhà hát với

class Theater(object):
    def __init__(self, env, num_cashiers):
        self.env = env
        self.cashier = simpy.Resource(env, num_cashiers)

    def purchase_ticket(self, moviegoer):
        yield self.env.timeout(random.randint(1, 3))
5. Sau đó, những người xem phim mới sẽ đến nhà hát với khoảng 12 giây và di chuyển qua nhà hát trong thời gian riêng của họ.

Tính thời gian chờ: Định nghĩa chức năng

Tại thời điểm này, bạn nên có một danh sách

$ python3 -m pip install simpy
35 chứa tổng số lượng thời gian mà mỗi người xem phim phải đưa nó vào chỗ ngồi của họ. Bây giờ, bạn sẽ muốn xác định một chức năng để giúp tính toán thời gian trung bình mà
yield self.env.timeout(random.randint(1, 3))
5 dành từ khi họ đến khi họ hoàn thành việc kiểm tra vé của họ.
$ python3 -m pip install simpy
49 không chỉ điều này:

$ python3 -m pip install simpy
8

Hàm này lấy danh sách

$ python3 -m pip install simpy
35 của bạn làm đối số và sử dụng
$ python3 -m pip install simpy
51 để tính thời gian chờ trung bình.

Vì bạn tạo ra một tập lệnh sẽ được người quản lý rạp chiếu phim sử dụng, bạn sẽ muốn đảm bảo rằng đầu ra có thể được người dùng đọc dễ dàng. Bạn có thể thêm một chức năng gọi là

$ python3 -m pip install simpy
52 để làm điều này:

$ python3 -m pip install simpy
9

Phần cuối cùng của chức năng sử dụng

$ python3 -m pip install simpy
53 để trả về kết quả trong vài phút và giây, do đó, người quản lý có thể dễ dàng hiểu được đầu ra của chương trình.

Chọn tham số: Định nghĩa chức năng đầu vào của người dùng

Khi bạn đã xây dựng các chức năng này, bạn đã chạy thành một vài biến chưa được xác định rõ ràng:

  • class Theater(object):
        def __init__(self, env, num_cashiers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
    
    5
  • $ python3 -m pip install simpy
    
    39
  • $ python3 -m pip install simpy
    
    40

Các biến này là các tham số mà bạn có thể thay đổi để xem cách mô phỏng thay đổi. Nếu một bộ phim bom tấn có khách hàng xếp hàng xung quanh khối, có bao nhiêu nhân viên thu ngân? Điều gì sẽ xảy ra nếu mọi người đang bay qua phòng vé nhưng bị mắc kẹt trong nhượng bộ? Giá trị nào của

$ python3 -m pip install simpy
39 sẽ giúp giảm bớt dòng chảy?change to see how the simulation changes. If a blockbuster movie has customers lining up around the block, how many cashiers should be working? What if people are flying through the box office but getting stuck at concessions? What value of
$ python3 -m pip install simpy
39 will help ease the flow?

Bất cứ ai đang sử dụng mô phỏng của bạn cần có khả năng thay đổi các giá trị của các tham số này để thử các kịch bản khác nhau. Để kết thúc này, bạn sẽ tạo một hàm trợ giúp để lấy các giá trị này từ người dùng:

import simpy
import random
import statistics
0

Chức năng này chỉ đơn giản gọi chức năng Python từ

$ python3 -m pip install simpy
58 để truy xuất dữ liệu từ người dùng. Bởi vì đầu vào của người dùng có nguy cơ bị lộn xộn, bạn có thể bao gồm một điều khoản
$ python3 -m pip install simpy
59 để bắt bất cứ điều gì không hợp lệ. Nếu người dùng nhập dữ liệu xấu, thì mô phỏng sẽ chạy với các giá trị mặc định.

Hoàn thiện thiết lập: Định nghĩa chức năng chính

Chức năng cuối cùng mà bạn sẽ muốn tạo là

$ python3 -m pip install simpy
60. Điều này sẽ đảm bảo tập lệnh của bạn chạy theo thứ tự thích hợp khi bạn thực thi nó trên dòng lệnh. Bạn có thể đọc thêm về
$ python3 -m pip install simpy
60 trong việc xác định các chức năng chính trong Python. Ở đây, những gì
$ python3 -m pip install simpy
60 của bạn sẽ trông như thế nào:

import simpy
import random
import statistics
1

Ở đây, cách thức hoạt động của

$ python3 -m pip install simpy
60:

  1. Thiết lập môi trường của bạn bằng cách tuyên bố một hạt giống ngẫu nhiên. Điều này đảm bảo đầu ra của bạn sẽ trông giống như những gì bạn thấy trong hướng dẫn này. your environment by declaring a random seed. This ensures your output will look like what you see in this tutorial.
  2. Truy vấn người dùng chương trình của bạn cho một số đầu vào. the user of your program for some input.
  3. Tạo môi trường và lưu nó dưới dạng biến
    class Theater(object):
        def __init__(self):
            # More to come!
    
    1, sẽ di chuyển mô phỏng qua mỗi bước thời gian.
    the environment and save it as the variable
    class Theater(object):
        def __init__(self):
            # More to come!
    
    1, which will move the simulation through each time step.
  4. Nói với
    import simpy
    import random
    import statistics
    
    7 để chạy quá trình
    $ python3 -m pip install simpy
    
    37, tạo ra môi trường nhà hát và tạo ra những người xem phim để di chuyển qua nó.
    import simpy
    import random
    import statistics
    
    7 to run the process
    $ python3 -m pip install simpy
    
    37, which creates the theater environment and generates moviegoers to move through it.
  5. Xác định thời gian bạn muốn mô phỏng chạy. Là một giá trị mặc định, mô phỏng được đặt để chạy trong 90 phút. how long you want the simulation to run. As a default value, the simulation is set to run for 90 minutes.
  6. Lưu trữ đầu ra của
    $ python3 -m pip install simpy
    
    49 trong hai biến,
    $ python3 -m pip install simpy
    
    68 và
    $ python3 -m pip install simpy
    
    69.
    the output of
    $ python3 -m pip install simpy
    
    49 in two variables,
    $ python3 -m pip install simpy
    
    68 and
    $ python3 -m pip install simpy
    
    69.
  7. Sử dụng
    $ python3 -m pip install simpy
    
    70 để hiển thị kết quả cho người dùng.
    $ python3 -m pip install simpy
    
    70 to show the results to the user.

Với điều này, thiết lập đã hoàn tất!

Cách chạy mô phỏng

Chỉ với một vài dòng mã nữa, bạn sẽ có thể xem mô phỏng của mình trở nên sống động. Nhưng trước tiên, ở đây, một cái nhìn tổng quan về các chức năng và các lớp mà bạn đã xác định cho đến nay:

  • $ python3 -m pip install simpy
    
    15: Định nghĩa lớp này đóng vai trò là bản thiết kế cho môi trường bạn muốn mô phỏng. Nó xác định một số thông tin về môi trường đó, giống như loại tài nguyên nào có sẵn và quy trình nào được liên kết với chúng. This class definition serves as a blueprint for the environment you want to simulate. It determines some information about that environment, like what kinds of resources are available, and what processes are associated with them.

  • class Theater(object):
        def __init__(self, env, num_cashiers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
    5: Hàm này đưa ra các yêu cầu rõ ràng để sử dụng tài nguyên, trải qua quá trình liên quan và sau đó phát hành nó cho người xem phim tiếp theo. This function makes explicit requests to use a resource, goes through the associated process, and then releases it to the next moviegoer.

  • $ python3 -m pip install simpy
    
    37: Hàm này kiểm soát mô phỏng. Nó sử dụng bản thiết kế lớp
    $ python3 -m pip install simpy
    
    15 để tạo ra một ví dụ của một nhà hát, và sau đó gọi
    class Theater(object):
        def __init__(self, env, num_cashiers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
    5 để tạo và di chuyển mọi người qua nhà hát.
    This function controls the simulation. It uses the
    $ python3 -m pip install simpy
    
    15 class blueprint to create an instance of a theater, and then calls on
    class Theater(object):
        def __init__(self, env, num_cashiers):
            self.env = env
            self.cashier = simpy.Resource(env, num_cashiers)
    
        def purchase_ticket(self, moviegoer):
            yield self.env.timeout(random.randint(1, 3))
    
    5 to generate and move people through the theater.

  • $ python3 -m pip install simpy
    
    49: Chức năng này tìm thấy thời gian trung bình cần
    yield self.env.timeout(random.randint(1, 3))
    
    5 để đi qua nhà hát.
    This function finds the average time it takes a
    yield self.env.timeout(random.randint(1, 3))
    
    5 to make it through the theater.

  • $ python3 -m pip install simpy
    
    52: Hàm này đảm bảo đầu ra cuối cùng dễ dàng cho người dùng đọc. This function ensures the final output is easy for the user to read.

  • $ python3 -m pip install simpy
    
    79: Hàm này cho phép người dùng xác định một số tham số, như có bao nhiêu nhân viên thu ngân. This function allows the user to define some parameters, like how many cashiers are available.

  • $ python3 -m pip install simpy
    
    60: Hàm này đảm bảo rằng tập lệnh của bạn chạy đúng trong dòng lệnh. This function ensures that your script runs properly in the command line.

Bây giờ, bạn chỉ cần thêm hai dòng mã để gọi chức năng chính của mình:

import simpy
import random
import statistics
2

Với điều đó, kịch bản của bạn đã sẵn sàng để chạy! Mở thiết bị đầu cuối của bạn, điều hướng đến nơi bạn đã lưu trữ

class Theater(object):
    def __init__(self, env):
        self.env = env
5 và chạy lệnh sau:

import simpy
import random
import statistics
3

Bạn sẽ được nhắc chọn các tham số bạn muốn cho mô phỏng của mình. Tại đây, đầu ra trông như thế nào với các tham số mặc định:

import simpy
import random
import statistics
4

Ái chà! Đó là một thời gian dài để chờ đợi xung quanh!

Khi nào thay đổi mọi thứ

Hãy nhớ rằng, mục tiêu của bạn là tiếp cận người quản lý với một giải pháp cho bao nhiêu nhân viên mà anh ấy sẽ cần cho nhân viên để giữ thời gian chờ đợi dưới 10 phút. Để kết thúc này, bạn sẽ muốn chơi xung quanh với các tham số của mình để xem số nào cung cấp một giải pháp tối ưu.

Đầu tiên, hãy thử một cái gì đó hoàn toàn điên rồ và tối đa hóa các tài nguyên! Giả sử có 100 nhân viên thu ngân, 100 máy chủ và 100 người sử dụng trong nhà hát này. Tất nhiên, điều này là không thể, nhưng sử dụng số cực kỳ cao sẽ nhanh chóng cho bạn biết giới hạn của hệ thống là gì. Thử ngay bây giờ:

import simpy
import random
import statistics
5

Ngay cả khi bạn tối đa hóa các tài nguyên, bạn sẽ chỉ nhận được thời gian chờ xuống 3 phút rưỡi. Bây giờ hãy thử và thay đổi các số để xem liệu bạn có thể giảm thời gian chờ đến 10 phút, như người quản lý được yêu cầu. Bạn đã đưa ra giải pháp nào? Bạn có thể mở rộng khối mã bên dưới để xem một giải pháp khả thi:

import simpy
import random
import statistics
6

Tại thời điểm này, bạn sẽ trình bày kết quả của mình cho người quản lý và đưa ra gợi ý để giúp cải thiện nhà hát. Chẳng hạn, để cắt giảm chi phí, anh ta có thể muốn cài đặt 10 ki -ốt vé ở phía trước nhà hát thay vì giữ 10 nhân viên thu ngân mỗi đêm.

Sự kết luận

Trong hướng dẫn này, bạn đã học được cách xây dựng và chạy một mô phỏng trong Python bằng cách sử dụng khung công tác

import simpy
import random
import statistics
7. Bạn đã hiểu làm thế nào các hệ thống có các tác nhân trải qua các quá trình và cách bạn có thể tạo các biểu diễn ảo của các hệ thống đó để củng cố chúng chống lại sự tắc nghẽn và chậm trễ. Trong khi loại mô phỏng có thể khác nhau, nhưng thực thi tổng thể là như nhau! Bạn có thể áp dụng những gì bạn đã học được ở đây vào một loạt các kịch bản khác nhau.build and run a simulation in Python using the
import simpy
import random
import statistics
7 framework. You’ve come to understand how systems have agents undergo processes, and how you can create virtual representations of those systems to fortify them against congestion and delay. While the type of simulation can vary, the overall execution is the same! You’ll be able to apply what you’ve learned here to a variety of different scenarios.

Bây giờ bạn có thể:

  • Động não một thuật toán mô phỏng từng bước a simulation algorithm step by step
  • Tạo một môi trường ảo trong Python với
    import simpy
    import random
    import statistics
    
    7
    a virtual environment in Python with
    import simpy
    import random
    import statistics
    
    7
  • Xác định các chức năng đại diện cho các tác nhân và quy trình functions that represent agents and processes
  • Thay đổi các tham số của mô phỏng của bạn để tìm giải pháp tối ưu parameters of your simulation to find the optimal solution

Có rất nhiều bạn có thể làm với

import simpy
import random
import statistics
7, vì vậy, hãy để cho việc khám phá của bạn dừng lại ở đây. Lấy những gì bạn đã học và áp dụng nó vào các kịch bản mới. Các giải pháp của bạn có thể giúp tiết kiệm thời gian và tiền bạc quý giá của mọi người, vì vậy hãy đi sâu vào và xem những quy trình khác bạn có thể tối ưu hóa! Bạn có thể tải xuống mã nguồn cho tập lệnh bạn đã xây dựng trong hướng dẫn này bằng cách nhấp vào liên kết bên dưới:

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Mô phỏng các quy trình trong thế giới thực bằng Python với Simpy This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Simulating Real-World Processes in Python With SimPy

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

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 hiệu suất của nó được gọi là mô hình mô phỏng.imitating the operations which take place within a system to study its behavior. Analyzing and creating the model of a system to predict its performance is called simulation modeling.

Làm cách nào để sử dụng trình giả lập Python?

Sử dụng một mô phỏng để mô hình hóa một quy trình trong thế giới thực.Tạo một thuật toán từng bước để xấp xỉ một hệ thống phức tạp.Thiết kế và chạy mô phỏng trong thế giới thực bằng Python với Simpy ...
Thiết lập môi trường ..
Vượt qua các tham số ..
Chạy mô phỏng ..

Một trình giả lập là gì cho nó được sử dụng là gì?

Một trình giả lập được định nghĩa là một phương thức hoặc một quy trình tạo ra các chế độ xem giả (được tạo ra mà không có sự biến đổi) không thể phân biệt được với một quan điểm chính hãng (được tạo ra với prover) của một bằng chứng [12].Từ: Những tiến bộ trong máy tính, 2014.

Trình mô phỏng trong lập trình là gì?

Trình mô phỏng là gói máy tính cho phép người ta mô phỏng một hệ thống có trong một lớp hệ thống cụ thể có ít hoặc không có lập trình.Ví dụ, hiện có các trình mô phỏng có sẵn cho một số loại hệ thống sản xuất, máy tính và truyền thông [7].a computer package that allows one to simulate a system contained in a specific class of systems with little or no programming. For example, there are currently simulators available for certain types of manufacturing, computer, and communication systems [7].