Я написал небольшой код в python, и он отлично работает.Цитирование через фрейм данных и создание функции для оптимизации
import numpy as np
import pandas as pd
from scipy.optimize import minimize
"""define power and coefficients"""
power = 0.6
coefficient = 5.6
"""define objective function"""
def func(x,sign=1.0):
return sign*sum(coefficient*(x[0:]**power))
""" define constraints"""
cons = ({'type': 'ineq', 'fun': lambda x: x[1] - 2 * x[1] + 2},
{'type': 'ineq', 'fun': lambda x: -x[2] - 2 * x[1] + 6},
{'type': 'ineq', 'fun': lambda x: -x[0] + 2 * x[1] + 2})
""" define bounds"""
bnds = ((0.7, 1.3), (0.7, 1.3), (0.7,1.3))
"""initial values of the variables"""
x0 = np.array([1.1, 3.9,5.6])
"""run the optimization algorithm"""
res = minimize(func, x0, method='SLSQP',bounds = bnds,constraints=cons,
options={'disp': True})
"""print the results"""
print(res.x)
Этот код содержит целевую функцию
def func(x,sign=1.0):
return sign*sum(coefficient*(x[0:]**power))
и начальные значения, как
x0 = np.array([1.1, 3.9,5.6])
Но это все жестко. Я хочу сформировать их во время выполнения.
т.е. у меня есть файл CSV, я прочитал, что в dataframe Структура CSV файла
DV_Name Investment
DV1 1.2
DV2 1.2
DV3 1.3
DV4 1.2
DV5 1.2
DV6 4.5
DV7 1.2
DV8 2.7
DV9 1.2
DV10 1.2
Я использовал pd.DataFrame.from_csv
.
Что мне нужно сделать, чтобы моя целевая функция была в форме coeff*(DV1^power + DV2^power + DV3^power ......DV10^power)
И мой массив начальных значений x0 как значения инвестиций, то есть инвестиций (0), инвестиций (1) ... и так далее.