Метод Scipy Minimum с ограничениями для обеспечения того, чтобы одно значение коэффициента было больше другого - PullRequest
0 голосов
/ 30 января 2020

Недавно я использовал минимизацию Scipy для выполнения ограниченной оптимизации. Но я не уверен, как ввести ограничения, которые будут гарантировать, что коэффициент 2-й переменной больше, чем коэффициент 1-й переменной (и т. Д.). Я сослался на код ниже для моего собственного кода. Может ли кто-нибудь помочь повозиться с введением дополнительных ограничений на значения коэффициента.

 import numpy as np
from scipy.optimize import minimize

# Observation A has the following measurements:
A = np.array([0, 4.1, 5.6, 8.9, 4.3])
# How similar is A to ideal groups identified by the following:
group1 = np.array([1, 3, 5, 10, 3])
group2 = np.array([6, 3, 2, 1, 10])
group3 = np.array([3, 3, 4, 2, 1])

# Define the objective function
# x is the array containing your wanted coefficients
def obj_fun(x, A, g1, g2, g3):
    y = x[0] * g1 + x[1] * g2 + x[2] * g3
    return np.sum((y-A)**2)

# Bounds for the coefficients
bnds = [(0, 1), (0, 1), (0, 1)]
# Constraint: x[0] + x[1] + x[2] - 1 = 0
cons = [{"type": "eq", "fun": lambda x: x[0] + x[1] + x[2] - 1}] # This is where I need the change.

# Initial guess
xinit = np.array([1, 1, 1])
res = minimize(fun=obj_fun, args=(A, group1, group2, group3), x0=xinit, bounds=bnds, constraints=cons)
print(res.x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...