Установка ограничений после операций - PullRequest
0 голосов
/ 02 сентября 2018

Я учусь использовать целлюлозу, и я не уверен, возможно ли сделать модель, которая у меня есть.

Цель состоит в том, чтобы минимизировать выражение 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'. Я не уверен, как обойти это.

...