实现具有跨时间依赖性的存储模型优化

时间:2017-09-09 02:43:32

标签: python linear-programming pulp

尝试将一个简单的线性优化问题放在一起,该问题具有跨时间的依赖关系。这是一种存储模式,其中有流入存储,它需要释放水以最大化水*价格收入流 - 存储水平将延续到下一个时期。每个期间有最大存储级别和最大释放量。

我不知道如何在PULP中实现约束和设置存储参数。请参阅下面的尝试:

编辑:如何实施这两个限制:
1.存储[t + 1] ==存储[t] +流入[t] - 释放[t] +溢出[t]
2.存储[T] ==存储[0](以便结束存储=启动存储)
3.存储<所有t的最大存储级别

也不确定我是否需要真正'溢出'作为变量,因为可以从约束(1)推断出来。

startstorage = 30
maxstorage = 35
maxrelease = 15

data = pd.DataFrame(data={'inflow':[5,3,13,62,11,1,5,9,7,8],
                          'PRICES':[1,2,3,1,3,5,3,4,2,6]})

#do I need to initialise storage and set an upper bound on storage?
#storage = [0] * len(data)
#storage[0] = startstorage

prob = pulp.LpProblem("My LP Problem", pulp.LpMaximize)
release = pulp.LpVariable.dicts('release',data.index, lowBound=0, upBound = maxrelease, cat='Continuous')
spill = pulp.LpVariable.dicts('spill',data.index, lowBound=0, cat='Continuous')
prob += sum([release[t] * data['PRICES'][t] for t in data.index])
# constraint (1)
prob += [storage[t+1] == storage[t] + data['inflow'][t] - release[t] + spill[t] for t in data.index[:-1]]
# constraint (2)
prob += storage[-1:] == storage[0] 

prob.solve()

希望这有意义,并提前感谢!

1 个答案:

答案 0 :(得分:0)

通过阅读更多示例后,我意识到了几个新手错误。在这里,它实现了我追求的目标。

startstorage = 30
maxstorage = 35
maxrelease = 15

data = pd.DataFrame(data={'inflow':[5,3,13,62,11,1,5,9,7,8],'PRICES':[1,2,3,1,3,5,3,4,2,6]})

prob = pulp.LpProblem("My LP Problem", pulp.LpMaximize)
storage = pulp.LpVariable.dicts('storage',data.index, lowBound=0, upBound = maxstorage, cat='Continuous')
release = pulp.LpVariable.dicts('release',data.index, lowBound=0, upBound = maxrelease, cat='Continuous')
spill = pulp.LpVariable.dicts('spill',data.index, lowBound=0, cat='Continuous')
prob += lpSum([release[t] * data['PRICES'][t] for t in data.index])
for t in data.index[:-1]:
    prob += storage[t] + data['inflow'][t] - release[t] - spill[t] == storage[t+1]
prob += storage[0] == startstorage
prob += storage[9] == startstorage
prob.solve()