Docplex添加多时间序列首尾相等约束时出现KeyError: (-1, 0)求助
解决Docplex多时间序列首尾值相等约束的KeyError问题
错误原因
你遇到的KeyError: (-1, 0)是因为var_1是通过continuous_var_dict创建的字典,它的键是(i,j)元组,其中i来自你定义的timesteps列表。负索引-1并不是timesteps中的元素,因此字典中不存在(-1, j)这样的键,自然无法访问。
而单个时间序列时你用var_1[-1]能生效,是因为当时的var_1是支持负索引的序列结构(比如列表),和字典的键访问逻辑完全不同。
解决方案
- 先获取
timesteps中的最后一个时间步(即实际的最终时刻索引):
last_timestep = timesteps[-1]
- 用这个实际的时间步索引替换代码中的
-1,修改约束添加逻辑:
var_1 = m.continuous_var_dict([(i, j) for i in timesteps for j in timeseries], name='var_1') last_timestep = timesteps[-1] m.add_constraints(var_1[last_timestep, j] == var_1[0, j] for j in timeseries)
验证建议
- 可以先打印
timesteps确认其中的元素,确保last_timestep是列表中的最后一个有效值; - 也可以通过
print(var_1.keys())查看字典的所有键,确认(last_timestep, j)确实存在于键集合中。
内容的提问来源于stack exchange,提问作者Trev
相关产品推荐
相关产品推荐

