Я пытаюсь выполнить оптимизацию, которая берет список фиксированных ставок почасовой оплаты, c, и корректирует вывод x между значениями 0-100. Переменная y используется для расчета общей стоимости, которая представляет собой простую линейную зависимость от x. Тем не менее, минимальное количество побочного продукта, z, должно быть произведено, что связано с y.
Другими словами, я хочу выяснить, сколько я должен выводить каждый час (x), чтобы минимизировать мои затраты (c* y) при сохранении минимального значения z> 2500. Моя проблема в том, что я не думаю, что мои ограничения работают. Вот мой код:
import numpy as np
from scipy.optimize import minimize
c = np.array([31.05,31.38,31.28,30.86,30.76,30.92,30.62,33.98,57.97,44.08,36.49,36.68,37.47,37.44,36.63,35.74,36.77,37.32,41.49,37.38,37.39,37.58,35.76,31.90])
x0 = np.array([90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90])
z = 0.0315796 * y + 59.27303146
cons = [{'type': 'ineq', 'fun': lambda z: z.sum()-2500}]
def costs(x0, c):
y = 46.23676376 * x0 -2603.33698013
z = 0.0315796 * y + 59.27303146
return c.dot(y)
bounds = [(0,100) for x in x0]
res = minimize(
costs,
x0,
args=(c),
constraints=cons,
bounds=bounds,
)
print(res)
Я получаю сообщение об ошибке «Несовместимые ограничения неравенства». Как правильно ограничить мою переменную z?