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

2024-06-02 15:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

^{tb1}$

我希望CVXPY告诉我每个时间步的能量使用情况。 然而,该设施对灯泡的接收功率有限制。特别是,一些灯泡连接到同一个插座,该插座不能向所有连接到它的灯泡组合输出超过一定量的功率

因此,我想对数组的不同列组合施加约束。例如,如果列1是Lightbull 1,列2是Lightbull 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]

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


Tags: 时间column矩阵数组功率at插座能量