两阶段鲁棒优化matlab实现——C&CG和benders

目录

1 主要内容

2 部分代码

3 程序结果

4 程序链接


主要内容

程序采用matlab复现经典论文《Solving two-stage robust optimization problems using a column-and-constraint generation method》算例,实现了C&CG和benders算法两部分内容,通过对比学习能够方便掌握两种算法的编程要点,深入了解C&CG算法优势,对于学习鲁棒优化是不可多得的资料,程序均采用matlab+cplex求解!

2 部分代码

y = binvar(3,1);
z = sdpvar(3,1);
x =sdpvar(9,100,'full');
eta = sdpvar(1);
g = sdpvar(3,1);
pi = sdpvar(size(G,1),1);
v=binvar(size(G,1),1);
w=binvar(size(G,2),1);
%% CCG
LB=-inf; UB=inf; iter=1; BigM=1e5;
​
MP_Cons = [ 0<=z<=800*y, 772<=sum(z), b'*x(:,iter)<=eta, 0<=x(:,iter) ];
MP_Obj = coe1*y +coe2*z+eta ;
ops = sdpsettings('solver','cplex','verbose',0);
​
Uncertain_Cons=[ 0<=g<=1, sum(g)<=1.8, g(1)+g(2)<=1.2 ];
​
while abs(UB-LB) >1e-5
    disp(['迭代第',num2str(iter),'次'])
    optimize(MP_Cons,MP_Obj,ops);
    LB = max(LB, value(MP_Obj));                % LB
    
    SP_Obj = b'*x(:,iter) ;
    SP_Cons = [ Uncertain_Cons, 0<=x(:,iter), G*x(:,iter)>=h-E*[value(y);value(z)]-M*g  ];
    SP_Cons = [SP_Cons, 0<=pi,  G'*pi<=b ];
    SP_Cons = [SP_Cons, G*x(:,iter)-h+E*[value(y); value(z)]+M*g <= BigM*(1-v) ];
    SP_Cons = [SP_Cons, pi<=BigM*v];
    SP_Cons = [SP_Cons, b-G'*pi <= BigM*(1-w) ];
    SP_Cons = [SP_Cons, x(:,iter)<=BigM*w ];    
    sol_SP=optimize(SP_Cons,-SP_Obj,ops);
    
    if sol_SP.problem==0                             % SP is solved
        UB=min(UB, coe1*value(y)+coe2*value(z)+value(SP_Obj));           % UB
        disp([' g =   ',num2str(value(g)')]);
    end
    
    MP_Cons = [MP_Cons, 0<=x(:,iter+1), b'*x(:,iter+1)<= eta, G*x(:,iter+1)>=h- E*[y;z]-M*value(g) ];
    
    iter = iter+1;
    display([' LB: ',num2str(LB), '    UB: ',num2str(UB),]);
end

程序结果

4 程序链接

【免费】两阶段鲁棒优化matlab实现——C&CG和benders

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电力程序小学童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值