コード例 #1
0
    def get_opex_falhas(self, param_1, param_2):
        opex_co_falhas = np.zeros(self.municipio.tempo_analise)

        # Realizar a atualização do valor de salário do técnico de manutenção ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(
            OPEX.SALARIO_TECNICO.valor, OPEX.TAXA_CORRECAO_SALARARIO.valor,
            self.municipio.tempo_analise)

        afr = OPEX.TAXA_ARF_PS.valor
        mttr = OPEX.MTTR_PS.valor + OPEX.MTTR_UDC.valor + OPEX.MTTR_MW_SW.valor

        # Realizar a atualizacao do valor de manutenção corretiva ajustado por ano
        valor_manutencao_ps = util.atualizacao_linear(
            OPEX.MANUTENCAO_PS.valor, OPEX.TAXA_REAJUSTE.valor,
            self.municipio.tempo_analise)

        valor_manutencao_udc = util.atualizacao_linear(
            OPEX.MANUTENCAO_UDC.valor, OPEX.TAXA_REAJUSTE.valor,
            self.municipio.tempo_analise)

        valor_manutencao_sw = util.atualizacao_linear(
            OPEX.MANUTENCAO_SW.valor, OPEX.TAXA_REAJUSTE.valor,
            self.municipio.tempo_analise)

        for t, udc in enumerate(self.municipio.co.qtd_udc):
            opex_co_falhas[t] += ((mttr + 2.0 * self.municipio.tempo_viagem) *
                                  OPEX.QTD_TECNICOS.valor *
                                  OPEX.QTD_TIMES.valor *
                                  valor_salario_tecnico_ajustado[t] + valor_manutencao_ps[t] + valor_manutencao_udc[t] +
                                  valor_manutencao_sw[t]) * \
                                 afr

        return opex_co_falhas
コード例 #2
0
    def get_capex_implantacoes(self, param_1, param_2):
        capex_co_equipamentos = np.zeros(self.municipio.tempo_analise)
        capex_co_instalacao = np.zeros(self.municipio.tempo_analise)

        # Realizar o cálculo de atualização do valor de salário do técnico de manutenção ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(
            CAPEX.SALARIO_TECNICO.valor, CAPEX.TAXA_CORRECAO_SALARARIO.valor,
            self.municipio.tempo_analise)

        for t, fs in enumerate(self.municipio.co.qtd_fs):
            equipamentos = fs * CAPEX.FS.valor
            equipamentos += self.municipio.co.qtd_as[t] * CAPEX.SW_CARRIER.valor
            tempo_instalacao = fs * 1.0 + self.municipio.co.qtd_as[t] * 0.5

            if equipamentos > 0:
                custo_hardware_ajustado = util.atualizacao_linear(
                    equipamentos, CAPEX.TAXA_REAJUSTE.valor,
                    self.municipio.tempo_analise)

                capex_co_equipamentos[t] += 0.5 * custo_hardware_ajustado[t]

                # Pagasmento de Salários:
                # Despesas de Instalação relativa ao tempo total de deslocamento e atualização
                despesas_rh = CAPEX.QTD_TECNICOS_INSTALACAO.valor * \
                              CAPEX.QTD_TIMES.valor * \
                              valor_salario_tecnico_ajustado[t] * \
                              (tempo_instalacao + (self.municipio.tempo_viagem * 2.0))

                capex_co_instalacao[t] += 0.5 * despesas_rh

        return capex_co_equipamentos, capex_co_instalacao
コード例 #3
0
    def get_opex_aluguel(self, lista_bs):
        opex_radio_aluguel = np.zeros(self.municipio.tempo_analise)

        # Primeiro se calcula a variacao do preco de alguel por m2 ao longo dos anos
        aluguel_area_outdoor_ajustado = util.atualizacao_linear(OPEX.ALUGUEL_OUTDOOR.valor,
                                                                OPEX.TAXA_REAJUSTE.valor,
                                                                self.municipio.tempo_analise)

        aluguel_area_indoor_ajustado = util.atualizacao_linear(OPEX.ALUGUEL_INDOOR.valor,
                                                               OPEX.TAXA_REAJUSTE.valor,
                                                               self.municipio.tempo_analise)

        for b in lista_bs:
            for ano in range(b.ano, self.municipio.tempo_analise):
                if b.tipo_BS.tipo is 'Macro':
                    valor = aluguel_area_outdoor_ajustado[ano]
                elif b.tipo_BS.tipo is 'Micro':
                    valor = aluguel_area_outdoor_ajustado[ano]
                elif b.tipo_BS.tipo is 'Femto':
                    valor = aluguel_area_indoor_ajustado[ano]
                else:
                    raise RuntimeError('Comportamento Inesperado: OPEX - Tipo de BS não encontrada')

                aluguel_ano = b.tipo_BS.area_fisica * valor
                opex_radio_aluguel[ano] += aluguel_ano

        return opex_radio_aluguel
コード例 #4
0
    def get_capex_implantacoes(self, qtd_antena_mw, qtd_sw_carrier_mw):
        capex_transporte_instalacao = np.zeros(self.municipio.tempo_analise)
        capex_transporte_equipamentos = np.zeros(self.municipio.tempo_analise)

        # Realizar o cálculo de atualização do valor de salário do técnico de instalação ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(CAPEX.SALARIO_TECNICO.valor,
                                                                 CAPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                                 self.municipio.tempo_analise)

        # Depois calcula-se a variacao do preço de aquisição de equipamentos ao longo dos anos
        hardware_mw_small = util.atualizacao_linear(CAPEX.ANTENA_MW_SMALL.valor,
                                                    CAPEX.TAXA_REAJUSTE.valor,
                                                    self.municipio.tempo_analise)

        hardware_sw = util.atualizacao_linear(CAPEX.SW_CARRIER.valor,
                                              CAPEX.TAXA_REAJUSTE.valor,
                                              self.municipio.tempo_analise)

        capex_transporte_equipamentos[0] += CAPEX.ANTENA_MW_LARGE.valor * 2.0

        # Deslocamento: Contabiliza duas viagens (ida e volta) para a quantidade de técnicos necessária
        despesas_deslocamento = self.municipio.tempo_viagem * \
                                CAPEX.QTD_TECNICOS_INSTALACAO.valor * \
                                CAPEX.QTD_TIMES.valor * \
                                valor_salario_tecnico_ajustado * \
                                2.0

        # Mão-de-Obra: Multiplicar o tempo de atualização pelo salário do técnico e pela qtd de técnicos
        despesas_instalacao = CAPEX.QTD_TECNICOS_INSTALACAO.valor * CAPEX.QTD_TIMES.valor * \
                              valor_salario_tecnico_ajustado[0] * CAPEX.TEMPO_INSTALACAO_MW_LARGE.valor * 2.0

        capex_transporte_instalacao[0] += despesas_deslocamento[0] + despesas_instalacao

        for ano, qtd_antena in enumerate(qtd_antena_mw):
            if qtd_antena > 0 or qtd_sw_carrier_mw[ano] > 0:

                tempo_instalacao = CAPEX.TEMPO_INSTALACAO_MW_SMALL.valor * qtd_antena
                tempo_instalacao += CAPEX.TEMPO_INSTALACAO_SW.valor * qtd_sw_carrier_mw[ano]

                # Mão-de-Obra: Multiplicar o tempo de instalação pelo salário do técnico e pela qtd de técnicos
                despesas_instalacao = CAPEX.QTD_TECNICOS_INSTALACAO.valor * \
                                      CAPEX.QTD_TIMES.valor * \
                                      valor_salario_tecnico_ajustado[ano] * \
                                      tempo_instalacao

                capex_transporte_equipamentos[ano] += qtd_antena * hardware_mw_small[ano]
                capex_transporte_equipamentos[ano] += qtd_sw_carrier_mw[ano] * hardware_sw[ano]
                capex_transporte_instalacao[ano] += despesas_instalacao

                if ano != 0:
                    capex_transporte_instalacao[ano] += despesas_deslocamento[ano]

        return capex_transporte_equipamentos, capex_transporte_instalacao
コード例 #5
0
    def get_opex_falhas(self, qtd_antena_mw, qtd_sw_carrier_mw):
        falhas = np.zeros(self.municipio.tempo_analise)

        # Realizar a atualização do valor de salário do técnico de manutenção ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(OPEX.SALARIO_TECNICO.valor,
                                                                 OPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                                 self.municipio.tempo_analise)

        manutencao_hardware_mw_small = util.atualizacao_linear(OPEX.MANUTENCAO_MW_SMALL.valor,
                                                               OPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                               self.municipio.tempo_analise)

        manutencao_hardware_mw_large = util.atualizacao_linear(OPEX.MANUTENCAO_MW_LARGE.valor,
                                                               OPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                               self.municipio.tempo_analise)

        manutencao_hardware_sw = util.atualizacao_linear(OPEX.MANUTENCAO_SW.valor,
                                                         OPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                         self.municipio.tempo_analise)

        falhas += ((OPEX.MTTR_MW_LARGE.valor + (2.0 * self.municipio.tempo_viagem)) *
                   OPEX.QTD_TECNICOS.valor *
                   OPEX.QTD_TIMES.valor *
                   valor_salario_tecnico_ajustado +
                   manutencao_hardware_mw_large) * \
                  OPEX.TAXA_ARF_MW_LARGE.valor

        for ano, qtd_antena in enumerate(qtd_antena_mw):
            falha_small = np.zeros(self.municipio.tempo_analise)
            falha_sw = np.zeros(self.municipio.tempo_analise)
            if qtd_antena > 0 or qtd_sw_carrier_mw[ano] > 0:
                for t in range(ano, self.municipio.tempo_analise):
                    falha_small[t] += ((OPEX.MTTR_MW_SMALL.valor + (2.0 * self.municipio.tempo_viagem)) *
                                       OPEX.QTD_TECNICOS.valor *
                                       OPEX.QTD_TIMES.valor *
                                       valor_salario_tecnico_ajustado[t] +
                                       manutencao_hardware_mw_small[t]) * \
                                      OPEX.TAXA_ARF_MW_SMALL.valor
                    falha_sw[t] += ((OPEX.MTTR_MW_SW.valor + (2.0 * self.municipio.tempo_viagem)) *
                                       OPEX.QTD_TECNICOS.valor *
                                       OPEX.QTD_TIMES.valor *
                                       valor_salario_tecnico_ajustado[t] +
                                       manutencao_hardware_sw[t]) * \
                                      OPEX.TAXA_ARF_MW_SMALL.valor
                falhas += falha_small
                falhas += falha_sw

        return falhas
コード例 #6
0
    def get_capex_atualizacoes(self, lista_bs):
        capex_radio_equipamentos = np.zeros(self.municipio.tempo_analise)
        capex_radio_instalacao = np.zeros(self.municipio.tempo_analise)

        # Realizar o cálculo de atualização do valor de salário do técnico de manutenção ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(CAPEX.SALARIO_TECNICO.valor,
                                                                 CAPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                                 self.municipio.tempo_analise)

        for b in lista_bs:
            # Contabilizar as atualizações de hardware das BS
            if len(b.atualizacoes) > 0:

                # Se houver mais de uma atualização no mesmo ano, considerar apenas a última
                b.ajuste_atualizacoesBS()

                for at in b.atualizacoes:

                    # Verifica qual o tipo de BS para contabilizar os custos de atualizacao
                    if b.tipo_BS.tipo == 'Macro':
                        atualizacao_hardware = CAPEX.ATUALIZACAO_MACRO.valor
                        tempo_atualizacao = CAPEX.TEMPO_ATUALIZACAO_MACRO.valor
                    elif b.tipo_BS.tipo == 'Micro':
                        atualizacao_hardware = CAPEX.ATUALIZACAO_MICRO.valor
                        tempo_atualizacao = CAPEX.TEMPO_ATUALIZACAO_MICRO.valor
                    elif b.tipo_BS.tipo == 'Femto':
                        atualizacao_hardware = CAPEX.ATUALIZACAO_FEMTO.valor
                        tempo_atualizacao = CAPEX.TEMPO_ATUALIZACAO_FEMTO
                    else:
                        raise RuntimeError('Comportamento Inesperado: CAPEX - Tipo de BS não encontrada')

                    # Depois calcula-se a variacao do preço de atualização de hardware ao longo dos anos
                    atualizacao_hardware_ajustada = util.atualizacao_linear(atualizacao_hardware,
                                                                            CAPEX.TAXA_REAJUSTE.valor,
                                                                            self.municipio.tempo_analise)

                    # Pagasmento de Salários:
                    # Despesas de Instalação relativa ao tempo total de deslocamento e atualização
                    despesas_rh = CAPEX.QTD_TECNICOS_ATUALIZACAO.valor * \
                                  CAPEX.QTD_TIMES.valor * \
                                  valor_salario_tecnico_ajustado[at.ano] * \
                                  (tempo_atualizacao + (self.municipio.tempo_viagem * 2.0))

                    # Consolidar os valores no ano de atualização daquela BS
                    capex_radio_equipamentos[at.ano] += atualizacao_hardware_ajustada[at.ano]
                    capex_radio_instalacao[at.ano] += despesas_rh

        return capex_radio_equipamentos, capex_radio_instalacao
コード例 #7
0
    def get_capex_infraestrutura(self, lista_bs, lista_none=None):
        capex_radio_infraesturtura = np.zeros(self.municipio.tempo_analise)

        for b in lista_bs:
            # Contabilizar quantas BS novas foram implantadas ao longo dos anos e seu valor no CAPEX
            if b.existencia_previa is False:
                # Contabiliza os custos de infraestrutura:
                if b.tipo_BS.tipo is 'Macro':
                    custo_infraestrutura = CAPEX.INFRAESTRUTURA_MACRO.valor
                elif b.tipo_BS.tipo is 'Micro':
                    custo_infraestrutura = CAPEX.INFRAESTRUTURA_MICRO.valor
                elif b.tipo_BS.tipo == 'Femto':
                    custo_infraestrutura = CAPEX.INFRAESTRUTURA_FEMTO.valor
                else:
                    raise RuntimeError('Comportamento Inesperado: CAPEX - Tipo de BS não encontrada')

                # Realiza o cálculo de atualizacao do preco de aquisição por ano
                infraestrutura_por_ano = util.atualizacao_linear(custo_infraestrutura,
                                                                 CAPEX.TAXA_REAJUSTE.valor,
                                                                 self.municipio.tempo_analise)

                # Consolida o valor de infraestrutura no ano 'b.ano'
                capex_radio_infraesturtura[b.ano] += infraestrutura_por_ano[b.ano]

        return capex_radio_infraesturtura
コード例 #8
0
    def get_opex_energia(self, qtd_antena_mw, qtd_sw_carrier_mw):
        energia = np.zeros(self.municipio.tempo_analise)

        # Primeiro se calcula-se a variacao da tarifa de energia ao longo dos anos
        tarifa_energia_ajustada = util.atualizacao_linear(OPEX.CONSUMO.valor,
                                                          OPEX.TAXA_REAJUSTE.valor,
                                                          self.municipio.tempo_analise)

        # Computar consumo da Antena Large para todos os Anos do Tempo de Análise
        # Assumindo Potência 530W (Antena MW Large)
        consumo_mw_large = tarifa_energia_ajustada * 365.0 * 24 * (650.0 / 1000.0) * 2.0
        energia += consumo_mw_large

        for ano, qtd_antena in enumerate(qtd_antena_mw):
            if qtd_antena > 0 or qtd_sw_carrier_mw[ano] > 0:
                energia_mw = np.zeros(self.municipio.tempo_analise)
                qtd_sw = qtd_sw_carrier_mw[ano]
                for t in range(ano, self.municipio.tempo_analise):
                    # Faz o cálculo do volume de $ por kWh ao ano
                    # Assumindo Potência 200W (Antena MW Small) e 400W (SW Carrier)
                    energia_mw[t] += (200.0 / 1000.0) * qtd_antena * tarifa_energia_ajustada[t] * 365.0 * 24.0
                    energia_mw[t] += (400.0 / 1000.0) * qtd_sw * tarifa_energia_ajustada[t] * 365.0 * 24.0
                energia += energia_mw

        return energia
コード例 #9
0
    def get_opex_manutencao(self, param_1, param_2):
        opex_co_manutencao = np.zeros(self.municipio.tempo_analise)

        # Realizar a atualização do valor de salário do técnico de manutenção ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(
            OPEX.SALARIO_TECNICO.valor, OPEX.TAXA_CORRECAO_SALARARIO.valor,
            self.municipio.tempo_analise)

        # Realizar a atualizacao do valor de manutenção corretiva ajustado por ano
        valor_manutencao_ps = util.atualizacao_linear(
            OPEX.MANUTENCAO_PS.valor, OPEX.TAXA_REAJUSTE.valor,
            self.municipio.tempo_analise)

        valor_manutencao_udc = util.atualizacao_linear(
            OPEX.MANUTENCAO_UDC.valor, OPEX.TAXA_REAJUSTE.valor,
            self.municipio.tempo_analise)

        valor_manutencao_sw = util.atualizacao_linear(
            OPEX.MANUTENCAO_SW.valor, OPEX.TAXA_REAJUSTE.valor,
            self.municipio.tempo_analise)

        for t, udc in enumerate(self.municipio.co.qtd_udc):
            for t_index in range(t, self.municipio.tempo_analise):
                manut_udc = udc * valor_manutencao_udc[t_index]
                manut_fs = self.municipio.co.qtd_fs[t] * valor_manutencao_ps[
                    t_index]
                manut_as = self.municipio.co.qtd_as[t] * valor_manutencao_sw[
                    t_index]
                opex_co_manutencao[t_index] += manut_udc + manut_fs + manut_as

        tecnicos = OPEX.QTD_TECNICOS.valor * OPEX.QTD_TIMES.valor
        for t, udc in enumerate(self.municipio.co.qtd_udc):
            for t_index in range(t, self.municipio.tempo_analise):
                manut_udc = udc * OPEX.MTTR_PS.valor * tecnicos * valor_salario_tecnico_ajustado[
                    t_index]
                manut_fs = self.municipio.co.qtd_fs[
                    t] * OPEX.MTTR_PS.valor * tecnicos * valor_salario_tecnico_ajustado[
                        t_index]
                manut_as = self.municipio.co.qtd_as[
                    t] * OPEX.MTTR_MW_SW.valor * tecnicos * valor_salario_tecnico_ajustado[
                        t_index]
                opex_co_manutencao[t_index] += manut_udc + manut_fs + manut_as

            opex_co_manutencao[t] += tecnicos * valor_salario_tecnico_ajustado[
                t] * 2.0 * self.municipio.tempo_viagem

        return opex_co_manutencao
コード例 #10
0
    def get_opex_manutencao(self, qtd_antena_mw, qtd_sw_carrier_mw):
        manutencao = np.zeros(self.municipio.tempo_analise)

        # Realizar a atualizacao do valor de manutenção ajustado por ano
        manutencao_mw_large_ajustado = util.atualizacao_linear(OPEX.MANUTENCAO_MW_LARGE.valor,
                                                               OPEX.TAXA_REAJUSTE.valor,
                                                               self.municipio.tempo_analise)

        manutencao_mw_small_ajustado = util.atualizacao_linear(OPEX.MANUTENCAO_MW_SMALL.valor,
                                                               OPEX.TAXA_REAJUSTE.valor,
                                                               self.municipio.tempo_analise)

        manutencao_sw_ajustado = util.atualizacao_linear(OPEX.MANUTENCAO_SW.valor,
                                                         OPEX.TAXA_REAJUSTE.valor,
                                                         self.municipio.tempo_analise)

        valor_salario_tecnico_ajustado = util.atualizacao_linear(OPEX.SALARIO_TECNICO.valor,
                                                                 OPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                                 self.municipio.tempo_analise)

        despesas_rh = valor_salario_tecnico_ajustado * OPEX.QTD_TECNICOS.valor * OPEX.QTD_TIMES.valor * \
                      ((2.0 * self.municipio.tempo_viagem) + OPEX.MTTR_MW_LARGE.valor)

        manutencao += (manutencao_mw_large_ajustado + despesas_rh)

        for ano, qtd_antena in enumerate(qtd_antena_mw):
            manutencao_small = np.zeros(self.municipio.tempo_analise)
            if qtd_antena > 0 or qtd_sw_carrier_mw[ano]:
                for t in range(ano, self.municipio.tempo_analise):
                    # Custo de Manutenção do Equipamento de Hardware (MW)
                    manutencao_small[t] += manutencao_mw_small_ajustado[t]

                    # Custo de Manutenção do Equipamento de Hardware (SW)
                    manutencao_small[t] += manutencao_sw_ajustado[t] * qtd_sw_carrier_mw[t]

                    # Custo de Manutenção do Equipamento (RH)
                    manutencao_small[t] += valor_salario_tecnico_ajustado[t] * \
                                           OPEX.QTD_TECNICOS.valor * \
                                           OPEX.QTD_TIMES.valor * \
                                           ((OPEX.MTTR_MW_SMALL.valor * qtd_antena) +
                                            (OPEX.MTTR_MW_SW.valor * qtd_sw_carrier_mw[t]))
            manutencao += manutencao_small

        return manutencao
コード例 #11
0
    def get_capex_infraestrutura(self, param_1, param_2):

        # Realizar o cálculo de atualização do valor de salário do técnico de manutenção ajustado por ano
        valor_udc_ajustado = util.atualizacao_linear(
            CAPEX.UDC.valor, CAPEX.TAXA_CORRECAO_SALARARIO.valor,
            self.municipio.tempo_analise)

        capex_co_infraesturtura = 0.5 * np.multiply(self.municipio.co.qtd_udc,
                                                    valor_udc_ajustado)

        return capex_co_infraesturtura
コード例 #12
0
    def get_opex_aluguel(self, qtd_antena_mw):
        aluguel = np.zeros(self.municipio.tempo_analise)

        # Primeiro se calcula-se a variacao da tarifa de licenciamento ao longo dos anos
        tarifa_licenciamento_large_ajustada = util.atualizacao_linear(OPEX.LICENSA_MW_LARGE.valor,
                                                                      OPEX.TAXA_REAJUSTE.valor,
                                                                      self.municipio.tempo_analise)

        tarifa_licenciamento_small_ajustada = util.atualizacao_linear(OPEX.LICENSA_MW_SMALL.valor,
                                                                      OPEX.TAXA_REAJUSTE.valor,
                                                                      self.municipio.tempo_analise)
        aluguel += tarifa_licenciamento_large_ajustada

        for ano, qtd_antena in enumerate(qtd_antena_mw):
            if qtd_antena > 0:
                aluguel_espectro = np.zeros(self.municipio.tempo_analise)
                for t in range(ano, self.municipio.tempo_analise):
                    aluguel_espectro[t] += tarifa_licenciamento_small_ajustada[t]
                aluguel += aluguel_espectro

        return aluguel
コード例 #13
0
    def get_capex_infraestrutura(self, qtd_antena_mw, tipo_rede_radio):
        capex_transporte_infraestrutura = np.zeros(self.municipio.tempo_analise)

        if tipo_rede_radio == 'Hetnet':
            for ano, qtd_antena in enumerate(qtd_antena_mw):
                if qtd_antena > 0:
                    qtd_hastes = (qtd_antena / 2.0)

                    # Realiza o cálculo de atualizacao do preco de aquisição por ano
                    infraestrutura_por_ano = util.atualizacao_linear(CAPEX.HASTE_MW.valor,
                                                                     CAPEX.TAXA_REAJUSTE.valor,
                                                                     self.municipio.tempo_analise)
                    infraestrutura_por_ano *= qtd_hastes

                    capex_transporte_infraestrutura[ano] += infraestrutura_por_ano[ano]

        return capex_transporte_infraestrutura
コード例 #14
0
    def get_opex_energia(self, param_1, param_2):
        opex_co_energia = np.zeros(self.municipio.tempo_analise)

        # Primeiro se calcula-se a variacao da tarifa de energia ao longo dos anos
        tarifa_energia_ajustada = util.atualizacao_linear(
            OPEX.CONSUMO.valor, OPEX.TAXA_REAJUSTE.valor,
            self.municipio.tempo_analise)
        consumo = np.zeros(self.municipio.tempo_analise)
        for t, fs in enumerate(self.municipio.co.qtd_fs):
            potencia_equipamentos = fs * 0.650 + self.municipio.co.qtd_as[
                t] * 0.400 + self.municipio.co.qtd_udc[t] * 22.0
            if potencia_equipamentos > 0:
                for t_index in range(t, self.municipio.tempo_analise):
                    consumo[t_index] += potencia_equipamentos * 365.0 * 24.0

        opex_co_energia += 0.5 * np.multiply(consumo, tarifa_energia_ajustada)
        return opex_co_energia
コード例 #15
0
    def get_opex_aluguel(self, param_1):
        opex_co_aluguel = np.zeros(self.municipio.tempo_analise)

        # Primeiro se calcula a variacao do preco de alguel por m2 ao longo dos anos
        aluguel_area_outdoor_ajustado = util.atualizacao_linear(
            OPEX.ALUGUEL_OUTDOOR.valor, OPEX.TAXA_REAJUSTE.valor,
            self.municipio.tempo_analise)

        area_total = np.zeros(self.municipio.tempo_analise)
        for t, udc in enumerate(self.municipio.co.qtd_udc):
            area_udc = udc * 14.98
            if area_udc > 0:
                for t_index in range(t, self.municipio.tempo_analise):
                    area_total[t_index] += area_udc

        opex_co_aluguel += 0.5 * np.multiply(area_total,
                                             aluguel_area_outdoor_ajustado)

        return opex_co_aluguel
コード例 #16
0
    def get_opex_energia(self, lista_bs, lista_none=None):
        opex_radio_energia = np.zeros(self.municipio.tempo_analise)

        # Primeiro se calcula-se a variacao da tarifa de energia ao longo dos anos
        tarifa_energia_ajustada = util.atualizacao_linear(OPEX.CONSUMO.valor,
                                                          OPEX.TAXA_REAJUSTE.valor,
                                                          self.municipio.tempo_analise)

        # Vamos assumir que todas as BS estão ligadas 24h/dia em 365 dias por ano, e depois computar o OPEX
        # Para cada BS se calcula o consumo a partir de seu ano de implantacao (bs.ano)
        for b in lista_bs:
            for ano in range(b.ano, self.municipio.tempo_analise):

                # Faz o cálculo do volume de $ por ano
                energia_ano = (b.tipo_BS.potencia_transmissao / 1000.0) * \
                              tarifa_energia_ajustada[ano] * \
                              365.0 * \
                              24.0

                opex_radio_energia[ano] += energia_ano

        return opex_radio_energia
コード例 #17
0
    def get_capex_implantacoes(self, lista_bs, lista_none=None):
        capex_radio_equipamentos = np.zeros(self.municipio.tempo_analise)
        capex_radio_instalacao = np.zeros(self.municipio.tempo_analise)

        # Realizar o cálculo de atualização do valor de salário do técnico de instalação ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(CAPEX.SALARIO_TECNICO.valor,
                                                                 CAPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                                 self.municipio.tempo_analise)

        for b in lista_bs:

            # Contabilizar quantas BS novas foram implantadas ao longo dos anos e seu valor no CAPEX
            # Contabilizar o valor de cada BS com os custos de instsalação embutidos
            if b.existencia_previa is False:

                # Verifica qual o tipo de BS para contabilizar os custos de implantação
                if b.tipo_BS.tipo == 'Macro':
                    tempo_instalacao = CAPEX.TEMPO_INSTALACAO_MACRO.valor
                    if b.tipo_BS.tecnologia == '3G':
                        equipamento = CAPEX.MACRO_3G.valor
                    elif b.tipo_BS.tecnologia == '4G':
                        equipamento = CAPEX.MACRO_4G.valor
                    elif b.tipo_BS.tecnologia == '4.5G':
                        equipamento = CAPEX.MACRO_45G.valor
                    elif b.tipo_BS.tecnologia == '5G':
                        equipamento = CAPEX.MACRO_5G.valor
                    else:
                        raise RuntimeError('Comportamento Inesperado: CAPEX - Tecnologia Macro BS não encontrada')
                elif b.tipo_BS.tipo == 'Micro':
                    tempo_instalacao = CAPEX.TEMPO_INSTALACAO_MICRO.valor
                    if b.tipo_BS.tecnologia == '4G':
                        equipamento = CAPEX.MICRO_4G.valor
                    elif b.tipo_BS.tecnologia == '4.5G':
                        equipamento = CAPEX.MICRO_45G.valor
                    elif b.tipo_BS.tecnologia == '5G':
                        equipamento = CAPEX.MICRO_5G.valor
                    else:
                        raise RuntimeError('Comportamento Inesperado: CAPEX - Tecnologia Micro BS não encontrada')
                elif b.tipo_BS.tipo == 'Femto':
                    tempo_instalacao = CAPEX.TEMPO_INSTALACAO_FEMTO.valor
                    if b.tipo_BS.tecnologia == '4G':
                        equipamento = CAPEX.FEMTO_4G.valor
                    elif b.tipo_BS.tecnologia == '4.5G':
                        equipamento = CAPEX.FEMTO_45G.valor
                    elif b.tipo_BS.tecnologia == '5G':
                        equipamento = CAPEX.FEMTO_5G.valor
                    else:
                        raise RuntimeError('Comportamento Inesperado: CAPEX - Tecnologia Femto BS não encontrada')
                else:
                    raise RuntimeError('Comportamento Inesperado: CAPEX - Tipo de BS não encontrada')

                # Depois calcula-se a variacao do preço de atualização ao longo dos anos
                # Observar o parâmetro alpha da equacao (1.1) de Yaghoubi et al (2019).
                instalacao_hardware_ajustada = util.atualizacao_linear(equipamento,
                                                                       CAPEX.TAXA_REAJUSTE.valor,
                                                                       self.municipio.tempo_analise)

                # Pagasmento de Salários:
                # Despesas de Instalação relativa ao tempo total de deslocamento e atualização
                despesas_rh = CAPEX.QTD_TECNICOS_INSTALACAO.valor * \
                              CAPEX.QTD_TIMES.valor * \
                              valor_salario_tecnico_ajustado[b.ano] * \
                              (tempo_instalacao + (self.municipio.tempo_viagem * 2.0))

                capex_radio_equipamentos[b.ano] += instalacao_hardware_ajustada[b.ano]
                capex_radio_instalacao[b.ano] += despesas_rh

        return capex_radio_equipamentos, capex_radio_instalacao
コード例 #18
0
    def get_opex_falhas(self, lista_bs, lista_none=None):
        opex_radio_falhas = np.zeros(self.municipio.tempo_analise)

        # Realizar a atualização do valor de salário do técnico de manutenção ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(OPEX.SALARIO_TECNICO.valor,
                                                                 OPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                                 self.municipio.tempo_analise)

        # Realizar a atualização do valor de taxa de penalidade por ano
        taxa_penalidade_ajustada = util.atualizacao_linear(OPEX.TAXA_PENALIDADE.valor,
                                                           OPEX.TAXA_REAJUSTE.valor,
                                                           self.municipio.tempo_analise)

        for b in lista_bs:

            # Determinamos os valores de AFR e MTTR de acordo com o tipo de BS
            if b.tipo_BS.tipo == 'Macro':
                afr = OPEX.TAXA_ARF_MACRO.valor
                mttr = OPEX.MTTR_MACRO.valor
                if b.tipo_BS.tecnologia == '2G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_2G.valor
                elif b.tipo_BS.tecnologia == '3G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_3G.valor
                elif b.tipo_BS.tecnologia == '4G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_4G.valor
                elif b.tipo_BS.tecnologia == '4.5G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_45G.valor
                elif b.tipo_BS.tecnologia == '5G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_5G.valor
                else:
                    raise RuntimeError('Comportamento Inesperado: OPEX - Tecnologia de Macro BS não encontrada')
            elif b.tipo_BS.tipo == 'Micro':
                afr = OPEX.TAXA_ARF_MICRO.valor
                mttr = OPEX.MTTR_MICRO.valor
                if b.tipo_BS.tecnologia == '3G':
                    valor_manutencao = OPEX.MANUTENCAO_MICRO_3G.valor
                elif b.tipo_BS.tecnologia == '4G':
                    valor_manutencao = OPEX.MANUTENCAO_MICRO_4G.valor
                elif b.tipo_BS.tecnologia == '4.5G':
                    valor_manutencao = OPEX.MANUTENCAO_MICRO_45G.valor
                elif b.tipo_BS.tecnologia == '5G':
                    valor_manutencao = OPEX.MANUTENCAO_MICRO_5G.valor
                else:
                    raise RuntimeError('Comportamento Inesperado: CAPEX - Tecnologia de Micro BS não encontrada')
            elif b.tipo_BS.tipo == 'Femto':
                afr = OPEX.TAXA_ARF_FEMTO.valor
                mttr = OPEX.MTTR_FEMTO.valor
                if b.tipo_BS.tecnologia == '4G':
                    valor_manutencao = OPEX.MANUTENCAO_FEMTO_4G.valor
                elif b.tipo_BS.tecnologia == '4.5G':
                    valor_manutencao = OPEX.MANUTENCAO_FEMTO_45G.valor
                elif b.tipo_BS.tecnologia == '5G':
                    valor_manutencao = OPEX.MANUTENCAO_FEMTO_5G.valor
                else:
                    raise RuntimeError('Comportamento Inesperado: CAPEX - Tecnologia de Femto BS não encontrada')
            else:
                raise RuntimeError('Comportamento Inesperado: CAPEX - Tipo de BS não encontrada')

            # Realizar a atualizacao do valor de manutenção corretiva ajustado por ano
            valor_manutencao_ajustado = util.atualizacao_linear(valor_manutencao,
                                                                OPEX.TAXA_REAJUSTE.valor,
                                                                self.municipio.tempo_analise)

            for ano in range(b.ano, self.municipio.tempo_analise):
                opex_radio_falhas[ano] += ((mttr + 2.0 * self.municipio.tempo_viagem) *
                                           OPEX.QTD_TECNICOS.valor *
                                           OPEX.QTD_TIMES.valor *
                                           valor_salario_tecnico_ajustado[ano] + valor_manutencao_ajustado[ano]) * \
                                           afr

            # Cálculo de Falhas por BS de alta importânica
            # Assumimos 1 BS como sendo de alta importância por aglomerado
            # Esta BS é a BS marcada como Hub (True)
            if (b.hub_bs is True) and (self.municipio.tempo_medio_disponibilidade < OPEX.THRESHOLD_MACRO.valor):

                for ano in range(b.ano, self.municipio.tempo_analise):
                    opex_radio_falhas[ano] += (OPEX.THRESHOLD_MACRO.valor -
                                               self.municipio.tempo_medio_disponibilidade) * \
                                               taxa_penalidade_ajustada[ano]

        return opex_radio_falhas
コード例 #19
0
    def get_opex_manutencao(self, lista_bs, lista_none=None):
        opex_radio_manutencao = np.zeros(self.municipio.tempo_analise)

        # Realizar a atualização do valor de salário do técnico de manutenção ajustado por ano
        valor_salario_tecnico_ajustado = util.atualizacao_linear(OPEX.SALARIO_TECNICO.valor,
                                                                 OPEX.TAXA_CORRECAO_SALARARIO.valor,
                                                                 self.municipio.tempo_analise)

        # Assumimos que uma manutenção anual em cada BS
        for b in lista_bs:
            # Determinamos o valor base de manutenção de acordo com o tipo de BS
            if b.tipo_BS.tipo == 'Macro':
                mttr = OPEX.MTTR_MACRO.valor
                if b.tipo_BS.tecnologia == '2G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_2G.valor
                elif b.tipo_BS.tecnologia == '3G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_3G.valor
                elif b.tipo_BS.tecnologia == '4G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_4G.valor
                elif b.tipo_BS.tecnologia == '4.5G':
                    valor_manutencao = OPEX.MANUTENCAO_MACRO_45G.valor
                elif b.tipo_BS.tecnologia == '5G':
                    valor_manutencao = OPEX.MANUTENCAO_FEMTO_5G.valor
                else:
                    raise RuntimeError('Comportamento Inesperado: OPEX - Tecnologia Macro BS não encontrada')
            elif b.tipo_BS.tipo == 'Micro':
                mttr = OPEX.MTTR_MICRO.valor
                if b.tipo_BS.tecnologia == '4G':
                    valor_manutencao = OPEX.MANUTENCAO_MICRO_4G.valor
                elif b.tipo_BS.tecnologia == '4.5G':
                    valor_manutencao = OPEX.MANUTENCAO_MICRO_45G.valor
                elif b.tipo_BS.tecnologia == '5G':
                    valor_manutencao = OPEX.MANUTENCAO_MICRO_5G.valor
                else:
                    raise RuntimeError('Comportamento Inesperado: OPEX - Tecnologia Micro BS não encontrada')
            elif b.tipo_BS.tipo == 'Femto':
                mttr = OPEX.MTTR_FEMTO.valor
                if b.tipo_BS.tecnologia == '4G':
                    valor_manutencao = OPEX.MANUTENCAO_FEMTO_4G.valor
                elif b.tipo_BS.tecnologia == '4.5G':
                    valor_manutencao = OPEX.MANUTENCAO_FEMTO_45G.valor
                elif b.tipo_BS.tecnologia == '5G':
                    valor_manutencao = OPEX.MANUTENCAO_FEMTO_5G.valor
                else:
                    raise RuntimeError('Comportamento Inesperado: OPEX - Tecnologia Femto BS não encontrada')
            else:
                raise RuntimeError('Comportamento Inesperado: OPEX - Tipo de BS não encontrada')

            # Realizar a atualizacao do valor de manutenção ajustado por ano
            # Observar o parâmetro alpha da equacao (1.1) de de Yaghoubi et al (2019).
            valor_manutencao_ajustado = util.atualizacao_linear(valor_manutencao,
                                                                CAPEX.TAXA_REAJUSTE.valor,
                                                                self.municipio.tempo_analise)

            for ano in range(b.ano, self.municipio.tempo_analise):
                despesa_rh = OPEX.QTD_TECNICOS.valor * \
                             OPEX.QTD_TIMES.valor * \
                             valor_salario_tecnico_ajustado[ano] * \
                             mttr
                opex_radio_manutencao[ano] += valor_manutencao_ajustado[ano] + despesa_rh

        # Depois contabilizamos as viagens (uma viagem por ano)
        for ano in range(self.municipio.tempo_analise):
            opex_radio_manutencao[ano] += self.municipio.tempo_viagem * \
                                          OPEX.QTD_TECNICOS.valor * \
                                          OPEX.QTD_TIMES.valor * \
                                          valor_salario_tecnico_ajustado[ano] * \
                                          2.0

        return opex_radio_manutencao