我有一个目标函数如下所示。我可以打印出完整的目标值没有问题。但现在我想把它分解,找到基本部分的解和。你知道吗
我试着将每一个片段设置为一个变量,但我得到的只是一个非常长的数组片段列表,而不是一个单一的目标值。你知道吗
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]
我想做的是从优化中得到这些片段作为解决方案的单个值:
是的
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]
硕士
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]
你必须对变量的值求和。您可以使用
var.varValue
获取值,其中var是一个变量。例子。你知道吗
相关问题 更多 >
编程相关推荐