1. Tạo các yêu cầu đến trong hệ thống (GENERATE).
2. Kiểm tra chiều dài hàng đợi (TEST).
3. Đưa yêu cầu vào hàng đợi (QUEUE).
4. Xác nhận server dịch vụ (ENTER).
5. Yêu cầu đầu ra của hàng đợi (DEPART).
6. Phục vụ yêu cầu (ADVANCE).
7. Giải phóng server dịch vụ (LEAVE).
8. Kết quả đầu ra từ các yêu cầu hệ thống (TERMINATE).
62 trang |
Chia sẻ: lylyngoc | Lượt xem: 2835 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Mô phỏng hàng đợi bằng GPSS (General Purpose Simulation System), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ợc khởi động lại..
Ví dụ
START 1000,,,1
Trong ví dụ này, giá trị kết thúc được thiết lập là 1000 và mô phỏng bắt đầu. Khi giá trị kết thúc là 0 hoặc là một số âm (tùy thuộc vào câu lệnh TERMINATE được sử dụng trong mô phỏng), một báo cáo tiêu chuẩn được xuất ra với thêm 2 trường Current Events Chain (CEC) and the Future Events Chain (FEC).
2. Câu lệnh STORAGE
Câu lệnh STORAGE nhằm định nghĩa một thực thể Storage.
NAME STORAGE A
Nhãn tên (Label) / Toán hạng
NAME – Là nhãn tên của thực thể Storage. Trường được sử dụng phải là Name.
A – Tổng khả năng lưu trữ lớn nhất. Các toán hạng phải là PosInteger.
Ví dụ
MotorPool STORAGE 20
Câu lệnh này định nghĩa một thực thể Storage có tên là MotorPool với khả năng lưu trữ lớn nhất là 20 đơn vị.
Hoạt động
Câu lệnh STORAGE thuộc vào nhóm câu lệnh được sử dụng chung với câu lệnh Queue. Khi một đối tượng mô phỏng nhận được một Transaction, nó được đặt vào cuối mô phỏng của câu lệnh Queue.
Câu lệnh STORAGE định nghĩa một thực thể Storage trong mô phỏng. Khi một Transaction được nhập vào Block ENTER, yêu cầu lưu trử của nó được so sánh với các giá trị lưu trữ có sẵn tại thực thể Storage. Nếu yêu cầu được chấp nhận, Transaction được phép nhập vào Block ENTER và giá trị lưu trữ của thực thể Storage bị giảm đi. Nếu yêu cầu của Transaction không được thõa mãn với điều kiện, Transaction bị chuyển đến khu vực nghỉ ngợi của mô phỏng tại Delay Chain của thực thể Storage. Một thực thể Storage có thể được định nghĩa lại bằng cách sử dụng câu lệnh STORAGE mới với cùng một nhãn Name như cũ.
IV. Các câu lệnh Block ( Block Statements )
Ta sử dụng các câu lệnh Block để tạo ra các thực thể GPSS Block. Các câu lệnh Block là một phần của trình biên dịch mẫu ban đầu tạo ra Block thường trực trong các mô phỏng. Một câu lệnh Block gửi đến một mô phỏng hiện có tạo ra một lần tại một thời điểm Block tạm thời được sử dụng trong một chế độ gọi là mô phỏng bằng tay.
Các câu lệnh Block có trong GPSS là:
ADOPT – Thay đổi thiết lập Assembly.
ADVANCE – Đặt Transaction trên Future Events Chain.
ALTER - Kiểm tra và sửa đổi Transaction trong một nhóm.
ASSEMBLE - Đợi và hủy các Transaction liên quan.
ASSIGN - Sửa đổi thông số Transaction.
BUFFER – Đặt Transaction vào cuối của Current Events Chain.
CLOSE - Kết thúc các dòng dữ liệu.
COUNT - Đặt bộ đếm của các thực thể vào một tham số Transaction.
DEPART - Giảm dần nội dung của một thực thể Queue.
DISPLACE - Thay đổi Block tiếp theo của một Transaction.
ENTER - Chiếm hoặc đợi cho các đơn vị lưu trữ trong một thực thể Storage.
EXAMINE – Kiểm tra thành viên nhóm.
EXECUTE - Thực hiện hành động chỉ định bởi một Block khác nhau.
FAVAIL - Thay đổi trạng thái của một thực thể Facility thành "available".
FUNAVAIL - Thay đổi trạng thái của một thực thể Facility thành "not available".
GATE - Kiểm tra thực thể và sửa đổi luồng Transaction.
GATHER – Đợi Transaction có liên quan.
GENERATE - Tạo Transaction và đặt trên Future Events Chain.
INDEX - Sửa đổi thông số Transaction.
INTEGRATION – Bật sự tích hợp của một biến người dùng thành On hoặc Off.
JOIN - Đặt một thành viên vào một nhóm Numberic hoặc Transaction.
LEAVE - Phát hành đơn vị lưu trữ của một thực thể Storage.
LINK - Di chuyển Transaction đến chuỗi thực thể người dùng.
LOGIC - Sửa đổi thực thể Logic.
LOOP - Giảm dần thông số, nhảy tới Block khác nếu kết quả là khác không.
MARK - Đặt giá trị của đồng hồ hệ thống vào thông số Transaction.
MATCH - Chờ cho Transaction có liên quan để đạt được Block Match.
MSAVEVALUE - Gán giá trị cho thực thể Matrix.
OPEN - Khởi tạo một luồng dữ liệu.
PLUS - Đánh giá biểu thức PLUS và lưu kết quả trong tham số.
PRIORITY - Sửa đổi độ ưu tiên của Transaction.
QUEUE - Tăng nội dung của một thực thể Queue.
READ - Mang dòng tiếp theo của dữ liệu từ một luồng dữ liệu.
RELEASE – Giải phóng thực thể Facility.
REMOVE - Bỏ một phần tử Nhóm Numeric hoặc Transaction.
RETURN - Giải phóng thực thể Facility.
SAVAIL - Thay đổi trạng thái của thực thể Storage thành "available".
SAVEVALUE - Chỉ định một giá trị cho thực thể Savevalue.
SCAN - Kiểm tra nhóm Transaction, đặt giá trị trong tham số.
SEEK - Thay đổi con trỏ dòng trong một dòng dữ liệu.
SEIZE – Gán quyền sở hữu hoặc đợi cho một thực thể Facility.
SELECT - Đặt số thực thể được chọn vào tham số Transaction.
SPLIT - Tạo liên kết đến Transaction.
SUNAVAIL - Thay đổi trạng thái của thực thể lưu trữ thành "not available".
TABULATE - Cập nhật thực thể Table.
TERMINATE - Hủy Transaction, số đếm Termination giảm đi.
TEST - Kiểm tra điều kiện số học và sửa đổi đường đi của Transaction.
TRACE - Thiết lập Chỉ số vết của các Active Transaction.
TRANSFER - Di chuyển đến Block được chỉ định.
UNLINK - Hủy bỏ Transaction từ thực thể Userchain.
UNTRACE - Tắt Chỉ số vết trong các Active Transaction.
WRITE - Gửi một giá trị cho một dòng dữ liệu.
1. Block GENERATE
Block GENERATE tạo ra các Transaction để đi vào mô phỏng trong tương lai.
GENERATE A,B,C,D,E
Các toán hạng
A - Là số thời gian tạo ra Transaction. Các toán hạng phải là Null, Tên, Số, String. Bạn không thể sử dụng các tham số Transaction.
B – Khoảng thời gian cần tạo hoặc hàm sửa đổi. Các toán hạng phải là Null, Tên, Số, String. Bạn không thể sử dụng các tham số Transaction.
C - Bắt đầu thời gian trễ. Tăng thời gian cho các Transaction đầu tiên. Các toán hạng phải là Null, Tên, Số, String. Bạn không thể sử dụng các tham số Transaction.
D - Tạo ra giới hạn. Mặc định là không có giới hạn. Các toán hạng phải là Null, Tên, PosInteger, String. Bạn không thể sử dụng các tham số Transaction.
E - Độ ưu tiên. Mặc định là 0. Các toán hạng phải là Null, Tên, số nguyên, String. Bạn không thể sử dụng các tham số Transaction.
Ví dụ
GENERATE 0.1
Đây là cách đơn giản nhất để sử dụng Block GENERATE. Block này tạo ra một Transaction với độ ưu tiên là 0 đi vào mô phỏng ứng với mười của một đơn vị thời gian.
Hoạt động
Khi một mô phỏng bắt đầu, hoặc một câu lệnh tương tác được thực hiện, bất kỳ Block GENERATE đã không "primed" được gọi để sắp xếp Transaction đầu tiên của mình. Các Transaction này được dự kiến đi vào Block GENERATE và đặt vào Future Events Chain nếu chúng có một thời gian tăng ( time increment ) là dương. Toán hạng C có thể được sử dụng để xác định một thời gian tăng cho các Transaction đầu tiên. Nếu không, việc tăng lần đầu tiên được tính từ toán hạng A và B.
Trước khi Transaction mới được tạo ra, toán hạng D được đánh giá số lượng để xem tất cả các Transaction mong muốn đã được tạo ra hay chưa. Nếu giới hạn được tạo không bị vượt quá, tiến trình vẫn tiếp tục. Block GENERATE sau đó tạo ra các Transaction mới gán cho nó số hiệu Transaction tiếp theo và độ ưu tiên từ toán hạng E, và mốc thời gian Transaction đó được gán giá trị thời gian của đồng hồ hệ thống. Transaction mới đại diện cho một thành viên mới được thiết lập.
Thời gian đến giữa các Transaction mới được tính ở toán hạng A, B, và C. Nếu chỉ có toán hạng A được khai báo cụ thể, nó được đánh giá bằng số và được sử dụng như là thời gian tăng. Nếu toán hạng A và B cùng được khai báo, và B không phải là một hàm, cả A và B được khai báo bằng số và một số ngẫu nhiên ở khoảng giữa A - B và A + B được sử dụng như là thời gian tăng. Bạn có thể chọn số ngẫu nhiên số máy phát được sử dụng như là mã nguồn của các số ngẫu nhiên. Việc này được thiết lập trong trang "Random" của Model Settings Notebook.
Khi toán hạng B là một FN lớp SNA, nó là một trường hợp đặc biệt được gọi là một "hàm sửa đổi". Trong trường hợp này, việc tăng thời gian được tính bằng cách nhân kết quả của hàm bởi toán hạng A.
Nếu toán hạng C được chỉ định, nó được đánh giá bằng số và được sử dụng như là thời gian tăng cho các Transaction đầu tiên. Nếu bạn muốn làm cho Transaction(s) đầu tiên đến tại thời điểm 0, bạn phải sử dụng một Block GENERATE riêng biệt với việc tạo một giới hạn trong toán hạng D và các giá trị null cho Toán class A và B. Nếu toán hạng A và / hoặc B được sử dụng và C = 0, C sẽ được giải thích như là null. Ví dụ sau đây sẽ tạo ra 3 Transaction tại thời điểm 0.
GENERATE ,,0,3
Nếu thời gian tăng chỉ được thực hiện khi là số dương (khác không), Transaction được đặt trên FEC, nếu nó là 0 Transaction đi đến CEC đằng sau ưu tiên của nó, nếu nó là số âm thì lỗi xảy ra.
2. Block ADVANCE
Block ADVANCE làm trễ tiến trình của một Transaction với một thời gian mô phỏng nhất định.
ADVANCE A,B
Toán hạng
A – Thời gian cần làm trễ. Các toán hạng phải là Tên, Số, Chuỗi.
B – Khoảng nửa thời gian cần làm trễ, hoặc nếu là một hàm thì hàm đã được sửa đổi. Các toán hạng phải là Null, Tên, Số, Chuỗi.
Ví dụ
ADVANCE 101.6,50.3
Ví dụ này tạo một Block mà chọn một số ngẫu nhiên trong khoảng 51,3 và 151,9 (tức là 101,6 50,3) và làm trễ Transaction khi nhập vào số thời gian mô phỏng.
Tác dụng
Block ADVANCE tính toán thời gian tăng và đặt Transaction vào Future Events Chain (FEC) cho số thời gian mô phỏng. Việc tăng thời gian có thể được tính theo nhiều cách. Nếu chỉ có toán hạng A được xác định, nó được ước lượng và được sử dụng như là thời gian tăng. Nếu các toán hạng A và B là được sử dụng, và B không chỉ định một hàm, cả A và B được khai báo bằng số và một số ngẫu nhiên khoảng giữa A - B và A + B, diện, được sử dụng như là thời gian tăng. Bạn có thể chọn số ngẫu nhiên giữa các số được tạo như là nguồn của các số ngẫu nhiên. Cái này được thiết lập "Random" trong Model Settings Notebook.
3. Block QUEUE
Block QUEUE cập nhật số liệu thống kê của thực thể Queue để phản ánh sự gia tăng trong nội dung.
QUEUE A,B
Toán hạng
A - Tên hoặc số hiệu của thực thể Queue. Các toán hạng phải phải Name, PosInteger.
B - Số đơn vị mà theo đó để tăng nội dung của các thực thể Queue. Giá trị mặc định là 1. Các toán hạng phải là Null, Tên, PosInteger.
Ví dụ
QUEUE WaitingLine
Trong ví dụ này, nội dung của các thực thể Queue tên là WaitingLine là được tăng lên và các số liệu thống kê liên quan đến accumulators được cập nhật.
Action
Khi một Transaction đi vào Block QUEUE, toán hạng A được đánh giá và sử dụng để tìm các thực thể Queue với số lượng đó. Các thực thể Queue được tạo ra nếu cần thiết.Toán hạng B xác định giá trị được sử dụng để tăng nội dung của các thực thể Queue. Nếu B đã được chỉ định, toán hạng B được đánh giá và được sử dụng như là số thặng dư. Nếu B không quy định rõ, giá trị 1 được sử dụng. Cuối cùng, các số liệu thống kê tích lũy đại diện cho các thực thể Queue được cập nhật.
4. Block DEPART
Khối DEPART đăng ký các số liệu thống kê mà chúng cho thấy việc giảm về nội dung của một thực thể Queue.
DEPART A,B
Các toán hạng
A - Tên hoặc số hiệu thực thể Queue. Các toán hạng phải là Name, PosInteger.
B - Số đơn vị mà theo đó để giảm nội dung của các thực thể Queue. Giá trị mặc định là 1. Các toán hạng phải là Null, Tên, PosInteger, String.
Ví dụ
DEPART WaitingLine
Trong ví dụ này, nội dung của các thực thể Queue tên là WaitingLine giảm đi 1 và các số liệu thống kê liên quan đến accumulators được cập nhật.
Hoạt động
Khi một Transaction đi vào Block DEPART, toán hạng A được đánh giá, rút ngắn, và được sử dụng để tìm các thực thể Queue với số lượng đó. Các thực thể Queue được tạo ra nếu cần thiết. Nếu một thực thể Queue được tạo ra, các nỗ lực để giảm nội dung của các thực thể Queue sẽ gây ra lỗi. Mô phỏng thông thường có thể được sử dụng để thay đổi nội dung tương tác thực thể Queue.
Toán hạng B xác định giá trị được sử dụng để giảm nội dung của các thực thể Queue. Nếu B được quy định, toán hạng B được đánh giá số lượng, rút ngắn, và được sử dụng như là kết quả. Nếu B không quy định rõ, giá trị 1 được sử dụng.
Cuối cùng, các số liệu thống kê tích lũy đại diện cho các thực thể Queue hàng được cập nhật. Nếu các thực thể Qtable đã được định nghĩa cùng với thực thể Queue, chúng cũng được cập nhật.
5. Block ENTER
Khi một Transaction cố gắng đi vào Block ENTER, nó hoặc là lấy mất hoặc là đợi cho một số đã được chỉ định của đơn vị lưu trữ.
ENTER A,B
Các toán hạng
A – Tên hoặc là số hiệu của thực thể Storage. Toán hạng phải là Name, PosInteger.
B – Số đơn vị mà theo đó sẽ giảm khả năng lưu trữ có sẵn. Được mặc định là 1. Toán hạng phải là Null, Name, PosInteger.
Ví dụ
ENTER Toolkit,2
Tại ví dụ này, Active Transaction yêu cầu 2 đơn vị lưu trữ có sẵn từ thực thể Storage có tên là Toolkit. Nếu không đủ đơn vị lưu trữ còn lại trong thực thể Storage, Transaction đến nghỉ ngơi tại Delay Chain của thực thể Storage.
Hoạt động
Khi một Transaction đi vào Block ENTER, toán hạng A được đánh giá và sử dụng để tìm thực thể Storage với con số đó. Nếu thực thể Storage đó không tồn tại thì lỗi sẽ xảy ra. Thực thể Storage phải được định nghĩa trước bằng câu lệnh STORAGE.
Nếu thực thể Storage tồn tại, toán hạng B được sử dụng để xác định yêu cầu lưu trữ. Nếu B được chỉ định, toán hạng B được đánh giá và sử dụng như là kết quả. Nếu B không được khai báo thì giá trị 1 được sử dụng.
Nếu thực thể Storage trong tình trạng sẵn có, và nếu chúng đủ đơn vị lưu trữ để đáp ứng yêu cầu, Transaction được phép đi vào Block ENTER và yêu cầu được cấp bằng cách giảm sô đơn vị lưu trữ của thực thể Storage tương ứng với số lượng được yêu cầu. Còn ngược lại, Transaction đi đến Delay Chain của thực thể Storage theo thứ tự ưu tiên.
Khi một đơn vị lưu trữ được giải phóng khỏi Block LEAVE, luật "first-fit-with-skip" được sử dụng để chọn các Transaction tiếp theo để được phép đi vào Block ENTER. Bất kỳ một entry được cho phép trước khi Active Transaction rời khỏi Block LEAVE. Điều này ngăn cản "line-bucking".
Khi một Transaction đi vào Block ENTER hoặc LEAVE, các số liệu thông kê được tính lũy đại diện cho các thực thể Storage được cập nhật.
6. Block LEAVE
Câu lệnh LEAVE tăng đơn vị lưu trữ của một thực thể Storage.
LEAVE A,B
Các toán hạng
A – Tên hoặc số hiệu của thực thể Storage. Toán hạng phải là Name, PosInteger.
B – Số giá trị tăng cho thực thể Storage. Được mặc định là 1. Toán hạng phải là Null, Name, PosInteger.
Ví dụ
LEAVE RepairMen,10
Trong ví dụ này, khi một Transaction đi vào Block LEAVE, đơn vị lưu trữ có sẵn tại thực thể Storage có tên là RepairMen tăng lên 10 đơn vị.
Hoạt động
Khi một Transaction đi vào Block LEAVE, toán hạng A được đánh giá và rút ngắn tương ứng với thực thể Storage được tìm thấy. Nếu như không có thực thể như vậy tồn tại thì lỗi sẽ xảy ra. Thực thể Storage phải được định nghĩa tại câu lệnh STORAGE.
Số lượng đơn vị lưu trũ được tìm thấy được xác định bằng toán hạng B. Nếu toán hạng B không được sử dụng thì chúng được mặc định là 1.
Sau đó đơn vị lưu trũ tại thực thể Storage được tăng tương ứng với giá trị của toán hạng B. Nếu kết quả vượt quá khả năng lưu trữ ban đầu của thực thể Storage thì lỗi sẽ xảy ra.
Nếu không có lỗi xảy ra, Transaction được dự kiến cho Block tiếp theo và nó được đặt trước các Current Events Chain theo độ ưu tiên.
Khi lưu trữ trở nên có sẵn, Delay Chain của thực thể Storage được kiểm tra trong việc giảm ưu tiên cho các Transactions có thể được đáp ứng. Với luật "first-fit-with-skip" được sử dụng. Transactions thành công được nhập vào Block ENTER chúng bị từ chối và sau đó được đặt trên CEC theo ưu tiên. Điều này được thực hiện trước khi Active Transaction trong tiến trình của Block LEAVE trong mô phỏng. Bằng cách này, không có Transaction nào có thể dựng lên hàng của Transactions đang đợi trên Delay Chain của thực thể Storage. Bạn có thể thấy điều này trong Blocks Window. Bạn có thể thấy Transaction đi vào Block ENTER và đến nơi nghỉ ngơi. Các hiện hành Active Transaction của Block LEAVE sẽ tiếp tục phần chuyển động của nó.
7. Block SEIZE
Khi Active Transaction cố gắng nhập vào Block SEIZE, nó chờ đợi hoặc mua lại quyền sở hữu của một thực thể Facility.
SEIZE A
Toán hạng
A - Tên hoặc số hiệu của thực thể Facility. Yêu cầu. Các toán hạng phải là Name, PosInteger.
Ví dụ
SEIZE Teller1
Trong ví dụ này, khi Transaction cố gắng để đi vào Block SEIZE, trạng thái của Facility được đặt tên Teller1 được thử nghiệm. Nếu nó được nhàn rỗi, quyền sở hữu được trao cho các Active Transaction, được phép đi vào Block SEIZE và tiến hành Block tiếp theo. Nếu Facility đang bận (được dùng), Active Transaction đi kèm được nghỉ trong Delay Chain của Facility .
Hoạt động
Block SEIZE cho phép một Transaction có được quyền sở hữu một Facility. Nếu Facility nhàn rỗi (không thuộc sở hữu), Transaction ngay lập tức mua lại quyền sở hữu của nó, đi vào Block SEIZE, và sau đó cố gắng đi vào Block tiếp theo. Nếu Facility đã được sở hữu, Transaction đi cùng được nghỉ, lượt cuối cùng của nó được ưu tiên trên Delay Chain của Facility và không đi vào Block SEIZE.
8. Block RELEASE
Block RELEASE cấp quyền sở hữu một Facility, hoặc loại bỏ một Transaction được hình thành trước từ việc cạnh tranh cho một Facility (removes a preempted Transaction from contention for a Facility).
RELEASE A
Toán hạng
A – Tên hoặc số hiệu của thực thể Facility. Các toán hạng phải phải Name, PosInteger.
Ví dụ
RELEASE Teller1
Trong ví dụ này, khi một Transaction sở hữu các thực thể Facility đặt tên Teller1 vào Block RELEASE, nó trao lại cho lên quyền sở hữu cho Facility.
Hoạt động
Khi một Transaction đi vào Block RELEASE nó loại bỏ bản thân từ việc cạnh tranh cho Facility . Điều này có thể xảy ra theo hai cách.
Nếu Active Transaction sở hữu các Facility, nó đưa quyền sở hữu và các tiến trình đến Block tiếp theo.
Nếu Active Transaction đã được được hình thành trước từ quyền sở hữu của Facility , nó được lấy ra từ các Ỉnterrupt Chain của Facility . Quyền sở hữu không bị ảnh hưởng, bởi vì một số Transaction khác là chủ sở hữu. Nếu Active Transaction là dọn dẹp hiện tại của tất cả các preemption, nó bây giờ có thể di chuyển bình thường trong mô phỏng.
Trong bất kỳ trường hợp nào, các Active Transaction bị loại bỏ quyền sở hữu, cạnh tranh cho Facility và cố gắng để vào Block tiếp theo tuần tự. Nếu nó không sở hữu, cũng không được ưu tiên tại các Facility, lỗi xảy ra.
Nếu Active Transaction từ bỏ quyền sở hữu của Facility , chủ sở hữu tiếp theo được lấy từ Pending Chain, Interrupt Chain, và cuối cùng Delay Chain. Nếu có bây giờ có Interrupt Model chờ xử lý tại Facility, đầu tiên là đưa ra quyền sở hữu của Facility . Nếu không, quyền sở hữu được trả lại cho các Transaction gần đây nhất được hình thành trước. Nếu cả hai chuỗi chờ xử lý (chờ đợi có Interrupt Model) và Ỉnterrupt Chain (Transactions được hình thành trước) là rỗng, Transaction có độ ưu tiên cao nhất trên Delay Chain bình thường được cho quyền sở hữu. Nếu không có Transactions chờ đợi Facility trở nên nhàn rỗi.
Khi một chủ sở hữu mới được chọn từ Delay Chain hoặc Pending Chain, nó đi vào Block SEIZE hoặc PREEMPT ngay lập tức, và sau đó được lên kế hoạch bằng cách đặt nó trên CEC đằng sau độ ưu tiên ngang hàng. Sau khi mục này, Active Transaction hiện tại trong Block RELEASE sẽ tiếp tục chuyển động của nó.
9. Block TERMINATE
Block TERMINATE loại bỏ các Active Transaction từ mô phỏng, và tùy chọn giảm bộ đếm Termination.
TERMINATE A
Toán hạng
A – Bộ đếm Termination giảm. Mặc định là 0. Các toán hạng phải là Null, Tên, PosInteger.
Ví dụ
TERMINATE 1
Trong ví dụ này, khi Transaction đi vào Block TERMINATE nó bị loại bỏ khỏi mô phỏng. Ngoài ra, Bộ đếm Termination mô phỏng, được thiết lập bởi lệnh START được giảm đi 1.
Action
Khi một Transaction đi vào Block TERMINATE, toán hạng được đánh giá và được sử dụng để giảm bộ đếm Termination của mô phỏng. Nếu toán hạng A không quy định rõ ràng, bộ đếm Termination sẽ không thay đổi. Active Transaction sau đó được loại bỏ khỏi mô phỏng, và một Active Transaction mới được chọn. Bộ đếm Termination mô phỏng được thiết lập bởi một lệnh START có từ trước. Khi hằng số Termination đạt đến 0, mô phỏng kết thúc, và trừ khi bị thay đổi bởi toán hạng B của của lệnh START, nếu không báo cáo tùy chọn tiêu chuẩn sẽ được viết.
10. Block TEST
Block TEST được dùng để so sánh các giá trị, và điều khiển điểm đến của Active Transaction dựa vào kết quả so sánh.
TEST O A,B,C
Các toán hạng
O – Toán hạng quan hê nhằm so sánh toán hạng A với toán hạng B. Các toán hạng được sử dụng là E, G, GE, L, LE, or NE.
A – Giá trị kiểm tra. Toán hạng phải là Name, Number, String.
B – Giá trị tham khảo. Toán hạng phải là Name, Number, String.
C – Block được chuyển đến. Toán hạng phải là Null, Name, PosInteger.
Hoạt động
Các toán hạng của Block TEST có thể ở chế độ "Refuse Mode" hoặc "Alternate Exit Mode". Trong cả 2 trường hợp, toán hạng A và B được đánh giá số lượng và so sánh.
Nếu toán hạng C không được dùng, toán hạng Block TEST ở chế độ Refuse Mode ( Chế độ từ chối ). Khi một Transaction cố gắng đi vào Block TEST thông qua Refuse Mode, và việc thử nghiệm không thành công, Transaction bị ngăn chặn, nghĩa là không được phép đi vào Block TEST, cho đến khi thử nghiệm được lặp lại và thành công. Khi thử nghiệm thành công, Active Transaction đi vào Block TEST và sau đó tiến trình chuyển qua Block tiếp theo.
Transactions bị ngăn chặn được đặt trong Retry Chains của tất cả các đối tượng tham gia so sánh. Khi một trạng thái bất kỳ của thực thê bị thay đổi, Transaction bị chặn được tái kích hoạt, việc thử nghiệm theo quy định của block TEST được lặp lại, và nếu thành công, Transaction được phép đi vào Block TEST.
Nếu toán hạng C được sử dụng, các toán hạng của Block TEST ở chế độ Alternate Exit Mode ( Chế độ thay thế ). Khi một Transaction cố gắng đi vào Block TEST, và thử nghiệm không thành công, Transaction đi vào Block TEST, được dự kiến cho việc thay thế Block đích theo quy định của toán hạng C, và được đặt tại Current Events Chain đằng trước theo độ ưu tiên. Nếu thử nghiệm thành công, Active Transaction đi vào Block TEST và sau đó tiến trình chuyển qua Block tiếp theo.
Ví dụ
TEST G C1,70000
Ở ví dụ này Block TEST hoạt động ở chế độ "Refuse Mode", Active Transaction đi vào Block TEST nếu đồng hồ hệ thống có giá trị tương đối nhỏ hơn 70000. Ngược lại, Transaction bị chặn cho đến khi thử nghiệm là đúng.
TEST G Q$Teller1_Line,Q$Teller2_Line,Teller1
Ví dụ này Block TEST hoạt động ở chế độ "Alternate Exit Mode", Active Transaction luôn luôn đi vào Block TEST. Nếu giá trị của thực thể hàng đợi Teller1_Line lớn hơn giá trị của thực thể hàng đợi Teller2_Line Transaction sẽ đến NSB. Ngược lại, Active Transaction được dự kiến đi vào Block tại địa điểm có tên là TELLER1.
Các toán hạng quan hệ
Các toán hạng quan hệ là bắt buộc. Nó có thể là E, G, GE, L, LE, hoặc NE.
Một thử nghiệm đúng được định nghĩa như sau:
· E – Giá trị của toán hạng A phải bằng giá trị của toán hạng B.
· G – Giá trị của toán hạng A phải lớn hơn giá trị của toán hạng B.
· GE – Giá trị của toán hạng A phải lớn hơn hoặc bằng giá trị của toán hạng B.
· L – Giá trị của toán hạng A phải nhỏ hơn giá trị của toán hạng B.
· LE – Giá trị của toán hạng A phải nhỏ hơn hoặc bằng giá trị của toán hạng B.
· NE – Giá trị của toán hạng A phải khác giá trị của toán hạng B.
V. Câu lệnh sử dụng phân bố xác suất
Trong lý thuyết hàng đợi hay hệ thống phục vụ đám đông hầu hết các thông số như tần suất xuất hiện “yêu cầu”, thời gian phục vụ “yêu cầu”… đều là những đại lượng ngẫu nhiên. Một ưu điểm của GPSS World đó là có nhiều luồng sinh số ngẫu nhiên khác nhau và hỗ trợ sẵn các hàm cho phép tạo các số ngẫu nhiên theo các quy luật phân bố khác nhau như: Beta, Discrete Uniform, Exponential, Gamma, Poisson… Các hàm này thường được sử dụng trong các Blocks như GENERATE và ADVANCE. Mà trong bản báo cáo này chúng ta sử dụng quy luật phân bố Poisson để mô phỏng:
Phân phối theo hàm mũ ( Exponential Distribution ).
Công thức
Real = EXPONENTIAL( Stream, Locate, Scale )
Các đối số
Stream - Bộ tạo số ngẫu nhiên. Phải là số nguyên, phải lớn hơn hoặc bằng 1.
Locate - Giá trị chuyển đổi được sử dụng để định vị phân phối. Phải là số thực.
Scale - Giá trị nén được sử dụng để mở rộng hoặc phân phối. Phải là số thực dương.
Giá trị trả về
Real - Giá trị số thực được tạo ra như là một trường hợp duy nhất của phân phối xác suất.
Hàm số xác suất
= Scale
= Locate
;
= 0 ; Ngược lại
VI. Báo cáo tiêu chuẩn
1. Quản lý báo cáo ( Report Management )
GPSS World cung cấp cho ta các bản báo cáo thống kê chi tiết thường giúp ta có được những kết quả mà không cần bổ sung. Các trạng thái cuối cùng của tất cả các thực thể GPSS truyền thống được báo cáo trong Báo cáo Tiêu chuẩn ( Standard Report ) được tự động tạo ra mỗi khi mô phỏng chấm dứt.
Thông thường, khi GPSS World tạo ra một bản báo cáo chuẩn của mỗi mô phỏng. Mỗi đối tượng báo cáo được tự động tạo ra, trừ khi bạn chỉ định NP là toán hạng B của lệnh START. Bạn cũng có thể ngăn chặn việc tạo ra các báo cáo tiêu chuẩn sử dụng Settings. Để làm như vậy, hãy chắc chắn Create Standard Reports không phải kiểm tra trong trang Report của Model Settings Notebook.
2. Báo cáo mẫu
Mô hình chung
File mẫu sau khi đã được sử dụng để tạo ra các mẫu báo cáo đầu ra trong phần tiếp theo. Khi this File mẫu, SAMPLE9.GPS được đặt tên, được biên dịch và chạy, nó tạo ra các báo cáo tự động được đặt tên SAMPLE9.001.
Báo cáo
Bây giờ chúng ta hãy xem xét các mục bao gồm trong bản báo cáo GPSS World tiêu chuẩn. Phần này bao gồm các báo cáo đầy đủ kết quả từ các mô phỏng trong phần mô hình chung.
GPSS World Simulation Report - SAMPLE9.1.1Tuesday June 6, 2000 14:00:59START TIME END TIME BLOCKS FACILITIES STORAGES 0.000 5187.692 32 3 1
NAME VALUE ADDUP 10007.000 CHAIN1 10012.000 COLLECT 10017.000 FACILITY1 10011.000 FACILITY2 10014.000 FACILITY3 10015.000 FINIS 32.000 MAINGRP 10005.000 MATRIX1 10003.000 NUMGRP 10006.000 NXTBLK 12.000 PARAM_1 10008.000 POOL 10002.000 PROCESS_TIME 10016.000 SWITCH_1 10009.000 TOT_PROCESS 10010.000 TRANSIT 10004.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY 1 GENERATE 61 1 0 2 JOIN 60 0 0 3 JOIN 60 0 0 4 SAVEVALUE 60 0 0 5 ASSIGN 60 0 0 6 JOIN 60 0 0 7 LOGIC 60 0 0 8 MSAVEVALUE 60 0 0 9 QUEUE 60 9 0 10 SEIZE 51 0 0 11 LINK 51 0 0NXTBLK 12 SEIZE 51 0 0 13 SEIZE 51 0 0 14 QUEUE 51 0 0 15 ADVANCE 51 1 0 16 DEPART 50 0 0 17 TABULATE 50 0 0 18 RELEASE 50 0 0 19 ADVANCE 50 0 0 20 RELEASE 50 0 0 21 ADVANCE 50 0 0 22 RELEASE 50 0 0 23 DEPART 50 0 0 24 UNLINK 50 0 0 25 ENTER 50 0 0 26 LOGIC 50 0 0 27 LEAVE 50 0 0 28 SAVEVALUE 50 0 0 29 REMOVE 50 0 0 30 ADVANCE 50 0 0 31 LEAVE 50 0 0FINIS 32 TERMINATE 50 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAYFACILITY1 51 0.937 95.278 1 51 0 0 0 9FACILITY2 51 0.853 86.719 1 51 0 0 0 0FACILITY3 51 0.949 96.523 1 51 0 0 0 0
QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRYTOT_PROCESS 11 10 60 0 6.439 556.700 556.700 0PROCESS_TIME 1 1 51 0 0.660 67.112 67.112 0
STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAYPOOL 400 400 0 150 5000 1 23.628 0.059 0 0
CEC XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE 61 0 5187.692 61 1 2
FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE 51 0 5389.554 51 15 16 PARAM_1 232.000 62 0 5523.253 62 0 1
Tiêu đề
GPSS World Simulation Report - SAMPLE9.1.1Tuesday June 6, 2000 14:00:59
Dòng tiêu đề của báo cáo tiêu chuẩn được lấy từ tên của các tập tin mẫu đã đưa ra báo cáo. Ngày và thời gian của các hoạt động của mô hình cũng được nêu ra.
Thông tin chung
START TIME END TIME BLOCKS FACILITIES STORAGES 0.000 5187.692 32 3 1
· START TIME. Thời gian chính xác vào lúc bắt đầu của thời gian đo. Utilizations và các khoảng thời gian được dựa trên thời gian bắt đầu. Thời gian bắt đầu được thiết lập lại bằng đồng hồ hệ thống bởi câu lệnh RESET hoặc CLEAR.
· END TIME. Thời gian chính xác khi bộ đếm Termination dứt trở thành 0.
· BLOCKS. Số lượng thực thể Block có trong mô phỏng.
· FACILITIES. Số lượng thực thể Facility có trong mô phỏng.
· STORAGES. Số lượng thực thể Storage trong mô phỏng.
Names
NAME VALUE ADDUP 10007.000 CHAIN1 10012.000 COLLECT 10017.000 FACILITY1 10011.000
· NAME. Tên người dùng được chỉ định và sử dụng trong mô hình GPSS World của bạn sau khi Translation cuối cùng.
· VALUE. Giá trị số được gán theo tên. Số của hệ thống được gán bắt đầu tại 10000.
Blocks
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY 1 GENERATE 61 1 0 2 JOIN 60 0 0 3 JOIN 60 0 0 4 SAVEVALUE 60 0 0 5 ASSIGN 60 0 0
· LABEL. Nhãn của Block nếu được dùng.
· LOC. Số vị trí này Block trong mô hình.
· BLOCK TYPE. Tên các Block của GPSS.
· ENTRY COUNT. Số lượng Transactions để nhập khối này kể từ khi có lệnh RESET hoặc CLEAR hoặc sau Translation cuối cùng.
· CURRENT COUNT. Số lượng Transactions ở Block này tại cuối của mô phỏng.
· RETRY. Số lượng Transactions chờ đợi một điều kiện cụ thể tùy thuộc vào trạng thái của thực thể Block.
Facilities
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAYFACILITY1 51 0.937 95.278 1 51 0 0 0 9FACILITY2 51 0.853 86.719 1 51 0 0 0 0FACILITY3 51 0.949 96.523 1 51 0 0 0 0
· FACILITY. Tên hoặc số hiệu của thực thể Facility.
· ENTRIES. Số lần Facility bị chiếm hoặc được hình thành kể từ lệnh RESET cuối hoặc lệnh CLEAR hoặc sau Translation cuối cùng của mô hình.
· UTIL. Phân số của thời gian mô phỏng trong thời gian đo cuối cùng mà Facility được sở hữu. Một thời gian đo bắt đầu với Translation của một mô hình hoặc ban hành lệnh RESET hoặc CLEAR.
· AVE. TIME. Thời gian trung bình sở hữu bởi các Transactions cá nhân trong suốt thời gian đo. Thời gian đo bắt đầu với một Translation của mô hình, hoặc khi được ban hành lệnh RESET hoặc CLEAR.
· AVAIL. Tình trạng sẵn có của thực thể Facility ở cuối của mô phỏng. 1 có nghĩa là có sẵn, 0 có nghĩa là không có sẵn.
· OWNER. Số lượng các Transaction sở hữu các thực thể Facility. 0 có nghĩa là Facility không thuộc sở hữu.
· PEND. Số lượng các Transactions chờ đợi để tránh Facility bằng cách đi vào Block PREEMPT ở chế độ "Interrupt Model".
· INTER. Số lượng Transactions hiện được hình thành trước tại Facility này. Số lượng Transactions trên Interrupt Chain.
· RETRY. Số lượng Transactions chờ đợi một điều kiện cụ thể tùy thuộc vào trạng thái của thực thể Facility.
· DELAY. Số lượng các Transactions đợi để chiếm của Facility. Chuỗi này cũng chứa các Transaction chờ đợi để tránh Facility trong "Chế độ ưu tiên" của Block PREEMPT.
Queues
QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRYTOT_PROCESS 11 10 60 0 6.439 556.700 556.700 0PROCESS_TIME 1 1 51 0 0.660 67.112 67.112 0
· QUEUE. Tên hoặc số hiệu của thực thể Queue.
· MAX. Chiều dài tối đa của thực thể Queue trong suốt thời gian mô phỏng. Thời gian mô phỏng được tính từ khi một Translation đi vào hàng đợi hoặc khi câu lệnh RESET hoặc CLEAR được sử dụng trong chương trình mô phỏng.
· CONT. Chiều dài của thực thể Queue ở cuối của giai đoạn mô phỏng.
· ENTRY. Biểu diễn số Translation đi vào hàng đợi Queue.
· ENTRY(0). Biểu diễn số Translation đi ra hàng đợi Queue tại thời điểm thời gian mô phỏng là 0.
· AVE.CONT. Chiều dài trung bình của thực thể Queue được tính trong suốt thời gian mô phỏng. Là chiều dài hàng đợi được lấy từ các khoảng thời gian được chia theo các giai đoạn mô phỏng.
· AVE.TIME. Thời gian trung bình của một thực thể ở trong hàng đợi Queue được tính trong suốt thời gian mô phỏng.
· AVE.(-0). Thời gian trung bình của một thực thể ở trong hàng đợi Queue được tính trong suốt thời gian mô phỏng, được điều chỉnh cho " zero entries".
· RETRY. Số lượng Transactions chờ đợi một điều kiện cụ thể tùy thuộc vào trạng thái của thực thể Queue.
Storages
STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAYPOOL 400 400 0 150 5000 1 23.628 0.059 0 0
· STORAGE. Tên hoặc số hiệu của thực thể Storage.
· CAP. Công suất Storage của thực thể Storage được xác định trong câu lệnh STORAGE.
· REM. Số lượng các đơn vị lưu trữ không sử dụng ở cuối của mô phỏng.
· MIN. Số lượng tối thiểu của các đơn vị lưu trữ được sử dụng trong suốt thời gian đo. Thời gian đo bắt đầu với Translation của một mô hình hoặc ban hành lệnh RESET hoặc CLEAR.
· MAX. Số lượng tối đa của các đơn vị lưu trữ được sử dụng trong suốt thời gian đo.
· ENTRIES. Số lượng các "entries" đi vào các thực thể Storage trong suốt thời gian đo. Tổng tích lũy cộng của toán hạng B phụ thuộc vào câu lệnh ENTER.
· AVL. Tình trạng sẵn có của các thực thể Storage ở cuối của mô phỏng. 1 có nghĩa là sẵn có, 0 có nghĩa là không sẵn có.
· AVE.C. Thời gian trung bình có trọng số của nội dung lưu trữ trong suốt thời gian đo. Các khoảng thời gian chia cho thời hạn thời gian của thời gian đo.
· UTIL. Hiệu suất sử dụng của các thực thể Storage được sử dụng trong suốt thời gian đo.
· RETRY. Số lượng Transactions chờ đợi một điều kiện cụ thể tùy thuộc vào trạng thái của thực thể Storage trữ.
· DELAY. Số lượng các Transactions chờ đợi đi vào Block ENTER đại diện cho thực thể Storage.
The Current Events Chain
CEC XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE 61 0 5187.692 61 1 2
· XN. Số Transaction tương ứng với số Transaction trong Current Events Chain
· PRI. Độ ưu tiên của Transaction.
· M1. Đánh dấu thời gian. Thời gian Transaction, hoặc Transaction đầu tiên của nó, đã được tạo ra, hoặc thời gian Transaction nhập vào Block MARK mà không có toán hạng.
· ASSEM. Số của Assembly Set của Transaction.
· CURRENT. Số lượng Block Transaction tồn tại ở cuối của mô phỏng hoặc tại thời điểm của báo cáo này.
· NEXT. Số lượng Block tiếp theo dự kiến sẽ được nhập vào bởi các Transaction.
· PARAMETER. Các tên hoặc số hiệu của các thông số Transaction.
· VALUE. Giá trị của tham số này.
The Future Events Chain
FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE 51 0 5389.554 51 15 16 PARAM_1 232.000 62 0 5523.253 62 0 1
· XN. Số Transaction tương ứng với số Transaction trong Future Events Chain.
· PRI. Độ ưu tiên của Transaction.
· BDT. Chặn giờ khởi hành. Thời gian tuyệt đối của đồng hồ hệ thống khi Transaction được lên lịch rời khỏi Events Future Chain.
· ASSEM. Số của Assembly Set của Transaction.
· CURRENT. Số lượng Block Transaction tồn tại ở cuối của mô phỏng hoặc tại thời điểm của báo cáo này.
· NEXT. Số lượng Block tiếp theo dự kiến sẽ được nhập vào bởi các Transaction.
· PARAMETER. Các tên hoặc số của các thông số Transaction.
· VALUE. Giá trị của tham số này.
CHƯƠNG 4: MÔ PHỎNG HÀNG ĐỢI.
I. Mô phỏng hàng đợi M/M/1.
1. Hàng đợi M/M/1 theo lý thuyết
Xét tại một mô hình hàng đợi M/M/1 với các điều kiện sau. Các sự kiện đến theo phân phối Poisson với tốc độ trung bình là như nhaus đối với mỗi sự kiện và thời gian phục vụ theo phân phối mũ với tốc độ phục vụ là:s đối với mỗi sự kiện. Tính toán các tham số hiệu năng của hàng đợi M/M/1.
Bài giải:
Mật độ lưu lượng
Số lượng trung bình khách hàng trong hệ thống:
Số lượng trung bình khách hàng đợi, có nghĩa là chiều dài hàng đợi trung bình:
Thời gian đợi trung bình trong hệ thống là:
Thời gian đợi trung bình trong hàng đợi là:
Số lượng server được sử dụng (Server utilization):
2. Mô phỏng hàng đợi M/M/1
Giải pháp của phương pháp mô phỏng
Hình 4-1: Quá trình phục vụ yêu cầu đến của hàng đợi M/M/1
Hình vẽ mô tả quá trình hoạt động của hệ thống hàng đợi M/M/1. Trong hình cho thấy các sự kiện chính phát sinh. Đặc trưng cho mỗi sự kiện xảy ra trong hệ thống mô phỏng::
Tạo các yêu cầu đến trong hệ thống (GENERATE).
Đưa yêu cầu vào hàng đợi (QUEUE).
Xác nhận server dịch vụ (SEIZE).
Yêu cầu đầu ra của hàng đợi (DEPART).
Phục vụ yêu cầu (ADVANCE).
Giải phóng server dịch vụ (RELEASE).
Kết quả đầu ra từ các yêu cầu hệ thống (TERMINATE).
Sơ đồ khối của mô phỏng:
Hình 4-2:Sơ đồ khối của mô phỏng hàng đợi M/M/1
Chương trình mô phỏng:
GENERATE (Exponential (1,0,0.25)); phát sinh luồng sự kiện đơn giản nhất có giá trị thời gian trung bình bằng 0.25 s/sự kiện.
QUEUE Queue1; transact được đưa vào hàng đợi có tên “Queue1”
SEIZE Server; cấp phát quyền sử dụng Server
DEPART Queue1; đánh dấu thời điểm transact đi khỏi hàng đợi có tên “Queue1”
ADVANCE (Exponential (1,0,0.2)); làm trễ luồng sự kiện trong hàng đợi có giá trị thời gian trung bình bằng 0.2 s / sự kiện.
RELEASE Server; giải phóng Server
TERMINATE; đưa transact ra khỏi mô hình và giảm bộ đếm xuống 1
GENERATE 300; khởi động chạy mô hình với 300s
TERMINATE 1;
START 1; khởi động chạy mô phỏng
Kết quả mô phỏng:
GPSS World Simulation Report - Untitled Model 1.1.5
Wednesday, April 17, 2013 16:30:21
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 300.000 9 1 0
NAME VALUE
QUEUE1 10000.000
SERVER 10001.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 1235 0 0
2 QUEUE 1235 0 0
3 SEIZE 1235 0 0
4 DEPART 1235 0 0
5 ADVANCE 1235 0 0
6 RELEASE 1235 0 0
7 TERMINATE 1235 0 0
8 GENERATE 1 0 0
9 TERMINATE 1 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
SERVER 1235 0.861 0.209 1 0 0 0 0 0
QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
QUEUE1 16 0 1235 212 2.907 0.706 0.853 0
Kết quả của chương trình mô phỏng trong 300s:
START TIME (Thời gian bắt đầu): 0.000
END TIME (Thời gian kết thúc): 300.000
Sau đây là các kết quả của kênh dịch vụ mô phỏng (FACILITY) tên là SERVER:
ENTRIES (Số sự kiện vào): 1235
UTIL. (Thời gian sử dụng): 0.861
AVE. TIME (Thời gian trung bình của khách hàng trong SERVER): 0.209
AVAIL. (SERVER còn sẵn): 1
OWNER: 0
PEND: 0
INTER: 0
RETRY (Truyền lại): 0
DELAY (Làm trễ): 0
Sau đây là các kết quả của hàng đợi mô phỏng (QUEUE) tên là QUEUE1:
MAX (Chiều dài tối đa của hàng đợi): 16
CONT. (Số sự kiện hiện tại): 0
ENTRY (Số sự kiện đi vào hàng đợi): 1235
ENTRY(0) (Số lượng mục 0): 212
AVE.CONT. (Số sự kiện trung bình đi vào hàng đợi): 2.907
AVE.TIME (Thời gian trung bình của khách hàng trong hàng đợi): 0.706
AVE.(-0): 0.853
RETRY: 0
II. Mô phỏng hàng đợi M/M/n.
Xét tại một mô hình hàng đợi M/M/4 với các điều kiện sau. Các sự kiện đến theo phân phối Poisson với tốc độ trung bình là như nhaus đối với mỗi sự kiện và thời gian phục vụ theo phân phối mũ với tốc độ phục vụ là:s đối với mỗi sự kiện. Tính toán các tham số hiệu năng của hàng đợi M/M/4.
Bài giải:
Mật độ lưu lượng
Số lượng trung bình khách hàng trong hệ thống:
Số lượng trung bình khách hàng đợi, có nghĩa là chiều dài hàng đợi trung bình:
Số yêu cầu được phục vụ trung bình:
2. Mô phỏng hàng đợi M/M/4
Giải pháp của phương pháp mô phỏng
Hình 4-3: Quá trình phục vụ yêu cầu đến của hàng đợi M/M/n
Hình vẽ mô tả quá trình hoạt động của hệ thống hàng đợi M/M/n. Trong hình cho thấy các sự kiện chính phát sinh. Đặc trưng cho mỗi sự kiện xảy ra trong hệ thống mô phỏng:
1. Tạo các yêu cầu đến trong hệ thống (GENERATE).
2. Đưa yêu cầu vào hàng đợi (QUEUE).
3. Xác nhận server dịch vụ (ENTER).
4. Yêu cầu đầu ra của hàng đợi (DEPART).
5. Phục vụ yêu cầu (ADVANCE).
6. Giải phóng server dịch vụ (LEAVE).
7. Kết quả đầu ra từ các yêu cầu hệ thống (TERMINATE).
Ở đây chúng ta mô phỏng hệ thống hàng đợi với nhiều server giống hệt nhau thì ta sẽ sử dụng STORAGE để khai báo số lượng server có sẵn và ta sử dụng cặp Block ENTER và LEAVE để thay thế cho cho cặp Block SEIZE và RELEASE để sử dụng các server đã khai báo.
Sơ đồ khối của mô phỏng
Hình 4-4: Sơ đồ khối của mô phỏng hàng đợi M/M/n
Chương trình mô phỏng:
Server STORAGE 4 ; có 4 server phục vụ
GENERATE (Exponential (1,0,0.25)) ; phát sinh luồng sự kiện đơn giản nhất có giá trị thời gian trung bình bằng 0.25 s/sự kiện.
QUEUE Queue1 ; sự kiện đến được đưa vào hàng đợi có tên “Queue1”
ENTER Server ; sự kiện đến chiếm một trong các server
DEPART Queue1 ; đánh dấu thời điểm chùm đi ra khỏi hàng đợi “Queue1”
ADVANCE (Exponential (1,0,0.2)) ; gian xử lý transact của thiết bị theo luật phân bố Poisson với tốc độ phục vụ là 0.2 s/sự kiện.
LEAVE Server ; giải phóng một trong các Server sau khi kiện đã rời khỏi.
TERMINATE ; đưa kiện ra khỏi mô hình và giảm bộ đếm hoàn thành
GENERATE 300; khởi động chạy mô hình với 300s
TERMINATE 1;
START 1; khởi động chạy mô phỏng
Kết quả mô phỏng:
GPSS World Simulation Report - Untitled Model 1.1.1
Friday, May 24, 2013 01:11:23
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 300.000 9 0 1
NAME VALUE
QUEUE1 10001.000
SERVER 10000.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 1233 0 0
2 QUEUE 1233 0 0
3 ENTER 1233 0 0
4 DEPART 1233 0 0
5 ADVANCE 1233 0 0
6 LEAVE 1233 0 0
7 TERMINATE 1233 0 0
8 GENERATE 1 0 0
9 TERMINATE 1 0 0
QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
QUEUE1 2 0 1233 1216 0.003 0.001 0.051 0
STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY
SERVER 4 4 0 4 1233 1 0.859 0.215 0 0
Kết quả của chương trình mô phỏng trong 300s:
START TIME (Thời gian bắt đầu): 0.000
END TIME (Thời gian kết thúc): 300.000
Sau đây là các kết quả của kênh dịch vụ mô phỏng (STORAGE) tên là SERVER:
CAP. (Capacity – Công suất): 4
REM. (Remove – Loại bỏ): 4
MIN. (Số lượng server nhỏ nhất): 0
MAX. (Số lượng server lớn nhất): 4
ENTRIES (Số sự kiện đi vào server): 1233
AVL. (Số server sẵn có): 1
AVE.C. (Công suất trung bình): 0.859
UTIL. (Hiệu suất sử dụng): 0.215
RETRY (Truyền lại): 0
DELAY (Làm trễ): 0
Sau đây là các kết quả của hàng đợi mô phỏng (QUEUE) tên là QUEUE1:
MAX (Chiều dài tối đa của hàng đợi): 2
CONT. (Số sự kiện hiện tại):0
ENTRY (Số sự kiện đi vào hàng đợi):1233
ENTRY(0) (Số lượng mục 0):1216
AVE.CONT. (Số sự kiện trung bình đi vào hàng đợi): 0.003
AVE.TIME (Thời gian trung bình của khách hàng trong hàng đợi): 0.001
AVE.(-0): 0.051
RETRY: 0
III. Mô phỏng hàng đợi M/M/n/n .
1.Lý thuyết hàng đợi M/M/n/n .
Xét tại một mô hình hàng đợi M/M/4/4 với các điều kiện sau. Các sự kiện đến theo phân phối Poisson với tốc độ trung bình là như nhaus đối với mỗi sự kiện và thời gian phục vụ theo phân phối mũ với tốc độ phục vụ là:s đối với mỗi sự kiện. Tính toán các tham số hiệu năng của hàng đợi M/M/4/4.
Bài giải:
Mật độ lưu lượng
Số lượng trung bình khách hàng trong hệ thống, số lượng trung bình server bận.
Số server sử dụng (Utilization of a server) :
Thời gian chờ trung bình của một server nhất định:
Thời gian bận trung bình của hệ thống:
2. Mô phỏng hàng đợi M/M/4/4
Giải pháp của phương pháp mô phỏng
Hình 4-5: Quá trình phục vụ yêu cầu đến của hàng đợi M/M/n/n
Hình vẽ mô tả quá trình hoạt động của hệ thống hàng đợi M/M/n/n. Trong hình cho thấy các sự kiện chính phát sinh. Đặc trưng cho mỗi sự kiện xảy ra trong hệ thống mô phỏng:
1. Tạo các yêu cầu đến trong hệ thống (GENERATE).
2. Kiểm tra chiều dài hàng đợi (TEST).
3. Đưa yêu cầu vào hàng đợi (QUEUE).
4. Xác nhận server dịch vụ (ENTER).
5. Yêu cầu đầu ra của hàng đợi (DEPART).
6. Phục vụ yêu cầu (ADVANCE).
7. Giải phóng server dịch vụ (LEAVE).
8. Kết quả đầu ra từ các yêu cầu hệ thống (TERMINATE).
Ở đây chúng ta mô phỏng hệ thống hàng đợi với nhiều server giống hệt nhau và có kích thước hàng đợi giới hạn thì ngoài những Block như mô phỏng hàng đợi M/M/n thì ta sử dụng thêm Block TEST để kiểm tra kích thước hàng đợi mỗi khi có yêu cầu đi vào hàng đợi, nếu hàng đợi đã đầy thì ta sẽ cho hủy yêu cầu đó ngay, còn nếu hàng đợi chưa đầy thì sẽ làm việc như trên.
Sơ đồ khối của mô phỏng
Hình 4-6: Sơ đồ khối của mô phỏng hàng đợi M/M/n/n
Chương trình mô phỏng:
Server STORAGE 4 ; có 4 server phục vụ
GENERATE (Exponential (1,0,0.25)) ; phát sinh luồng yêu cầu đơn giản nhất có giá trị thời gian trung bình bằng 0.25 s/sự kiện.
TEST L Q$Queue1,4,Tuchoi ; kiểm tra chiều dài hàng đợi, hàng đợi chứa tối đa 4 phần tử
QUEUE Queue1 ; sự kiện đến được đưa vào hàng đợi có tên “Queue1”
ENTER Server ; sự kiện đến chiếm một trong các server
DEPART Queue1 ; đánh dấu thời điểm chùm đi ra khỏi hàng đợi “Queue1”
ADVANCE (Exponential (1,0,0.2)) ; gian xử lý transact của thiết bị theo luật phân bố Poisson với tốc độ phục vụ là 0.2 s/sự kiện.
LEAVE Server ; giải phóng một trong các Server sau khi kiện đã rời khỏi.
TERMINATE ; đưa kiện ra khỏi mô hình và giảm bộ đếm hoàn thành
Tuchoi TERMINATE 1;
GENERATE 300; khởi động chạy mô hình với 300s
TERMINATE 1;
START 1; khởi động chạy mô phỏng
Kết quả mô phỏng:
GPSS World Simulation Report - Untitled Model 1.1.4
Monday, April 29, 2013 09:21:52
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 300.000 11 0 1
NAME VALUE
QUEUE1 10001.000
SERVER 10000.000
TUCHOI 9.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 1233 0 0
2 TEST 1233 0 0
3 QUEUE 1233 0 0
4 ENTER 1233 0 0
5 DEPART 1233 0 0
6 ADVANCE 1233 0 0
7 LEAVE 1233 0 0
8 TERMINATE 1233 0 0
TUCHOI 9 TERMINATE 0 0 0
10 GENERATE 1 0 0
11 TERMINATE 1 0 0
QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
QUEUE1 2 0 1233 1216 0.003 0.001 0.051 0
STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY
SERVER 4 4 0 4 1233 1 0.859 0.215 0 0
Kết quả của chương trình mô phỏng trong 300s:
START TIME (Thời gian bắt đầu): 0.000
END TIME (Thời gian kết thúc): 300.000
Sau đây là các kết quả của kênh dịch vụ mô phỏng (STORAGE) tên là SERVER:
CAP. (Capacity – Công suất): 4
REM. (Remove – Loại bỏ): 4
MIN. (Số lượng server nhỏ nhất): 0
MAX. (Số lượng server lớn nhất): 4
ENTRIES (Số sự kiện đi vào server): 1233
AVL. (Số server sẵn có): 1
AVE.C. (Công suất trung bình): 0.859
UTIL. (Hiệu suất sử dụng): 0.215
RETRY (Truyền lại): 0
DELAY (Làm trễ): 0
Sau đây là các kết quả của hàng đợi mô phỏng (QUEUE) tên là QUEUE1:
MAX (Chiều dài tối đa của hàng đợi): 2
CONT. (Số sự kiện hiện tại):0
ENTRY (Số sự kiện đi vào hàng đợi):1233
ENTRY(0) (Số lượng mục 0):1216
AVE.CONT. (Số sự kiện trung bình đi vào hàng đợi): 0.003
AVE.TIME (Thời gian trung bình của khách hàng trong hàng đợi): 0.001
AVE.(-0): 0.051
RETRY: 0
Kết luận
Trong bản báo cáo này ta đã nghiên cứu về lý thuyết hàng đợi; ngôn ngữ mô phỏng GPSS Wolrd và sử dụng công cụ GPSS World trong bài toán mô phỏng hệ thống hàng đợi. Dùng GPSS có thể tạo ra các “yêu cầu” – “sự kiện” từ các nguồn khác nhau một cách độc lập theo các quy luật phân bố, độ ưu tiên khác nhau và quản lý chúng thông qua các Block. Trong GPSS có các đối tượng tương ứng với các thành phần của một hệ thống phục vụ đám đông như: Transactions, Facilities, Queues, Storage… Để thực hiện ví dụ minh họa các em đã sử dụng công cụ GPSS World tiến hành mô phỏng hoạt động của hàng đợi M/M/1, M/M/n rồi sau đó mở rộng ra cho hàng đợi M/M/n/n và tính toán các thông số đối với hệ thống hàng đợi này. Kết quả thực nghiệm cho thấy, mô phỏng bài toán hệ thống phục vụ hàng đợi bằng công cụ GPSS World cùng cho ra một kết quả nhưng đơn giản và hiệu quả hơn nhiều so với việc tính toán lý thuyết cũng như lập trình mô phỏng bằng các ngôn ngữ lập trình như Pascal, C++.... GPSS cho phép quan sát quá trình mô phỏng một cách dễ dàng và trực quan thông qua các cửa sổ: Blocks Window, Facilities Window, Plot Window, Queues Window… Bằng ngôn ngữ mô phỏng GPSS và công cụ GPSS World hoàn toàn có thể tiến hành mô phỏng các hệ thống phục vụ hàng đợi phức tạp gồm nhiều nguồn yêu cầu, nhiều kênh phục vụ và các quy tắc phục vụ khác nhau… Do chỉ mang tính chất tìm hiểu và sử dụng nên kết quả được xuất ra từ mô phỏng chưa thực sự chính xác và một số vấn đề vẫn còn khúc mắc chưa giải quyết được nên mong thầy thông cảm bỏ qua cho, bản báo cáo này sử dụng nhiều nguồn tư liệu nước ngoài nên có em đã có gắng dịch sát nghĩa với văn bản gốc đến mức có thể nên câu từ còn rối rắm ngữ nghĩa khó hiểu nên em mong thầy thông cảm. Em xin cảm ơn.
Tài liệu tham khảo
1.“Công cụ GPSS cho bài toán mô phỏng các hệ thống phục vụ đám đông”, Lê Quang Vinh và Phan Đăng Khoa, Viện CNTT – ĐHQG Hà Nội.
2.“GPSS World Reference Manual”, Minuteman Software.
3.“Basic Queueing Theory”, Dr. János Sztrik - University of Debrecen, Faculty of Informatics.
4. “GPSS World - Основы имитационного моделирования”, Кудрявцев Е. М., Москва, 2004 .
Các file đính kèm theo tài liệu này:
- ban_bao_cao_mo_phong_hang_doi_bang_gpss_4689.doc