У меня есть проблема, когда мне нужно оптимизировать распределение некоторых продуктов. У каждого продукта есть вес (в основном, насколько клиенту это нравится) и категория (некоторые клиенты не принимают каждый продукт)
мои данные выглядят примерно так
prod_name, category, weight
name1, c1, 10
name2, c1, 5
name3, c1, 1
name4, c2, 8
name5, c2, 7
name6, c2, 6
и у меня есть другая таблица, в которой говорится, что у нас есть долги в разных категориях (те же категории, что и в приведенной выше таблице)
category, debt
c1, 100
c2, 500
Я хочу максимизировать вес X * (который в этом случае был бы точечным произведением двух шестимерных векторов) при ограничении, x1 + x2 + x3 = 100
(альтернативно, думайте об этом как о переменных, соответствующих категории 1 необходимо добавить в долг в первой категории) и x4 + x5 + x6 = 500
на самом деле у меня около 800 категорий, поэтому я хочу сделать это программно, но я не знаю, как начать строить эту проблему.
Цель достаточно проста
Xxx = cvx.Variable(len(R))
objective = cvx.Maximize(cvx.sum_entries(Xxx.T*R))
Где R - просто столбец 'weight' в виде массива numy
Но я не могу понять, как построить ограничения. Кроме того, я хочу отслеживать имена (то есть, как только я получу решение, мне нужно сопоставить все элементы массива решений с именами в столбце prod_name)
Разрешает ли cvxpy что-либо из перечисленного или мне нужно взглянуть на другие пакеты?