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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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