most-queue 1.39__tar.gz → 1.41__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 (94) hide show
  1. {most_queue-1.39 → most_queue-1.41}/PKG-INFO +1 -1
  2. {most_queue-1.39/most_queue/examples → most_queue-1.41/most_queue}/compare_fj_calc.py +7 -4
  3. {most_queue-1.39/most_queue/examples → most_queue-1.41/most_queue}/flow_sum.py +2 -2
  4. {most_queue-1.39/most_queue/utils → most_queue-1.41/most_queue/general_utils}/approx_cdf_make.py +7 -7
  5. most_queue-1.39/most_queue/theory/convolution_sum_calc.py → most_queue-1.41/most_queue/general_utils/conv.py +24 -23
  6. {most_queue-1.39/most_queue/utils → most_queue-1.41/most_queue/general_utils}/tables.py +3 -1
  7. {most_queue-1.39/most_queue/utils → most_queue-1.41/most_queue/general_utils}/vacations_paper_utils.py +3 -1
  8. most_queue-1.39/most_queue/sim/rand_destribution.py → most_queue-1.41/most_queue/rand_distribution.py +2 -1
  9. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/batch_sim.py +1 -1
  10. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/fj_delta_sim.py +7 -60
  11. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/fj_sim.py +4 -49
  12. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/flow_sum_sim.py +26 -18
  13. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/impatient_queue_sim.py +3 -3
  14. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/priority_network.py +9 -10
  15. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/priority_queue_sim.py +2 -1
  16. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/qs_sim.py +6 -93
  17. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/queue_finite_source_sim.py +11 -38
  18. {most_queue-1.39/most_queue/sim → most_queue-1.41/most_queue/sim/utils}/distribution_utils.py +16 -6
  19. most_queue-1.41/most_queue/sim/utils/servers.py +113 -0
  20. most_queue-1.41/most_queue/sim/utils/tasks.py +70 -0
  21. {most_queue-1.39/most_queue/theory → most_queue-1.41/most_queue/tests}/__init__.py +0 -0
  22. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_batch.py +6 -8
  23. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_ek_d_n.py +10 -9
  24. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_engset.py +2 -3
  25. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_fj_delta.py +13 -13
  26. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_fj_im.py +9 -9
  27. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_gi_m_1_calc.py +8 -7
  28. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_gi_m_n_calc.py +9 -7
  29. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_impatience.py +6 -6
  30. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_m_d_n_calc.py +3 -3
  31. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_m_h2_h2warm.py +18 -17
  32. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_m_ph_n_prty.py +8 -7
  33. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_mg1_calc.py +5 -4
  34. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_mgn_tt.py +5 -5
  35. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_mgn_with_h2_delay_cold_warm.py +25 -19
  36. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_mmn3_pnz_cox_approx.py +4 -4
  37. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_mmn_h2cold_h2warm.py +22 -18
  38. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_mmn_prty_pnz_approx.py +2 -2
  39. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_network_im_prty.py +6 -8
  40. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_qs_sim_prty.py +10 -10
  41. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_qs_sim_test.py +4 -5
  42. {most_queue-1.39/most_queue → most_queue-1.41/most_queue/tests}/test_queue_types.py +3 -3
  43. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/engset_model.py +2 -2
  44. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/fj_calc.py +7 -7
  45. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/gi_m_1_calc.py +5 -3
  46. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/gi_m_n_calc.py +4 -4
  47. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/m_h2_h2warm.py +7 -5
  48. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/m_ph_n_prty.py +5 -3
  49. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/mg1_calc.py +3 -2
  50. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/mg1_warm_calc.py +2 -2
  51. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/mgn_tt.py +4 -3
  52. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/mgn_with_h2_delay_cold_warm.py +8 -4
  53. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/mmn3_pnz_cox_approx.py +7 -6
  54. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/mmn_prty_pnz_approx.py +5 -3
  55. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/mmn_with_h2_cold_and_h2_warmup.py +6 -4
  56. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/mmnr_calc.py +3 -2
  57. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/network_calc.py +5 -4
  58. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/network_viewer.py +4 -2
  59. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/priority_calc.py +4 -4
  60. most_queue-1.41/most_queue/theory/utils/__init__.py +0 -0
  61. most_queue-1.41/most_queue/theory/utils/binom_probs.py +14 -0
  62. {most_queue-1.39/most_queue/theory → most_queue-1.41/most_queue/theory/utils}/flow_sum.py +22 -16
  63. {most_queue-1.39/most_queue/theory → most_queue-1.41/most_queue/theory/utils}/passage_time.py +12 -11
  64. {most_queue-1.39/most_queue/theory → most_queue-1.41/most_queue/theory/utils}/q_poisson_arrival_calc.py +2 -2
  65. {most_queue-1.39/most_queue/theory → most_queue-1.41/most_queue/theory/utils}/weibull.py +2 -2
  66. {most_queue-1.39/most_queue/examples → most_queue-1.41/most_queue}/weibull.py +1 -1
  67. {most_queue-1.39 → most_queue-1.41}/most_queue.egg-info/PKG-INFO +1 -1
  68. most_queue-1.41/most_queue.egg-info/SOURCES.txt +88 -0
  69. {most_queue-1.39 → most_queue-1.41}/pyproject.toml +1 -1
  70. {most_queue-1.39 → most_queue-1.41}/setup.py +1 -1
  71. most_queue-1.39/most_queue/sim/utils/servers.py +0 -68
  72. most_queue-1.39/most_queue/sim/utils/sim_utils.py +0 -24
  73. most_queue-1.39/most_queue/theory/rand_destribution.py +0 -1030
  74. most_queue-1.39/most_queue.egg-info/SOURCES.txt +0 -87
  75. {most_queue-1.39 → most_queue-1.41}/LICENSE +0 -0
  76. {most_queue-1.39 → most_queue-1.41}/README.md +0 -0
  77. {most_queue-1.39 → most_queue-1.41}/most_queue/__init__.py +0 -0
  78. {most_queue-1.39/most_queue/examples → most_queue-1.41/most_queue/general_utils}/__init__.py +0 -0
  79. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/__init__.py +0 -0
  80. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/utils/__init__.py +0 -0
  81. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/utils/exceptions.py +0 -0
  82. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/utils/phase.py +0 -0
  83. {most_queue-1.39 → most_queue-1.41}/most_queue/sim/utils/qs_queue.py +0 -0
  84. {most_queue-1.39/most_queue/utils → most_queue-1.41/most_queue/theory}/__init__.py +0 -0
  85. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/batch_mm1.py +0 -0
  86. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/ek_d_n_calc.py +0 -0
  87. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/impatience_calc.py +0 -0
  88. {most_queue-1.39 → most_queue-1.41}/most_queue/theory/m_d_n_calc.py +0 -0
  89. {most_queue-1.39/most_queue/theory → most_queue-1.41/most_queue/theory/utils}/diff5dots.py +0 -0
  90. {most_queue-1.39/most_queue/theory → most_queue-1.41/most_queue/theory/utils}/student_stat.py +0 -0
  91. {most_queue-1.39 → most_queue-1.41}/most_queue.egg-info/dependency_links.txt +0 -0
  92. {most_queue-1.39 → most_queue-1.41}/most_queue.egg-info/not-zip-safe +0 -0
  93. {most_queue-1.39 → most_queue-1.41}/most_queue.egg-info/top_level.txt +0 -0
  94. {most_queue-1.39 → most_queue-1.41}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: most_queue
3
- Version: 1.39
3
+ Version: 1.41
4
4
  Summary: Software package for calculation and simulation of queuing systems
5
5
  Home-page: https://github.com/xabarov/most-queue
6
6
  Author: Xabarov Roman
@@ -1,4 +1,4 @@
1
- from theory import fj_calc
1
+ from theory.fj_calc import get_v1_fj_varki_merchant, get_v1_fj_nelson_tantawi, get_v1_fj_varma
2
2
  from sim.fj_sim import ForkJoinSim
3
3
  import matplotlib.pyplot as plt
4
4
 
@@ -68,9 +68,9 @@ def test_fj_calc():
68
68
  # расчет средних времен пребывания с помощью аппроксимаций. \
69
69
  # На вход каждого из методов - l, mu, nn (число каналов СМО)
70
70
 
71
- v_varki.append(fj_calc.get_v1_fj_varki_merchant(l, mu, nn))
72
- v_varma.append(fj_calc.get_v1_fj_varma(l, mu, nn))
73
- v_nelson.append(fj_calc.get_v1_fj_nelson_tantawi(l, mu, nn))
71
+ v_varki.append(get_v1_fj_varki_merchant(l, mu, nn))
72
+ v_varma.append(get_v1_fj_varma(l, mu, nn))
73
+ v_nelson.append(get_v1_fj_nelson_tantawi(l, mu, nn))
74
74
 
75
75
  print(str_f_v.format(v_sim[i], v_varki[i], v_varma[i], v_nelson[i]))
76
76
 
@@ -113,3 +113,6 @@ def test_fj_calc():
113
113
  plt.savefig("error_from_n_with_ro = {0:^4.2f}.png".format(ro), dpi=300)
114
114
 
115
115
 
116
+ if __name__ == "__main__":
117
+
118
+ test_fj_calc()
@@ -1,8 +1,8 @@
1
1
  import matplotlib
2
2
  import matplotlib.pyplot as plt
3
- from sim import rand_destribution as rd
3
+ from . import rand_distribution as rd
4
4
  from sim.flow_sum_sim import FlowSumSim
5
- from theory.flow_sum import SummatorNumeric
5
+ from most_queue.theory.flow_sum import SummatorNumeric
6
6
 
7
7
  matplotlib.use('TkAgg')
8
8
 
@@ -1,4 +1,4 @@
1
- import sim.rand_destribution as rd
1
+ from most_queue.rand_distribution import H2_dist, Gamma
2
2
  import math
3
3
  from tqdm import tqdm
4
4
  import numpy as np
@@ -28,10 +28,10 @@ b[2] = a_s*pow(sigma, 3) + 3*b[1]*b[0] - 2*pow(b[0], 2)
28
28
 
29
29
 
30
30
  # Гамма-аппроксимация
31
- gamma_params = rd.Gamma.get_mu_alpha(b)
31
+ gamma_params = Gamma.get_mu_alpha(b)
32
32
 
33
33
  # H2-аппроксимация
34
- h2_params = rd.H2_dist.get_params(b)
34
+ h2_params = H2_dist.get_params(b)
35
35
 
36
36
  n = 100000
37
37
 
@@ -39,8 +39,8 @@ b_approx_gamma = [0, 0, 0]
39
39
  b_approx_h2 = [0, 0, 0]
40
40
 
41
41
  for i in tqdm(range(n)):
42
- val_gamma = rd.Gamma.generate_static(gamma_params[0], gamma_params[1])
43
- val_h2 = rd.H2_dist.generate_static(*h2_params)
42
+ val_gamma = Gamma.generate_static(gamma_params[0], gamma_params[1])
43
+ val_h2 = H2_dist.generate_static(*h2_params)
44
44
  for k in range(3):
45
45
  b_approx_gamma[k] += pow(val_gamma, k+1)
46
46
  b_approx_h2[k] += pow(val_h2, k + 1)
@@ -63,8 +63,8 @@ y_gamma = []
63
63
  y_h2 = []
64
64
 
65
65
  for i in range(dots_num):
66
- y_gamma.append(rd.Gamma.get_pdf(gamma_params[0], gamma_params[1], x[i]))
67
- y_h2.append(rd.H2_dist.get_pdf(h2_params, x[i]))
66
+ y_gamma.append(Gamma.get_pdf(gamma_params[0], gamma_params[1], x[i]))
67
+ y_h2.append(H2_dist.get_pdf(h2_params, x[i]))
68
68
 
69
69
  fig, ax = plt.subplots()
70
70
  linestyles = ["solid", "dotted", "dashed", "dashdot"]
@@ -1,23 +1,24 @@
1
- def get_moments(a, b, num=3):
2
- num = min(num, 3)
3
- res = [0] * num
4
- res[0] = a[0] + b[0]
5
- res[1] = a[1] + b[1] + 2 * a[0] * b[0]
6
- res[2] = a[2] + b[2] + 3 * a[1] * b[0] + 3 * a[0] * b[1]
7
- return res
8
-
9
-
10
- def get_self_concolution(b, n_times, num=3):
11
- num = min(num, 3)
12
- res = [0] * num
13
- for i in range(n_times):
14
- res = get_moments(res, b, num)
15
- return res
16
-
17
- def get_moments_minus(a, b, num=3):
18
- num = min(num, 3)
19
- res = [0] * num
20
- res[0] = a[0] - b[0]
21
- res[1] = a[1] - b[1] - 2 * a[0] * b[0]
22
- res[2] = a[2] - b[2] - 3 * a[1] * b[0] - 3 * a[0] * b[1]
23
- return res
1
+ def get_moments(a, b, num=3):
2
+ num = min(num, 3)
3
+ res = [0] * num
4
+ res[0] = a[0] + b[0]
5
+ res[1] = a[1] + b[1] + 2 * a[0] * b[0]
6
+ res[2] = a[2] + b[2] + 3 * a[1] * b[0] + 3 * a[0] * b[1]
7
+ return res
8
+
9
+
10
+ def get_self_conv_moments(b, n_times, num=3):
11
+ num = min(num, 3)
12
+ res = [0] * num
13
+ for i in range(n_times):
14
+ res = get_moments(res, b, num)
15
+ return res
16
+
17
+
18
+ def get_moments_minus(a, b, num=3):
19
+ num = min(num, 3)
20
+ res = [0] * num
21
+ res[0] = a[0] - b[0]
22
+ res[1] = a[1] - b[1] - 2 * a[0] * b[0]
23
+ res[2] = a[2] - b[2] - 3 * a[1] * b[0] - 3 * a[0] * b[1]
24
+ return res
@@ -17,8 +17,10 @@ def times_print(sim_moments, calc_moments, is_w=True):
17
17
  print("{0:^15s}|{1:^15s}|{2:^15s}".format("№ момента", "Числ", "ИМ"))
18
18
  print("-" * 45)
19
19
  for j in range(min(len(sim_moments), len(calc_moments))):
20
+ calc_mom = calc_moments[j].real if isinstance(calc_moments[j], complex) else calc_moments[j]
21
+ sim_mom = sim_moments[j].real if isinstance(sim_moments[j], complex) else sim_moments[j]
20
22
  print(
21
- Fore.CYAN + f"{j + 1:^15d}|" + Fore.YELLOW + f"{calc_moments[j]:^15.5g}" + Fore.CYAN + "|" + Fore.YELLOW + f"{sim_moments[j]:^15.5g}")
23
+ Fore.CYAN + f"{j + 1:^15d}|" + Fore.YELLOW + f"{calc_mom:^15.5g}" + Fore.CYAN + "|" + Fore.YELLOW + f"{sim_mom:^15.5g}")
22
24
 
23
25
  print(Style.RESET_ALL)
24
26
 
@@ -37,7 +37,9 @@ def print_table(experiments_stat):
37
37
  print("{0:^3s}|{1:^15s}|{2:^15s}".format("№", "Numerical", "Sim"))
38
38
  print("-" * 32)
39
39
  for i in range(3):
40
- print("{0:^4d}|{1:^15.3g}|{2:^15.3g}".format(i + 1, stat["w_tt"][i], stat["w_sim"][i]))
40
+ calc_mom = stat["w_tt"][i].real if isinstance(stat["w_tt"][i], complex) else stat["w_tt"][i]
41
+ sim_mom = stat["w_sim"][i].real if isinstance(stat["w_sim"][i], complex) else stat["w_sim"][i]
42
+ print(f"{i+1:^4d}|{calc_mom:^15.3g}|{sim_mom:^15.3g}")
41
43
 
42
44
 
43
45
  def dump_stat(experiments_stat, save_name='run_stat.json'):
@@ -1,5 +1,6 @@
1
1
  import cmath
2
2
  import math
3
+
3
4
  import numpy as np
4
5
  import scipy.special as sp
5
6
  from scipy import stats
@@ -966,8 +967,8 @@ class Gamma:
966
967
 
967
968
  if __name__ == "__main__":
968
969
 
969
- import matplotlib.pyplot as plt
970
970
  import matplotlib
971
+ import matplotlib.pyplot as plt
971
972
 
972
973
  matplotlib.use('TkAgg')
973
974
 
@@ -3,7 +3,7 @@ QS with batch arrival
3
3
  """
4
4
  import numpy as np
5
5
 
6
- from .qs_sim import QueueingSystemSimulator, Task
6
+ from most_queue.sim.qs_sim import QueueingSystemSimulator, Task
7
7
 
8
8
 
9
9
  class QueueingSystemBatchSim(QueueingSystemSimulator):
@@ -1,63 +1,10 @@
1
1
  """
2
2
  ForkJoin Queue with delta
3
3
  """
4
- from .rand_destribution import Cox_dist, Pareto_dist, Gamma, H2_dist, Exp_dist
5
- from .fj_sim import ForkJoinSim
6
- from .fj_sim import SubTask as SubTask
7
- from .fj_sim import Task as Task
8
- from .qs_sim import Server
9
- from .utils.sim_utils import get_conv_moments, get_self_concolution_moments
10
-
11
-
12
- class ServerWarmUp(Server):
13
- """
14
- Канал обслуживания
15
- """
16
- id = 0
17
-
18
- def __init__(self, params, types, delta=None):
19
- """
20
- params - параметры распределения
21
- types - тип распределения
22
- """
23
- Server.__init__(self, params, types)
24
- self.delta = delta
25
-
26
- def start_service(self, ts, ttek, isWarmUp=False):
27
-
28
- Server.start_service(self, ts, ttek)
29
- if isWarmUp:
30
- if not isinstance(self.delta, dict):
31
- self.time_to_end_service = ttek + self.dist.generate() + self.delta
32
- else:
33
- b = [0, 0, 0]
34
- if self.dist.type == 'M':
35
- b = Exp_dist.calc_theory_moments(self.dist.params)
36
- elif self.dist.type == 'H':
37
- b = H2_dist.calc_theory_moments(*self.dist.params)
38
- elif self.dist.type == 'C':
39
- b = Cox_dist.calc_theory_moments(*self.dist.params)
40
- elif self.dist.type == 'Pa':
41
- b = Pareto_dist.calc_theory_moments(*self.dist.params)
42
- elif self.dist.type == 'Gamma':
43
- b = Gamma.calc_theory_moments(*self.dist.params)
44
-
45
- f_summ = get_conv_moments(b, self.delta)
46
- # variance = f_summ[1] - math.pow(f_summ[0], 2)
47
- # coev = math.sqrt(variance)/f_summ[0]
48
- params = Gamma.get_mu_alpha(f_summ)
49
- self.time_to_end_service = ttek + \
50
- Gamma.generate_static(*params)
51
-
52
-
53
- class SubTaskDelta(SubTask):
54
- """
55
- Позадача
56
- """
57
-
58
- def __init__(self, arr_time, task_id):
59
- SubTask.__init__(self, arr_time, task_id)
60
- self.future_arr_time = 0
4
+ from most_queue.general_utils.conv import get_self_conv_moments
5
+ from most_queue.rand_distribution import Gamma
6
+ from most_queue.sim.fj_sim import ForkJoinSim
7
+ from most_queue.sim.utils.tasks import ForkJoinTask
61
8
 
62
9
 
63
10
  class ForkJoinSimDelta(ForkJoinSim):
@@ -100,8 +47,8 @@ class ForkJoinSimDelta(ForkJoinSim):
100
47
  is_dropped = True
101
48
 
102
49
  if not is_dropped:
103
- self.served_subtask_in_task[Task.task_id] = 0
104
- t = Task(self.k, self.ttek)
50
+ self.served_subtask_in_task[ForkJoinTask.task_id] = 0
51
+ t = ForkJoinTask(self.k, self.ttek)
105
52
  self.first_subtask_arr_time[t.id] = self.ttek
106
53
 
107
54
  self.in_sys += 1
@@ -131,7 +78,7 @@ class ForkJoinSimDelta(ForkJoinSim):
131
78
  if not isinstance(self.delta, list):
132
79
  t.subtasks[i].future_arr_time = self.ttek + i * self.delta
133
80
  else:
134
- b_delta = get_self_concolution_moments(self.delta, i)
81
+ b_delta = get_self_conv_moments(self.delta, i)
135
82
  params_delta = Gamma.get_mu_alpha(b_delta)
136
83
  t.subtasks[i].future_arr_time = self.ttek + \
137
84
  Gamma.generate_static(*params_delta)
@@ -7,51 +7,12 @@ import sys
7
7
  from colorama import Fore, Style, init
8
8
  from tqdm import tqdm
9
9
 
10
- from .qs_sim import QueueingSystemSimulator
10
+ from most_queue.sim.qs_sim import QueueingSystemSimulator
11
+ from most_queue.sim.utils.tasks import ForkJoinTask
11
12
 
12
13
  init()
13
14
 
14
15
 
15
- class SubTask:
16
- """
17
- Позадача
18
- """
19
- sub_task_id = 0
20
-
21
- def __init__(self, arr_time, task_id):
22
- self.arr_time = arr_time
23
- self.task_id = task_id
24
- self.id = SubTask.sub_task_id
25
- SubTask.sub_task_id += 1
26
-
27
- def __str__(self):
28
- res = "\tSubTask #" + str(self.id) + \
29
- " parent Task #" + str(self.task_id) + "\n"
30
- res += "\t\tArrival time: " + str(self.arr_time) + "\n"
31
- return res
32
-
33
-
34
- class Task:
35
- """
36
- Задача, состоящая из subtask_num подзадач
37
- """
38
- task_id = 0
39
-
40
- def __init__(self, subtask_num, arr_time):
41
- self.subtask_num = subtask_num
42
- self.arr_time = arr_time
43
- self.subtasks = []
44
- for i in range(subtask_num):
45
- self.subtasks.append(SubTask(arr_time, Task.task_id))
46
- self.id = Task.task_id
47
- Task.task_id += 1
48
-
49
- def __str__(self):
50
- res = "\tTask #" + str(self.id) + "\n"
51
- res += "\t\tArrival time: " + str(self.arr_time) + "\n"
52
- return res
53
-
54
-
55
16
  class ForkJoinSim(QueueingSystemSimulator):
56
17
  """
57
18
  Имитационная модель СМО Fork-Join, Split-Join
@@ -105,8 +66,8 @@ class ForkJoinSim(QueueingSystemSimulator):
105
66
  is_dropped = True
106
67
 
107
68
  if not is_dropped:
108
- self.served_subtask_in_task[Task.task_id] = 0
109
- t = Task(self.n, self.ttek)
69
+ self.served_subtask_in_task[ForkJoinTask.task_id] = 0
70
+ t = ForkJoinTask(self.n, self.ttek)
110
71
  self.in_sys += 1
111
72
  self.sub_task_in_sys += self.n
112
73
 
@@ -277,9 +238,3 @@ class ForkJoinSim(QueueingSystemSimulator):
277
238
  res += "\nQueue Count " + str(self.queue.size()) + "\n"
278
239
 
279
240
  return res
280
-
281
-
282
- class QueueingSystemException(Exception):
283
-
284
- def __str__(self, text):
285
- return text
@@ -1,10 +1,18 @@
1
- import rand_destribution as rd
2
- from tqdm import tqdm
1
+ """
2
+ Input flows sum simulation
3
+ """
3
4
  import copy
4
5
  import math
5
6
 
7
+ from tqdm import tqdm
8
+
9
+ from most_queue.rand_distribution import Erlang_dist, Gamma, H2_dist, Pareto_dist
10
+
6
11
 
7
12
  class FlowSumSim:
13
+ """
14
+ Input flows sum simulation
15
+ """
8
16
 
9
17
  def __init__(self, a, distr="Gamma", verbose=True, num_of_moments=4, num_of_jobs=1000000):
10
18
  self.n = len(a)
@@ -80,10 +88,10 @@ class FlowSumSim:
80
88
  a2 - список из начальных моментов интервалов между соседникми заявками второго потока
81
89
  """
82
90
 
83
- y1_mus = rd.H2_dist.get_params(a1)
84
- arr1 = rd.H2_dist(y1_mus)
85
- y2_mus = rd.H2_dist.get_params(a2)
86
- arr2 = rd.H2_dist(y2_mus)
91
+ y1_mus = H2_dist.get_params(a1)
92
+ arr1 = H2_dist(y1_mus)
93
+ y2_mus = H2_dist.get_params(a2)
94
+ arr2 = H2_dist(y2_mus)
87
95
  arrivals = []
88
96
  time1 = arr1.generate()
89
97
  time2 = arr2.generate()
@@ -126,10 +134,10 @@ class FlowSumSim:
126
134
  a2 - список из начальных моментов интервалов между соседникми заявками второго потока
127
135
  """
128
136
 
129
- a_K = rd.Pareto_dist.get_a_k(a1)
130
- arr1 = rd.Pareto_dist(a_K)
131
- b_M = rd.Pareto_dist.get_a_k(a2)
132
- arr2 = rd.Pareto_dist(b_M)
137
+ a_K = Pareto_dist.get_a_k(a1)
138
+ arr1 = Pareto_dist(a_K)
139
+ b_M = Pareto_dist.get_a_k(a2)
140
+ arr2 = Pareto_dist(b_M)
133
141
  arrivals = []
134
142
  time1 = arr1.generate()
135
143
  time2 = arr2.generate()
@@ -160,10 +168,10 @@ class FlowSumSim:
160
168
  @staticmethod
161
169
  def sum_2_Erlang_flows(a1, a2, num_of_moments=4, num_of_sim=1000000):
162
170
 
163
- params1 = rd.Erlang_dist.get_params(a1)
164
- arr1 = rd.Erlang_dist(params1)
165
- params2 = rd.Erlang_dist.get_params(a2)
166
- arr2 = rd.Erlang_dist(params2)
171
+ params1 = Erlang_dist.get_params(a1)
172
+ arr1 = Erlang_dist(params1)
173
+ params2 = Erlang_dist.get_params(a2)
174
+ arr2 = Erlang_dist(params2)
167
175
  arrivals = []
168
176
  time1 = arr1.generate()
169
177
  time2 = arr2.generate()
@@ -200,10 +208,10 @@ class FlowSumSim:
200
208
  a2 - список из начальных моментов интервалов между соседникми заявками второго потока
201
209
  """
202
210
 
203
- params1 = rd.Gamma.get_mu_alpha(a1)
204
- arr1 = rd.Gamma(params1)
205
- params2 = rd.Gamma.get_mu_alpha(a2)
206
- arr2 = rd.Gamma(params2)
211
+ params1 = Gamma.get_mu_alpha(a1)
212
+ arr1 = Gamma(params1)
213
+ params2 = Gamma.get_mu_alpha(a2)
214
+ arr2 = Gamma(params2)
207
215
  arrivals = []
208
216
  time1 = arr1.generate()
209
217
  time2 = arr2.generate()
@@ -1,6 +1,5 @@
1
- from .distribution_utils import create_distribution
2
- from .qs_sim import QueueingSystemSimulator, Task
3
- from .utils.exceptions import QsSourseSettingException
1
+ from most_queue.sim.utils.distribution_utils import create_distribution
2
+ from most_queue.sim.qs_sim import QueueingSystemSimulator, Task
4
3
 
5
4
 
6
5
  class ImpatientTask(Task):
@@ -20,6 +19,7 @@ class ImpatientQueueSim(QueueingSystemSimulator):
20
19
  self.impatience_types = None
21
20
 
22
21
  self.impatience = None
22
+ self.is_set_impatience_params = False
23
23
 
24
24
  def set_impatiens(self, params, types):
25
25
  """
@@ -1,16 +1,13 @@
1
- import numpy as np
2
1
  import math
3
- import time
4
2
  import sys
3
+ import time
5
4
 
5
+ import numpy as np
6
+ from colorama import Fore, Style, init
6
7
  from tqdm import tqdm
7
8
 
8
- from .priority_queue_sim import PriorityQueueSimulator
9
- from .rand_destribution import Exp_dist
10
- from .priority_queue_sim import Task
11
-
12
- from colorama import init
13
- from colorama import Fore, Style
9
+ from most_queue.sim.priority_queue_sim import PriorityQueueSimulator, Task
10
+ from most_queue.rand_distribution import Exp_dist
14
11
 
15
12
  init()
16
13
 
@@ -143,11 +140,13 @@ class PriorityNetwork:
143
140
  self.smos[next_node].arrival(next_node_class, self.ttek, ts)
144
141
 
145
142
  def run(self, job_served, is_real_served=False):
143
+ """
144
+ Run simulation
145
+ """
146
146
  if is_real_served:
147
147
  while sum(self.served) < job_served:
148
148
  self.run_one_step()
149
- sys.stderr.write('\rStart simulation. Job served: %d/%d' %
150
- (sum(self.served), job_served))
149
+ sys.stderr.write(f'\rStart simulation. Job served: {sum(self.served)}/{job_served}')
151
150
  sys.stderr.flush()
152
151
  else:
153
152
  print(Fore.GREEN + '\rStart simulation')
@@ -1,11 +1,12 @@
1
1
  import math
2
2
  import sys
3
3
  import time
4
+
4
5
  import numpy as np
5
6
  from colorama import Fore, Style, init
6
7
  from tqdm import tqdm
7
8
 
8
- from .distribution_utils import create_distribution
9
+ from most_queue.sim.utils.distribution_utils import create_distribution
9
10
 
10
11
  init()
11
12
 
@@ -9,10 +9,12 @@ import numpy as np
9
9
  from colorama import Fore, Style, init
10
10
  from tqdm import tqdm
11
11
 
12
- from .distribution_utils import calc_qs_load, create_distribution
13
- from .utils.exceptions import QsSourseSettingException, QsWrongQueueTypeException
14
- from .utils.phase import QsPhase
15
- from .utils.qs_queue import QsQueueList, QsQueueDeque
12
+ from most_queue.sim.utils.distribution_utils import calc_qs_load, create_distribution
13
+ from most_queue.sim.utils.exceptions import QsSourseSettingException, QsWrongQueueTypeException
14
+ from most_queue.sim.utils.phase import QsPhase
15
+ from most_queue.sim.utils.qs_queue import QsQueueDeque, QsQueueList
16
+ from most_queue.sim.utils.servers import Server
17
+ from most_queue.sim.utils.tasks import Task
16
18
 
17
19
  init()
18
20
 
@@ -625,92 +627,3 @@ class QueueingSystemSimulator:
625
627
  res += f"\nQueue Count {self.queue.size()}\n"
626
628
 
627
629
  return res
628
-
629
-
630
- class Task:
631
- """
632
- Заявка
633
- """
634
- id = 0
635
-
636
- def __init__(self, arr_time):
637
- """
638
- :param arr_time: Момент прибытия в СМО
639
- """
640
- self.arr_time = arr_time
641
-
642
- self.start_waiting_time = 0
643
-
644
- self.wait_time = 0
645
-
646
- Task.id += 1
647
- self.id = Task.id
648
-
649
- def __str__(self):
650
- res = f"Task #{self.id}\n"
651
- res += f"\tArrival moment: {self.arr_time:8.3f}"
652
- return res
653
-
654
-
655
- class Server:
656
- """
657
- Канал обслуживания
658
- """
659
- id = 0
660
-
661
- def __init__(self, params, types, generator=None):
662
- """
663
- params - параметры распределения
664
- types - тип распределения
665
- """
666
- self.dist = create_distribution(params, types, generator)
667
- self.time_to_end_service = 1e10
668
- self.is_free = True
669
- self.tsk_on_service = None
670
- Server.id += 1
671
- self.id = Server.id
672
-
673
- self.params_warm = None
674
- self.types_warm = None
675
- self.warm_phase = QsPhase("WarmUp", None)
676
-
677
- def set_warm(self, params, types, generator=None):
678
- """
679
- Set local warmup period distrubution on server
680
- """
681
-
682
- self.warm_phase.set_dist(create_distribution(params, types, generator))
683
-
684
- def start_service(self, ts: Task, ttek, is_warm=False):
685
- """
686
- Starts serving
687
- ttek - current time
688
- is_warm - if warmUp needed
689
- """
690
-
691
- self.tsk_on_service = ts
692
- self.is_free = False
693
- if not is_warm:
694
- self.time_to_end_service = ttek + self.dist.generate()
695
- else:
696
- self.time_to_end_service = ttek + self.warm_phase.dist.generate()
697
-
698
- def end_service(self):
699
- """
700
- End service
701
- """
702
- self.time_to_end_service = 1e10
703
- self.is_free = True
704
- ts = self.tsk_on_service
705
- self.tsk_on_service = None
706
- return ts
707
-
708
- def __str__(self):
709
- res = f"\nServer # {self.id}\n"
710
- if self.is_free:
711
- res += "\tFree"
712
- else:
713
- res += "\tServing.. Time to end " + \
714
- f"{self.time_to_end_service:8.3f}\n"
715
- res += f"\tTask on service:\n\t{self.tsk_on_service}"
716
- return res