• 基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法(含matlab代码)


    目录

    主要内容   

      部分代码   

      结果一览   

    下载链接


    主要内容   

    程序解决的是一个基于合作博弈的风光氢能源交易的问题,首先,考虑主体间的电能交易建立各主体的优化运行模型, 然后基于纳什谈判理论建立风–光–氢多主体合作运行模型, 接着将其等效为联盟效益最大化和电能交易支付谈判两个子问题,运用交替方向乘子法(ADMM)提出上述两个子问题的分布式求解方法,程序注释清楚,参考性强!程序求解需要Matlab及mosek工具箱!

      部分代码   

    maxIter=50;%最大迭代次数
    tolerant=1e-5;%收敛精度
    iter=1;%迭代次数
    Ben_Store=[];%历史目标函数
    toler1=[];%残差1,风电主体
    toler2=[];%残差2,光伏主体
    P_pv2h_2=zeros(maxIter+1,24);P_wt2h_2=zeros(maxIter+1,24);
    value_P_wt2h_2=zeros(maxIter+1,24);value_P_pv2h_2=zeros(maxIter+1,24);
    %% 迭代
    while 1
        if iter==maxIter  %限制迭代次数
           disp('迭代不收敛,参数有误');
           break; 
        end 
        display(['迭代还未收敛,当前迭代第 ', num2str(iter),' 次']);
        if iter==1  %第一次求解比较特殊,要给一致性变量P_wt2h_1、P_pv2h_1赋初值
            [P_pv2h_2(2,:),P_wt2h_2(2,:),Obj_dzq(iter)]=Fun_dzq(value_P_pv2h_2(iter,:),value_P_wt2h_2(iter,:),rho_wt,rho_pv,lambda_wt,lambda_pv);
            [value_P_pv2h_2(2,:),Obj_gf(iter)]=Fun_gf(P_pv2h_2(2,:),rho_pv,lambda_pv);
            [value_P_wt2h_2(2,:),Obj_fd(iter)]=Fun_fd(P_wt2h_2(2,:),rho_wt,lambda_wt);
            lambda_wt=lambda_wt+rho_wt*(P_wt2h_2(2,:)-value_P_wt2h_2(2,:));
            lambda_pv=lambda_pv+rho_pv*(P_pv2h_2(2,:)-value_P_pv2h_2(2,:));
        else
            [P_pv2h_2(iter+1,:),P_wt2h_2(iter+1,:),Obj_dzq(iter)]=Fun_dzq(value_P_pv2h_2(iter,:),value_P_wt2h_2(iter,:),rho_wt,rho_pv,lambda_wt,lambda_pv);
            [value_P_pv2h_2(iter+1,:),Obj_gf(iter)]=Fun_gf(P_pv2h_2(iter+1,:),rho_pv,lambda_pv);
            [value_P_wt2h_2(iter+1,:),Obj_fd(iter)]=Fun_fd(P_wt2h_2(iter+1,:),rho_wt,lambda_wt);
            lambda_wt=lambda_wt+rho_wt*(P_wt2h_2(iter+1,:)-value_P_wt2h_2(iter+1,:));
            lambda_pv=lambda_pv+rho_pv*(P_pv2h_2(iter+1,:)-value_P_pv2h_2(iter+1,:));
        end
        %保存历史数据
        Ben_Store=[Ben_Store,[Obj_dzq(iter);Obj_gf(iter);Obj_fd(iter)]];
        %残差计算,公式(36)应该修改一下,是向量的二范数再平方
        toler1=[toler1,norm(P_wt2h_2(iter+1,:)-value_P_wt2h_2(iter+1,:))^2];%保存残差1 
        toler2=[toler2,norm(P_pv2h_2(iter+1,:)-value_P_pv2h_2(iter+1,:))^2];%保存残差2                
        %判断收敛条件
        if toler1(iter)<=tolerant && toler2(iter)<=tolerant
           display(['迭代收敛,在第 ', num2str(iter),' 次收敛']);
           break; 
        end
        iter=iter+1;
    end
    %% 画图
    figure(1)
    plot(-Ben_Store(1,:),'b-o','LineWidth',1.5);
    xlabel('迭代次数');
    ylabel('成本/元');
    title('电制氢主体分布式迭代情况');
    ;
    figure(2)
    plot(-Ben_Store(2,:),'r-o','LineWidth',1.5);
    xlabel('迭代次数');
    ylabel('成本/元');
    title('光伏主体分布式迭代情况');
    ;
    figure(3)
    plot(-Ben_Store(3,:),'k-o','LineWidth',1.5);
    xlabel('迭代次数');
    ylabel('成本/元');
    title('风力主体分布式迭代情况');
    ;
    %
    Party=-Ben_Store(1,:)-Ben_Store(2,:)-Ben_Store(3,:);
    figure(4)
    plot(Party,'k-o','LineWidth',1.5);
    xlabel('迭代次数');
    ylabel('成本/元');
    title('风光联盟总效益值');
    

      结果一览   

    下载链接

  • 相关阅读:
    PD仿真算法中变形梯度矩阵的极分解
    降低Redis内存使用和提升性能的一些方案
    成功解决note: This is an issue with the package mentioned above,not pip
    Go语言入门心法(十三): 反射认知升维
    Docker:(十)consul注册中心、注册机
    【python基础】编写/运行hello world项目
    AI大预言模型——ChatGPT与AI绘图及论文高效写作
    代码随想录 Day48 动态规划16 T647 回文子串 T516最长回文子序列
    EF Core 批量插入操作原理分析
    PerfView专题 (第一篇):如何寻找 C# 热点函数
  • 原文地址:https://blog.csdn.net/zhangxd212489/article/details/136610479