代码错误显示:ERROR: Constructing component 'gen_cost' from data={'g1': 20, 'g2': 17.5,
'g3': 10, 'g4': 32.5, 'g5': 30, 'g6': 30, 'g7': 10} failed:
RuntimeError: Failed to set value for param=gen_cost, index=g1,
value=20.
source error message="Index 'g1' is not valid for indexed component
'gen_cost'"
from pyomo.environ import *
from pyomo.opt import SolverFactory
import pandas as pd
import numpy as np
import cplex
DModel = AbstractModel()
#多维索引
DModel.gen = set()
DModel.rgen = set()
DModel.t = set()
#参数设定param 成本系数1,机组容量1,符合需求1,爬坡1,启停机1
DModel.gen_cost = Param(DModel.gen)
DModel.rgen_cost = Param(DModel.rgen)
DModel.Cap = Param(DModel.gen)
DModel.min = Param(DModel.gen)
DModel.RCap = Param(DModel.rgen,DModel.t)#?????????????
DModel.Demand = Param(DModel.t, within=PositiveReals)
DModel.gen_up = Param(DModel.gen)
DModel.rgen_up = Param(DModel.rgen)
DModel.down = Param(DModel.gen)
#决策变量var
DModel.EG = Var(DModel.gen, DModel.t, domain=NonNegativeReals)
DModel.REG = Var(DModel.rgen, DModel.t, domain=NonNegativeReals)
#目标函数
def obj_expression(DModel):
return sum(sum(DModel.gen_cost[g]*DModel.EG[g,t] for g in DModel.gen) for t in DModel.t) + \
sum(sum(DModel.rgen_cost[rg]*DModel.REG[rg,t] for rg in DModel.rgen) for t in DModel.t)
DModel.sysCost = Objective(rule=obj_expression, sense=minimize)
#约束条件
## 1 供求
def limit_1(DModel, t):
return sum(DModel.EG[g,t] for g in DModel.gen) + \
sum(DModel.REG[rg,t] for rg in DModel.rgen) == DModel.Demand[t]
DModel.limit_1 = Constraint(DModel.t, rule=limit_1)
#2常规机组出力
def limit_2(DModel, gen, t):
return (DModel.min[gen], DModel.EG[gen,t], DModel.Cap[gen])
DModel.limit_2 = Constraint(DModel.gen, DModel.t, rule=limit_2)
#3风电出力
def limit_3(DModel, rgen, t):
return (0, DModel.REG[rgen, t], DModel.RCap[rgen,t])
DModel.limit_3 = Constraint(DModel.rgen, DModel.t, rule=limit_3)
#指定求解器
opt = SolverFactory('cplex_direct')#注意
#数据读取
data = DataPortal()
data.load(filename='load.csv', format='set', set='t', model=DModel)
data.load(filename='load.csv', index='t', param='Demand', model=DModel)
data.load(filename='generation.csv', format='set', set='gen', model=DModel)
data.load(filename='generation.csv',index='gen', param=['Cap','min','gen_cost','gen_up','down'], model=DModel)
data.load(filename='Rgeneration.csv', format='set', set='rgen', model=DModel)
data.load(filename='Rgeneration.csv', index='rgen',param=['RCap','rgen_cost','rgen_up'], model=DModel)
CF_dict = pd.read_csv('reneable_load.csv', index_col='t').unstack(0).to_dict()
#创建实例
instance = DModel.create_instance(data)
print(instance)
#求解
results = opt.solve(instance,symbolic_solver_labels=True,tee=True)
```python
```
这个错误信息表示在构建组件(gen_cost)时,尝试将值20分配给索引(g1)的参数(gen_cost),但是该索引不存在于(gen_cost)的参数集合中。通常情况下,参数可能由用户手动提供或是使用随机过程生成。
这个错误可能是由于以下原因导致的:
参数设置不正确,包括(gen_cost)的参数集合未正确指定、参数类型或值不正确等。
模型的数据结构或参数配置存在问题,导致无法正确解析输入数据。
为了解决这个问题,可以采取以下步骤:
检查参数设置是否正确,包括(gen_cost)的参数集合、参数类型或值等。
检查模型的数据结构或参数配置是否正确,包括参数的数量、类型和值等。
尝试使用不同的索引或参数集合,以确保可以正确构建组件(gen_cost)。
如果问题仍然存在,可能需要调整模型的结构或参数配置,或者尝试使用其他的数据结构或参数配置。