===BBCPOP.180321===
Refactored.

===BBPOPtoCOP.180107===
Added computeUbdIXBetter.m
Added BBCPOPtoDNN.m and solveDNN.m which restrict functions of BBPOPtoCOP.m and solveCOP.m


===BBPOPtoCOP.170829===
Added partitionBlk.m UnionBlk.m (not effective)
    To activate, set params.cliqueMIP = true; (default: false);
Added findLongChain.m (effective)
    To activate, set params.findLongChain = true; (default: false);


===BBPOPtoCOP.170807===
Refactored BP and projK1K2_fista_dualK
Added options:
    paramBP.stabilize (Kojima sensei's idea. default: true)
    paramBP.improveInitY (default: false.)
    paramBP.ignoreKKT (default: false. If true, it ignores breakyes==1).
    paramBP.heuristicFISTA (default: true. 
            If false, FISTA ignores heuristic stopping criteria.)
    paramBP.computeR (default: false)
    paramBP.gamma (default: 100)
             to check      f(xk) > 2 * gamma * R / (k + 1)^2
    paramBP.restart (default: true)


===BBPOPtoCOP.170310===
Modified so that it computes a valid lower bound with SDPNAL+.

Added an option params.maxtime.
    BP, BPabcd, projK1K2_fista_dualK, projK1K2K3_abcd_dual. 

===BBPOPtoCOP.170306===
added 'sort' options into addPoly.m
    which has been already added into multiplyPoly(), simplifyPoly(), etc.

added varTransPoly.m
    Affine transformation of polynomial.

Modified solveCOP.m
    Added params.Lag.


===BBPOPtoCOP.170222===
Fixed a bug at Line 40 of genNullMat.m (used in COPsdpnal())
    NMat = sparse(NMatrow, momentIdx, val, numEq, numelBlk);
    -> NMat = sparse(NMatrow, momentIdx, val, numEq, sum(numelBlk));

Fixed a bug in genPolyCone()
    sparseSize = sum(cellfun(@(x) length(x), sparseIdxSupports).^2);
    denseSize = length(denseIdxSupports{1})^2;
    ->
    sparseEigTime = sum(cellfun(@(x) size(x, 1), sparseIdxSupports).^3);
    denseEigTime = size(denseIdxSupports{1}, 1)^3;

    length(A) returns the maximum dimension?

Modified install.m so that it can run at both BBPOPtoCOP/ and BBPOPtoCOP/solver
    The older version can run only at BBPOPtoCOP/solver

===BBPOPtoCOP.170213=== 
Fixed a bug in estimateUbdIX().
    for e = find(~S) -> for e = find(~S)' 

Reduced a redundunt constraint in COPtoSedumi().
    i.e., if norm(H1vec) == 0, then it does not add H1vec' * x = 0.

Added improveByIPM().

Added COPsdpnal() which replaces sdpnalSedumi().


===BBPOPtoCOP.170131=== 
Newly supports equality constraints (Should this package be renamed as POPtoCOP or something?)
    Usage:
     old) [Q0vec, H0vec, H1vec, PSDcone, polyCone, UbdIX] ...
                = BBPOPtoCOP(objPoly, I01, Icomp, params);
     new) [Q0vec, H0vec, Qpvecs, PSDcone, polyCone, UbdIX] ...
                = BBPOPtoCOP(objPoly, polySys, I01, Icomp, params);

    Each column of Qpvecs corresponds to each equality constraints

BP with ABCD method is now available
    BPabcd.m and projK1K2K3_abcd_dual.m are added.
    To use the ABCD method, set params.solver = 'BPabcd' or 'BPabcdH1'.

Implemented a prototype of homotopy BP
    Set params.solver = 'homotopyBP';

Modified fastUnique.m 
    Sort random vector to align x_1,...,x_n.

===BBPOPtoCOP.170112===
Added absolute stopping criteria to BP.m
Slightly refactored BP.m (the previous version is restored as BPold.m)
Added projK1K2K3_abcd_dual.m but it is not used currently.
Fixed a bug of projOntoPolyConeMex.m
    it was crashed if there is no chain.

===BBPOPtoCOP.161213===
Added robustBPM
Added SDPNAL+

Changed the function names in order to avoid conflicts with SDPNAL+
   blkEig.m -> blkEigBP.m
   blkprojSDP.m -> blkprojSDPBP.m

Modified stopping criteria of projK1K2_fista_dualK.m as
   compeigX = inf -> compeigX = 50 (compute err4 and err5 more frequently.)

Optimized projOntoPolyCone.m
   added new fields into 'polyCone' at BBPOPtoCOP.m to avoid recomputation.
   added new mex function mexProxIsotonicNew.cpp to avoid for-loop and overhead.


===BBPOPtoCOP.161003===
Fixed Bugs
    * genEqIneq.m
       chain = chain(:, sum(chain, 1) > 2);
       --> chain = chain(:, sum(chain, 1) >= 2);
    * BBPOPtoCOP.m
       objPoly = simplifyPoly(objPoly, I01, true);
       --> objPoly = simplifyPoly(objPoly, I01, false);

===BBPOPtoCOP.160912===
Moved instances (data and generators) into ./instances
    * prepared README files
    ** modified BroydenBand.m, BroydenTri.m, ChainedSingular.m, ChainedWood.m, 
        genRandomPOP.m to be simpler and faster.
    ** Read functions (qapread.m, MISPread.m, etc.) are not completed.

Merged genClique.m into genCliques.m 
    *** fixed as it takes complementarity conditions into consideration


===BBPOPtoCOP.160825===
Change the output format of BBPOPtoCOP.m
    Old: [Q0vec, H0vec, PSDcone, polyCone] = BBPOPtoCOP(objPoly, I01, Icomp, params);
    New: [Q0vec, H0vec, H1vec, PSDcone, polyCone, UbdIX] = BBPOPtoCOP(objPoly, I01, Icomp, params);

    If params.LagDNN = false, then H1vec is the all zero vector.

Change the input format of solveCOP.m
    Old: [sol, info] = solveCOP(Q0vec, H0vec, PSDcone, polyCone, params);
    New: [sol, info] = solveCOP(Q0vec, H0vec, H1vec, PSDcone, polyCone, params);

    params.lambda is a penalty parameter.
    params.rho is a nuclear norm regulariser parameter.
    i.e., the objective function is Q0vec + params.lambda * H1vec + params.rho * I;

Add the functions LagDNN(), genH1vec(), and estimateUbdIX() into BBPOPtoCOP.m
    The implementation of the submodular covering may not be efficient.

Modify genEqIneq.m
    Accelerate the chain decomposition by changing data structure.
    Accelerate generating eq0Var.

Add fastUnique.m which is super fast and substitutes grevlexUnique.m
Add genClique.m which is substantially faster than sPOPgenClique.m
