Я хочу решить задачу нелинейной оптимизации. Я пытался решить эту проблему с помощью KKT, но в конце концов я понял, что трудно написать код для решения этой проблемы.
Я хочу знать оптимальное распределение платежей, которое минимизирует период погашения, пока я не погасу все долги. Ниже приведена функция моего объективного уравнения: моя логика c заключалась в том, чтобы получить период выплаты по каждому долгу и минимизировать сумму:
My_Loans = {
'Name' : ['A', 'B','C','D'],
'Principal' : [350, 2000, 600, 750],
'APR' : [6, 4, 4, 5]}
My_Loans = pd.DataFrame(My_Loans)
PV = My_Loans['Principal']
APR = My_Loans['APR']
def repayment_period(PV, APR, PMT):
'''inputs are in lists format. PV is the principal amount, APR is Annual Percentage Rate, and PMT will be my variable which represents the monthly payment.'''
num_loans = len(PV)
times = []
for j in range(num_loans):
i = (APR[j]/12)/100
accrued_interest = PV[j] * i
N = round(-(log(1-((PV[j]*i)/PMT[j])))/log(1+i))
times.append(N)
total_period = sum(times)
return total_period
, и у нее есть одно ограничение неравенства, которое является суммой PMT ( переменная) <2000 (сумма ежемесячного распределения должна быть меньше 2000). </p>
def ieq_constraint(x):
return np.atleast_1d(np.sum(x)-2000)
from scipy import optimize as pf
op.fmin_slsqp(how_long, np.array([0]), ieqcons=[ieq_constraint])
Но я не могу заставить это работать.
Пожалуйста, помогите мне решить эту проблему. Если что-то неясно, пожалуйста, прокомментируйте ниже. Кроме того, если есть лучший подход, пожалуйста, дайте мне знать.
Спасибо.