我有一个目标函数,如下所示。我能够毫无问题地打印出完整的目标价值。但是现在我想将其分解,并找到基础部分的解决方案总和。
我试图将每个片段设置为一个变量,但我只是得到了一个非常长的数组片段列表,而不是单个目标值。
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]
答案 0 :(得分:1)
您必须对变量的值求和。您可以使用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] ) + ...