如何在GAMSPy中向已创建的Set对象添加元素?
如何在GAMSPy中向已创建的Set对象添加元素?
我之前刚碰到过一模一样的问题,确实GAMSPy的Set对象并没有提供add_record这个方法,不过有两种简单靠谱的方式可以给已创建的集合添加新元素:
方法一:直接操作records属性
GAMSPy的Set对象的records属性本身就是一个可修改的列表,你可以直接用列表的append()(添加单个元素)或extend()(批量添加多个元素)方法来更新集合成员:
# 你的初始创建代码 from gamspy import Container, Set m = Container() regions = Set(m, name="regions", records=["east", "west", "north", "south"]) # 给集合添加单个新元素 regions.records.append("central") # 如果要一次性添加多个元素,用extend方法 regions.records.extend(["central", "northeast"])
修改完records之后,这个集合在GAMS容器中的定义会自动同步,后续使用这个集合时就会包含新加入的元素了。如果担心添加重复元素,可以先做个判断再添加:
new_region = "central" if new_region not in regions.records: regions.records.append(new_region)
方法二:重新赋值records(适合批量更新场景)
如果你有一批新元素需要加入,也可以把原集合元素和新元素合并后,直接重新赋值给records属性:
new_regions = ["central", "northeast"] regions.records = regions.records + new_regions
这种方式和extend()效果类似,区别在于它会创建一个新的列表对象,而extend()是在原列表基础上修改,日常使用中性能差异不大,看你个人习惯选择就行。
确实GAMSPy官方文档里这部分的示例比较少,不过操作records属性是官方支持的修改集合元素的标准方式,放心用就行。
内容来源于stack exchange
相关产品推荐
相关产品推荐

