Hybrid accelerated DCA for solving the Asymmetric Eigenvalue Complementarity Problem (AEiCP).
This project is supported by the National Natural Science Foundation of China (Grant No: 11601327).
Run install.m
to install the toolbox on MATLAB.
This toolbox is developed based on the DCAM toolbox, see here.
Three AEiCP models are considered. Seven DCA-type algorithms are implemented, including:
- BDCA with exact and inexact line search (BDCAe and BDCAa)
- ADCA
- InDCA
- Hybrid DCA with Line search and Inertial force (HDCA-LI)
- Hybrid DCA with Nesterov's extrapolation and Inertial force (HDCA-NI)
- The classical DCA
See the article here for more details about these models and algorithms.
@Misc{niu2023HDCA,
title = {Accelerated DC Algorithms for the Asymmetric Eigenvalue Complementarity Problem},
author = {Yi-Shuai Niu},
year = {2023},
eprint={2305.12076},
archivePrefix={arXiv},
url = {https://arxiv.org/abs/2305.12076}
}
This toolbox depends on MOSEK
for solving the linear and quadratic convex subproblems.
The compared optimization solvers are KNITRO
, FILTERSD
, IPOPT
and MATLAB FMINCON
. Please make sure that you have installed the corresponding solvers on MATLAB for comparison.
The Asymmetric Eigenvalue Complementarity Problem (AEiCP) involves finding complementary eigenvectors
where
Here is a step-by-step example illustrating how to use different types of DCA algorithms to solve this problem:
- Generate a random AEiCP:
n=10;
randbnd=[-1,1];
T=rand(n)*(randbnd(2)-randbnd(1))+randbnd(1);
mu = -min([0,eigs(T+T',1,'smallestreal')]);
A=T+mu*eye(n);
B=eye(n);
- Set the initial point
$x^0$ :
We use random initialization
x0.x = rand(n,1);
x0.x = x0.x/sum(x0.x);
x0.y = rand(n,1);
x0.w = B*x0.x - A*x0.y;
x0.z = sum(x0.y);
- Create a DC function object and a DC programming problem object:
dcf=dcfunc;
dcf.f=@(X,n,A,B,opt)fobj_eval_f1(X,n,A,B,opt);
mydcp=dcp(dcf,[]);
In the function fobj_eval_f1
, we use the first DC formulation (DCP1) proposed in the paper here, defined as:
where
and
- Create and setup a DCA-type algorithm object
mydca = dca(mydcp,x0);
mydca.model='DCP1';
mydca.A=A;
mydca.B=B;
mydca.verbose=true;
mydca.plot=false;
mydca.tolf=0;
mydca.tolx=0;
mydca.maxiter=200;
mydca.linesearch = false;
mydca.nesterov = true;
mydca.inertial = true;
mydca.maxiter
is the maximum number of iterations for DCA-type algorithm, mydca.tolf
and mydca.tolx
are stopping tolerences such that we will terminate the algorithm if one of the stopping conditions
mydca.tolf=0
, mydca.tolf=0
and mydca.xopt=200
, which means the algorithm will terminate after 200 iterations.
Note that three boolean parameters mydca.linesearch
, mydca.nesterov
, and mydca.inertial
are important for choosing different DCA-type algorithms. The settings in mydca
for each DCA-type algorithm (DCA|ADCA|BDCAe|BDCAa|ADCA|InDCA|HDCA-LI|HDCA-NI) are summarized below:
Algorithms | Settings |
---|---|
DCA | linesearch = 0; nesterov = 0; inertial = 0; |
BDCAe | linesearch = 1; nesterov = 0; inertial = 0; linesearch_type='exact'; |
BDCAa | linesearch = 1; nesterov = 0; inertial = 0; linesearch_type='armijo'; |
ADCA | linesearch = 0; nesterov = 1; inertial = 0; adca_q > 0; restartperiod = inf|>0; |
InDCA | linesearch = 0; nesterov = 0; inertial = 1; |
HDCA-LI | linesearch = 1; nesterov = 0; inertial = 1; linesearch_type='exact'|'armijo'; |
HDCA-NI | linesearch = 0; nesterov = 1; inertial = 1; adca_q > 0; restartperiod = inf|>0; |
- Optimization
status=mydca.optimize();
See more examples and advanced optional settings in the folder tests
.
Three datasets for AEiCP: RAND1
, RAND2
and NEP
are available.
See GEN_NEP.m
and GEN_RANDEICP.m
to generate these datasets.
Released under MIT license