Scipy Оптимизация с ограничениямиPython

Программы на Python
Anonymous
Scipy Оптимизация с ограничениями

Сообщение Anonymous »

Я пытаюсь найти значения для моего x, где сумма столбцов моей data_matrix соответствует intial_sums.
Однако результаты таковы:

Код: Выделить всё

 Variable 0: 1.0 Variable 1: 1.0 Final sums: [0. 4. 0. 2. 0.] Initial sums (should match final sums): [0 2 0 1 0]
Где итоговые суммы вообще неверны.

Код: Выделить всё

import numpy as np
from scipy.optimize import minimize
Пример данных для оптимизации:

Код: Выделить всё

data_matrix = np.array([
[-1114.75839, 0.0, 2.0, 0.0, 1.0, 0.0],
[+325.115366, 0.0, 2.0, 0.0, 1.0, 0.0]
])
Первоначальные суммы для ограничений:

Код: Выделить всё

initial_sum = np.array([0, 2, 0, 1, 0])

Код: Выделить всё

def objective(x):
return np.dot(data_matrix[:, 0], x)

def constraint_1(x):
return np.dot(data_matrix[:, 2], x) - initial_sum[1]

def constraint_2(x):
return np.dot(data_matrix[:, 4], x) - initial_sum[3]

cons = [
{'type': 'eq', 'fun': constraint_1},
{'type': 'eq', 'fun': constraint_2}
]

bounds = [(0, None) for _ in range(len(data_matrix))]
Запуск оптимизации:

Код: Выделить всё

result = minimize(objective, np.ones(len(data_matrix)), method='SLSQP', bounds=bounds, constraints=cons, tol=1e-6)

optimized_x = np.where(np.abs(result.x) < 1e-5, 0, result.x)
optimized_values = optimized_x.tolist()
Результаты вывода

Код: Выделить всё

for i in range(len(optimized_values)):
print(f'Variable {i}: {optimized_values[i]}')

final_sums = np.dot(data_matrix[:, 1:6].T, optimized_x)
print(f'Final sums: {final_sums}')
print(f'Initial sums (should match final sums): {initial_sum}')`
Я пробовал с ограничениями и без них, а также пытался играть с ограничениями.

Подробнее здесь: https://stackoverflow.com/questions/786 ... onstraints

Вернуться в «Python»