-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMarketSimulator.rb
More file actions
101 lines (75 loc) · 3.43 KB
/
Copy pathMarketSimulator.rb
File metadata and controls
101 lines (75 loc) · 3.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
load 'UserInput.rb'
load 'GraphicRepresentation.rb'
load 'SimulatorCalculations.rb'
load 'SimulationParams.rb'
load 'MarketMultipleQueue.rb'
load 'MarketUniqueQueue.rb'
class MarketSimulator
def start_simulation
puts "Simulador de filas\n"
puts "- Simulacion para varias filas (v)\n"
puts "- Simulacion para unica fila (u)\n"
puts "----------------------------------------------------------------------\n"
@simulation_params = get_simulation_params
if @simulation_params.simulation_type == 'v'
@market = MarketMultipleQueue.new number_of_cashiers:@simulation_params.number_of_cashiers
else
@market = MarketUniqueQueue.new number_of_cashiers:@simulation_params.number_of_cashiers
end
simulation_iteration = 1
@simulation_calculator = SimulatorCalculations.new
@graphic_representator = GraphicRepresentation.new(market:@market, simulation_type:@simulation_params.simulation_type)
until @simulation_params.simulation_time < simulation_iteration
puts "\nIteracion #{simulation_iteration}\n"
if simulation_iteration % 3 == 0
@market.put_new_clients_in_queue
end
@market.work
@graphic_representator.draw_market
sleep @simulation_params.simulation_time_delay
simulation_iteration += 1
end
(@market.cashiers).each do |cashier|
@simulation_calculator.add_attended_clients attended_clients:cashier.clients_attended
@simulation_calculator.add_clients_in_market clients_in_market:cashier.actual_client if !cashier.actual_client.nil?
end
if @simulation_params.simulation_type == 'v'
(@market.queues).each do |queue|
@simulation_calculator.add_clients_in_market clients_in_market:queue.clients
end
else
@simulation_calculator.add_clients_in_market clients_in_market:@market.queue.clients
end
average_waiting_time = @simulation_calculator.get_average_waiting_time
puts "Tiempo promedio de espera por cliente: #{average_waiting_time} minutos"
puts "Clientes atendidos: #{@simulation_calculator.attended_clients.size}"
puts "Total clientes: #{@simulation_calculator.clients_list.size}"
end
def get_simulation_params
user_input = UserInput.new
puts "Ingrese el tipo de simulacion (v o u)\n"
begin
user_input.read_simulation_type
puts "Parametro ingresado no valido\n" if !user_input.valid_simulation_type
end while !user_input.valid_simulation_type
puts "----------------------------------------------------------------------\n"
puts "Ingrese el numero de cajas activas\n"
begin
user_input.read_active_cashiers
puts "Parametro ingresado no valido\n" if !user_input.valid_active_cashiers
end while !user_input.valid_active_cashiers
puts "----------------------------------------------------------------------\n"
puts "Ingrese la cantidad de tiempo a simular (en minutos)\n"
begin
user_input.read_simulation_time
puts "Parametro ingresado no valido\n" if !user_input.valid_simulation_time
end while !user_input.valid_simulation_time
puts "----------------------------------------------------------------------\n"
puts "Ingrese el tiempo entre iteraciones de la simulacion (en segundos)\n"
begin
user_input.read_time_delay
puts "Parametro ingresado no valido\n" if !user_input.valid_time_delay
end while !user_input.valid_time_delay
SimulationParams.new input_params:user_input.input_params
end
end