clc;
clear;
mu_nt = sdpvar(1);
P_ctb_D = sdpvar(1,5);
P_ts_WPH = sdpvar(1,5);
lambda_ts_WPH = sdpvar(1,5);
xi_ts_WPH_min = sdpvar(1,5);
xi_ts_WPH_max = sdpvar(1,5);
xi_ts_WPHsum_min = sdpvar(1);
xi_ts_WPHsum_max = sdpvar(1);
xi_ts_WPH0 = sdpvar(1,5);
B_ts_WPH_min = binvar(1,5);
B_ts_WPH_max = binvar(1,5);
B_ts_WPHsum_min = binvar(1);
B_ts_WPHsum_max = binvar(1);
xi_ctb_D_min = sdpvar(1,5);
xi_ctb_D_max = sdpvar(1,5);
xi_ctb_Dsum_min = sdpvar(1);
xi_ctb_Dsum_max = sdpvar(1);
B_ctb_D_min = binvar(1,5);
B_ctb_D_max = binvar(1,5);
B_ctb_Dsum_min = binvar(1);
B_ctb_Dsum_max = binvar(1);
xi_ctb_D0 = sdpvar(1,5);
M = 100;
P_ts_WPH_sum_min = 0;
P_ts_WPH_sum_max = 5;
P_ts_WPH_min = 0;
P_ts_WPH_max = 1;
lambda_ctb_D = [900 800 700 600 500]/100;
P_ctb_D_sum_max = 5;
P_ctb_D_sum_min = 0;
P_ctb_D_max = 1;
P_ctb_D_min = 0;
c = [];
c = [c,-lambda_ts_WPH + repmat(mu_nt,[1,5]) + xi_ts_WPH_min - xi_ts_WPH_max + repmat(xi_ts_WPHsum_min,[1,5]) - repmat(xi_ts_WPHsum_max,[1,5]) == 0];
c = [c, 0 <= P_ts_WPH - P_ts_WPH_min <= M.*B_ts_WPH_min, 0<= xi_ts_WPH_min <= M.*(1-B_ts_WPH_min)];
c = [c, 0 <= P_ts_WPH_max - P_ts_WPH <= M.*B_ts_WPH_max, 0<= xi_ts_WPH_max <= M.*(1-B_ts_WPH_max)];
c = [c, 0 <= sum(P_ts_WPH,2) - P_ts_WPH_sum_min <= M.*B_ts_WPHsum_min, 0 <= xi_ts_WPHsum_min <= M.*(1-B_ts_WPHsum_min)];
c = [c, 0 <= P_ts_WPH_sum_max - sum(P_ts_WPH,2)<= M.*B_ts_WPHsum_max, 0 <= xi_ts_WPHsum_max <= M.*(1-B_ts_WPHsum_max)];
c = [c,lambda_ctb_D - repmat(mu_nt,[1,5]) + xi_ctb_D_min - xi_ctb_D_max + repmat(xi_ctb_Dsum_min,[1,5]) - repmat(xi_ctb_Dsum_max,[1,5]) == 0];
c = [c, 0 <= P_ctb_D - P_ctb_D_min <= M.*B_ctb_D_min, 0<= xi_ctb_D_min <= M.*(1-B_ctb_D_min)];
c = [c, 0 <= P_ctb_D_max - P_ctb_D <= M.*B_ctb_D_max, 0<= xi_ctb_D_max <= M.*(1-B_ctb_D_max)];
c = [c, 0 <= sum(P_ctb_D,2) - P_ctb_D_sum_min <= M.*B_ctb_Dsum_min, 0 <= xi_ctb_Dsum_min <= M.*(1-B_ctb_Dsum_min)];
c = [c, 0 <= P_ctb_D_sum_max - sum(P_ctb_D,2)<= M.*B_ctb_Dsum_max, 0 <= xi_ctb_Dsum_max <= M.*(1-B_ctb_Dsum_max)];
c = [c,implies(lambda_ts_WPH(1,5) <= (lambda_ctb_D(1,5) -0.000001) , [P_ts_WPH == 0,P_ctb_D == 0])];
c_mu_nt = sum(P_ts_WPH,'all') == sum(P_ctb_D,'all');
c = [c,c_mu_nt];
for i = 1:4
c = [c, (lambda_ts_WPH(1,i) - lambda_ts_WPH(1,i+1)) <= 0];
c = [c, 1 <= lambda_ts_WPH <= 5];
end
obj = mu_nt.*sum(P_ts_WPH,2);
ops = sdpsettings('solver', 'Gurobi+', 'verbose', 2, 'debug', 1, 'gurobi.NonConvex', 2);
ops.gurobi.ResultFile = 'MyFile.lp';
ops.gurobi.Method = 2;
ops.gurobi.PoolSearchMode = 2;
ops.gurobi.PoolGap = 0;
result = optimize(c,-obj,ops);
xi_ts_WPH_min_value = value(xi_ts_WPH_min);
xi_ts_WPH_max_value = value(xi_ts_WPH_max);
xi_ts_WPHsum_min_value = value(xi_ts_WPHsum_min);
xi_ts_WPHsum_max_value = value(xi_ts_WPHsum_max);
LMP = value(mu_nt);
lambda_ts_WPH_value = value(lambda_ts_WPH);
P_ts_WPH_value = value(P_ts_WPH);
P_ctb_D_value = value(P_ctb_D);