如何在Julia JuMP中获取所有约束(含循环约束)的影子价格?
获取JuMP模型中约束的影子价格
要获取并打印所有约束的影子价格(对偶变量),可以按以下方式修改你的代码:
1. 调整约束定义方式
你之前在循环里定义的变量上下限约束是匿名的,不利于后续引用。建议将这些约束存入数组,方便后续调用:
using JuMP using GLPK CI = [30, 70]; d = 170; Pmin = [0, 0]; Pmax = [100, 150]; N = length(CI) m = Model(GLPK.Optimizer) @variable(m, 0 <= P[1:N]) @objective(m, Min, sum(CI[i] * P[i] for i in 1:N)) @constraint(m, c1, sum(P[1:N]) == d) # 将上下限约束存入数组 lower_bounds = @constraint(m, [i in 1:N], P[i] >= Pmin[i]) upper_bounds = @constraint(m, [i in 1:N], P[i] <= Pmax[i]) optimize!(m)
2. 获取并打印影子价格
优化完成后,使用dual()函数即可获取约束的影子价格:
打印功率平衡约束c1的影子价格
println("功率平衡约束c1的影子价格: ", dual(c1))
打印所有变量下限约束的影子价格
println("变量下限约束的影子价格:") for i in 1:N println("P[$i] >= Pmin[$i]: ", dual(lower_bounds[i])) end
打印所有变量上限约束的影子价格
println("变量上限约束的影子价格:") for i in 1:N println("P[$i] <= Pmax[$i]: ", dual(upper_bounds[i])) end
注意事项
- 影子价格的符号与约束定义方向、优化目标类型(最小化/最大化)相关,需结合经济调度问题的实际含义解读。
- GLPK作为线性规划求解器支持对偶变量获取,确保JuMP与GLPK版本兼容。
内容的提问来源于stack exchange,提问作者Jesper
相关产品推荐
相关产品推荐

