0001 function t_auction_mips(quiet)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 if nargin < 1
0013 quiet = 0;
0014 end
0015
0016 n_tests = 183;
0017
0018 t_begin(n_tests, quiet);
0019
0020 [PQ, PV, REF, NONE, BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, ...
0021 VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus;
0022 [GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN, ...
0023 MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN, PC1, PC2, QC1MIN, QC1MAX, ...
0024 QC2MIN, QC2MAX, RAMP_AGC, RAMP_10, RAMP_30, RAMP_Q, APF] = idx_gen;
0025
0026 if ~have_feature('smartmarket')
0027 t_skip(n_tests, 'smartmarket code not available');
0028 else
0029 mpopt = mpoption('opf.violation', 1e-7, 'mips.gradtol', 1e-6, ...
0030 'mips.comptol', 1e-7, 'mips.costtol', 5e-9);
0031 mpopt = mpoption(mpopt, 'opf.ac.solver', 'MIPS', 'out.lim.all', 1, ...
0032 'out.branch', 0, 'out.sys_sum', 0, 'out.all', 0, 'verbose', 0);
0033 q = [
0034 12 24 24;
0035 12 24 24;
0036 12 24 24;
0037 12 24 24;
0038 12 24 24;
0039 12 24 24;
0040 10 10 10;
0041 10 10 10;
0042 10 10 10;
0043 ];
0044
0045
0046 p = [
0047 20 50 60;
0048 20 40 70;
0049 20 42 80;
0050 20 44 90;
0051 20 46 75;
0052 20 48 60;
0053 100 70 60;
0054 100 50 20;
0055 100 60 50;
0056 ];
0057
0058 t = 'one marginal offer @ $50, auction_type = 5';
0059 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0060 runmkt('t_auction_case', q, p, 1150, 100, [], [], mpopt);
0061 cq5 = cq;
0062 cp5 = cp;
0063 i2e = bus(:, BUS_I);
0064 e2i = sparse(max(i2e), 1);
0065 e2i(i2e) = (1:size(bus, 1))';
0066 G = find( ~isload(gen) );
0067 L = find( isload(gen) );
0068 Gbus = e2i(gen(G,GEN_BUS));
0069 Lbus = e2i(gen(L,GEN_BUS));
0070 Qfudge = zeros(size(p));
0071 Qfudge(L,:) = diag(gen(L,QG) ./ gen(L,PG) .* bus(Lbus, LAM_Q)) * ones(size(p(L,:)));
0072
0073 t_is( cq(G(1),2:3), [23.32 0], 2, t );
0074 t_is( cp(G(1),:), 50, 4, t );
0075 t_is( cq(L(2),1:2), [10 0], 2, t );
0076 t_is( cp(L(2),:), 54.0312, 4, t );
0077 t_is( cp(G,1), bus(Gbus, LAM_P), 8, [t ' : gen prices'] );
0078 t_is( cp(L,1), bus(Lbus, LAM_P) + Qfudge(L,1), 8, [t ' : load prices'] );
0079
0080 lao_X = p(G(1),2)/bus(Gbus(1), LAM_P);
0081 fro_X = p(G(6),3)/bus(Gbus(6), LAM_P);
0082 lab_X = p(L(3),2)/(bus(Lbus(3), LAM_P) + Qfudge(L(3),1));
0083 frb_X = p(L(2),2)/(bus(Lbus(2), LAM_P) + Qfudge(L(2),1));
0084
0085 t_is( lao_X, 1, 4, 'lao_X');
0086 t_is( fro_X, 1.1324, 4, 'fro_X');
0087 t_is( lab_X, 1.0787, 4, 'lab_X');
0088 t_is( frb_X, 0.9254, 4, 'frb_X');
0089
0090 t = 'one marginal offer @ $50, auction_type = 1';
0091 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0092 runmkt('t_auction_case', q, p, 1110, 100, [], [], mpopt);
0093 cp1 = cp;
0094 t_is( cq, cq5, 8, [t ' : quantities'] );
0095 t_is( cp, cp5, 6, [t ' : prices'] );
0096
0097 t = 'one marginal offer @ $50, auction_type = 2';
0098 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0099 runmkt('t_auction_case', q, p, 1120, 100, [], [], mpopt);
0100 cp2 = cp;
0101 t_is( cq, cq5, 8, [t ' : quantities'] );
0102 t_is( cp(G,:), cp5(G,:)*fro_X, 8, [t ' : gen prices'] );
0103 t_is( cp(L(1:2),:), cp5(L(1:2),:)*fro_X, 8, [t ' : load 1,2 prices'] );
0104 t_is( cp(L(3),:), 60, 5, [t ' : load 3 price'] );
0105
0106 t = 'one marginal offer @ $50, auction_type = 3';
0107 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0108 runmkt('t_auction_case', q, p, 1130, 100, [], [], mpopt);
0109 cp3 = cp;
0110 t_is( cq, cq5, 8, [t ' : quantities'] );
0111 t_is( cp, cp5*lab_X, 8, [t ' : prices'] );
0112
0113 t = 'one marginal offer @ $50, auction_type = 4';
0114 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0115 runmkt('t_auction_case', q, p, 1140, 100, [], [], mpopt);
0116 t_is( cq, cq5, 8, [t ' : quantities'] );
0117 t_is( cp(G(1),:), p(G(1),2), 8, [t ' : gen 1 price'] );
0118 t_is( cp(G(2:6),:), cp5(G(2:6),:)*frb_X, 8, [t ' : gen 2-6 prices'] );
0119 t_is( cp(L,:), cp5(L,:)*frb_X, 8, [t ' : load prices'] );
0120
0121 t = 'one marginal offer @ $50, auction_type = 6';
0122 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0123 runmkt('t_auction_case', q, p, 1160, 100, [], [], mpopt);
0124 t_is( cq, cq5, 8, [t ' : quantities'] );
0125 t_is( cp, cp3, 8, [t ' : prices'] );
0126 p2 = p;
0127 p2(L,:) = [ 100 100 100;
0128 100 0 0;
0129 100 100 0 ];
0130 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0131 runmkt('t_auction_case', q, p2, 1160, 100, [], [], mpopt);
0132 t_is( cq, cq5, 5, [t ' : quantities'] );
0133 t_is( cp(G,:), cp5(G,:)*fro_X, 4, [t ' : gen prices'] );
0134 t_is( cp(L,:), cp5(L,:)*fro_X, 4, [t ' : load prices'] );
0135
0136 t = 'one marginal offer @ $50, auction_type = 7';
0137 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0138 runmkt('t_auction_case', q, p, 1170, 100, [], [], mpopt);
0139 t_is( cq, cq5, 8, [t ' : quantities'] );
0140 t_is( cp, cp5 * (lao_X+lab_X)/2, 8, [t ' : prices'] );
0141 t_is( cp, (cp1 + cp3) / 2, 8, [t ' : prices'] );
0142
0143 t = 'one marginal offer @ $50, auction_type = 8';
0144 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0145 runmkt('t_auction_case', q, p, 1180, 100, [], [], mpopt);
0146 t_is( cq, cq5, 8, [t ' : quantities'] );
0147 t_is( cp(G,:), cp1(G,:), 8, [t ' : gen prices'] );
0148 t_is( cp(L,:), cp3(L,:), 8, [t ' : load prices'] );
0149
0150 t = 'one marginal offer @ $50, auction_type = 0';
0151 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0152 runmkt('t_auction_case', q, p, 1100, 100, [], [], mpopt);
0153 t_is( cq, cq5, 8, [t ' : quantities'] );
0154 t_is( cp, p, 8, [t ' : prices'] );
0155
0156
0157
0158 p(L(2),2) = 55;
0159 t = 'one marginal bid @ $55, auction_type = 5';
0160 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0161 runmkt('t_auction_case', q, p, 1150, 100, [], [], mpopt);
0162 cq5 = cq;
0163 cp5 = cp;
0164 Qfudge = zeros(size(p));
0165 Qfudge(L,:) = diag(gen(L,QG) ./ gen(L,PG) .* bus(Lbus, LAM_Q)) * ones(size(p(L,:)));
0166
0167 t_is( cq(G(1),2:3), [24 0], 2, t );
0168 t_is( cp(G(1),:), 50.016, 3, t );
0169 t_is( cq(L(2),1:2), [10 0.63], 2, t );
0170 t_is( cp(L(2),:), 55, 4, t );
0171 t_is( cp(G,1), bus(Gbus, LAM_P), 8, [t ' : gen prices'] );
0172 t_is( cp(L,1), bus(Lbus, LAM_P) + Qfudge(L,1), 8, [t ' : load prices'] );
0173
0174 lao_X = p(G(1),2)/bus(Gbus(1), LAM_P);
0175 fro_X = p(G(6),3)/bus(Gbus(6), LAM_P);
0176 lab_X = p(L(2),2)/(bus(Lbus(2), LAM_P) + Qfudge(L(2),1));
0177 frb_X = p(L(3),3)/(bus(Lbus(3), LAM_P) + Qfudge(L(3),1));
0178
0179 t_is( lao_X, 0.9997, 4, 'lao_X');
0180 t_is( fro_X, 1.1111, 4, 'fro_X');
0181 t_is( lab_X, 1, 4, 'lab_X');
0182 t_is( frb_X, 0.8960, 4, 'frb_X');
0183
0184 t = 'one marginal bid @ $55, auction_type = 1';
0185 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0186 runmkt('t_auction_case', q, p, 1110, 100, [], [], mpopt);
0187 cp1 = cp;
0188 t_is( cq, cq5, 8, [t ' : quantities'] );
0189 t_is( cp, cp5*lao_X, 8, [t ' : prices'] );
0190
0191 t = 'one marginal bid @ $55, auction_type = 2';
0192 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0193 runmkt('t_auction_case', q, p, 1120, 100, [], [], mpopt);
0194 cp2 = cp;
0195 t_is( cq, cq5, 8, [t ' : quantities'] );
0196 t_is( cp(G,:), cp5(G,:)*fro_X, 8, [t ' : gen prices'] );
0197 t_is( cp(L(1),:), cp5(L(1),:)*fro_X, 8, [t ' : load 1 price'] );
0198 t_is( cp(L(2),:), 55, 5, [t ' : load 2 price'] );
0199 t_is( cp(L(3),:), 60, 5, [t ' : load 3 price'] );
0200
0201 t = 'one marginal bid @ $55, auction_type = 3';
0202 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0203 runmkt('t_auction_case', q, p, 1130, 100, [], [], mpopt);
0204 cp3 = cp;
0205 t_is( cq, cq5, 8, [t ' : quantities'] );
0206 t_is( cp, cp5, 7, [t ' : prices'] );
0207
0208 t = 'one marginal bid @ $55, auction_type = 4';
0209 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0210 runmkt('t_auction_case', q, p, 1140, 100, [], [], mpopt);
0211 cp4 = cp;
0212 t_is( cq, cq5, 8, [t ' : quantities'] );
0213 t_is( cp(G(1),:), 50, 5, [t ' : gen 1 price'] );
0214 t_is( cp(G(2:6),:), cp5(G(2:6),:)*frb_X, 8, [t ' : gen 2-6 prices'] );
0215 t_is( cp(L,:), cp5(L,:)*frb_X, 8, [t ' : load prices'] );
0216
0217 t = 'one marginal bid @ $55, auction_type = 6';
0218 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0219 runmkt('t_auction_case', q, p, 1160, 100, [], [], mpopt);
0220 t_is( cq, cq5, 8, [t ' : quantities'] );
0221 t_is( cp, cp1, 8, [t ' : prices'] );
0222
0223 p2 = p;
0224 p2(G,:) = [ 0 0 100;
0225 0 0 100;
0226 0 0 100;
0227 0 0 100;
0228 0 0 100;
0229 0 0 100 ];
0230 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0231 runmkt('t_auction_case', q, p2, 1160, 100, [], [], mpopt);
0232 t_is( cq, cq5, 3, [t ' : quantities'] );
0233 t_is( cp(G,:), cp5(G,:)*frb_X, 3, [t ' : gen prices'] );
0234 t_is( cp(L,:), cp4(L,:), 3, [t ' : load prices'] );
0235
0236 t = 'one marginal bid @ $55, auction_type = 7';
0237 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0238 runmkt('t_auction_case', q, p, 1170, 100, [], [], mpopt);
0239 t_is( cq, cq5, 8, [t ' : quantities'] );
0240 t_is( cp, cp5 * (lao_X+lab_X)/2, 8, [t ' : prices'] );
0241 t_is( cp, (cp1 + cp3) / 2, 8, [t ' : prices'] );
0242
0243 t = 'one marginal bid @ $55, auction_type = 8';
0244 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0245 runmkt('t_auction_case', q, p, 1180, 100, [], [], mpopt);
0246 t_is( cq, cq5, 8, [t ' : quantities'] );
0247 t_is( cp(G,:), cp1(G,:), 8, [t ' : gen prices'] );
0248 t_is( cp(L,:), cp3(L,:), 8, [t ' : load prices'] );
0249
0250 t = 'one marginal bid @ $55, auction_type = 0';
0251 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0252 runmkt('t_auction_case', q, p, 1100, 100, [], [], mpopt);
0253 t_is( cq, cq5, 8, [t ' : quantities'] );
0254 t_is( cp, p, 8, [t ' : prices'] );
0255
0256
0257
0258 p(L(2),2) = 54.5;
0259 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 5';
0260 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0261 runmkt('t_auction_case', q, p, 1150, 100, [], [], mpopt);
0262 cq5 = cq;
0263 cp5 = cp;
0264 Qfudge = zeros(size(p));
0265 Qfudge(L,:) = diag(gen(L,QG) ./ gen(L,PG) .* bus(Lbus, LAM_Q)) * ones(size(p(L,:)));
0266
0267 t_is( cq(G(1),2:3), [23.74 0], 2, t );
0268 t_is( cp(G(1),:), 50, 4, t );
0269 t_is( cq(L(2),1:2), [10 0.39], 2, t );
0270 t_is( cp(L(2),:), 54.5, 4, t );
0271 t_is( cp(G,1), bus(Gbus, LAM_P), 8, [t ' : gen prices'] );
0272 t_is( cp(L,1), bus(Lbus, LAM_P) + Qfudge(L,1), 8, [t ' : load prices'] );
0273
0274 lao_X = p(G(1),2)/bus(Gbus(1), LAM_P);
0275 fro_X = p(G(6),3)/bus(Gbus(6), LAM_P);
0276 lab_X = p(L(2),2)/(bus(Lbus(2), LAM_P) + Qfudge(L(2),1));
0277 frb_X = p(L(3),3)/(bus(Lbus(3), LAM_P) + Qfudge(L(3),1));
0278
0279 t_is( lao_X, 1, 4, 'lao_X');
0280 t_is( fro_X, 1.1221, 4, 'fro_X');
0281 t_is( lab_X, 1, 4, 'lab_X');
0282 t_is( frb_X, 0.8976, 4, 'frb_X');
0283
0284 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 1';
0285 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0286 runmkt('t_auction_case', q, p, 1110, 100, [], [], mpopt);
0287 cp1 = cp;
0288 t_is( cq, cq5, 8, [t ' : quantities'] );
0289 t_is( cp, cp5, 4, [t ' : prices'] );
0290
0291 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 2';
0292 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0293 runmkt('t_auction_case', q, p, 1120, 100, [], [], mpopt);
0294 cp2 = cp;
0295 t_is( cq, cq5, 8, [t ' : quantities'] );
0296 t_is( cp(G,:), cp5(G,:)*fro_X, 5, [t ' : gen prices'] );
0297 t_is( cp(L(1),:), cp5(L(1),:)*fro_X, 5, [t ' : load 1 price'] );
0298 t_is( cp(L(2),:), 54.5, 5, [t ' : load 2 price'] );
0299 t_is( cp(L(3),:), 60, 5, [t ' : load 3 price'] );
0300
0301 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 3';
0302 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0303 runmkt('t_auction_case', q, p, 1130, 100, [], [], mpopt);
0304 cp3 = cp;
0305 t_is( cq, cq5, 8, [t ' : quantities'] );
0306 t_is( cp, cp5, 6, [t ' : prices'] );
0307
0308 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 4';
0309 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0310 runmkt('t_auction_case', q, p, 1140, 100, [], [], mpopt);
0311 cp4 = cp;
0312 t_is( cq, cq5, 8, [t ' : quantities'] );
0313 t_is( cp(G(1),:), 50, 5, [t ' : gen 1 price'] );
0314 t_is( cp(G(2:5),:), cp5(G(2:5),:)*frb_X, 8, [t ' : gen 2-5 prices'] );
0315 t_is( cp(G(6),:), 48, 5, [t ' : gen 6 price'] );
0316 t_is( cp(L,:), cp5(L,:)*frb_X, 8, [t ' : load prices'] );
0317
0318 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 6';
0319 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0320 runmkt('t_auction_case', q, p, 1160, 100, [], [], mpopt);
0321 t_is( cq, cq5, 8, [t ' : quantities'] );
0322 t_is( cp, cp5, 4, [t ' : prices'] );
0323
0324 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 7';
0325 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0326 runmkt('t_auction_case', q, p, 1170, 100, [], [], mpopt);
0327 t_is( cq, cq5, 8, [t ' : quantities'] );
0328 t_is( cp, cp5, 4, [t ' : prices'] );
0329
0330 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 8';
0331 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0332 runmkt('t_auction_case', q, p, 1180, 100, [], [], mpopt);
0333 t_is( cq, cq5, 8, [t ' : quantities'] );
0334 t_is( cp, cp5, 4, [t ' : prices'] );
0335
0336 t = 'marginal offer @ $50, bid @ $54.50, auction_type = 0';
0337 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0338 runmkt('t_auction_case', q, p, 1100, 100, [], [], mpopt);
0339 t_is( cq, cq5, 8, [t ' : quantities'] );
0340 t_is( cp, p, 8, [t ' : prices'] );
0341
0342
0343
0344 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 5';
0345 p(L(2),2) = 50;
0346 p2 = p;
0347 p2(G(1),2:3) = [65 65];
0348 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0349 runmkt('t_auction_case', q, p2, 1150, 100, [], [], mpopt);
0350 Qfudge = zeros(size(p));
0351 Qfudge(L,:) = diag(gen(L,QG) ./ gen(L,PG) .* bus(Lbus, LAM_Q)) * ones(size(p(L,:)));
0352
0353 t_is( cp(G(1),:), 65, 4, [t ' : gen 1 price'] );
0354 t_is( cp(G(2),:), 54.2974, 4, [t ' : gen 2 price'] );
0355 cq5 = cq;
0356 cp5 = cp;
0357 cp_lam = cp5;
0358 cp_lam(1,:) = bus(Gbus(1), LAM_P);
0359
0360 lao_X = p2(G(6),2)/bus(Gbus(6), LAM_P);
0361 fro_X = p2(G(6),3)/bus(Gbus(6), LAM_P);
0362 lab_X = p2(L(3),2)/(bus(Lbus(3), LAM_P) + Qfudge(L(3),1));
0363 frb_X = p2(L(2),2)/(bus(Lbus(2), LAM_P) + Qfudge(L(2),1));
0364
0365 t_is( lao_X, 0.8389, 4, 'lao_X');
0366 t_is( fro_X, 1.0487, 4, 'fro_X');
0367 t_is( lab_X, 1, 4, 'lab_X');
0368 t_is( frb_X, 0.8569, 4, 'frb_X');
0369
0370 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 1';
0371 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0372 runmkt('t_auction_case', q, p2, 1110, 100, [], [], mpopt);
0373 cp1 = cp;
0374 t_is( cq, cq5, 8, [t ' : quantities'] );
0375 t_is( cp(G(1),:), 65, 8, [t ' : gen 1 price'] );
0376 t_is( cp(G(2:6),:), cp_lam(G(2:6),:)*lao_X, 8, [t ' : gen 2-6 prices'] );
0377 t_is( cp(L,:), cp_lam(L,:)*lao_X, 8, [t ' : load prices'] );
0378
0379 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 2';
0380 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0381 runmkt('t_auction_case', q, p2, 1120, 100, [], [], mpopt);
0382 t_is( cq, cq5, 8, [t ' : quantities'] );
0383 t_is( cp(G(1),:), 65, 8, [t ' : gen 1 price'] );
0384 t_is( cp(G(2:6),:), cp_lam(G(2:6),:)*fro_X, 8, [t ' : gen 2-6 prices'] );
0385 t_is( cp(L(1:2),:), cp_lam(L(1:2),:)*fro_X, 8, [t ' : load 1-2 prices'] );
0386 t_is( cp(L(3),:), 60, 8, [t ' : load 3 price'] );
0387
0388 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 3';
0389 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0390 runmkt('t_auction_case', q, p2, 1130, 100, [], [], mpopt);
0391 cp3 = cp;
0392 t_is( cq, cq5, 8, [t ' : quantities'] );
0393 t_is( cp(G(1),:), 65, 8, [t ' : gen 1 price'] );
0394 t_is( cp(G(2:6),:), cp_lam(G(2:6),:), 6, [t ' : gen 2-6 prices'] );
0395 t_is( cp(L,:), cp_lam(L,:), 6, [t ' : load prices'] );
0396
0397 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 4';
0398 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0399 runmkt('t_auction_case', q, p2, 1140, 100, [], [], mpopt);
0400 cp4 = cp;
0401 t_is( cq, cq5, 8, [t ' : quantities'] );
0402 t_is( cp(G(1),:), 65, 5, [t ' : gen 1 price'] );
0403 t_is( cp(G(2:6),:), cp5(G(2:6),:)*frb_X, 8, [t ' : gen 2-6 prices'] );
0404 t_is( cp(L,:), cp5(L,:)*frb_X, 8, [t ' : load prices'] );
0405
0406 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 6';
0407 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0408 runmkt('t_auction_case', q, p2, 1160, 100, [], [], mpopt);
0409 t_is( cq, cq5, 8, [t ' : quantities'] );
0410 t_is( cp, cp4, 8, [t ' : prices'] );
0411
0412 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 7';
0413 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0414 runmkt('t_auction_case', q, p2, 1170, 100, [], [], mpopt);
0415 t_is( cq, cq5, 8, [t ' : quantities'] );
0416 t_is( cp(G(1),:), 65, 4, [t ' : gen 1 price'] );
0417 t_is( cp(G(2:6),:), cp_lam(G(2:6),:) * (lao_X+lab_X)/2, 8, [t ' : gen 2-6 prices'] );
0418 t_is( cp(L,:), cp_lam(L,:) * (lao_X+lab_X)/2, 8, [t ' : load prices'] );
0419 t_is( cp, (cp1 + cp3) / 2, 8, [t ' : prices'] );
0420
0421 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 8';
0422 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0423 runmkt('t_auction_case', q, p2, 1180, 100, [], [], mpopt);
0424 t_is( cq, cq5, 8, [t ' : quantities'] );
0425 t_is( cp(G,:), cp1(G,:), 8, [t ' : prices'] );
0426 t_is( cp(L,:), cp3(L,:), 8, [t ' : prices'] );
0427
0428 t = 'gen 1 @ Pmin, marginal bid @ $60, auction_type = 0';
0429 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0430 runmkt('t_auction_case', q, p2, 1100, 100, [], [], mpopt);
0431 t_is( cq, cq5, 8, [t ' : quantities'] );
0432 t_is( cp, p2, 8, [t ' : prices'] );
0433
0434
0435
0436 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 5';
0437 p2(L,:) = [ 100 100 100;
0438 100 0 0;
0439 100 100 0 ];
0440 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0441 runmkt('t_auction_case', q, p2, 1150, 100, [], [], mpopt);
0442 Qfudge = zeros(size(p));
0443 Qfudge(L,:) = diag(gen(L,QG) ./ gen(L,PG) .* bus(Lbus, LAM_Q)) * ones(size(p(L,:)));
0444
0445 t_is( cp(G(1),:), 65, 4, [t ' : gen 1 price'] );
0446 t_is( cp(G(2),:), 57.1612, 4, [t ' : gen 2 price'] );
0447 cq5 = cq;
0448 cp5 = cp;
0449 cp_lam = cp5;
0450 cp_lam(1,:) = bus(Gbus(1), LAM_P);
0451
0452 lao_X = p2(G(6),3)/bus(Gbus(6), LAM_P);
0453 fro_X = p2(G(1),3)/bus(Gbus(1), LAM_P);
0454 lab_X = p2(L(3),2)/(bus(Lbus(3), LAM_P) + Qfudge(L(3),1));
0455 frb_X = p2(L(2),2)/(bus(Lbus(2), LAM_P) + Qfudge(L(2),1));
0456
0457 t_is( lao_X, 1, 4, 'lao_X');
0458 t_is( fro_X, 1.1425, 4, 'fro_X');
0459 t_is( lab_X, 1.5813, 4, 'lab_X');
0460 t_is( frb_X, 0, 4, 'frb_X');
0461
0462 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 1';
0463 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0464 runmkt('t_auction_case', q, p2, 1110, 100, [], [], mpopt);
0465 cp1 = cp;
0466 t_is( cq, cq5, 8, [t ' : quantities'] );
0467 t_is( cp, cp5, 6, [t ' : prices'] );
0468
0469 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 2';
0470 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0471 runmkt('t_auction_case', q, p2, 1120, 100, [], [], mpopt);
0472 t_is( cq, cq5, 8, [t ' : quantities'] );
0473 t_is( cp, cp_lam*fro_X, 8, [t ' : prices'] );
0474
0475 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 3';
0476 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0477 runmkt('t_auction_case', q, p2, 1130, 100, [], [], mpopt);
0478 cp3 = cp;
0479 t_is( cq, cq5, 8, [t ' : quantities'] );
0480 t_is( cp, cp_lam*lab_X, 8, [t ' : prices'] );
0481
0482 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 4';
0483 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0484 runmkt('t_auction_case', q, p2, 1140, 100, [], [], mpopt);
0485 t_is( cq, cq5, 8, [t ' : quantities'] );
0486 t_is( cp(G,1), [65;40;42;44;46;60], 4, [t ' : gen prices'] );
0487 t_is( cp(L,:), cp_lam(L,:)*frb_X, 8, [t ' : prices'] );
0488
0489 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 6';
0490 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0491 runmkt('t_auction_case', q, p2, 1160, 100, [], [], mpopt);
0492 t_is( cq, cq5, 8, [t ' : quantities'] );
0493 t_is( cp, cp_lam*fro_X, 8, [t ' : prices'] );
0494
0495 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 7';
0496 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0497 runmkt('t_auction_case', q, p2, 1170, 100, [], [], mpopt);
0498 t_is( cq, cq5, 8, [t ' : quantities'] );
0499 t_is( cp, cp_lam * (lao_X+lab_X)/2, 8, [t ' : prices'] );
0500 t_is( cp, (cp_lam + cp3) / 2, 7, [t ' : prices'] );
0501
0502 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 8';
0503 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0504 runmkt('t_auction_case', q, p2, 1180, 100, [], [], mpopt);
0505 t_is( cq, cq5, 8, [t ' : quantities'] );
0506 t_is( cp(G,:), cp5(G,:), 7, [t ' : prices'] );
0507 t_is( cp(L,:), cp3(L,:), 8, [t ' : prices'] );
0508
0509 t = 'gen 1 @ Pmin, marginal offer @ $60, auction_type = 0';
0510 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0511 runmkt('t_auction_case', q, p2, 1100, 100, [], [], mpopt);
0512 t_is( cq, cq5, 8, [t ' : quantities'] );
0513 t_is( cp, p2, 8, [t ' : prices'] );
0514
0515
0516
0517 p(G(2),:) = p(G(2),:) + 100;
0518
0519 t = 'price of decommited gen, auction_type = 5';
0520 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0521 runmkt('t_auction_case', q, p, 1150, 200, [], [], mpopt);
0522 cp5 = cp;
0523 Qfudge = zeros(size(p));
0524 Qfudge(L,:) = diag(gen(L,QG) ./ gen(L,PG) .* bus(Lbus, LAM_Q)) * ones(size(p(L,:)));
0525 t_is(sum(cq(2,:)), 0, 8, t);
0526 t_is(cp(2,1), 59.194, 3, t);
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538
0539 lao_X = p(G(6),3)/bus(Gbus(6), LAM_P);
0540 fro_X = p(G(1),3)/bus(Gbus(1), LAM_P);
0541 lab_X = p(L(1),2)/(bus(Lbus(1), LAM_P) + Qfudge(L(1),1));
0542 frb_X = p(L(1),3)/(bus(Lbus(1), LAM_P) + Qfudge(L(1),1));
0543
0544 t_is( lao_X, 1, 4, 'lao_X');
0545 t_is( fro_X, 1.0212, 4, 'fro_X');
0546 t_is( lab_X, 1.1649, 4, 'lab_X');
0547 t_is( frb_X, 0.9985, 4, 'frb_X');
0548
0549 t = 'price of decommited gen, auction_type = 1';
0550 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0551 runmkt('t_auction_case', q, p, 1110, 200, [], [], mpopt);
0552 t_is(cp(2,1), 59.194, 3, t);
0553
0554 t = 'price of decommited gen, auction_type = 2';
0555 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0556 runmkt('t_auction_case', q, p, 1120, 200, [], [], mpopt);
0557 t_is(cp(2,1), cp5(2,1)*fro_X, 3, t);
0558
0559 t = 'price of decommited gen, auction_type = 3';
0560 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0561 runmkt('t_auction_case', q, p, 1130, 200, [], [], mpopt);
0562 t_is(cp(2,1), cp5(2,1)*lab_X, 3, t);
0563
0564 t = 'price of decommited gen, auction_type = 4';
0565 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0566 runmkt('t_auction_case', q, p, 1140, 200, [], [], mpopt);
0567 t_is(cp(2,1), cp5(2,1)*frb_X, 3, t);
0568
0569 t = 'price of decommited gen, auction_type = 6';
0570 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0571 runmkt('t_auction_case', q, p, 1160, 200, [], [], mpopt);
0572 t_is(cp(2,1), cp5(2,1)*fro_X, 3, t);
0573
0574 t = 'price of decommited gen, auction_type = 7';
0575 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0576 runmkt('t_auction_case', q, p, 1170, 200, [], [], mpopt);
0577 t_is(cp(2,1), cp5(2,1)*(lao_X+lab_X)/2, 3, t);
0578
0579 t = 'price of decommited gen, auction_type = 0';
0580 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0581 runmkt('t_auction_case', q, p, 1100, 200, [], [], mpopt);
0582 t_is(cp(2,1), 120, 3, t);
0583
0584 t = 'single block, marginal offer @ $50, auction_type = 5';
0585 q = [
0586 60;
0587 36;
0588 36;
0589 36;
0590 36;
0591 36;
0592 30;
0593 10;
0594 20;
0595 ];
0596
0597 p = [
0598 50;
0599 40;
0600 42;
0601 44;
0602 46;
0603 48;
0604 100;
0605 100;
0606 100;
0607 ];
0608
0609 [MVAbase, cq, cp, bus, gen, gencost, branch, f, dispatch, success, et] = ...
0610 runmkt('t_auction_case', q, p, 1150, 100, [], [], mpopt);
0611 t_is( cq(G(1)), 35.32, 2, t );
0612 t_is( cq(G(2:6)), q(G(2:6)), 8, [t ' : gen qtys'] );
0613 t_is( cp(G(1)), 50, 4, t );
0614 t_is( cq(L), q(L), 8, [t ' : load qtys'] );
0615 t_is( cp(L(2),:), 54.03, 2, t );
0616 t_is( cp(G), bus(Gbus, LAM_P), 8, [t ' : gen prices'] );
0617 Qfudge = zeros(size(p));
0618 Qfudge(L,:) = diag(gen(L,QG) ./ gen(L,PG) .* bus(Lbus, LAM_Q)) * ones(size(p(L,:)));
0619 t_is( cp(L), bus(Lbus, LAM_P) + Qfudge(L,1), 8, [t ' : load prices'] );
0620 end
0621
0622 t_end;