使用Yalmip+matlab求解主从博弈(双层规划)问题 | 教程(二)
yalmip官方学习网址:
https://yalmip.github.io/command
作为yalmip小白,本文主要根据实际代码运用,进行yalmip学习。
学习以yalmip官方网站为主,其他网站和教程为辅。
yalmip下的KKT使用
以某电动汽车充电背景下,代理商与电动汽车车主博弈的代码为例:
首先定义参数和变量
%参数
price_day_ahead=[0.35;0.33;0.3;0.33;0.36;0.4;0.44;0.46;0.52;0.58;0.66;0.75;0.81;0.76;0.8;0.83;0.81;0.75;0.64;0.55;0.53;0.47;0.40;0.37];
price_b=1.2*price_day_ahead;
price_s=1.2*price_day_ahead;
lb=0.8*price_day_ahead;
ub=1.2*price_day_ahead;
T_1=[1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1];
T_2=[1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1];
T_3=[0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0];
index1=find(T_1==0);index2=find(T_2==0);index3=find(T_3==0);
%定义变量
Ce=sdpvar(24,1);%电价
z=binvar(24,1);%购售电状态
u=binvar(24,1);%储能状态
Pb=sdpvar(24,1);%日前购电
Pb_day=sdpvar(24,1);%实时购电
Ps_day=sdpvar(24,1);%实时售电
Pdis=sdpvar(24,1);%储能放电
Pch=sdpvar(24,1);%储能充电
Pc1=sdpvar(24,1);%一类车充电功率
Pc2=sdpvar(24,1);%二类车充电功率
Pc3=sdpvar(24,1);%三类车充电功率
S=sdpvar(24,1);%储荷容量
分为内外两层,对主从博弈下的双层规划问题进行求解:
%内层
CI=[sum(Pc1)==50*(0.9*24-9.6),sum(Pc2)==20*(0.9*24-9.6),sum(Pc3)==10*(0.9*24-9.6),Pc1>=0,Pc2>=0,Pc3>=0,Pc1<=50*3,Pc2<=20*3,Pc3<=10*3,Pc1(index1)==0,Pc2(index2)==0,Pc3(index3)==0];%电量需求约束
OI=sum(Ce.*(Pc1+Pc2+Pc3));
ops=sdpsettings('solver','gurobi','kkt.dualbounds',0);
[K,details] = kkt(CI,OI,Ce,ops);%建立KKT系统,Ce为参量
标准句式:
[KKTsystem, details] = kkt(Constraint,Objective,z) %z为变量,需要有上下限
对应即得,CI为约束(不同约束之间可直接用 , 分隔),OI为目标函数,Ce为变量。
%外层
CO=[lb<=Ce<=ub,mean(Ce)==0.5,Pb>=0,Ps_day<=Pdis,Pb_day>=0,Pb_day<=1000*z,Ps_day>=0,Ps_day<=1000*(1-z),Pch>=0,Pch<=1000*u,Pdis>=0,Pdis<=1000*(1-u)];%边界约束
CO=[CO,Pc1+Pc2+Pc3+Pch-Pdis==Pb+Pb_day-Ps_day];%能量平衡
CO=[CO,sum(0.9*Pch-Pdis/0.9)==0,S(24)==2500,S>=0,S<=5000];%SOC约束
OO=-(details.b'*details.dual+details.f'*details.dualeq)+sum(price_s.*Ps_day-price_day_ahead.*Pb-price_b.*Pb_day);%目标函数
optimize([K,CI,CO,boundingbox([CI,CO]),details.dual<=1],-OO)
因此,整体代码分为内外两层,其针对的问题为:推导内部问题的KKT条件来求解双层二次规划。此时KKT无法导出对偶的边界,因此需要进行手动添加。原始边界需要通过KKT中的内部问题进行推导。
官网上的范例如下:
sdpvar x1 x2 y1 y2 y3
OO = -8x1-4x2+4y1-40y2-4*y3;
OO = OO+OO^2;
CO = [x1>=0, x2>=0];OI = (x1+2x2+y1+y2+2y3)^2; CI = [[y1 y2 y3] >= 0,
-y1+y2+y3 <= 10,
2x1-y1+2y2-0.5y3 <= 10,
2x2+2y1-y2-0.5y3 <= 9.7];[K,details] = kkt(CI,OI,[x1 x2])
optimize([K,CO,boundingbox([CI,CO]),details.dual<=100],OO)
同时boundingbox的标准句式如下:
[B,L,U] = boundingbox(Constraint,options,x)
optimize([K,CI,CO,boundingbox([CI,CO]),details.dual<=1],-OO)
其中boundingbox([CI,CO])表示两个约束
‘-oo’为目标函数
使用Yalmip+matlab求解主从博弈(双层规划)问题 | 教程(二)相关推荐
- matlab ode边值问题,微分方程(组)边值问题的变分原理及MATLAB求解
微分方程(组)边值问题的变分原理及MATLAB求解 作 者:李海春,张志霞,黄蕊 等著 出版时间:2014 丛编项:普通高等教育"十二五"规划教材 内容简介 <微分方程(组) ...
- 基于主从博弈的智能小区代理商定价策略及 电动汽车充电管理matlab程序(yalmip+cplex)(yalmip+gurobi)
基于主从博弈的智能小区代理商定价策略及电动汽车充电管理matlab程序(yalmip+cplex)(yalmip+gurobi) 参考文献:基于主从博弈的智能小区代理商定价策略及电动汽车充电管理 智能 ...
- matlab 双层规划求解,双层规划模型的遗传算法求解的Matlab源码
双层规划模型的遗传算法求解的Matlab源码 双层规划模型的遗传算法求解的Matlab源码 function [BESTX,BESTY,ALLX,ALLY]=GAU (KU,KD,NU,ND,PmU, ...
- 基于元模型优化的虚拟电厂主从博弈优化调度模型基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理 代码主要做的是虚拟电厂的优化调度策略,其实是多虚拟电厂/微网的优化调度策略,模型为双层,首先下层
MATLAB代码:基于元模型优化的虚拟电厂主从博弈优化调度模型 关键词:元模型 虚拟电厂 主从博弈 优化调度 参考文档:<基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理>复现元模 ...
- MATLAB代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究
MATLAB代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究 关键词:主从博弈 共享储能 综合能源微网 优化调度 仿真平台:MATLAB yalmip+cplex 主要内容:代码主要做的是基 ...
- 11基于主从博弈理论的共享储能与综合能源微网优化运行研究(MATLAB程序)
资源地址: 11基于主从博弈理论的共享储能与综合能源微网优化运行研究MATLAB复现程序_冷热电联供系统cplex-电子商务文档类资源-CSDN文库 参考文献: 基于主从博弈理论的共享储能与综合能源微 ...
- MATLAB复现代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究
MATLAB代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究 关键词:主从博弈 共享储能 综合能源微网 优化调度 参考文档:<基于主从博弈理论的共享储能与综合能源微网优化运行研究> ...
- MATLAB程序:基于主从博弈理论的共享储能与综合能源微网优化运行研究
MATLAB程序:基于主从博弈理论的共享储能与综合能源微网优化运行研究. 提出共享储能背景下微网运营商与用户聚合商间的主从博弈模型,并证明Stackelberg 均衡解的存在性与唯一性. 最后,在 M ...
- wps 模拟分析 规划求解_【论文】基于双层规划的应急物资邮政运输模型优化方法研究...
戳上面的蓝字关注我们哦! 基于双层规划的应急物资邮政运输模型优化方法研究 周海霞1,2, 梅育荣1,2, 吕福如1,2, 孙知信1,2 1 南京邮电大学国家邮政局邮政行业技术研发中心(物联网技术),江 ...
最新文章
- Task03:青少年软件编程(Scratch)等级考试模拟卷(二级)
- Angular系列学习二:基本的组件说明、自定义组件和部分细节说明
- python 去掉字符串的
- Linux Tensorflow2.0安装
- 编码实现Spring 利用@Resource注解实现bean的注入,xml实现基本数据类型的注入
- (重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...
- python的repr和str有什么不同_str()和repr()的异同
- python 桌面提醒_python实现桌面托盘气泡提示
- 1053: [HAOI2007]反素数ant
- service数据保存_精通IPFS:IPFS 保存内容之下篇
- viewDidUnload方法的离去和替代
- 具体化和实例化的应用
- 2019最新版Eclipse下载与安装
- 水浊度传感器( ADC 代码详解)
- PowerDesigner菜单翻译
- 基于微信小程序的校园二手商城设计与开发
- python服务启动调试的时候报错:SyntaxError: (“Non-ASCII character ‘\\xca‘ in file......解决办法
- autojs联众识图
- 快速上手matlab(二)
- 计算机科学速成课笔记(六):计算机的未来