Pyomo调用一组的值

时间:2017-12-20 15:21:33

标签: python indexing pyomo

让我们考虑以下一组:

m.sub_sit = pyomo.Set(
    initialize=[site],
    doc='site of sub problem')

在这种情况下m.sub_sitcreate_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'}

2 个答案:

答案 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]