most-queue 1.26__tar.gz → 1.27__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of most-queue might be problematic. Click here for more details.
- {most_queue-1.26 → most_queue-1.27}/PKG-INFO +1 -1
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/qs_sim.py +57 -53
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/rand_destribution.py +62 -34
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mg1_warm_calc.py +3 -2
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mmn_with_h2_cold_and_h2_warmup.py +1 -1
- {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/PKG-INFO +1 -1
- {most_queue-1.26 → most_queue-1.27}/pyproject.toml +1 -1
- {most_queue-1.26 → most_queue-1.27}/setup.py +1 -1
- {most_queue-1.26 → most_queue-1.27}/LICENSE +0 -0
- {most_queue-1.26 → most_queue-1.27}/README.md +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/__init__.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/__init__.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/batch_sim.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/fj_delta_sim.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/fj_sim.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/flow_sum_sim.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/impatient_queue_sim.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/priority_network.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/priority_queue_sim.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/sim/queue_finite_source_sim.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/__init__.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/ek_d_n.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/fj_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/fj_im.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/flow_sum.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/gi_m_1_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/gi_m_n_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/m_d_n_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/m_h2_h2warm.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/m_ph_n_prty.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mg1_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mg1_warm_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mgn_tt.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mmn3_pnz_cox_approx.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mmn_prty_pnz_approx.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/network_im_prty.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/smo_im.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/smo_im_prty.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/tests/weibull.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/__init__.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/batch_mm1.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/convolution_sum_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/diff5dots.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/ek_d_n_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/engset_model.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/fj_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/flow_sum.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/generate_pareto_noise.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/gi_m_1_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/gi_m_n_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/impatience_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/m_d_n_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/m_h2_h2warm.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/m_h2_n_with_h2_cold_and_h2_warmup.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/m_ph_n_prty.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mg1_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mgn_tt.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mgn_with_h2_delay_cold_warm.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mmn3_pnz_cox_approx.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mmn_prty_pnz_approx.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mmnr_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/network_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/network_viewer.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/passage_time.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/priority_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/q_poisson_arrival_calc.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/student_stat.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/theory/weibull.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/utils/__init__.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/utils/approx_cdf_make.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/utils/binom_probs.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/utils/tables.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/__init__.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/smo_im_vis.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/utils/__init__.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/utils/result_table.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/utils/settings_window.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/utils/splash_screen.py +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/SOURCES.txt +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/dependency_links.txt +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/not-zip-safe +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/requires.txt +0 -0
- {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/top_level.txt +0 -0
- {most_queue-1.26 → most_queue-1.27}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import numpy as np
|
|
2
2
|
|
|
3
|
-
import rand_destribution as rd
|
|
3
|
+
import most_queue.sim.rand_destribution as rd
|
|
4
4
|
import math
|
|
5
5
|
from tqdm import tqdm
|
|
6
6
|
import time
|
|
@@ -39,6 +39,8 @@ class QueueingSystemSimulator:
|
|
|
39
39
|
self.verbose = verbose # выводить ли текстовые сообщения о работе
|
|
40
40
|
self.cuda = cuda # использование CUDA при ИМ для генерации ПСЧ
|
|
41
41
|
|
|
42
|
+
self.generator = np.random.default_rng()
|
|
43
|
+
|
|
42
44
|
self.free_channels = self.n
|
|
43
45
|
self.num_of_states = 100000
|
|
44
46
|
self.load = 0 # коэффициент загрузки системы
|
|
@@ -104,6 +106,7 @@ class QueueingSystemSimulator:
|
|
|
104
106
|
self.cold_delay_prob = 0
|
|
105
107
|
self.cold_delay_starts_times = 0
|
|
106
108
|
|
|
109
|
+
|
|
107
110
|
def set_warm(self, params, types):
|
|
108
111
|
"""
|
|
109
112
|
Задает тип и параметры распределения времени обслуживания с разогревом
|
|
@@ -118,22 +121,23 @@ class QueueingSystemSimulator:
|
|
|
118
121
|
Равномерное 'Uniform' [mean, half_interval]
|
|
119
122
|
Нормальное 'Norm' [mean, standard_deviation]
|
|
120
123
|
"""
|
|
124
|
+
|
|
121
125
|
if types == "M":
|
|
122
|
-
self.warm_dist = rd.Exp_dist(params)
|
|
126
|
+
self.warm_dist = rd.Exp_dist(params, generator=self.generator)
|
|
123
127
|
elif types == "H":
|
|
124
|
-
self.warm_dist = rd.H2_dist(params)
|
|
128
|
+
self.warm_dist = rd.H2_dist(params, generator=self.generator)
|
|
125
129
|
elif types == "E":
|
|
126
|
-
self.warm_dist = rd.Erlang_dist(params)
|
|
130
|
+
self.warm_dist = rd.Erlang_dist(params, generator=self.generator)
|
|
127
131
|
elif types == "Gamma":
|
|
128
|
-
self.warm_dist = rd.Gamma(params)
|
|
132
|
+
self.warm_dist = rd.Gamma(params, generator=self.generator)
|
|
129
133
|
elif types == "C":
|
|
130
|
-
self.warm_dist = rd.Cox_dist(params)
|
|
134
|
+
self.warm_dist = rd.Cox_dist(params, generator=self.generator)
|
|
131
135
|
elif types == "Pa":
|
|
132
|
-
self.warm_dist = rd.Pareto_dist(params)
|
|
136
|
+
self.warm_dist = rd.Pareto_dist(params, generator=self.generator)
|
|
133
137
|
elif types == "Unifrorm":
|
|
134
|
-
self.warm_dist = rd.Uniform_dist(params)
|
|
138
|
+
self.warm_dist = rd.Uniform_dist(params, generator=self.generator)
|
|
135
139
|
elif types == "Norm":
|
|
136
|
-
self.warm_dist = rd.Normal_dist(params)
|
|
140
|
+
self.warm_dist = rd.Normal_dist(params, generator=self.generator)
|
|
137
141
|
elif types == "D":
|
|
138
142
|
self.warm_dist = rd.Det_dist(params)
|
|
139
143
|
else:
|
|
@@ -160,21 +164,21 @@ class QueueingSystemSimulator:
|
|
|
160
164
|
"""
|
|
161
165
|
|
|
162
166
|
if types == "M":
|
|
163
|
-
self.cold_dist = rd.Exp_dist(params)
|
|
167
|
+
self.cold_dist = rd.Exp_dist(params, generator=self.generator)
|
|
164
168
|
elif types == "H":
|
|
165
|
-
self.cold_dist = rd.H2_dist(params)
|
|
169
|
+
self.cold_dist = rd.H2_dist(params, generator=self.generator)
|
|
166
170
|
elif types == "E":
|
|
167
|
-
self.cold_dist = rd.Erlang_dist(params)
|
|
171
|
+
self.cold_dist = rd.Erlang_dist(params, generator=self.generator)
|
|
168
172
|
elif types == "Gamma":
|
|
169
|
-
self.cold_dist = rd.Gamma(params)
|
|
173
|
+
self.cold_dist = rd.Gamma(params, generator=self.generator)
|
|
170
174
|
elif types == "C":
|
|
171
|
-
self.cold_dist = rd.Cox_dist(params)
|
|
175
|
+
self.cold_dist = rd.Cox_dist(params, generator=self.generator)
|
|
172
176
|
elif types == "Pa":
|
|
173
|
-
self.cold_dist = rd.Pareto_dist(params)
|
|
177
|
+
self.cold_dist = rd.Pareto_dist(params, generator=self.generator)
|
|
174
178
|
elif types == "Unifrorm":
|
|
175
|
-
self.cold_dist = rd.Uniform_dist(params)
|
|
179
|
+
self.cold_dist = rd.Uniform_dist(params, generator=self.generator)
|
|
176
180
|
elif types == "Norm":
|
|
177
|
-
self.cold_dist = rd.Normal_dist(params)
|
|
181
|
+
self.cold_dist = rd.Normal_dist(params, generator=self.generator)
|
|
178
182
|
elif types == "D":
|
|
179
183
|
self.cold_dist = rd.Det_dist(params)
|
|
180
184
|
else:
|
|
@@ -205,21 +209,21 @@ class QueueingSystemSimulator:
|
|
|
205
209
|
"Необходимо сперва задать время охлаждения. Используйте метод set_cold()")
|
|
206
210
|
|
|
207
211
|
if types == "M":
|
|
208
|
-
self.cold_delay_dist = rd.Exp_dist(params)
|
|
212
|
+
self.cold_delay_dist = rd.Exp_dist(params, generator=self.generator)
|
|
209
213
|
elif types == "H":
|
|
210
|
-
self.cold_delay_dist = rd.H2_dist(params)
|
|
214
|
+
self.cold_delay_dist = rd.H2_dist(params, generator=self.generator)
|
|
211
215
|
elif types == "E":
|
|
212
|
-
self.cold_delay_dist = rd.Erlang_dist(params)
|
|
216
|
+
self.cold_delay_dist = rd.Erlang_dist(params, generator=self.generator)
|
|
213
217
|
elif types == "Gamma":
|
|
214
|
-
self.cold_delay_dist = rd.Gamma(params)
|
|
218
|
+
self.cold_delay_dist = rd.Gamma(params, generator=self.generator)
|
|
215
219
|
elif types == "C":
|
|
216
|
-
self.cold_delay_dist = rd.Cox_dist(params)
|
|
220
|
+
self.cold_delay_dist = rd.Cox_dist(params, generator=self.generator)
|
|
217
221
|
elif types == "Pa":
|
|
218
|
-
self.cold_delay_dist = rd.Pareto_dist(params)
|
|
222
|
+
self.cold_delay_dist = rd.Pareto_dist(params, generator=self.generator)
|
|
219
223
|
elif types == "Unifrorm":
|
|
220
|
-
self.cold_delay_dist = rd.Uniform_dist(params)
|
|
224
|
+
self.cold_delay_dist = rd.Uniform_dist(params, generator=self.generator)
|
|
221
225
|
elif types == "Norm":
|
|
222
|
-
self.cold_delay_dist = rd.Normal_dist(params)
|
|
226
|
+
self.cold_delay_dist = rd.Normal_dist(params, generator=self.generator)
|
|
223
227
|
elif types == "D":
|
|
224
228
|
self.cold_delay_dist = rd.Det_dist(params)
|
|
225
229
|
else:
|
|
@@ -249,21 +253,21 @@ class QueueingSystemSimulator:
|
|
|
249
253
|
self.is_set_source_params = True
|
|
250
254
|
|
|
251
255
|
if self.source_types == "M":
|
|
252
|
-
self.source = rd.Exp_dist(self.source_params)
|
|
256
|
+
self.source = rd.Exp_dist(self.source_params, generator=self.generator)
|
|
253
257
|
elif self.source_types == "H":
|
|
254
|
-
self.source = rd.H2_dist(self.source_params)
|
|
258
|
+
self.source = rd.H2_dist(self.source_params, generator=self.generator)
|
|
255
259
|
elif self.source_types == "E":
|
|
256
|
-
self.source = rd.Erlang_dist(self.source_params)
|
|
260
|
+
self.source = rd.Erlang_dist(self.source_params, generator=self.generator)
|
|
257
261
|
elif self.source_types == "C":
|
|
258
|
-
self.source = rd.Cox_dist(self.source_params)
|
|
262
|
+
self.source = rd.Cox_dist(self.source_params, generator=self.generator)
|
|
259
263
|
elif self.source_types == "Pa":
|
|
260
|
-
self.source = rd.Pareto_dist(self.source_params)
|
|
264
|
+
self.source = rd.Pareto_dist(self.source_params, generator=self.generator)
|
|
261
265
|
elif self.source_types == "Gamma":
|
|
262
|
-
self.source = rd.Gamma(self.source_params)
|
|
266
|
+
self.source = rd.Gamma(self.source_params, generator=self.generator)
|
|
263
267
|
elif self.source_types == "Uniform":
|
|
264
|
-
self.source = rd.Uniform_dist(self.source_params)
|
|
268
|
+
self.source = rd.Uniform_dist(self.source_params, generator=self.generator)
|
|
265
269
|
elif self.source_types == "Norm":
|
|
266
|
-
self.source = rd.Normal_dist(self.source_params)
|
|
270
|
+
self.source = rd.Normal_dist(self.source_params, generator=self.generator)
|
|
267
271
|
elif self.source_types == "D":
|
|
268
272
|
self.source = rd.Det_dist(self.source_params)
|
|
269
273
|
else:
|
|
@@ -291,7 +295,7 @@ class QueueingSystemSimulator:
|
|
|
291
295
|
self.is_set_server_params = True
|
|
292
296
|
|
|
293
297
|
for i in range(self.n):
|
|
294
|
-
self.servers.append(Server(self.server_params, self.server_types))
|
|
298
|
+
self.servers.append(Server(self.server_params, self.server_types, generator=self.generator))
|
|
295
299
|
|
|
296
300
|
def calc_load(self):
|
|
297
301
|
|
|
@@ -472,7 +476,7 @@ class QueueingSystemSimulator:
|
|
|
472
476
|
self.send_task_to_queue()
|
|
473
477
|
else:
|
|
474
478
|
if self.free_channels == self.n:
|
|
475
|
-
# 2. Она пустая и была
|
|
479
|
+
# 2. Она пустая и была выключена после охлаждения. Запускаем разогрев
|
|
476
480
|
self.start_warm()
|
|
477
481
|
# Отправляем заявку в очередь
|
|
478
482
|
self.send_task_to_queue()
|
|
@@ -825,27 +829,27 @@ class Server:
|
|
|
825
829
|
"""
|
|
826
830
|
id = 0
|
|
827
831
|
|
|
828
|
-
def __init__(self, params, types):
|
|
832
|
+
def __init__(self, params, types, generator=None):
|
|
829
833
|
"""
|
|
830
834
|
params - параметры распределения
|
|
831
835
|
types - тип распределения
|
|
832
836
|
"""
|
|
833
837
|
if types == "M":
|
|
834
|
-
self.dist = rd.Exp_dist(params)
|
|
838
|
+
self.dist = rd.Exp_dist(params, generator=generator)
|
|
835
839
|
elif types == "H":
|
|
836
|
-
self.dist = rd.H2_dist(params)
|
|
840
|
+
self.dist = rd.H2_dist(params, generator=generator)
|
|
837
841
|
elif types == "E":
|
|
838
|
-
self.dist = rd.Erlang_dist(params)
|
|
842
|
+
self.dist = rd.Erlang_dist(params, generator=generator)
|
|
839
843
|
elif types == "C":
|
|
840
|
-
self.dist = rd.Cox_dist(params)
|
|
844
|
+
self.dist = rd.Cox_dist(params, generator=generator)
|
|
841
845
|
elif types == "Gamma":
|
|
842
|
-
self.dist = rd.Gamma(params)
|
|
846
|
+
self.dist = rd.Gamma(params, generator=generator)
|
|
843
847
|
elif types == "Pa":
|
|
844
|
-
self.dist = rd.Pareto_dist(params)
|
|
848
|
+
self.dist = rd.Pareto_dist(params, generator=generator)
|
|
845
849
|
elif types == "Uniform":
|
|
846
|
-
self.dist = rd.Uniform_dist(params)
|
|
850
|
+
self.dist = rd.Uniform_dist(params, generator=generator)
|
|
847
851
|
elif types == "Norm":
|
|
848
|
-
self.dist = rd.Normal_dist(params)
|
|
852
|
+
self.dist = rd.Normal_dist(params, generator=generator)
|
|
849
853
|
elif types == "D":
|
|
850
854
|
self.dist = rd.Det_dist(params)
|
|
851
855
|
else:
|
|
@@ -861,24 +865,24 @@ class Server:
|
|
|
861
865
|
self.types_warm = None
|
|
862
866
|
self.warm_dist = None
|
|
863
867
|
|
|
864
|
-
def set_warm(self, params, types):
|
|
868
|
+
def set_warm(self, params, types, generator=None):
|
|
865
869
|
|
|
866
870
|
if types == "M":
|
|
867
|
-
self.warm_dist = rd.Exp_dist(params)
|
|
871
|
+
self.warm_dist = rd.Exp_dist(params, generator=generator)
|
|
868
872
|
elif types == "H":
|
|
869
|
-
self.warm_dist = rd.H2_dist(params)
|
|
873
|
+
self.warm_dist = rd.H2_dist(params, generator=generator)
|
|
870
874
|
elif types == "E":
|
|
871
|
-
self.warm_dist = rd.Erlang_dist(params)
|
|
875
|
+
self.warm_dist = rd.Erlang_dist(params, generator=generator)
|
|
872
876
|
elif types == "Gamma":
|
|
873
|
-
self.warm_dist = rd.Gamma(params)
|
|
877
|
+
self.warm_dist = rd.Gamma(params, generator=generator)
|
|
874
878
|
elif types == "C":
|
|
875
|
-
self.warm_dist = rd.Cox_dist(params)
|
|
879
|
+
self.warm_dist = rd.Cox_dist(params, generator=generator)
|
|
876
880
|
elif types == "Pa":
|
|
877
|
-
self.warm_dist = rd.Pareto_dist(params)
|
|
881
|
+
self.warm_dist = rd.Pareto_dist(params, generator=generator)
|
|
878
882
|
elif types == "Unifrorm":
|
|
879
|
-
self.warm_dist = rd.Uniform_dist(params)
|
|
883
|
+
self.warm_dist = rd.Uniform_dist(params, generator=generator)
|
|
880
884
|
elif types == "Norm":
|
|
881
|
-
self.warm_dist = rd.Normal_dist(params)
|
|
885
|
+
self.warm_dist = rd.Normal_dist(params, generator=generator)
|
|
882
886
|
elif types == "D":
|
|
883
887
|
self.warm_dist = rd.Det_dist(params)
|
|
884
888
|
else:
|
|
@@ -62,7 +62,7 @@ def generate_e_jit(rng_states, r, mu, out):
|
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
class Normal_dist:
|
|
65
|
-
def __init__(self, params):
|
|
65
|
+
def __init__(self, params, generator=None):
|
|
66
66
|
"""
|
|
67
67
|
Принимает список параметров в следующей последовательности:
|
|
68
68
|
mean - среднее значение
|
|
@@ -72,26 +72,28 @@ class Normal_dist:
|
|
|
72
72
|
self.mean = params[0]
|
|
73
73
|
self.sko = params[1]
|
|
74
74
|
self.type = 'Normal'
|
|
75
|
+
self.generator = generator
|
|
75
76
|
|
|
76
77
|
def generate(self):
|
|
77
78
|
"""
|
|
78
79
|
Генерация псевдо-случайных чисел
|
|
79
80
|
"""
|
|
80
81
|
|
|
81
|
-
return self.generate_static(self.mean, self.sko)
|
|
82
|
+
return self.generate_static(self.mean, self.sko, self.generator)
|
|
82
83
|
|
|
83
84
|
@staticmethod
|
|
84
|
-
def generate_static(mean, sko):
|
|
85
|
+
def generate_static(mean, sko, generator=None):
|
|
85
86
|
"""
|
|
86
87
|
Генерация псевдо-случайных чисел
|
|
87
88
|
Статический метод
|
|
88
89
|
"""
|
|
89
|
-
|
|
90
|
+
if generator:
|
|
91
|
+
return generator.normal(mean, sko)
|
|
90
92
|
return np.random.normal(mean, sko)
|
|
91
93
|
|
|
92
94
|
|
|
93
95
|
class Uniform_dist:
|
|
94
|
-
def __init__(self, params):
|
|
96
|
+
def __init__(self, params, generator=None):
|
|
95
97
|
"""
|
|
96
98
|
Принимает список параметров в следующей последовательности:
|
|
97
99
|
mean - среднее значение
|
|
@@ -101,6 +103,7 @@ class Uniform_dist:
|
|
|
101
103
|
self.mean = params[0]
|
|
102
104
|
self.half_interval = params[1]
|
|
103
105
|
self.type = 'Uniform'
|
|
106
|
+
self.generator = generator
|
|
104
107
|
|
|
105
108
|
def generate(self):
|
|
106
109
|
"""
|
|
@@ -108,17 +111,17 @@ class Uniform_dist:
|
|
|
108
111
|
Вызов из экземпляра класса
|
|
109
112
|
"""
|
|
110
113
|
|
|
111
|
-
return self.generate_static(self.mean, self.half_interval)
|
|
114
|
+
return self.generate_static(self.mean, self.half_interval, self.generator)
|
|
112
115
|
|
|
113
116
|
@staticmethod
|
|
114
|
-
def generate_static(mean, half_interval):
|
|
117
|
+
def generate_static(mean, half_interval, generator=None):
|
|
115
118
|
"""
|
|
116
119
|
Генерация псевдо-случайных чисел, подчиненных равномерному распределению
|
|
117
120
|
Статический метод
|
|
118
121
|
"""
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return
|
|
122
|
+
if generator:
|
|
123
|
+
return generator.uniform(mean - half_interval, mean + half_interval)
|
|
124
|
+
return np.random.uniform(mean - half_interval, mean + half_interval)
|
|
122
125
|
|
|
123
126
|
@staticmethod
|
|
124
127
|
def calc_theory_moments(mean, half_interval, num=3):
|
|
@@ -193,7 +196,7 @@ class Uniform_dist:
|
|
|
193
196
|
|
|
194
197
|
|
|
195
198
|
class H2_dist:
|
|
196
|
-
def __init__(self, params):
|
|
199
|
+
def __init__(self, params, generator=None):
|
|
197
200
|
"""
|
|
198
201
|
Принимает список параметров в следующей последовательности - y1, mu1, mu2
|
|
199
202
|
"""
|
|
@@ -203,6 +206,7 @@ class H2_dist:
|
|
|
203
206
|
self.m2 = params[2]
|
|
204
207
|
self.params = params
|
|
205
208
|
self.type = 'H'
|
|
209
|
+
self.generator = generator
|
|
206
210
|
|
|
207
211
|
def generate(self):
|
|
208
212
|
"""
|
|
@@ -210,17 +214,22 @@ class H2_dist:
|
|
|
210
214
|
Вызов из экземпляра класса
|
|
211
215
|
"""
|
|
212
216
|
|
|
213
|
-
return self.generate_static(self.y1, self.m1, self.m2)
|
|
217
|
+
return self.generate_static(self.y1, self.m1, self.m2, self.generator)
|
|
214
218
|
|
|
215
219
|
@staticmethod
|
|
216
|
-
def generate_static(y1, m1, m2):
|
|
220
|
+
def generate_static(y1, m1, m2, generator=None):
|
|
217
221
|
"""
|
|
218
222
|
Генерация псевдо-случайных чисел, подчиненных гиперэкспоненциальному распределению 2-го порядка.
|
|
219
223
|
Статический метод
|
|
220
224
|
"""
|
|
221
225
|
|
|
222
|
-
|
|
223
|
-
|
|
226
|
+
if generator:
|
|
227
|
+
r = generator.random()
|
|
228
|
+
res = -np.log(generator.random())
|
|
229
|
+
else:
|
|
230
|
+
r = np.random.rand()
|
|
231
|
+
res = -np.log(np.random.rand())
|
|
232
|
+
|
|
224
233
|
if r < y1:
|
|
225
234
|
if m1 != 0:
|
|
226
235
|
res = res / m1
|
|
@@ -429,7 +438,7 @@ class Cox_dist:
|
|
|
429
438
|
Распределение Кокса 2-го порядка
|
|
430
439
|
"""
|
|
431
440
|
|
|
432
|
-
def __init__(self, params):
|
|
441
|
+
def __init__(self, params, generator=None):
|
|
433
442
|
"""
|
|
434
443
|
Принимает список параметров в следующей последовательности - y1, mu1, mu2
|
|
435
444
|
"""
|
|
@@ -438,22 +447,30 @@ class Cox_dist:
|
|
|
438
447
|
self.m2 = params[2]
|
|
439
448
|
self.params = params
|
|
440
449
|
self.type = 'C'
|
|
450
|
+
self.generator = generator
|
|
441
451
|
|
|
442
452
|
def generate(self):
|
|
443
453
|
"""
|
|
444
454
|
Генерация псевдо-случайных чисел, подчиненных распределению Кокса 2-го порядка. Вызов из экземпляра класса
|
|
445
455
|
"""
|
|
446
|
-
return self.generate_static(self.y1, self.m1, self.m2)
|
|
456
|
+
return self.generate_static(self.y1, self.m1, self.m2, self.generator)
|
|
447
457
|
|
|
448
458
|
@staticmethod
|
|
449
|
-
def generate_static(y1, m1, m2):
|
|
459
|
+
def generate_static(y1, m1, m2, generator):
|
|
450
460
|
"""
|
|
451
461
|
Генерация псевдо-случайных чисел, подчиненных распределению Кокса 2-го порядка. Статический метод
|
|
452
462
|
"""
|
|
453
|
-
|
|
454
|
-
|
|
463
|
+
if generator:
|
|
464
|
+
r = generator.random()
|
|
465
|
+
res = (-1.0 / m1) * np.log(generator.random())
|
|
466
|
+
else:
|
|
467
|
+
r = np.random.rand()
|
|
468
|
+
res = (-1.0 / m1) * np.log(np.random.rand())
|
|
455
469
|
if r < y1:
|
|
456
|
-
|
|
470
|
+
if generator:
|
|
471
|
+
res = res + (-1.0 / m2) * np.log(generator.random())
|
|
472
|
+
else:
|
|
473
|
+
res = res + (-1.0 / m2) * np.log(np.random.rand())
|
|
457
474
|
return res
|
|
458
475
|
|
|
459
476
|
@staticmethod
|
|
@@ -566,7 +583,7 @@ class Det_dist:
|
|
|
566
583
|
class Pareto_dist:
|
|
567
584
|
"Распределение Парето"
|
|
568
585
|
|
|
569
|
-
def __init__(self, params):
|
|
586
|
+
def __init__(self, params, generator=None):
|
|
570
587
|
"""
|
|
571
588
|
Принимает список параметров в следующей последовательности - alpha, K
|
|
572
589
|
"""
|
|
@@ -574,9 +591,10 @@ class Pareto_dist:
|
|
|
574
591
|
self.k = params[1]
|
|
575
592
|
self.params = params
|
|
576
593
|
self.type = 'Pa'
|
|
594
|
+
self.generator = generator
|
|
577
595
|
|
|
578
596
|
def generate(self):
|
|
579
|
-
return Pareto_dist.generate_static(self.a, self.k)
|
|
597
|
+
return Pareto_dist.generate_static(self.a, self.k, self.generator)
|
|
580
598
|
|
|
581
599
|
@staticmethod
|
|
582
600
|
def get_pdf(t, a, k):
|
|
@@ -621,7 +639,9 @@ class Pareto_dist:
|
|
|
621
639
|
return f
|
|
622
640
|
|
|
623
641
|
@staticmethod
|
|
624
|
-
def generate_static(a, k):
|
|
642
|
+
def generate_static(a, k, generator=None):
|
|
643
|
+
if generator:
|
|
644
|
+
return k * math.pow(generator.random(), -1 / a)
|
|
625
645
|
return k * math.pow(np.random.rand(), -1 / a)
|
|
626
646
|
|
|
627
647
|
@staticmethod
|
|
@@ -662,7 +682,7 @@ class Erlang_dist:
|
|
|
662
682
|
Распределение Эрланга r-го порядка
|
|
663
683
|
"""
|
|
664
684
|
|
|
665
|
-
def __init__(self, params):
|
|
685
|
+
def __init__(self, params, generator=None):
|
|
666
686
|
""""
|
|
667
687
|
Принимает список параметров в следующей последовательности - r, mu
|
|
668
688
|
"""
|
|
@@ -670,21 +690,25 @@ class Erlang_dist:
|
|
|
670
690
|
self.mu = params[1]
|
|
671
691
|
self.params = params
|
|
672
692
|
self.type = 'E'
|
|
693
|
+
self.generator = generator
|
|
673
694
|
|
|
674
695
|
def generate(self):
|
|
675
696
|
"""
|
|
676
697
|
Генератор псевдо-случайных чисел
|
|
677
698
|
"""
|
|
678
|
-
return self.generate_static(self.r, self.mu)
|
|
699
|
+
return self.generate_static(self.r, self.mu, self.generator)
|
|
679
700
|
|
|
680
701
|
@staticmethod
|
|
681
|
-
def generate_static(r, mu):
|
|
702
|
+
def generate_static(r, mu, generator=None):
|
|
682
703
|
"""
|
|
683
704
|
Генератор псевдо-случайных чисел. Статический метод
|
|
684
705
|
"""
|
|
685
706
|
prod = 1
|
|
686
707
|
for i in range(r):
|
|
687
|
-
|
|
708
|
+
if generator:
|
|
709
|
+
prod *= generator.random()
|
|
710
|
+
else:
|
|
711
|
+
prod *= np.random.rand()
|
|
688
712
|
|
|
689
713
|
return -(1.0 / mu) * np.log(prod)
|
|
690
714
|
|
|
@@ -750,17 +774,18 @@ class Exp_dist:
|
|
|
750
774
|
Экспоненциальное распределение
|
|
751
775
|
"""
|
|
752
776
|
|
|
753
|
-
def __init__(self, mu):
|
|
777
|
+
def __init__(self, mu, generator=None):
|
|
754
778
|
self.erl = Erlang_dist([1, mu])
|
|
755
779
|
self.params = mu
|
|
756
780
|
self.type = 'M'
|
|
781
|
+
self.generator = generator
|
|
757
782
|
|
|
758
783
|
def generate(self):
|
|
759
784
|
return self.erl.generate()
|
|
760
785
|
|
|
761
786
|
@staticmethod
|
|
762
|
-
def generate_static(mu):
|
|
763
|
-
return Erlang_dist.generate_static(1, mu)
|
|
787
|
+
def generate_static(mu, generator=None):
|
|
788
|
+
return Erlang_dist.generate_static(1, mu, generator)
|
|
764
789
|
|
|
765
790
|
@staticmethod
|
|
766
791
|
def calc_theory_moments(mu, count=3):
|
|
@@ -776,7 +801,7 @@ class Gamma:
|
|
|
776
801
|
Гамма-распределение
|
|
777
802
|
"""
|
|
778
803
|
|
|
779
|
-
def __init__(self, params):
|
|
804
|
+
def __init__(self, params, generator=None):
|
|
780
805
|
self.mu = params[0]
|
|
781
806
|
self.alpha = params[1]
|
|
782
807
|
self.is_corrective = False
|
|
@@ -787,6 +812,7 @@ class Gamma:
|
|
|
787
812
|
self.g.append(params[i])
|
|
788
813
|
self.params = params
|
|
789
814
|
self.type = 'Gamma'
|
|
815
|
+
self.generator = generator
|
|
790
816
|
|
|
791
817
|
@staticmethod
|
|
792
818
|
def get_mu_alpha(b):
|
|
@@ -839,11 +865,13 @@ class Gamma:
|
|
|
839
865
|
return mu, alpha
|
|
840
866
|
|
|
841
867
|
def generate(self):
|
|
842
|
-
return self.generate_static(self.mu, self.alpha)
|
|
868
|
+
return self.generate_static(self.mu, self.alpha, self.generator)
|
|
843
869
|
|
|
844
870
|
@staticmethod
|
|
845
|
-
def generate_static(mu, alpha):
|
|
871
|
+
def generate_static(mu, alpha, generator=None):
|
|
846
872
|
theta = 1 / mu
|
|
873
|
+
if generator:
|
|
874
|
+
return generator.gamma(alpha, theta)
|
|
847
875
|
return np.random.gamma(alpha, theta)
|
|
848
876
|
|
|
849
877
|
@staticmethod
|
|
@@ -32,8 +32,9 @@ if __name__ == '__main__':
|
|
|
32
32
|
from most_queue.utils.tables import times_print, probs_print
|
|
33
33
|
|
|
34
34
|
l = 1
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
ro = 0.2 # коэфф загрузки
|
|
36
|
+
b1 = n * ro / l # ср время обслуживания
|
|
37
|
+
b1_warm = n * 0.3 / l # ср время разогрева
|
|
37
38
|
coev = 1.3
|
|
38
39
|
b_params = rd.H2_dist.get_params_by_mean_and_coev(b1, coev)
|
|
39
40
|
b = rd.H2_dist.calc_theory_moments(*b_params, 4)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|