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.

Files changed (84) hide show
  1. {most_queue-1.26 → most_queue-1.27}/PKG-INFO +1 -1
  2. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/qs_sim.py +57 -53
  3. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/rand_destribution.py +62 -34
  4. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mg1_warm_calc.py +3 -2
  5. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mmn_with_h2_cold_and_h2_warmup.py +1 -1
  6. {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/PKG-INFO +1 -1
  7. {most_queue-1.26 → most_queue-1.27}/pyproject.toml +1 -1
  8. {most_queue-1.26 → most_queue-1.27}/setup.py +1 -1
  9. {most_queue-1.26 → most_queue-1.27}/LICENSE +0 -0
  10. {most_queue-1.26 → most_queue-1.27}/README.md +0 -0
  11. {most_queue-1.26 → most_queue-1.27}/most_queue/__init__.py +0 -0
  12. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/__init__.py +0 -0
  13. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/batch_sim.py +0 -0
  14. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/fj_delta_sim.py +0 -0
  15. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/fj_sim.py +0 -0
  16. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/flow_sum_sim.py +0 -0
  17. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/impatient_queue_sim.py +0 -0
  18. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/priority_network.py +0 -0
  19. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/priority_queue_sim.py +0 -0
  20. {most_queue-1.26 → most_queue-1.27}/most_queue/sim/queue_finite_source_sim.py +0 -0
  21. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/__init__.py +0 -0
  22. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/ek_d_n.py +0 -0
  23. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/fj_calc.py +0 -0
  24. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/fj_im.py +0 -0
  25. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/flow_sum.py +0 -0
  26. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/gi_m_1_calc.py +0 -0
  27. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/gi_m_n_calc.py +0 -0
  28. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/m_d_n_calc.py +0 -0
  29. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/m_h2_h2warm.py +0 -0
  30. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/m_ph_n_prty.py +0 -0
  31. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mg1_calc.py +0 -0
  32. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mg1_warm_calc.py +0 -0
  33. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mgn_tt.py +0 -0
  34. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mmn3_pnz_cox_approx.py +0 -0
  35. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/mmn_prty_pnz_approx.py +0 -0
  36. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/network_im_prty.py +0 -0
  37. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/smo_im.py +0 -0
  38. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/smo_im_prty.py +0 -0
  39. {most_queue-1.26 → most_queue-1.27}/most_queue/tests/weibull.py +0 -0
  40. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/__init__.py +0 -0
  41. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/batch_mm1.py +0 -0
  42. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/convolution_sum_calc.py +0 -0
  43. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/diff5dots.py +0 -0
  44. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/ek_d_n_calc.py +0 -0
  45. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/engset_model.py +0 -0
  46. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/fj_calc.py +0 -0
  47. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/flow_sum.py +0 -0
  48. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/generate_pareto_noise.py +0 -0
  49. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/gi_m_1_calc.py +0 -0
  50. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/gi_m_n_calc.py +0 -0
  51. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/impatience_calc.py +0 -0
  52. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/m_d_n_calc.py +0 -0
  53. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/m_h2_h2warm.py +0 -0
  54. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/m_h2_n_with_h2_cold_and_h2_warmup.py +0 -0
  55. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/m_ph_n_prty.py +0 -0
  56. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mg1_calc.py +0 -0
  57. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mgn_tt.py +0 -0
  58. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mgn_with_h2_delay_cold_warm.py +0 -0
  59. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mmn3_pnz_cox_approx.py +0 -0
  60. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mmn_prty_pnz_approx.py +0 -0
  61. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/mmnr_calc.py +0 -0
  62. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/network_calc.py +0 -0
  63. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/network_viewer.py +0 -0
  64. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/passage_time.py +0 -0
  65. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/priority_calc.py +0 -0
  66. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/q_poisson_arrival_calc.py +0 -0
  67. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/student_stat.py +0 -0
  68. {most_queue-1.26 → most_queue-1.27}/most_queue/theory/weibull.py +0 -0
  69. {most_queue-1.26 → most_queue-1.27}/most_queue/utils/__init__.py +0 -0
  70. {most_queue-1.26 → most_queue-1.27}/most_queue/utils/approx_cdf_make.py +0 -0
  71. {most_queue-1.26 → most_queue-1.27}/most_queue/utils/binom_probs.py +0 -0
  72. {most_queue-1.26 → most_queue-1.27}/most_queue/utils/tables.py +0 -0
  73. {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/__init__.py +0 -0
  74. {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/smo_im_vis.py +0 -0
  75. {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/utils/__init__.py +0 -0
  76. {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/utils/result_table.py +0 -0
  77. {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/utils/settings_window.py +0 -0
  78. {most_queue-1.26 → most_queue-1.27}/most_queue/visualisation/utils/splash_screen.py +0 -0
  79. {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/SOURCES.txt +0 -0
  80. {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/dependency_links.txt +0 -0
  81. {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/not-zip-safe +0 -0
  82. {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/requires.txt +0 -0
  83. {most_queue-1.26 → most_queue-1.27}/most_queue.egg-info/top_level.txt +0 -0
  84. {most_queue-1.26 → most_queue-1.27}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: most_queue
3
- Version: 1.26
3
+ Version: 1.27
4
4
  Summary: Software package for calculation and simulation of queuing systems
5
5
  Home-page: https://github.com/xabarov/mps
6
6
  Author: Xabarov Roman
@@ -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
- r = np.random.uniform(mean - half_interval, mean + half_interval)
121
- return r
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
- r = np.random.rand()
223
- res = -np.log(np.random.rand())
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
- r = np.random.rand()
454
- res = (-1.0 / m1) * np.log(np.random.rand())
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
- res = res + (-1.0 / m2) * np.log(np.random.rand())
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
- prod *= np.random.rand()
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
- b1 = 0.8
36
- b1_warm = 0.9
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)
@@ -618,7 +618,7 @@ if __name__ == "__main__":
618
618
 
619
619
  smo.set_servers(mu, 'M')
620
620
  smo.set_warm(gamma_params_warm, 'Gamma')
621
- smo.set_cold(gamma_params_cold, 'Gamma')
621
+ # smo.set_cold(gamma_params_cold, 'Gamma')
622
622
 
623
623
  smo.run(num_of_jobs)
624
624
  p = smo.get_p()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: most-queue
3
- Version: 1.26
3
+ Version: 1.27
4
4
  Summary: Software package for calculation and simulation of queuing systems
5
5
  Home-page: https://github.com/xabarov/mps
6
6
  Author: Xabarov Roman
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "most_queue"
3
- version = "1.26"
3
+ version = "1.27"
4
4
  authors = [
5
5
  { name="Xabarov Roman", email="xabarov1985@gmail.com" },
6
6
  ]
@@ -1,7 +1,7 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
3
  setup(name='most-queue',
4
- version='1.26',
4
+ version='1.27',
5
5
  description="Software package for calculation and simulation of queuing systems",
6
6
  author='Xabarov Roman',
7
7
  author_email='xabarov1985@gmail.com',
File without changes
File without changes
File without changes