让我们考虑以下一组:
m.sub_sit = pyomo.Set(
initialize=[site],
doc='site of sub problem')
在这种情况下m.sub_sit
由create_model()
函数创建,参数为'Mid'
:
inst = create_model(site='Mid')
通过致电inst.sub_sit.pprint()
得到的结果:
在:
inst.sub_sit.pprint()
输出:
sub_sit : site of sub problem
Dim=0, Dimen=1, Size=1, Domain=None, Ordered=False, Bounds=None
['Mid']
我真正想要输出的是'Mid'
,以便我可以使用'Mid'
索引其他对象,然后我可以在我的代码中使用它。
e.g:
In1:PiZero
In2:PiZero[inst.sub_sit[1]]
In3:PiZero['Mid']
Out1:
sub_sit
Mid -1.0
Name: sub_costs, dtype: float64
Out2:-1.0
Out3:-1.0
问题:无论如何从'Mid'
pyomo设置对象调用此m.sub_sit
字符串,比我的建议更好吗?
btw m.sub_sit.value
提供输出,几乎是我所需要的:{'Mid'}
答案 0 :(得分:1)
你永远不必使用方括号索引到Pyomo Set。如果您发现自己想要这样做,那么您可能想重新考虑使用Pyomo Set而不是本机Python列表的动机。
如果您的目标是遍历Pyomo Set中的值并使用它们索引到Pandas对象,那么您可以执行以下操作:
for s in m.sub_sit:
v = PiZero[s]
# Do something with v
或者,您可以将Pyomo Set转换为列表并改为使用列表:
s = list(m.sub_sit)
但是,如果你要这样做,你真的需要Pyomo套装吗?
如果您想要更多使用Pandas和Pyomo的示例,请查看this github repo以获取传感器放置包。特别是,您可以看到使用Pandas DataFrame中的值创建Pyomo集的示例,以及如何编写使用DataFrame中的数据的约束。
答案 1 :(得分:0)
首先#include vector
bool gaussianElimination_binary(std::vector<std::vector<int>> &A) {
std::vector<std::vector<int>> B = A;
std::size_t max_col = B[0].size() - 1; //cols
std::size_t max_row = B.size() -1 ; //rows
std::size_t col_pivot = 0;
//perform "gaussian" elimination
for (std::size_t row = 0; row <= max_row; ++row) //for every column
{
if (col_pivot > max_col)
break;
// Search for first row having "1" in column "lead"
std::size_t i = row; //Start searching from row "i"=row
while (B[i][col_pivot] == 0)
{
++i;
if (i > max_row) // no "1" was found across rows
{
i = row; // set "i" back to "row"
++col_pivot; // move to next column
if (col_pivot > max_col) //if no more columns
break;
}
}
// swap "i" and "row" rows
if ((0 <= i) && (i <= max_row) && (0 <= row) && (row <= max_row)) {
for (std::size_t col = 0; col <= max_col; ++col) {
std::swap(B[i][col], B[row][col]);
}
}
// perform XOR in "k-th" row against "row-th" row
for (int k = 0; k <= max_row; ++k) //k=col_pivot?
{
if ( (k != row) )
{
int check_zero_row = 0;
for (std::size_t j = 0; j <= max_col; j++) {
B[k][j] = B[k][j] ^ B[row][j];
check_zero_row = check_zero_row | B[k][j];
}
if (check_zero_row == 0 )
{
return false;
}
}
}
}
return true;
}
添加到ordered=True
。然后m.sub_sit
可与'Mid'
打电话。它应该是有序的,否则会产生错误,你无法调用无序集的第一个对象。
inst.sub_sit[1]
在:
m.sub_sit = pyomo.Set(
initialize=[site],
ordered=True,
doc='site of sub problem')
输出:
inst.sub_sit[1]