You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linopy优化模型中访问已创建的变量实例?

Linopy模型中访问变量实例的问题与解决方案

背景

我正在为能源管理系统的实时控制器搭建Linopy模型。由于不同家庭的组件配置不同,每次运行实时控制(rtc)时的优化问题存在差异,因此需要动态创建变量与约束,首要任务是构建平衡约束。目前变量创建已完成,但添加约束时无法正确访问模型中的变量——使用model.variables仅能获取变量名称字符串,而非变量实例,导致编写约束时报错。

问题

如何从Linopy模型中访问变量实例(例如通过类似model.get_variable(name='demand')的方式)?

错误示例

以下是复现问题的极简代码:

from linopy import Model

# 优化组件(简化为家庭用电需求和光伏发电量)
demand = 300  # 单位:W(需要满足的家庭用电需求)
pv = 200      # 单位:W(光伏最大发电量)
grid = 1000   # 单位:W(电网最大供电量)

# 初始化模型
model = Model()

# 创建变量
model.add_variables(name='demand', lower=demand, upper=demand, integer=True)
model.add_variables(name='pv', lower=0, upper=pv, integer=True)
model.add_variables(name='grid', lower=0, upper=grid, integer=True)

# 动态创建平衡约束
balance = 0
for variable in model.variables:
    if variable == 'demand':
        balance -= variable
    elif variable in ['pv', 'grid']:
        balance += variable
    else:
        raise ValueError(f'变量 \"{variable}\" 不支持')

model.add_constraints(balance == 0, name='balance')

print(model)

运行代码后会触发类型错误,字符串无法与整数进行运算:

Traceback (most recent call last):
  File "example.py", line 20, in <module>
    balance -= variable
TypeError: unsupported operand type(s) for -=: 'int' and 'str'

解决方案

感谢@Kapocsi提供的解决方案:

from linopy import Model

# 优化组件(简化为家庭用电需求和光伏发电量)
demand = 300  # 单位:W(需要满足的家庭用电需求)
pv = 200      # 单位:W(光伏最大发电量)
grid = 1000   # 单位:W(电网最大供电量)

# 初始化模型
model = Model()

# 创建变量
model.add_variables(name='demand', lower=demand, upper=demand, integer=True)
model.add_variables(name='pv', lower=0, upper=pv, integer=True)
model.add_variables(name='grid', lower=0, upper=grid, integer=True)

# 动态创建平衡约束
balance = model.add_variables(name='balance', lower=0, upper=0, integer=True)
for variable_name, variable in model.variables.items():
    if variable_name == 'demand':
        balance -= variable
    elif variable_name in ['pv', 'grid']:
        balance += variable
    else:
        pass

model.add_constraints(balance == 0, name='balance')

print(model.constraints['balance'])

运行后输出:

Constraint `balance`
--------------------
+1 balance - 1 demand + 1 pv + 1 grid = 0

内容的提问来源于stack exchange,提问作者M0leiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:47:20