Я пытаюсь оптимизировать функцию, чтобы максимально приблизить ее к нулю.
Функция:
def goal_seek_func(x: float) -> float:
lcos_list_temp = [energy_output[i] * x for i in range(life)]
npv_lcos_temp = npv(cost_capital, lcos_list_temp)
total = sum([cost_energy_capacity,
cost_power_conversion,
balance_of_plant,
cost_construction_commissioning,
npv_o_m,
npv_eol,
npv_cost_charging,
npv_lcos_temp,
])
return total
Все переменные, рассчитанные ранее в коде.
Это линейное уравнение, где чем меньше x
, тем меньше total
.
Я пытаюсь найти значение x
, где total
максимально близко к 0
.
Я пытался использовать:
scipy.optimize.minimize_scalar(goal_seek_func)
но это явно минимизирует уравнение к -inf
. Я прочитал документы, но не вижу, где определить целевой вывод функции. Где я могу определить это, или есть лучший метод?
I am trying to find the value of x where total is as close to 0 as possible.
Тогда вы хотите решить уравнение goal_seek_func(x) = 0
вместо минимизации goal_seek_func(x)
. См. здесь для объяснения того, почему эти две вещи не совпадают. При этом вы можете легко решить уравнение, минимизировав некоторую векторную норму вашей целевой функции:
res = scipy.optimize.minimize_scalar(lambda x: goal_seek_func(x)**2)
Если целевое значение res.fun
равно нулю, res.x
решает ваше уравнение. В противном случае res.x
— это как минимум наилучшее возможное значение.