def prepare_food(self, cus, env, data, parameters): print("Kitchen is preparing food for %s at %.2f" % (cus, env.now)) food_prepare_time = max( parameters['food_prepare_min'], random.exponential(scale=parameters['food_prepare_mu'])) data[cus, 6] = round_down(food_prepare_time) yield self.env.timeout(food_prepare_time) print("Cooked food for %s at %.2f" % (cus, env.now))
def customer(env, label, queue, kitchen, parameters, data): # the customer process arrive at the restaurant and request counter to take order label = label - 1 arrive_time = env.now print("%s entering the queue at %.2f" % (label, arrive_time)) # data[label,0]=label data[label, 0] = round_down(arrive_time) data[label, 1] = len(queue.counter.queue) with queue.counter.request() as my_turn: yield my_turn service_start = env.now data[label, 3] = round_down(service_start) queue_time = service_start - arrive_time data[label, 2] = round_down(queue_time) # placing order at counter yield env.process( queue.take_order(label, env, service_start, parameters, data)) # waiting order at counter prepare_food_start = env.now data[label, 4] = round_down(prepare_food_start) yield env.timeout(0) yield env.process( queue.receive_order(label, env, kitchen, parameters, data)) # prepare_food_end = round_down(env.now) # counter_total_wait_times += round_down(prepare_food_end - prepare_food_start) # receive food from counter exit_time = env.now data[label, 5] = round_down(exit_time) # total wait time data[label, 7] = round_down(data[label, 6] + data[label, 2]) # total time in system data[label, 9] = round_down(exit_time - arrive_time)
def take_order(self, cus, env, service_start, parameters, data): global counter_total_service_times print("%s is placing order at counter %.2f" % (cus, service_start)) time_taken_to_place_order = max( random.exponential(scale=parameters['order_time_mu']), parameters['order_time_min']) yield self.env.timeout(time_taken_to_place_order) service_end = env.now print("Order of %s sent to kitchen at %.2f" % (cus, service_end)) data[cus, 8] = round_down(service_end - service_start) if (cus < 1000): counter_total_service_times += service_end - service_start