поиск значений, которые максимизируют вероятность входа в Python - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь максимизировать следующую функцию: enter image description here

Какова моя цель - найти значения векторов x и y, которые максимизируют L. K_i ^ out и K_i ^ in - это in_degree и степень выхода узла i в графе G, которые в основном являются целыми числами от 0 до 100. Я читал, что функция minimize была хороша для этого и поэтомуЯ написал следующий код:

import networkx as nx
import scipy as sp
import numpy as np
from scipy.optimize import minimize

def f(z, n):
    frst_term = 0 # first term in B(43)
    scnd_term = 0 # second term in B(43)
    for i in range(n): # n is the amount of nodes in Graph G. 
        frst_term += -G.out_degree(i)*np.log(z[i]) + -G.in_degree(i)*np.log(z[n+i]) 
        #description of first term where z[i] is x_i and z[n+i] = y_i
        for j in range(n):
            if i == j:
                None
            else:
                scnd_term += np.log(1+z[i]*z[n+j]) #z[i] = x_i z[n+j] = y_j

    lik = (frst_term - scnd_term) #the total function
    return(lik)

w = 2*n*[0.5] #my first guess
max_val = minimize(f, w, args=(n))
print(max_val)

Из этого я получаю предупреждение во время выполнения

invalid value encountered in log

и

invalid value encountered in reduce
return umr_maximum(a, axis, None, out, keepdims)

Значения x и y должны бытьвсе положительные, и где-то между 0 и 10 максимальными, в основном между 0 и 1, хотя.В заключение: есть ли у вас какие-либо предложения о том, как улучшить этот код или какие-либо другие способы решения этой проблемы?

...