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

作者在使用KKT条件求解电力定价问题时遇到电价负值,分析发现目标函数值大且部分变量取值靠近边界。通过设置更宽松的边界条件和检查ILP文件,识别出对偶变量的下限限制了解决方案,需调整这些变量的下限以使模型可行。
摘要由CSDN通过智能技术生成

今天在学用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时的对偶变量,那应该是说这些对偶变量的下限限制了模型的求解。因此我们去把这几个变量的下限改宽一点就好啦,解决!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值