0001 function t_most_30b_1_1_0_uc(quiet)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 if nargin < 1
0013 quiet = 0;
0014 end
0015
0016 n_tests = 17;
0017
0018 t_begin(n_tests, quiet);
0019
0020 casename = 't_case30_most';
0021
0022
0023 mpopt = mpoption('verbose', 0, 'out.all', 0);
0024
0025 mpopt = mpoption(mpopt, 'out.bus', 0, 'out.branch', 0, 'out.gen', 2);
0026 mpopt = mpoption(mpopt, 'opf.violation', 5e-7, 'mips.comptol', 5e-8);
0027 if have_fcn('intlinprog')
0028 mpopt = mpoption(mpopt, 'linprog.Algorithm', 'dual-simplex');
0029 mpopt = mpoption(mpopt, 'intlinprog.RootLPAlgorithm', 'dual-simplex');
0030 mpopt = mpoption(mpopt, 'intlinprog.TolCon', 1e-9);
0031 mpopt = mpoption(mpopt, 'intlinprog.TolGapAbs', 0);
0032 mpopt = mpoption(mpopt, 'intlinprog.TolGapRel', 0);
0033 mpopt = mpoption(mpopt, 'intlinprog.TolInteger', 1e-6);
0034
0035
0036 mpopt = mpoption(mpopt, 'intlinprog.LPPreprocess', 'none');
0037 end
0038 mpoptac = mpoption(mpopt, 'model', 'AC');
0039 mpoptdc = mpoption(mpopt, 'model', 'DC');
0040 mpopt = mpoption(mpopt, 'most.solver', 'DEFAULT');
0041
0042
0043 s7 = warning('query', 'MATLAB:nearlySingularMatrix');
0044 s6 = warning('query', 'MATLAB:nearlySingularMatrixUMFPACK');
0045 warning('off', 'MATLAB:nearlySingularMatrix');
0046 warning('off', 'MATLAB:nearlySingularMatrixUMFPACK');
0047
0048
0049 [PQ, PV, REF, NONE, BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, ...
0050 VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus;
0051 [GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN, ...
0052 MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN, PC1, PC2, QC1MIN, QC1MAX, ...
0053 QC2MIN, QC2MAX, RAMP_AGC, RAMP_10, RAMP_30, RAMP_Q, APF] = idx_gen;
0054 [F_BUS, T_BUS, BR_R, BR_X, BR_B, RATE_A, RATE_B, RATE_C, ...
0055 TAP, SHIFT, BR_STATUS, PF, QF, PT, QT, MU_SF, MU_ST, ...
0056 ANGMIN, ANGMAX, MU_ANGMIN, MU_ANGMAX] = idx_brch;
0057 [CT_LABEL, CT_PROB, CT_TABLE, CT_TBUS, CT_TGEN, CT_TBRCH, CT_TAREABUS, ...
0058 CT_TAREAGEN, CT_TAREABRCH, CT_ROW, CT_COL, CT_CHGTYPE, CT_REP, ...
0059 CT_REL, CT_ADD, CT_NEWVAL, CT_TLOAD, CT_TAREALOAD, CT_LOAD_ALL_PQ, ...
0060 CT_LOAD_FIX_PQ, CT_LOAD_DIS_PQ, CT_LOAD_ALL_P, CT_LOAD_FIX_P, ...
0061 CT_LOAD_DIS_P, CT_TGENCOST, CT_TAREAGENCOST, CT_MODCOST_F, ...
0062 CT_MODCOST_X] = idx_ct;
0063
0064
0065 xgd_table.colnames = {
0066 'CommitKey', ...
0067 'CommitSched', ...
0068 'PositiveActiveReservePrice', ...
0069 'PositiveActiveReserveQuantity', ...
0070 'NegativeActiveReservePrice', ...
0071 'NegativeActiveReserveQuantity', ...
0072 'PositiveActiveDeltaPrice', ...
0073 'NegativeActiveDeltaPrice', ...
0074 };
0075 xgd_table.data = [
0076 1 1 10.1 15 10.0 15 0.1 0.0;
0077 1 1 10.3 30 10.2 30 0.3 0.2;
0078 1 1 10.5 20 10.4 20 0.5 0.4;
0079 1 1 10.7 25 10.6 25 0.7 0.6;
0080 1 1 20.1 25 20.0 25 60.1 60.0;
0081 1 1 20.3 15 20.2 15 15.1 15.0;
0082 1 1 20.5 30 20.4 30 60.3 60.2;
0083 1 1 20.7 15 20.6 15 15.3 15.2;
0084 1 1 30.1 15 30.0 15 60.3 60.4;
0085 1 1 30.3 30 30.2 30 30.1 30.0;
0086 1 1 30.5 25 30.4 25 60.7 60.6;
0087 1 1 30.7 30 30.6 30 30.3 30.2;
0088 2 1 0.001 50 0.002 50 0 0;
0089 2 1 0.001 50 0.002 50 0 0;
0090 2 1 0.001 50 0.002 50 0 0;
0091 2 1 0.001 50 0.002 50 0 0;
0092 2 1 0.001 50 0.002 50 0 0;
0093 2 1 0.001 50 0.002 50 0 0;
0094 2 1 0.001 50 0.002 50 0 0;
0095 2 1 0.001 50 0.002 50 0 0;
0096 2 1 0.001 50 0.002 50 0 0;
0097 2 1 0.001 50 0.002 50 0 0;
0098 2 1 0.001 50 0.002 50 0 0;
0099 2 1 0.001 50 0.002 50 0 0;
0100 2 1 0.001 50 0.002 50 0 0;
0101 2 1 0.001 50 0.002 50 0 0;
0102 2 1 0.001 50 0.002 50 0 0;
0103 2 1 0.001 50 0.002 50 0 0;
0104 2 1 0.001 50 0.002 50 0 0;
0105 2 1 0.001 50 0.002 50 0 0;
0106 2 1 0.001 50 0.002 50 0 0;
0107 2 1 0.001 50 0.002 50 0 0;
0108 ];
0109
0110
0111
0112 contab = [
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132 ];
0133 clist = [];
0134 nc = length(clist);
0135
0136
0137 mpc = loadcase(casename);
0138 ld = 195;
0139 [mpc.bus, mpc.gen] = scale_load(ld, mpc.bus, mpc.gen, ...
0140 [], struct('scale', 'QUANTITY'));
0141 gbus = mpc.gen(:, GEN_BUS);
0142
0143
0144 ig = find(~isload(mpc.gen));
0145 mpc.gen(ig, PMIN) = 0.2 * mpc.gen(ig, PMAX);
0146
0147
0148 rdc = runduopf(mpc, mpoptdc);
0149
0150
0151
0152 s.rdc = rdc;
0153
0154
0155
0156 ng = size(mpc.gen, 1);
0157 xgd = loadxgendata(xgd_table, mpc);
0158 md = loadmd(mpc, [], xgd);
0159
0160 if have_fcn('cplex')
0161 mpopt = mpoption(mpopt, 'cplex.lpmethod', 2);
0162 end
0163 if have_fcn('gurobi')
0164 mpopt = mpoption(mpopt, 'gurobi.method', 1);
0165 end
0166 if have_fcn('linprog')
0167 mpopt = mpoption(mpopt, 'linprog.Algorithm', 'dual-simplex');
0168
0169
0170
0171 end
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181 r = most(md, mpopt);
0182
0183
0184 t = 'success1';
0185 t_ok(s.rdc.success, t);
0186 t = 'success2';
0187 t_ok(r.QP.exitflag, t);
0188
0189 t = 'f';
0190 t_is(r.results.f, s.rdc.f, 4, t);
0191
0192 t = 'Pg : base';
0193 t_is(r.flow(1,1,1).mpc.gen(:, PG), s.rdc.gen(:, PG), 5, t);
0194
0195 t = 'genstatus : base';
0196 t_is(r.flow(1,1,1).mpc.gen(:, GEN_STATUS), s.rdc.gen(:, GEN_STATUS), 12, t);
0197 t_is(r.UC.CommitSched, s.rdc.gen(:, GEN_STATUS), 12, t);
0198
0199 t = 'gen : base';
0200 t_is(r.flow(1,1,1).mpc.gen(:,1:MU_PMIN), s.rdc.gen(:,1:MU_PMIN), 3, t);
0201
0202 t = 'energy prices';
0203 t_is(r.results.GenPrices, s.rdc.bus(gbus, LAM_P), 6, t);
0204
0205 t = 'Pc';
0206 t_is(r.results.Pc, s.rdc.gen(:, PG), 4, t);
0207
0208 t = 'Gmin';
0209 t_is(r.results.Pc - r.results.Rpm, s.rdc.gen(:, PG), 4, t);
0210
0211 t = 'Gmax';
0212 t_is(r.results.Pc + r.results.Rpp, s.rdc.gen(:, PG), 4, t);
0213
0214 t = 'upward contingency reserve quantities';
0215 t_is(r.results.Rpp, zeros(ng, 1), 4, t);
0216
0217 t = 'downward contingency reserve quantities';
0218 t_is(r.results.Rpm, zeros(ng, 1), 4, t);
0219
0220 t = 'upward contingency reserve prices';
0221 t_is(r.results.RppPrices, xgd.PositiveActiveReservePrice, 6, t);
0222
0223 t = 'downward contingency reserve prices';
0224 t_is(r.results.RpmPrices, xgd.NegativeActiveReservePrice, 6, t);
0225
0226 t = 'Rpmax_pos';
0227 vv = get_idx(r.om);
0228 Rpmax_pos = (r.QP.lambda.upper(vv.i1.Rpp(1):vv.iN.Rpp(1)) - r.QP.lambda.lower(vv.i1.Rpp(1):vv.iN.Rpp(1))) / mpc.baseMVA;
0229 t_is(Rpmax_pos, zeros(ng, 1), 6, t);
0230
0231 t = 'Rpmax_neg';
0232 Rpmax_neg = (r.QP.lambda.upper(vv.i1.Rpm(1):vv.iN.Rpm(1)) - r.QP.lambda.lower(vv.i1.Rpm(1):vv.iN.Rpm(1))) / mpc.baseMVA;
0233 t_is(Rpmax_neg, zeros(ng, 1), 6, t);
0234
0235
0236 warning(s7.state, 'MATLAB:nearlySingularMatrix');
0237 warning(s6.state, 'MATLAB:nearlySingularMatrixUMFPACK');
0238
0239 t_end;