|
import pandas as pd |
|
|
|
|
|
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] |
|
} |
|
|
|
|
|
df = pd.DataFrame(data) |
|
|
|
|
|
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] |
|
|
|
df['FEN'] = df.apply(lambda row: calcular_fen(row.values, tasas_descuento), axis=1) |
|
|
|
|
|
inversiones_iniciales = { |
|
'Proyecto 1': 0, |
|
'Proyecto 2': 0, |
|
'Proyecto 3': 0, |
|
'Proyecto 4': 0 |
|
} |
|
|
|
|
|
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 |
|
|
|
|
|
budget_a = 800 |
|
proyectos_a = elegir_proyectos_optimos(budget_a) |
|
print(f"Proyectos 贸ptimos para un budget de {budget_a}: {proyectos_a}") |
|
|
|
|
|
budget_b = 1200 |
|
proyectos_b = elegir_proyectos_optimos(budget_b) |
|
print(f"Proyectos 贸ptimos para un budget de {budget_b}: {proyectos_b}") |
|
|
|
|
|
budget_c = 2400 |
|
proyectos_c = elegir_proyectos_optimos(budget_c) |
|
print(f"Proyectos 贸ptimos para un budget de {budget_c}: {proyectos_c}") |