using JuMP
using HiGHS
定义UnitCommitmentData结构
struct UnitCommitmentData
demand::Float64
pmin::Vector{Float64}
pmax::Vector{Float64}
cfix::Vector{Float64}
cvar::Vector{Float64}
end
构建Unit Commitment模型
function build_uc_model(data::Union{String, UnitCommitmentData})
# 如果数据是文件路径,加载数据
if typeof(data) == String
# 这里假设读取数据的逻辑
# data = read_pkl_gz(data)
end
# 创建优化模型
model = Model(HiGHS.Optimizer)
# 获取数据大小
n = length(data.pmin)
# 定义决策变量
@variable(model, x[1:n], Bin) # 二元决策变量
@variable(model, y[1:n] >= 0) # 非负连续决策变量
# 定义目标函数
@objective(
model,
Min,
sum(data.cfix[i] * x[i] + data.cvar[i] * y[i] for i in 1:n)
)
# 定义约束条件
for i in 1:n
@constraint(model, y[i] <= data.pmax[i] * x[i]) # 最大功率约束
@constraint(model, y[i] >= data.pmin[i] * x[i]) # 最小功率约束
end
# 定义需求约束
@constraint(model, sum(y) == data.demand)
return model
end
创建并优化模型
data = UnitCommitmentData(
demand = 100.0,
pmin = [10, 20, 30],
pmax = [50, 60, 70],
cfix = [700, 600, 500],
cvar = [1.5, 2.0, 2.5]
)
model = build_uc_model(data)
optimize!(model)
输出优化结果
println("Objective value = ", objective_value(model))
println("x = ", value.(model[:x]))
println("y = ", value.(model[:y]))
ERROR: MethodError: no method matching UnitCommitmentData(; demand::Float64, pmin::Vector{…}, pmax::Vector{…}, cfix::Vector
{…}, cvar::Vector{…})
The type UnitCommitmentData
exists, but no method is defined for this combination of argument types when trying to construc
t it.
Closest candidates are:
UnitCommitmentData(::Float64, ::Vector{Float64}, ::Vector{Float64}, ::Vector{Float64}, ::Vector{Float64}) got unsupported k
eyword arguments “demand”, “pmin”, “pmax”, “cfix”, “cvar”
@ Main g:\UnitCommitment.jl-dev\test_miplearn2.jl:6
UnitCommitmentData(::Any, ::Any, ::Any, ::Any, ::Any) got unsupported keyword arguments “demand”, “pmin”, “pmax”, “cfix”, "
cvar"
@ Main g:\checkin - Copy - Copy - Copy\00-国重5.3\0_MY_STUDY\7.STUDY_优化方法类\1-vscode-julia-UnitCommitment.jl-dev\UnitC
ommitment.jl-dev\test_miplearn2.jl:6
Stacktrace:
[1] top-level scope
@ g:\UnitCommitment.jl-dev\test_miplearn2.jl:51
Some type information was truncated. Use show(err)
to see complete types.