Exemple #1
0
        for i in cashiers:
            if (len(i.queue) > maxNumInCashierCheckout):
                maxNumInCashierCheckout = len(i.queue)


random.seed(RANDOM_SEED)
env = simpy.Environment()

# starting restocking process in background
restockThread = threading.Thread(target=MainRestockProcess,
                                 name="Restock_Process")
restockThread.start()

# resources
cashiers = [
    simpy.Resource(env, capacity=1),
    simpy.Resource(env, capacity=1),
    simpy.Resource(env, capacity=1),
    simpy.Resource(env, capacity=1),
    simpy.Resource(env, capacity=1),
    simpy.Resource(env, capacity=1)
]
selfCheckout = simpy.Resource(env, capacity=4)
bakery = simpy.Resource(env, capacity=1)
butcher = simpy.Resource(env, capacity=1)
pharmacy = simpy.Resource(env, capacity=1)

# Data collection process in background
dataThread = threading.Thread(target=DataCollection, name="Data_Process")
dataThread.start()
Exemple #2
0
PROCESS_TIME = 30 * 60  # 工序耗时, 使用秒作为单位
MEAN_ = 4 * 60  # 平均物件生成时间


def process(env, workers, store):
    """工序"""
    while True:
        with workers.request() as req:
            yield req
            item = yield store.get()
            print(f"{env.now} - {item} - start")
            yield env.timeout(PROCESS_TIME)
            print(f"{env.now} - {item} - done")


def put_item(env, store):
    """每隔一段时间生成一个物品"""
    for i in range(100):
        item = f"{i}_item"
        store.put(item)
        yield env.timeout(random.expovariate(1 / MEAN_))


env = simpy.Environment()
workers = simpy.Resource(env, 10)
store = simpy.Store(env)

env.process(process(env, workers, store))
env.process(put_item(env, store))
env.run()
import simpy



def print_stats(res):
	print(f'{res.count} of {res.capacity} slots are allocated.')
	print(f'  Users: {res.users}')
	print(f'  Queued events: {res.queue}')


def user(res):
    print_stats(res)
    with res.request() as req:
        yield req
        print_stats(res)
    print_stats(res)


env = simpy.Environment()
res = simpy.Resource(env, capacity=1)
procs = [env.process(user(res)), env.process(user(res))]
env.run()
 def __init__(self, env, num_machines, washtime):
     self.env = env
     self.machine = simpy.Resource(env, num_machines)
     self.washtime = washtime
Exemple #5
0
    print('%7.4f %s: Here I am' % (arrive, name))

    with counter.request() as req:
        patience = random.uniform(MIN_PATIENCE, MAX_PATIENCE)
        # Wait for the counter or abort at the end of our tether
        results = yield req | env.timeout(patience)

        wait = env.now - arrive

        if req in results:
            # 得到服务
            print('%7.4f %s: Waited %6.3f' % (env.now, name, wait))

            tib = random.expovariate(1.0 / time_in_bank)
            yield env.timeout(tib)
            print('%7.4f %s: Finished' % (env.now, name))

        else:
            # 不耐烦离开
            print('%7.4f %s: RENEGED after %6.3f' % (env.now, name, wait))


# 初始化然后开始模拟
print('Bank renege')
random.seed(RANDOM_SEED)
env = simpy.Environment()

# 开始流程函数并运行
counter = simpy.Resource(env, capacity=1)
env.process(source(env, NEW_CUSTOMERS, INTERVAL_CUSTOMERS, counter))
env.run()
Exemple #6
0
 def __init__(self, env):
     self.env = env
     self.departure_counters = simpy.Resource(env, capacity = 30)
Exemple #7
0
 def __init__(self, env, num_worker):
     self.env = env
     self.worker = simpy.Resource(env, num_worker)
 def __init__(self, env, attributes, num_machines):
     self.env = env
     self.attributes = attributes
     self.machine = simpy.Resource(env, num_machines)
def callFromGams(capacity_list):

    #运用模型计算出对应预测结果,得到optimize表
    '''
    
    ----------Model hcq----------
    '''

    #四个环节的处理时间的模拟
    dforig_input = pd.read_csv('input_data/sim_input.csv', encoding='utf-8')
    dforig_classify = pd.read_csv('input_data/sim_classify.csv',
                                  encoding='utf-8')
    dforig_cut = pd.read_csv('input_data/sim_cut.csv', encoding='utf-8')
    dforig_review = pd.read_csv('input_data/sim_review.csv', encoding='utf-8')

    #一变多的分布
    df_caltocut_distr = pd.read_csv('input_data/caltocut_distribution.csv',
                                    encoding='utf-8')

    #    capacity_list = [1,6,1,2]

    RANDOM_SEED = 42
    NEW_CUSTOMERS = 100  # Total number of customers
    #INTERVAL_CUSTOMERS = 12.0  #到达时间间隔   1/lamda  Generate new customers roughly every x seconds
    MIN_PATIENCE = 999999  # Min. customer patience
    MAX_PATIENCE = 1000000  # Max. customer patience
    time_in_fac = 34.0  #服务时间间隔,废弃,暂时不用
    lamda = 1 / 10  #到达时间服从指数分布,此处的t为间隔时间,1/10为lamda,均值为10
    GENERATION_0 = '00classify'
    GENERATION_1 = '01cut'
    GENERATION_2 = '02input'
    GENERATION_3 = '03review'
    g0_list_come = []
    g0_list_begin = []
    g0_list_wait = []
    g0_list_finish = []
    g0_list_name = []

    g1_list_come = []
    g1_list_begin = []
    g1_list_wait = []
    g1_list_finish = []
    g1_list_name = []

    g2_list_come = []
    g2_list_begin = []
    g2_list_wait = []
    g2_list_finish = []
    g2_list_name = []  #暂时不用

    g3_list_come = []
    g3_list_begin = []
    g3_list_wait = []
    g3_list_finish = []
    g3_list_name = []  #暂时不用

    g4_list_come = []
    sum_cut_number_list = []

    #0402添加
    def patch_resource(resource, pre=None, post=None):
        def get_wrapper(func):

            # Generate a wrapper for put/get/request/release
            @wraps(func)
            def wrapper(*args, **kwargs):
                # This is the actual wrapper
                # Call "pre" callback
                if pre:
                    pre(resource)
                # Perform actual operation
                ret = func(*args, **kwargs)
                # Call "post" callback
                if post:
                    post(resource)
                return ret

            return wrapper

        # Replace the original operations with our wrapper
        for name in ['put', 'get', 'request', 'release']:
            if hasattr(resource, name):
                setattr(resource, name, get_wrapper(getattr(resource, name)))

    def monitor(data, resource):
        item = [
            resource._env.now,  # The current simulation time
            resource.count,  # The number of users
            len(resource.queue)
        ]  # The number of queued processes)

        data.append(item)

    def source_cal(env, number, counter, generation, generation_list_begin,
                   generation_list_wait, generation_list_finish, df_simtime,
                   generation_list_name):
        #    global g0_list_come
        sum_num = 0
        """Source generates Doc randomly"""
        for i in range(number):
            serve_time = np.random.choice(df_simtime['sim_time'])  #得到模拟数据
            #        print(serve_time)
            c = document(env, 'Doc%02d' % i, generation, counter, time_in_fac,
                         generation_list_begin, generation_list_wait,
                         generation_list_finish, serve_time,
                         generation_list_name)
            env.process(c)
            t = random.expovariate(
                lamda)  #到达时间服从指数分布,此处的t为间隔时间,1/10为lamda,均值为10
            g0_list_come.append(sum_num)
            sum_num += t

            yield env.timeout(t)

#        return g0_list_come

#在切的这里进行一变多

    def source_cut(env, number, counter, generation, generation_list_come,
                   generation_list_wait, generation_list_begin,
                   generation_list_finish, df_simtime, generation_list_name,
                   sum_cut_number_list):
        """Source generates Doc randomly"""
        sum_cut_number = 0
        for i in range(number):
            sample_j = np.random.choice(df_caltocut_distr['time'])
            sum_cut_number += sample_j
            for j in range(sample_j):
                if j == 0:
                    if i == 0:
                        t = generation_list_come[i]  #到达时间服从指数分布,此处的t为间隔时间
                    else:
                        t = generation_list_come[i] - generation_list_come[i -
                                                                           1]
                else:
                    t = 0

                yield env.timeout(t)
                serve_time = np.random.choice(df_simtime['sim_time'])  #得到模拟数据
                #            print(serve_time)
                c = document(env, 'Doc%02d_%02d' % (i, j), generation, counter,
                             time_in_fac, generation_list_begin,
                             generation_list_wait, generation_list_finish,
                             serve_time, generation_list_name)
                env.process(c)
        sum_cut_number_list.append(sum_cut_number)

    def source_input(env, number, counter, generation, generation_list_come,
                     generation_list_wait, generation_list_begin,
                     generation_list_finish, df_simtime, generation_list_name,
                     g1_list_name):
        #        global g1_list_name
        """Source generates Doc randomly"""
        for i in range(number):
            if i == 0:
                t = generation_list_come[i]  #到达时间服从指数分布,此处的t为间隔时间
            else:
                t = generation_list_come[i] - generation_list_come[i - 1]
            yield env.timeout(t)
            serve_time = np.random.choice(df_simtime['sim_time'])  #得到模拟数据
            #        print(serve_time)
            c = document(env, g1_list_name[i], generation, counter,
                         time_in_fac, generation_list_begin,
                         generation_list_wait, generation_list_finish,
                         serve_time, generation_list_name)
            env.process(c)

    def source_review(env, number, counter, generation, generation_list_come,
                      generation_list_wait, generation_list_begin,
                      generation_list_finish, df_simtime, generation_list_name,
                      g2_list_name):
        """Source generates Doc randomly"""
        #        global g2_list_name
        for i in range(number):
            if i == 0:
                t = generation_list_come[i]  #到达时间服从指数分布,此处的t为间隔时间
            else:
                t = generation_list_come[i] - generation_list_come[i - 1]
            yield env.timeout(t)
            serve_time = np.random.choice(df_simtime['sim_time'])  #得到模拟数据
            #        print(serve_time)
            c = document(env, g2_list_name[i], generation, counter,
                         time_in_fac, generation_list_begin,
                         generation_list_wait, generation_list_finish,
                         serve_time, generation_list_name)
            env.process(c)

    def document(env, name, generation, counter, time_in_fac,
                 generation_list_begin, generation_list_wait,
                 generation_list_finish, serve_time, generation_list_name):
        """Doc arrives, is served and leaves."""

        arrive = env.now
        #    print('%7.4f %s %s: Here I am' % (arrive,generation, name))
        generation_list_name.append(name)

        with counter.request() as req:
            patience = random.uniform(MIN_PATIENCE, MAX_PATIENCE)  #忍耐时间服从均匀分布
            # Wait for the counter or abort at the end of our tether
            results = yield req | env.timeout(
                patience)  #这句话挺关键的但是我目前没有看懂它是什么意思
            begin_time = env.now
            generation_list_begin.append(begin_time)  #添加开始服务时间
            wait = env.now - arrive
            generation_list_wait.append(wait)  #添加等待时间

            if req in results:
                yield env.timeout(serve_time)
                #            print('%7.4f %s %s: Finished' % (env.now,generation, name))
                finished_time = env.now
                generation_list_finish.append(finished_time)  #添加结束时间

            else:
                # We reneged
                print('%7.4f %s: RENEGED after %6.3f' %
                      (env.now, name, begin_time))

    # Setup and start the simulation


#    print('Bank renege')
#random.seed(RANDOM_SEED)

#第0个机器
    env_g0 = simpy.Environment()
    counter = simpy.Resource(env_g0, capacity=capacity_list[0])

    classify_data = []
    monitor_cla = partial(monitor, classify_data)
    patch_resource(counter, post=monitor_cla)

    env_g0.process(
        source_cal(env_g0, NEW_CUSTOMERS, counter, GENERATION_0, g0_list_begin,
                   g0_list_wait, g0_list_finish, dforig_classify,
                   g0_list_name))
    env_g0.run()
    g1_list_come = g0_list_finish

    #第1个机器
    env_g1 = simpy.Environment()
    counter_hcq01 = simpy.Resource(env_g1, capacity=capacity_list[1])

    cut_data = []
    monitor_cut = partial(monitor, cut_data)
    patch_resource(counter_hcq01, post=monitor_cut)

    #    cut_number = source_cut(env_g1,
    #                            NEW_CUSTOMERS,
    #                            counter_hcq01,
    #                            GENERATION_1,
    #                            g1_list_begin,
    #                            g1_list_wait,
    #                            g2_list_come,
    #                            g1_list_come,
    #                            dforig_cut,
    #                            g1_list_name)
    env_g1.process(
        source_cut(env_g1, NEW_CUSTOMERS, counter_hcq01, GENERATION_1,
                   g1_list_come, g1_list_wait, g1_list_begin, g1_list_finish,
                   dforig_cut, g1_list_name, sum_cut_number_list))
    env_g1.run()
    g2_list_come = g1_list_finish
    sum_cut_number = sum_cut_number_list[0]  #一变多之后的总数量

    #第2个机器
    env_g2 = simpy.Environment()
    counter_hcq02 = simpy.Resource(env_g2, capacity=capacity_list[2])
    input_data = []
    monitor_input = partial(monitor, input_data)
    patch_resource(counter_hcq02, post=monitor_input)

    env_g2.process(
        source_input(env_g2, sum_cut_number, counter_hcq02, GENERATION_2,
                     g2_list_come, g2_list_wait, g2_list_begin, g2_list_finish,
                     dforig_input, g2_list_name, g1_list_name))
    env_g2.run()
    g3_list_come = g2_list_finish

    #第3个机器
    env_g3 = simpy.Environment()
    counter_hcq03 = simpy.Resource(env_g3, capacity=capacity_list[3])

    review_data = []
    monitor_review = partial(monitor, review_data)
    patch_resource(counter_hcq03, post=monitor_review)

    env_g3.process(
        source_review(env_g3, sum_cut_number, counter_hcq03, GENERATION_3,
                      g3_list_come, g3_list_wait, g3_list_begin,
                      g3_list_finish, dforig_review, g3_list_name,
                      g2_list_name))
    env_g3.run()

    #生成环节数据
    df_huanjie_cl = pd.DataFrame()
    df_huanjie_cu = pd.DataFrame()
    df_huanjie_in = pd.DataFrame()
    df_huanjie_re = pd.DataFrame()

    df_huanjie_cl['time'] = [i[0] for i in classify_data]
    df_huanjie_cl['users'] = [i[1] for i in classify_data]
    df_huanjie_cl['queue'] = [i[2] for i in classify_data]

    df_huanjie_cu['time'] = [i[0] for i in cut_data]
    df_huanjie_cu['users'] = [i[1] for i in cut_data]
    df_huanjie_cu['queue'] = [i[2] for i in cut_data]

    df_huanjie_in['time'] = [i[0] for i in input_data]
    df_huanjie_in['users'] = [i[1] for i in input_data]
    df_huanjie_in['queue'] = [i[2] for i in input_data]

    df_huanjie_re['time'] = [i[0] for i in review_data]
    df_huanjie_re['users'] = [i[1] for i in review_data]
    df_huanjie_re['queue'] = [i[2] for i in review_data]

    def complete_df(df_huanjie, capacity_huanjie):  #补全环节数据
        append_list = []  #所需补全的数据
        #首先是数据补全操作
        for i in range(len(df_huanjie)):  #得到需要补全的数据
            row_huanjie = df_huanjie.iloc[i]
            if row_huanjie['users'] < capacity_huanjie:
                if row_huanjie['queue'] > 0:
                    temp_time = row_huanjie['time']
                    temp_users = row_huanjie['users'] + 1
                    temp_queue = row_huanjie['queue'] - 1
                    temp_list = [i, temp_time, temp_users, temp_queue]
                    append_list.append(temp_list)

        for j in range(len(append_list)):  #将行插入到dataframe中
            values = [append_list[j][1], append_list[j][2], append_list[j][3]]
            df_huanjie = pd.DataFrame(
                np.insert(df_huanjie.values,
                          append_list[j][0] + 1 + j,
                          values,
                          axis=0))
        df_huanjie.columns = ['time', 'users', 'queue']
        return df_huanjie

    df_huanjie_cl = complete_df(df_huanjie_cl, capacity_list[0])
    df_huanjie_cu = complete_df(df_huanjie_cu, capacity_list[1])
    df_huanjie_in = complete_df(df_huanjie_in, capacity_list[2])
    df_huanjie_re = complete_df(df_huanjie_re, capacity_list[3])

    #生成文档数据
    df_document_cl = pd.DataFrame()

    df_document_cutttttt = pd.DataFrame()

    df_document_cu = pd.DataFrame()
    df_document_in = pd.DataFrame()
    df_document_re = pd.DataFrame()

    df_document_cl['name'] = g0_list_name
    df_document_cl['come'] = g0_list_come
    df_document_cl['wait'] = g0_list_wait
    df_document_cl['begin'] = g0_list_begin
    df_document_cl['finish'] = g0_list_finish

    df_document_cutttttt['name'] = g1_list_name
    df_document_cutttttt['wait'] = g1_list_wait
    df_document_cutttttt['begin'] = g1_list_begin
    df_document_cutttttt['finish'] = g1_list_finish
    df_document_cutttttt[
        'come'] = df_document_cutttttt['begin'] - df_document_cutttttt['wait']
    #改个输出顺序

    df_document_cu['name'] = df_document_cutttttt['name']
    df_document_cu['come'] = df_document_cutttttt['come']
    df_document_cu['wait'] = df_document_cutttttt['wait']
    df_document_cu['begin'] = df_document_cutttttt['begin']
    df_document_cu['finish'] = df_document_cutttttt['finish']

    df_document_in['name'] = g2_list_name
    df_document_in['come'] = g2_list_come
    df_document_in['wait'] = g2_list_wait
    df_document_in['begin'] = g2_list_begin
    df_document_in['finish'] = g2_list_finish

    df_document_re['name'] = g3_list_name
    df_document_re['come'] = g3_list_come
    df_document_re['wait'] = g3_list_wait
    df_document_re['begin'] = g3_list_begin
    df_document_re['finish'] = g3_list_finish

    #    print(len(g3_list_come))

    #1.02得到平均逗留时间ws和平均排队等待时间wq
    def get_ws_wq(df_document_cut):
        stay_time_cut = df_document_cut['finish'] - df_document_cut[
            'come']  #得到逗留时间队列
        wait_time_cut = df_document_cut['wait']  #得到等待时间队列
        ws_cut = np.mean(stay_time_cut)  #平均逗留时间
        wq_cut = np.mean(wait_time_cut)  #平均排队等待时间
        ws_cut = Decimal.from_float(ws_cut).quantize(Decimal('0.0000'))
        wq_cut = Decimal.from_float(wq_cut).quantize(Decimal('0.0000'))
        return ws_cut, wq_cut

    #1.03得到队伍中的队长ls,ls和ss均经过核实,是正确的
    #其次是计算服务强度,时间间隔与其服务人数相乘,再比上满工时的工作量
    def get_ls_ss(df_huanjie_cut, capacity):
        stay_person_cut = list(df_huanjie_cut['users'] +
                               df_huanjie_cut['queue'])  #得到系统中的总人数,排队加等待
        change_time_cut = list(df_huanjie_cut['time'])  #得到时间
        ser_user_cut = list(df_huanjie_cut['users'])  #正在服务的人
        sum_time = 0  #间隔时间相加即为总时间
        sum_tp = 0  #间隔时间乘以该时段内系统人数,相加之后即为总的人数*时间段,再除以总时间即为ls
        sum_s_s = 0  #间隔时间乘以此时系统正在工作的服务台,相加之后再除以总的时间段,即为系统的服务强度
        for i in range(len(change_time_cut)):
            if i == 0:
                time_delt = change_time_cut[i]

            else:
                time_delt = change_time_cut[i] - change_time_cut[i - 1]
            sum_time += time_delt  #计算总时长
            sum_tp += float(time_delt) * float(stay_person_cut[i - 1])  #计算ls
            sum_s_s += float(time_delt) * float(
                ser_user_cut[i - 1])  #计算服务强度service_strength
        ls_cut = sum_tp / sum_time  #系统中单位时刻的平均逗留人数ls
        ser_stre_cut = (sum_s_s / sum_time) / capacity  #系统的服务强度ss
        ls_cut = Decimal.from_float(ls_cut).quantize(Decimal('0.0000'))
        ser_stre_cut = Decimal.from_float(ser_stre_cut).quantize(
            Decimal('0.0000'))
        return ls_cut, ser_stre_cut

    ws_cla, wq_cla = get_ws_wq(df_document_cl)
    ls_cla, ser_stre_cla = get_ls_ss(df_huanjie_cl, capacity_list[0])
    #print('this is sim_ws_cla',ws_cla)
    #print('this is sim_wq_cla',wq_cla)
    #print('this is sim_ls_cla',ls_cla)
    #    print('sim_ser_stre_cla',ser_stre_cla)

    ws_cut, wq_cut = get_ws_wq(df_document_cu)
    ls_cut, ser_stre_cut = get_ls_ss(df_huanjie_cu, capacity_list[1])
    #print('this is sim_ws_cut',ws_cut)
    #print('this is sim_wq_cut',wq_cut)
    #print('this is sim_ls_cut',ls_cut)
    #    print('sim_ser_stre_cut',ser_stre_cut)

    ws_inp, wq_inp = get_ws_wq(df_document_in)
    ls_inp, ser_stre_inp = get_ls_ss(df_huanjie_in, capacity_list[2])
    #print('this is sim_ws_inp',ws_inp)
    #print('this is sim_wq_inp',wq_inp)
    #print('this is sim_ls_inp',ls_inp)
    #    print('sim_ser_stre_inp',ser_stre_inp)

    ws_rev, wq_rev = get_ws_wq(df_document_re)
    ls_rev, ser_stre_rev = get_ls_ss(df_huanjie_re, capacity_list[3])
    #print('this is sim_ws_rev',ws_rev)
    #print('this is sim_wq_rev',wq_rev)
    #print('this is sim_ls_rev',ls_rev)
    #    print('sim_ser_stre_rev',ser_stre_rev)

    mean_ser_stre = float(
        np.mean([ser_stre_cla, ser_stre_cut, ser_stre_inp, ser_stre_rev]))
    mean_ser_stre = Decimal.from_float(mean_ser_stre).quantize(
        Decimal('0.0000'))
    #print('均值mean_ser_stre',mean_ser_stre)

    #1.05得到每个材料的运行总时间并计算单位时间完成的任务数量

    rev_time_list = list(df_huanjie_re['time'])
    max_time = max(rev_time_list)
    per_quantity = float(600 * 100 / max_time)
    per_quantity = Decimal.from_float(per_quantity).quantize(Decimal('0.0000'))

    #    print('10min内处理量',per_quantity)
    function_value = per_quantity
    return (function_value)
Exemple #10
0
    totaldE = 0
    for i in range(len(data)):

        totaldE = (data[i] - average)**2

    de = (totaldE / (len(data) - 1.0))**(0.5)

    return de


#Informacion de la simulacion

env = simpy.Environment()
ram = simpy.Container(env, capacity=100)
cpu = simpy.Resource(env, capacity=2)
waiting = simpy.Resource(env, capacity=1)
random.seed(12345)
interval = 10.0
totalT = 0
processT = []
totalDataProcess = 200

#Funcion de todos los datos procesados
for i in range(totalDataProcess):

    env.process(
        processes(i, env, random.expovariate(1.0 / interval), cpu, ram,
                  waiting))

#Corre la simulacion
Exemple #11
0
 def resource(self, *args, **kwargs):
     kwargs = set_env(self, args, kwargs)
     return simpy.Resource(*args, **kwargs)
Exemple #12
0
        c = car(env, 'Car%02d' % i, intersection, time_in_intersection=12.0)
        env.process(c)
        t = random.expovariate(1.0 / interval)
        yield env.timeout(t)


def car(env, name, intersection, time_in_intersection):
    """Car arrives and then leaves."""
    arrive = env.now
    print('%7.4f %s: Here I am' % (arrive, name))

    with intersection.request() as req:
        wait = env.now - arrive
        # We got through the inersection
        print('%7.4f %s: Waited %6.3f' % (env.now, name, wait))

        tii = random.expovariate(1.0 / time_in_intersection)
        yield env.timeout(tii)
        print('%7.4f %s: Finished' % (env.now, name))


# Setup and start the simulation
print('Traffic')
random.seed(RANDOM_SEED)
env = simpy.Environment()

# Start processes and run
intersection = simpy.Resource(env, capacity=1)
env.process(source(env, NUMBER_CARS, INTERVAL_CARS, intersection))
env.run()
Exemple #13
0
 def __init__(self, env):
     self.ram = simpy.Container(env, init=mram, capacity=mram)
     self.cpu = simpy.Resource(env, capacity=capacidad_proceso)
Exemple #14
0
    yield env.timeout(arrive_time)
    print("student {} arrived library at {:6.2f}".format(num, env.now))
    waiting_time = env.now

    ## Following form (with/as) activate get and release automatically.
    ## In case of using in other forms, req = library.request(), library.release(req) should be used.
    with library.request() as req:
        yield req  ## wait until resource(here, library) is available
        waiting_time = env.now - waiting_time
        ## waiting_time =! 0 means that student has waited untl library seat is available
        if waiting_time != 0:
            print("student {} is waiting  during {:6.2f}".format(
                num, waiting_time))
        study_time = np.random.triangular(left=5, right=10, mode=8)
        print("student {} start to  study at {:6.2f}".format(num, env.now))
        if library.capacity == library.count:
            print("#### library full at  {:6.2f} ####".format(env.now))
        yield env.timeout(study_time)
        print("student {} end   to  study at {:6.2f}".format(num, env.now))
        print("#### library seat available at {:6.2f} ####".format(env.now))


env = simpy.Environment()
library = simpy.Resource(env, capacity=2)

for i in range(0, 5):
    arrive_time = np.random.triangular(left=1, right=8, mode=3)
    stu = Student(env, i, library, arrive_time)
    env.process(stu)

env.run(until=50)
Exemple #15
0
 def __init__(self, env, id, latency):
     self.timeout = env.timeout
     self.processor = simpy.Resource(env)
     self.latency = latency
     self.name = 'proc_{}'.format(id)
Exemple #16
0
TIME_BT_TWEET = [5, 15]  # Create a tweet every [min, max] seconds
TIME_BT_EVENT = [10, 60]  # Create a message every [min, max] seconds
SIM_TIME = 100  # Simulation time in seconds
CATASTROPHE = ['TERREMOTO', 'INCENDIO', 'TSUNAMI',
               'ACCIDENTE']  # kind of event
L1_CACHE_SIZE = 1024 * 32  # 32 KB
L2_CACHE_SIZE = 1024 * 32  # 32 KB
RAM_SIZE = 2048**4  # 2 GB =  2048b^4

USER_PER_ANTENA = 100
ANTENAS = 6

# event manager
env = simpy.rt.RealtimeEnvironment(factor=0.01)

procesors = simpy.Resource(env, PROCESORS)
antena = simpy.Resource(env, 2)

env.process(slow_proc(env))

# l1_cache = simpy.Container(env, L1_CACHE_SIZE, init=0)
# l2_cache = simpy.Container(env, L2_CACHE_SIZE, init=0)
# ram = simpy.Container(env, RAM_SIZE, init=0)

eventoPE = AnalizadorEvento(env, procesors)
tweetPE = AnalizadorTweet(env, procesors, eventoPE)
appPE = IngresoPorAplicacion(env, procesors, eventoPE)
red4G = Red4G(env, antena, USER_PER_ANTENA * ANTENAS, eventoPE)

duplicadoPE = DuplicacionInfo(env, procesors)
mapaPE = ProcesaMapa(env, procesors)
Exemple #17
0
 def __init__(self, env, num_counters):
     self.env = env
     self.id_check_counter = simpy.Resource(env, num_counters)
Exemple #18
0
 def __init__(self, env, num_servers, num_scanners):
     self.env = env
     self.server = sy.Resource(env, num_servers)
     self.scanner = sy.Resource(env, num_scanners)
Exemple #19
0
 def __init__(self, name, env, cap):
     self.name = name
     self.env = env
     self.machine = simpy.Resource(env, capacity=cap)
     self.lastused = 0
 def updateCapacity(self, capacity):
     activeObject = self.getActiveObject()
     self.capacity = capacity
     self.Res = simpy.Resource(self.env, self.capacity)
Exemple #21
0
    # si no hay ram disponible, se libera con el numero de procesos utilizados
    with cpu_ram_total.put(p_ram) as reqmem:
        yield reqmem
    wait = env.now - arrive
    LISTA_TIEMPOS.append(
        wait
    )  #Se agrega el tiempo utilizado a la lista para obtener el promedio
    totalwait = totalwait + wait  # sumatoria del tiempo utilizado


print("Inicia simulacion de Sistema Operativo")
random.seed(RANDOM_SEED)
env = simpy.Environment()
cpu_ram_total = simpy.Container(env, init=100, capacity=100)
espera = simpy.Resource(env, capacity=2)  # Cola de espera

# Se empieza la simulacion
cpu = simpy.Resource(env, capacity=2)  # CPU con capacidad 1 procesador
totalwait = 0
env.process(proceso(env, PROCESOS_A_REALIZAR, INTERVALO, cpu_ram_total,
                    espera))
env.run()
print("La RAM del equipo a regresado a " + str(cpu_ram_total.level))
print("\n---------------------------------------------------------------")
print("\n\t                   INFORME FINAL\n")
print("Tiempo total de simulación: " + str(totalwait) + " segundos")
## Se utilizan metodos de FuncionesSimpy.py para obtener datos estadisticos
print("Promedio de tiempo por proceso: " + str(promedio(LISTA_TIEMPOS)) +
      " segundos")
print("Desviacion estandar: " + str(desvest(LISTA_TIEMPOS)) + " segundos")
Exemple #22
0
    llegada = 0
    i = 0
    for i in range(TOT_CLIENTES):  # Para n clientes
        R = random.random()
        llegada = -T_LLEGADAS * math.log(R)  # Distribucion exponencial
        yield env.timeout(
            llegada)  # Deja transcurrir un tiempo entre uno y otro
        i += 1
        env.process(cliente(env, 'Cliente %d' % i, personal))


print(
    "------------------- Bienvenido Simulacion Peluqueria ------------------")
random.seed(SEMILLA)  # Cualquier valor
env = simpy.Environment()  # Crea el objeto entorno de simulacion
personal = simpy.Resource(env,
                          NUM_PELUQUEROS)  # Crea los recursos (peluqueros)
env.process(principal(env, personal))  # Invoca el proceso princial
env.run()  # Inicia la simulacion

print(
    "\n---------------------------------------------------------------------")
print("\nIndicadores obtenidos: ")

lpc = te / fin  # longitud promedio de cola
print("\nLongitud promedio de la cola: %.2f" % lpc)
tep = te / TOT_CLIENTES  # tiempo de espera promedio
print("Tiempo de espera promedio = %.2f" % tep)
upi = (dt / fin) / NUM_PELUQUEROS  # uso promedio de la instalacion
print("Uso promedio de la instalacion = %.2f" % upi)
print(
    "\n---------------------------------------------------------------------")
Exemple #23
0

def tank_truck(env, charging_station):
    """Arrives at the gas station after a certain delay and refuels it."""
    yield env.timeout(TANK_TRUCK_TIME)
    print('Tank truck arriving at time %d' % env.now)
    ammount = charging_station.capacity - charging_station.level
    print('Tank truck refuelling %.1f liters.' % ammount)
    yield charging_station.put(ammount)


def car_generator(env, gas_station, charging_station):
    """Generate new cars that arrive at the gas station."""
    for i in itertools.count():
        yield env.timeout(random.randint(*T_INTER))
        env.process(car('Car %d' % i, env, gas_station, charging_station))


# Setup and start the simulation
print('Gas Station refuelling')
random.seed(RANDOM_SEED)

# Create environment and start processes
env = simpy.Environment()
gas_station = simpy.Resource(env, 3)
charging_station = simpy.Container(env, GAS_STATION_SIZE, init=GAS_STATION_SIZE)
env.process(gas_station_control(env, charging_station))
env.process(car_generator(env, gas_station, charging_station))

# Execute!
env.run(until=SIM_TIME)
 def __init__(self, env, automatic_machine, medical_staff):
     self.env = env
     self.automatic_machine = simpy.Resource (env, capacity = automatic_machine)     # a regular resource
     self.medical_staff = simpy.Resource (env, capacity = medical_staff)             # a regular resource
number_of_runs = 100
warm_up_period = 180
results_collection_period = 480

with open("ex_2_results.csv", "w") as f:
    writer = csv.writer(f, delimiter=",")

    writer.writerow(["Run", "Q Reg", "Q Cons", "Q Book Test", "Time in Sys"])

for run in range(number_of_runs):
    # Set up simulation environment
    env = simpy.Environment()

    # Set up resources
    receptionist = simpy.Resource(env, capacity=1)
    gp = simpy.Resource(env, capacity=2)

    # Set up parameter values
    gp_inter = 3
    call_inter = 10
    mean_register = 2
    mean_consult = 8
    mean_book_test = 4
    mean_call = 4

    # Lists to store queuing times and time in system across patients
    list_of_queuing_times_registration = []
    list_of_queuing_times_consultation = []
    list_of_queuing_times_book_test = []
    list_of_times_in_system = []
Exemple #26
0
random.seed(RANDOM_SEED)
RAM = 100  #Capacidad de la RAM
NumDeProcesos = 25  #Cantidad de procesos
CCPU = 3  #Capacidad de instrucciones del CPU
txp = 1  #Unidad de tiempo del CPU
NoCPU = 1  #Cantidad de CPUs

#Otras variables
intervalo = 10
TiempoTotal = 0
Lista1 = []
w = 0

#Variables para cambiar el entorno de simpy
env = simpy.Environment()  #crear ambiente de simulacion
cpu = simpy.Resource(env, capacity=NoCPU)  #Declaracion de la cantidad de CPU
mram = simpy.Container(env, init=RAM,
                       capacity=RAM)  #Declaracion de la cantidad de RAM

# crear los carros

for i in range(NumDeProcesos):

    #Declara algunos parametros para simular el programa
    t = random.expovariate(1.0 / intervalo)
    ram = random.randint(1, 10)
    instP = random.randint(1, 10)
    waitOready = random.randint(1, 2)
    tespera = random.randint(1, 10)

    #Ejecuta los procesos
Exemple #27
0
 def __init__(self, env):
     self.env = env
     self.serverQueue = simpy.Resource(env, capacity=numServers)
     self.checkQueue = simpy.Resource(env, capacity=numCheckers)
Exemple #28
0
tiemposEnSistema = []
tiempoDeObservacion = []
Uso = []
UsuariosEnCola = []
usuariosEnSistema = []

for k in range(iteraciones):
    wait_t = []
    t_in_sistem = []
    obs_time = []
    q_length = []
    usage = []
    u_sistem = []

    env = simpy.Environment()
    servers = simpy.Resource(env, capacity=1)
    env.process(cafe_run(env, servers))
    env.process(observe(env, servers))
    env.run(until=1000)

    tiemposDeEspera.append(wait_t)
    tiemposEnSistema.append(t_in_sistem)
    tiempoDeObservacion.append(obs_time)
    Uso.append(usage)
    UsuariosEnCola.append(q_length)
    usuariosEnSistema.append(u_sistem)

promedioUtilizacion = np.mean([np.mean(a) for a in Uso])
promedioUsuariosEnSistema = np.mean([np.mean(a) for a in usuariosEnSistema])
promedioUsuariosEnCola = np.mean([np.mean(a) for a in UsuariosEnCola])
promedioTiempoDeEspera = np.mean([np.mean(a) for a in tiemposDeEspera])
Exemple #29
0
        # Scan each person's tickets
        for person in people_processed:
            scan_begin = env.now
            yield env.timeout(random.gauss(SCANNER_MEAN,
                                           SCANNER_STD))  # Scan their ticket
            scan_end = env.now
            register_visitor_moving_to_scanner(person, walk_begin, walk_end,
                                               scanner_line[1], queue_begin,
                                               queue_end, scan_begin, scan_end)


#env = simpy.rt.RealtimeEnvironment(factor = 0.01, strict = False)
env = simpy.Environment()

seller_lines = [
    simpy.Resource(env, capacity=SELLERS_PER_LINE) for _ in range(SELLER_LINES)
]
scanner_lines = [
    simpy.Resource(env, capacity=SCANNERS_PER_LINE)
    for _ in range(SCANNER_LINES)
]

env.process(bus_arrival(env, seller_lines, scanner_lines))
env.process(create_clock(env))
env.run(until=30)

main.mainloop()

with open('output/events.json', 'w') as outfile:
    json.dump(
        {
Exemple #30
0
 def __init__(self, env):
     self.fuel_dispensers = simpy.Resource(env, capacity=2)
     self.gas_tank = simpy.Container(env, init=100, capacity=100)
     self.mon_proc = env.process(self.monitor_tank(env))