Dear Dr. Zimmerman, Thanks for the suggestion! I wrote my own python code to construct SCUC with contingencies, it was a lot faster (~seconds). Also I remember I wrote my own Matlab code for SCUC with contingencies (using YALMIP), it took 2~3 minute to construct a case like 118bus. I really don't know why MOST could be so slow.
Thanks, Steven On Mon, Apr 6, 2020 at 11:55 AM Ray Daniel Zimmerman <[email protected]> wrote: > I am not surprised. By including 245 contingencies, you have made the > problem 245 times larger. In general, given the problem formulation that > MOST uses for handling contingencies, it is not practical to simply add a > complete list of contingencies directly to the problem except for the very > smallest systems. Effective use of MOST with contingencies requires a very > careful selection of a limited subset of contingencies that “cover” in some > sense the worst cases and are representative of the outages that can > happen. This contingency selection process is itself a non-trivial problem. > > I should also note that there have been improvements in the versions of > MATPOWER and MOST available on GitHub since the release of version 7 that > improve the performance of constructing very large cases. But that won’t > change the fact that you constructing a *very* large case. > > Ray > > > > > On Apr 4, 2020, at 3:12 PM, Steven G <[email protected]> wrote: > > Dear Matpower users, > I'm solving SCUC using MOST, but it was extremely slow to formulate the > problem with contingency scenarios. > > For example, I'm running the following code (case_ACTIVSg200), it took > more than 2 hours to formulate one instance of SCUC. Without contingencies, > one SCUC is formulated in 3 seconds. > > clear; > > define_constants; > nt = 24; % 24 hours > area_ind = 2:7; > na = length(area_ind); % 6 areas > > mpc = loadcase('case_ACTIVSg200'); > mpc.bus(:, BUS_AREA) = mpc.bus(:, ZONE); > ng = size(mpc.gen,1); > > scenarios = scenarios_ACTIVSg200; % get a change table > > xgd.colnames = > {'CommitKey','CommitSched','MinUp','MinDown','InitialState'}; > xgd.data = [ones(ng,1), ones(ng,1), ones(ng,1),ones(ng,1), zeros(ng,1)]; > xgd = loadxgendata(xgd, mpc); > > indices = (1:nt*na); % indices for the load scenarios of the first day > load_data = scenarios(indices, end); % last column: loads of 6 areas > area_load1 = reshape(load_data, na, nt)'; % nt-by-na matrix > profiles = struct( ... > 'type', 'mpcData', ... > 'table', CT_TAREALOAD, ... > 'rows', area_ind, ... > 'col', CT_LOAD_ALL_P, ... > 'chgtype', CT_REP, ... > 'values', [] ); > profiles.values(:, 1, :) = area_load1; > > " OutmailID: 124525657, List: 'matpower-l', MemberID: 78095970 SCRIPT: > "perform UC regardless of mdo.UC.CommitKey, consider DC line flow > constraints > mpopt = mpoption('most.uc.run',1,'most.dc_model', 1, 'most.skip_prices', > 1); > > " TCL MERGE ERROR ( 04/06/2020 11:54:34 ): "invalid command name "perform" > Construct MOST struct > mdi = loadmd(mpc, nt, xgd, [], [], profiles); % WITHOUT contingencies > % contab = contab_ACTIVSg200; > % mdi = loadmd(mpc, nt, xgd, [], contab, profiles); % WITH contingencies > mdo = most(mdi,mpopt); > > > Thanks, > Steven > > > <test_most.m> > > >
