Python Pulp - Получить субъективные значения - PullRequest
0 голосов
/ 13 июня 2019

У меня есть целевая функция, показанная ниже.Я могу напечатать полное объективное значение без проблем.Но теперь я хочу разбить его и найти суммы решений для базовых частей.

Я попытался установить каждый кусок равным переменной, но я просто получил невероятно длинный список частей массива, а не одинобъективное значение.

DAPRICE = [[sheet10.cell_value(r, c) for c in range(sheet10.ncols)] for r in range(sheet10.nrows)]

YPER = 365
HE = 24
yearlyhours = [(i,j) for i in range(YPER) for j in range(HE)]

YAHL = pulp.LpVariable.dicts('YAHL', yearlyhours, lowBound=0, cat='Continuous')
YALL = pulp.LpVariable.dicts('YALL', yearlyhours, lowBound=0, cat='Continuous')


model += (pulp.lpSum(
        [YAPR[i][j] * YAHL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 7 and j <= 22]
      + [YAPR[i][j] * YALL[(i,j)] for i in range(YPER) for j in range(HE) if j <= 6]
      + [YAPR[i][j] * YALL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 23]
      + [MAPR[i][j] * MAHL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 7 and j <= 22]
      + [MAPR[i][j] * MALL[(i,j)] for i in range(YPER) for j in range(HE) if j <= 6]
      + [MAPR[i][j] * MALL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 23]
      + [DAPRICE[i][j] * DAHL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 7 and j <= 22]
      + [DAPRICE[i][j] * DALL[(i,j)] for i in range(YPER) for j in range(HE) if j <= 6]
      + [DAPRICE[i][j] * DALL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 23]
      ))

model.solve()
pulp.LpStatus[model.status]

То, что я хочу сделать, это получить эти кусочки как одно значение решения из оптимизации:

YA

YACOST = [YAPR[i][j] * YAHL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 7 and j <= 22] + [YAPR[i][j] * YALL[(i,j)] for i in range(YPER) for j in range(HE) if j <= 6] + [YAPR[i][j] * YALL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 23]

MA

MACOST = [MAPR[i][j] * MAHL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 7 and j <= 22] + [MAPR[i][j] * MALL[(i,j)] for i in range(YPER) for j in range(HE) if j <= 6] + [MAPR[i][j] * MALL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 23]

DA

DACOST = [DAPRICE[i][j] * DAHL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 7 and j <= 22] + [DAPRICE[i][j] * DALL[(i,j)] for i in range(YPER) for j in range(HE) if j <= 6] + [DAPRICE[i][j] * DALL[(i,j)] for i in range(YPER) for j in range(HE) if j >= 23]

Нет сообщений об ошибках, просто невозможно получить общую сумму вместо вывода массива.

Вывод, который я получаю, намного длиннее, чем этот, ноВы поняли:

45.18*DALL_(291,_23) + 0.0, 41.74*DALL_(292,_23) + 0.0, 42.24*DALL_(293,_23) + 0.0, 40.94*DALL_(294,_23) + 0.0, 42.02*DALL_(295,_23) + 0.0, 41.75*DALL_(296,_23) + 0.0, 43.76*DALL_(297,_23) + 0.0, 45.23*DALL_(298,_23) + 0.0, 39.99*DALL_(299,_23) + 0.0, 36.96*DALL_(300,_23) + 0.0, 38.75*DALL_(301,_23) + 0.0, 42.27*DALL_(302,_23) + 0.0, 43.37*DALL_(303,_23) + 0.0, 40.82*DALL_(304,_23) + 0.0, 34.77*DALL_(305,_23) + 0.0, 35.27*DALL_(306,_23) + 0.0, 31.97*DALL_(307,_23) + 0.0, 33.56*DALL_(308,_23) + 0.0, 38.12*DALL_(309,_23) + 0.0, 37.73*DALL_(310,_23) + 0.0, 37.73*DALL_(311,_23) + 0.0, 45.36*DALL_(312,_23) + 0.0, 39.9*DALL_(313,_23) + 0.0, 39.73*DALL_(314,_23) + 0.0, 43.45*DALL_(315,_23) + 0.0, 52.38*DALL_(316,_23) + 0.0, 54.05*DALL_(317,_23) + 0.0, 55.6*DALL_(318,_23) + 0.0, 59.42*DALL_(319,_23) + 0.0, 57.44*DALL_(320,_23) + 0.0, 54.36*DALL_(321,_23) + 0.0, 60.5*DALL_(322,_23) + 0.0, 64.21*DALL_(323,_23) + 0.0, 63.95*DALL_(324,_23) + 0.0, 51.25*DALL_(325,_23) + 0.0, 50.43*DALL_(326,_23) + 0.0, 56.16*DALL_(327,_23) + 0.0, 59.48*DALL_(328,_23) + 0.0, 62.82*DALL_(329,_23) + 0.0, 53.97*DALL_(330,_23) + 0.0, 53.56*DALL_(331,_23) + 0.0, 57.48*DALL_(332,_23) + 0.0, 58.08*DALL_(333,_23) + 0.0, 67.63*DALL_(334,_23) + 0.0, 85.21*DALL_(335,_23) + 0.0, 89.24*DALL_(336,_23) + 0.0, 77.31*DALL_(337,_23) + 0.0, 69.86*DALL_(338,_23) + 0.0, 65.06*DALL_(339,_23) + 0.0, 66.97*DALL_(340,_23) + 0.0, 57.82*DALL_(341,_23) + 0.0, 54.08*DALL_(342,_23) + 0.0, 51.38*DALL_(343,_23) + 0.0, 52.25*DALL_(344,_23) + 0.0, 49.55*DALL_(345,_23) + 0.0, 48.53*DALL_(346,_23) + 0.0, 45.45*DALL_(347,_23) + 0.0, 43.54*DALL_(348,_23) + 0.0, 41.31*DALL_(349,_23) + 0.0, 39.43*DALL_(350,_23) + 0.0, 40.91*DALL_(351,_23) + 0.0, 42.55*DALL_(352,_23) + 0.0, 39.97*DALL_(353,_23) + 0.0, 40.92*DALL_(354,_23) + 0.0, 39.27*DALL_(355,_23) + 0.0, 37.3*DALL_(356,_23) + 0.0, 37.46*DALL_(357,_23) + 0.0, 38.84*DALL_(358,_23) + 0.0, 37.85*DALL_(359,_23) + 0.0, 43.65*DALL_(360,_23) + 0.0, 44.12*DALL_(361,_23) + 0.0, 42.13*DALL_(362,_23) + 0.0, 38.51*DALL_(363,_23) + 0.0, 42.06*DALL_(364,_23) + 0.0]

1 Ответ

1 голос
/ 13 июня 2019

Вы должны суммировать значения переменных. Вы можете получить значение, используя var.varValue, где var - переменная.
Пример.

MACOST = sum([MAPR[i][j] * MAHL[(i,j)].varValue for i in range(YPER) for j in range(HE) if j >= 7 and j <= 22] ) + ...
...