Ejemplo n.º 1
0
 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