我想尝试对算法使用持久性求解器,该算法会反复为问题添加新的约束,并且希望避免在每次迭代之前完全重建提供给求解器的文件。
在按照https://pyomo.readthedocs.io/en/stable/solvers/persistent_solvers.html中所述使用持久性求解器之前,我使用了ConstraintList
对象来迭代地添加新约束,而不必分别命名它们。我认为这是一个非常优雅的解决方案,我想看看是否有一种方法可以在向ConstraintList
添加新约束时通知持久性求解器。
在文档中写道
m.c2 = pe.Constraint(expr=m.y >= m.x)
opt.add_constraint(m.c2)
其中m.c2
是要使用持久性求解器添加到模型的约束。一旦在其中添加了约束,通知持久性求解器ConstraintList
发生更改的等效行是什么?
答案 0 :(得分:0)
这是您创建约束列表的方式
const fieldDefinition = {
name: 'nestedColumn',
type: 'RECORD',
mode: 'REPEATED',
fields: [
{name: 'id', type: 'INTEGER', mode: 'NULLABLE'},
{name: 'amount', type: 'INTEGER', mode: 'NULLABLE'},
],
};
const table = bigQuery.dataset('dataset1').table('source_table_name');
const metaDataResult = await table.getMetadata();
const metaData = metaDataResult[0];
const fields = metaData.schema.fields;
fields.push(fieldDefinition);
await table.setMetadata({schema: {fields}});
然后您可以在约束列表中添加约束:
m.Cut_Defn = pyomo.ConstraintList(noruleinit=True)
如果您在m.Cut_Defn.add(some_number >= your_variable + some_other_number)
之前求解,那么除了在.add()
之后求解之外,还会找到其他解决方案。因此,您可以这样认为:它要动态实现新的约束,如果要在优化中考虑这些约束,则必须解析模型。