微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在cvxpy中动态地对数组的子集施加约束?

如何解决如何在cvxpy中动态地对数组的子集施加约束?

我有一个决策变量,其中包含能源设施的用电量矩阵。矩阵中的每一列对应不同的能量消耗(例如灯泡或加热),每一行是时间步长 t 的能量使用。

时间步 灯泡 1 电源 LightBub 2 电源 灯泡 3 电源
1 30 千瓦 50 千瓦 100 千瓦
2 40 千瓦 40 千瓦 80 千瓦

我希望 CVXPY 告诉我每个时间步的能量使用情况。 但是,该设施对灯泡可以接收的内容有功率限制。特别是部分灯泡连在同一个插座上,不能输出超过一定量的功率给与其相连的所有灯泡组合起来。

因此,我想对数组的列的不同组合施加约束。例如,如果第 1 列是灯泡 1,第 2 列是灯泡 2,我想遍历数组并放置如下约束:

[Column Lightbulb 1 Power at time step T] + [Column Lightbulb 2 Power at time step T] <= [Limit]

然而,子集的数量是动态的,因为不同的设施具有不同的灯泡方向。例如,一个设施可能将 3 个灯泡插入一个插座,而另一个设施可能将 7 个灯泡插入一个插座,我想限制这些子组的总能源使用量。

因此,我使用了这个:

cvx.sum(cvx.vstack(k for k in [lightbulbs])) <= [Limit]

然而,当我以上面的代码片段的方式实现这一点时(其中 [lightbulbs] 是连接到同一插座的灯泡的一个单独子集),CVXPY 不遵守约束,即使它接受它,即灯泡在一个时间步长的总功率超过了我想对它们施加的限制。我做错了什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。