Я пытаюсь решить задачу линейного уравнения с ограничениями, но не знаю, как вызвать решатель.
Я использую функцию, которую я написал под названием 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?
Спасибо за помощь!