Я учусь использовать целлюлозу, и я не уверен, возможно ли сделать модель, которая у меня есть.
Цель состоит в том, чтобы минимизировать выражение x + y
Однако, чтобы получить x или y, мне нужно сделать еще несколько операций. Например, чтобы получить x, мне нужно сделать операции с вектором T
x = Σ | (Tj-Tmean) | где Tmean - среднее значение вектора Tj . j - индекс.
Чтобы получить Ти, мне нужен еще один суматум.
Tj = Σsi * Wij , где s - постоянный вектор. W - переменная матрица, которая будет заполнена 0 или 1 .
Вектор T имеет условие, которое составляет Tj , где k - константа.
* ** 1055 тысяча пятьдесят-четыре ** 1 056 * Tmean = ΣTj / N * +1058 *
y аналогично x , но другим переменным.
Пока у меня было это:
prob = pulp.LpProblem( "Miminize result", pulp.LpMinimize )
W=pulp.LpVariable.dicts( "W", indexs=(n,n),lowBound=0, upBound=1, cat='Integer') ##I'm guessing it needs to start as a variable
T=pulp.LpVariable.dicts("T",range(n),0,k,cat='Integer')
Tprom=pulp.LpVariable("Tprom")
prob += x+y
for j in range (n):
prob += T[j]==pulp.lpSum( [ s[i]*W[i][j] for i in range(n) ] )
prob += Tprom==pulp.lpSum(G)/n
prob += x==pulp.lpSum( [ abs(T[i]-Tprom) for i in range(n) ])
Я понимаю, что необходимо добавить ограничения в prob после цели, я не уверен, возможно ли добавить остальные операции, и если то, что я написал, в порядке.
Запуск выдает ошибку в строке с abs:
prob + = x == pulp.lpSum ([abs (T [i] -Tprom) для i в диапазоне (n)])
Ошибка типа: неверный тип операнда для abs (): 'LpAffineExpression'.
Я не уверен, как обойти это.