решение задачи нелинейной оптимизации с помощью KKT путем реализации fmin_slsqp () - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу решить задачу нелинейной оптимизации. Я пытался решить эту проблему с помощью 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])

Но я не могу заставить это работать.

Пожалуйста, помогите мне решить эту проблему. Если что-то неясно, пожалуйста, прокомментируйте ниже. Кроме того, если есть лучший подход, пожалуйста, дайте мне знать.

Спасибо.

...