KKT条件下算节点边际电价为负解决方法

今天在学用KKT条件,算了电价导出,发现每个节点的电价都变-300了,给我弄迷糊了,怎么我用电还得电网给我贴钱(虽然上网查说确实会有这种情况?但总之在我这个模型里不太正常)。查了目标函数值,发现比较大,而且有几个变量取值都跑到边界上了,隐约感觉是边界条件限制得太紧了。加了个约束让目标函数值小于一个比当前求出的结果更小的值,让模型infeasible,输出ilp文件:

mPDN.update()
mPDN.Params.NonConvex = 2
mPDN.setObjective(relax_sum, GRB.MINIMIZE)
mPDN.setParam('DualReductions', 0)
mPDN.optimize()
print('PDN status: ', mPDN.Status)
if mPDN.Status == 3:  # model is infeasible
    mPDN.computeIIS()
    mPDN.write("modelTestPDN.ilp")
if mPDN.Status == 2:
    relax_sum_value = mPDN.ObjVal

(注意mPDN.setParam('DualReductions', 0)这句尽量只在模型infeasible or unbounded时再写,如果feasible就赶紧注释掉,不然会运行很慢,具体原因可以看我之前的记录gurobi求解时间过长

看ilp文件发现,一堆free的边界中有几个>=-100000的:

free的边界意思是即使这些变量上下限都无穷,模型也不可解,我们可以排除它们。找到这几个>=的,发现这些都是用KKT时的对偶变量,那应该是说这些对偶变量的下限限制了模型的求解。因此我们去把这几个变量的下限改宽一点就好啦,解决!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值