Skip to content

Commit e129b5a

Browse files
committed
Update t_opf_dc_mosek() for MOSEK 11.x.
1 parent 95647b0 commit e129b5a

File tree

3 files changed

+34
-59
lines changed

3 files changed

+34
-59
lines changed

CHANGES.md

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ For change history for [MOST][3], see [most/CHANGES.md](most/CHANGES.md).
1313
since 8.0
1414
---------
1515

16+
#### 3/8/25
17+
- Update `t_opf_dc_mosek()` (and `mosek_options()` in MP-Opt-Model) for
18+
MOSEK 11.x.
19+
1620
#### 2/17/25
1721
- Fix [bug #256][38] to make `opf.use_vg` option compatible with generators
1822
at PQ buses.

lib/mpver.m

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
v{1} = struct( 'Name', 'MATPOWER', ...
3737
'Version', '8.0.1-dev', ...
3838
'Release', '', ...
39-
'Date', '01-Mar-2025' );
39+
'Date', '08-Mar-2025' );
4040
if nargout > 0
4141
if nargin > 0
4242
rv = v{1};

lib/t/t_opf_dc_mosek.m

+29-58
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function t_opf_dc_mosek(quiet)
22
% t_opf_dc_mosek - Tests for legacy DC optimal power flow using MOSEK solver.
33

44
% MATPOWER
5-
% Copyright (c) 2004-2024, Power Systems Engineering Research Center (PSERC)
5+
% Copyright (c) 2004-2025, Power Systems Engineering Research Center (PSERC)
66
% by Ray Zimmerman, PSERC Cornell
77
%
88
% This file is part of MATPOWER.
@@ -17,63 +17,33 @@ function t_opf_dc_mosek(quiet)
1717

1818
if s.av
1919
sc = mosek_symbcon;
20-
if s.vnum < 7
21-
alg_names = { %% version 6.x
22-
'default', %% 0 : MSK_OPTIMIZER_FREE
23-
'interior point', %% 1 : MSK_OPTIMIZER_INTPNT
24-
'<conic>', %% 2 : MSK_OPTIMIZER_CONIC
25-
'<qcone>', %% 3 : MSK_OPTIMIZER_QCONE
26-
'primal simplex', %% 4 : MSK_OPTIMIZER_PRIMAL_SIMPLEX
27-
'dual simplex', %% 5 : MSK_OPTIMIZER_DUAL_SIMPLEX
28-
'primal dual simplex', %% 6 : MSK_OPTIMIZER_PRIMAL_DUAL_SIMPLEX
29-
'automatic simplex', %% 7 : MSK_OPTIMIZER_FREE_SIMPLEX
30-
'<mixed int>', %% 8 : MSK_OPTIMIZER_MIXED_INT
31-
'<nonconvex>', %% 9 : MSK_OPTIMIZER_NONCONVEX
32-
'concurrent' %% 10 : MSK_OPTIMIZER_CONCURRENT
33-
};
34-
elseif s.vnum < 8
35-
alg_names = { %% version 7.x
36-
'default', %% 0 : MSK_OPTIMIZER_FREE
37-
'interior point', %% 1 : MSK_OPTIMIZER_INTPNT
38-
'<conic>', %% 2 : MSK_OPTIMIZER_CONIC
39-
'primal simplex', %% 3 : MSK_OPTIMIZER_PRIMAL_SIMPLEX
40-
'dual simplex', %% 4 : MSK_OPTIMIZER_DUAL_SIMPLEX
41-
'primal dual simplex', %% 5 : MSK_OPTIMIZER_PRIMAL_DUAL_SIMPLEX
42-
'automatic simplex', %% 6 : MSK_OPTIMIZER_FREE_SIMPLEX
43-
'network simplex', %% 7 : MSK_OPTIMIZER_NETWORK_PRIMAL_SIMPLEX
44-
'<mixed int conic>', %% 8 : MSK_OPTIMIZER_MIXED_INT_CONIC
45-
'<mixed int>', %% 9 : MSK_OPTIMIZER_MIXED_INT
46-
'concurrent', %% 10 : MSK_OPTIMIZER_CONCURRENT
47-
'<nonconvex>' %% 11 : MSK_OPTIMIZER_NONCONVEX
48-
};
49-
else
50-
alg_names = { %% version 8.x
51-
'<conic>', %% 0 : MSK_OPTIMIZER_CONIC
52-
'dual simplex', %% 1 : MSK_OPTIMIZER_DUAL_SIMPLEX
53-
'default', %% 2 : MSK_OPTIMIZER_FREE
54-
'automatic simplex', %% 3 : MSK_OPTIMIZER_FREE_SIMPLEX
55-
'interior point', %% 4 : MSK_OPTIMIZER_INTPNT
56-
'<mixed int>', %% 5 : MSK_OPTIMIZER_MIXED_INT
57-
'primal simplex' %% 6 : MSK_OPTIMIZER_PRIMAL_SIMPLEX
58-
};
59-
end
60-
algs = [ %% v6.x v7.x v8.x
61-
sc.MSK_OPTIMIZER_FREE; %% 0 0 2
62-
sc.MSK_OPTIMIZER_INTPNT; %% 1 1 4
63-
sc.MSK_OPTIMIZER_PRIMAL_SIMPLEX; %% 4 3 6
64-
sc.MSK_OPTIMIZER_DUAL_SIMPLEX; %% 5 4 1
65-
sc.MSK_OPTIMIZER_FREE_SIMPLEX; %% 7 6 3
66-
];
20+
21+
alg_name = struct( ...
22+
'FREE', 'default', ... % v6-11
23+
'INTPNT', 'interior point', ... % v6-11
24+
'CONIC', '<conic>', ... % v6-11
25+
'QCONE', '<qcone>', ... % v6
26+
'PRIMAL_SIMPLEX', 'primal simplex', ... % v6-11
27+
'DUAL_SIMPLEX', 'dual simplex', ... % v6-11
28+
'PRIMAL_DUAL_SIMPLEX', 'primal dual simplex', ... % v6-7
29+
'FREE_SIMPLEX', 'automatic simplex', ... % v6-11
30+
'MIXED_INT', '<mixed int>', ... % v6-11
31+
'NONCONVEX', '<nonconvex>', ... % v6-7
32+
'CONCURRENT', 'concurrent', ... % v6-7
33+
'NETWORK_PRIMAL_SIMPLEX', 'network simplex', ... % v8
34+
'NEW_DUAL_SIMPLEX', 'new dual simplex', ... % v11
35+
'NEW_PRIMAL_SIMPLEX', 'new primal simplex' ... % v11
36+
);
37+
38+
%% versions 6.x-11.x
39+
algs = {'FREE', 'INTPNT', 'PRIMAL_SIMPLEX', 'DUAL_SIMPLEX', 'FREE_SIMPLEX'};
6740
if s.vnum < 8
68-
algs(end+1) = ...
69-
sc.MSK_OPTIMIZER_PRIMAL_DUAL_SIMPLEX; %% 6 5 -
70-
algs(end+1) = ...
71-
sc.MSK_OPTIMIZER_CONCURRENT; %% 10 10 -
41+
%% versions 6.x, 7.x
42+
algs = {algs{:}, 'PRIMAL_DUAL_SIMPLEX', 'CONCURRENT'};
43+
elseif s.vnum >= 11 && s.vnum < 12
44+
%% version 11.x
45+
algs = {algs{:}, 'NEW_PRIMAL_SIMPLEX', 'NEW_DUAL_SIMPLEX'};
7246
end
73-
% if s.vnum >= 7 && s.vnum < 8 %% MOSEK claims OPF is not a network problem
74-
% algs(end+1) = ...
75-
% sc.MSK_OPTIMIZER_NETWORK_PRIMAL_SIMPLEX;%% - 7 -
76-
% end
7747
else
7848
algs = 0;
7949
end
@@ -104,8 +74,9 @@ function t_opf_dc_mosek(quiet)
10474
%% run DC OPF
10575
if s.av %% if have_feature('mosek')
10676
for k = 1:length(algs)
107-
mpopt = mpoption(mpopt, 'mosek.lp_alg', algs(k));
108-
t0 = sprintf('DC OPF (MOSEK %s): ', alg_names{algs(k)+1});
77+
alg = sc.(['MSK_OPTIMIZER_' algs{k}]);
78+
mpopt = mpoption(mpopt, 'mosek.lp_alg', alg);
79+
t0 = sprintf('DC OPF (MOSEK %s): ', alg_name.(algs{k}));
10980

11081
%% set up indices
11182
ib_data = [1:BUS_AREA BASE_KV:VMIN];

0 commit comments

Comments
 (0)