import pandas as pd # Definir los flujos de efectivo de cada proyecto data = { 'Proyecto 1': [100, 110, 120, 130, 140], 'Proyecto 2': [100, 100, 100, 100, 200], 'Proyecto 3': [110, 120, 110, 120, 110], 'Proyecto 4': [150, 140, 130, 120, 110] } # Crear DataFrame con los flujos de efectivo df = pd.DataFrame(data) # Calcular el flujo de efectivo neto (FEN) para cada proyecto def calcular_fen(flujos, tasa_descuento): fen = 0 for i, flujo in enumerate(flujos): fen += flujo / ((1 + tasa_descuento) ** (i + 1)) return fen tasas_descuento = [0.1, 0.1, 0.1, 0.1, 0.1] # Suponiendo una tasa de descuento del 10% para todos los proyectos df['FEN'] = df.apply(lambda row: calcular_fen(row.values, tasas_descuento), axis=1) # Calcular la inversión inicial para cada proyecto inversiones_iniciales = { 'Proyecto 1': 0, 'Proyecto 2': 0, 'Proyecto 3': 0, 'Proyecto 4': 0 } # Elegir los proyectos óptimos para diferentes budgets def elegir_proyectos_optimos(budget): proyectos_optimos = [] df_temp = df.copy() df_temp['Ranking'] = df_temp['FEN'] / df_temp.sum(axis=1) df_temp = df_temp.sort_values(by='Ranking', ascending=False) acumulado = 0 for index, row in df_temp.iterrows(): if acumulado + row[index] <= budget: proyectos_optimos.append(index) acumulado += row[index] return proyectos_optimos # a) Budget = 800 budget_a = 800 proyectos_a = elegir_proyectos_optimos(budget_a) print(f"Proyectos óptimos para un budget de {budget_a}: {proyectos_a}") # b) Budget = 1200 budget_b = 1200 proyectos_b = elegir_proyectos_optimos(budget_b) print(f"Proyectos óptimos para un budget de {budget_b}: {proyectos_b}") # c) Budget = 2400 budget_c = 2400 proyectos_c = elegir_proyectos_optimos(budget_c) print(f"Proyectos óptimos para un budget de {budget_c}: {proyectos_c}")