optimize.minimize в Python, не находя решения - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь максимизировать функцию с помощью optimize.minimize, но по какой-то причине не дает мне правильный ответ.

import numpy as np
import pandas as pd
import math
from scipy.optimize import minimize
import matplotlib.pyplot as plt

eps = 0.001
def safe_log(x):
    if x > eps:
        return math.log(x)
    logeps = np.log(eps)
    a = 1 / (3 * eps * (3 * logeps * eps)**2)
    b = eps * (1 - 3 * logeps)
    return a * (x - b)**3    

def funct(x):
    return -(( (1 - 0.45192566) * safe_log( 1 - x )) + ( 0.45192566 * safe_log( 1 + ((5.5 - 1)*x) )))

cons = ({'type': 'ineq', 'fun': lambda x: x-1})
bnds = ((0, None),)

res = minimize(funct, (0), constraints=cons, bounds=bnds)
print("res", res.x)
print("mes", res.message)

x = []
y = []
for i in range(0, 100):
    x.append(i/100)
    y.append(funct(i/100))
    pass

plt.plot(x,y)
plt.show()

Расчетный ответ равен 1.

Если янанесите на экран функцию, где есть четкая минута, как это видно на рисунке

function plot

Я застрял с этим в течение нескольких дней иЯ не могу найти ответ на это.

1 Ответ

0 голосов
/ 13 октября 2018

Вы ограничили свой x как минимум 1:

cons = ({'type': 'ineq', 'fun': lambda x: x-1})

SciPy успешно минимизировал вашу целевую функцию с учетом ваших границ и ограничений.С учетом этих границ и ограничений минимум достигается при x = 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...