Как вызвать Numpy Solver, чтобы минимизировать obj_func с ограничениями - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь решить задачу линейного уравнения с ограничениями, но не знаю, как вызвать решатель.

Я использую функцию, которую я написал под названием covariancia, но с ней проблем нет, поэтому я не буду публиковать ее здесь.

from funcs import covariancia
from math import sqrt
def main():
    print("Iniciando Moneta...")
    evo_val = []
    with open("evo_val.txt") as my_file:
    evo_val = [line.split() for line in my_file]

    #Montando array de Médias
    medias = []

    for papel in evo_val:
        media_atual = 0

        for valor in papel:
            media_atual += float(valor)

        media_atual /= len(papel)
        medias.append(media_atual)

    #Calculating Covariance
    co_x = co_y = len(evo_val)
    co_var = [[0]*co_y for i in range(co_x)]

    for i in range(len(evo_val)):

        for j in range(len(evo_val)):
            if (j < i):
                co_var[i][j] = co_var[j][i]
            else:
                co_var[i][j] = covariancia(evo_val[i], evo_val[j], medias[i], medias[j])

    #Calculating Correlation
    co_rel = [[0]*co_y for i in range(co_x)]

    for i in range(len(evo_val)):
       for j in range(len(evo_val)):
           if i == j:
               co_rel[i][j] = 1
           elif j < i:
               co_rel[i][j] = co_rel[j][i]
           else:
               co_rel[i][j] = co_var[i][j] / (sqrt(co_var[i][i] * co_var[j][j]))

    #Linear Solver
    func_obj = [0.0 for i in range(co_x)]
    DPRE = 0.0

    RE = sum([func_obj[i]*medias[i] for i in range(len(evo_val))])

    for i in range(co_x):
        for j in range(co_x):
            DPRE += func_obj[i]*func_obj[j]*co_var[i][j]

    const = sum(func_obj) # must be equal to 1

Что мне делать? Мне нужно минимизировать (DPRE / RE) с ограничениями, что сумма (func_obj) должна быть равна 1.

Как я могу вызвать солвер? Как я могу сказать решателю, что мои переменные находятся в массиве func_obj?

Спасибо за помощь!

...