diff --git a/ICML19/Arxiv version/iALM_main.pdf b/ICML19/Arxiv version/iALM_main.pdf index 38e9f8d..f89bd31 100644 Binary files a/ICML19/Arxiv version/iALM_main.pdf and b/ICML19/Arxiv version/iALM_main.pdf differ diff --git a/tex/journal_drafts/figures/Slater.pdf b/tex/journal_drafts/figures/Slater.pdf new file mode 100644 index 0000000..b412356 Binary files /dev/null and b/tex/journal_drafts/figures/Slater.pdf differ diff --git a/tex/journal_drafts/figures/Slater.pptx b/tex/journal_drafts/figures/Slater.pptx new file mode 100644 index 0000000..6cb6377 Binary files /dev/null and b/tex/journal_drafts/figures/Slater.pptx differ diff --git a/tex/journal_drafts/journal_main.aux b/tex/journal_drafts/journal_main.aux new file mode 100644 index 0000000..aa36420 --- /dev/null +++ b/tex/journal_drafts/journal_main.aux @@ -0,0 +1,196 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\citation{khot2011grothendieck,lovasz2003semidefinite} +\citation{mossel2015consistency,song2007dependence} +\citation{singer2011angular,singer2011three} +\citation{raghavendra2008optimal} +\citation{yurtsever2018conditional} +\citation{burer2003nonlinear,burer2005local} +\citation{pataki1998rank,barvinok1995problems} +\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{2}{section.1}} +\newlabel{intro}{{1}{2}{Introduction}{section.1}{}} +\newlabel{prob:01}{{1}{2}{Introduction}{equation.1.1}{}} +\newlabel{eq:smoothness basic}{{2}{2}{Introduction}{equation.1.2}{}} +\@writefile{toc}{\contentsline {paragraph}{\textbf {Vignette: Burer-Monteiro splitting.}}{2}{section*.1}} +\newlabel{eq:sdp}{{3}{2}{\textbf {Vignette: Burer-Monteiro splitting.}}{equation.1.3}{}} +\citation{boumal2016non,waldspurger2018rank} +\citation{luenberger1984linear} +\newlabel{prob:nc}{{4}{3}{\textbf {Vignette: Burer-Monteiro splitting.}}{equation.1.4}{}} +\newlabel{eq:minmax}{{5}{3}{\textbf {Vignette: Burer-Monteiro splitting.}}{equation.1.5}{}} +\newlabel{eq:Lagrangian}{{6}{3}{\textbf {Vignette: Burer-Monteiro splitting.}}{equation.1.6}{}} +\newlabel{e:exac}{{7}{3}{\textbf {Vignette: Burer-Monteiro splitting.}}{equation.1.7}{}} +\newlabel{eq:dual-update}{{8}{3}{\textbf {Vignette: Burer-Monteiro splitting.}}{equation.1.8}{}} +\@writefile{toc}{\contentsline {paragraph}{\emph {\textbf {Contributions.}} }{3}{section*.2}} +\newlabel{eq:new update}{{9}{3}{\emph {\textbf {Contributions.}}}{equation.1.9}{}} +\citation{rockafellar2009variational} +\newlabel{sec:preliminaries}{{2}{4}{Preliminaries}{section.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Preliminaries }{4}{section.2}} +\@writefile{toc}{\contentsline {paragraph}{\textbf {\emph {Notation.}}}{4}{section*.3}} +\newlabel{eq:defn of prox}{{10}{4}{\textbf {\emph {Notation.}}}{equation.2.10}{}} +\newlabel{sec:opt cnds}{{2}{4}{\textbf {\emph {{Necessary optimality conditions.}}}}{section*.4}{}} +\@writefile{toc}{\contentsline {paragraph}{\textbf {\emph {{Necessary optimality conditions.}}} }{4}{section*.4}} +\newlabel{e:inclu1}{{12}{4}{\textbf {\emph {{Necessary optimality conditions.}}}}{equation.2.12}{}} +\newlabel{e:inclu2}{{13}{4}{\textbf {\emph {{Necessary optimality conditions.}}}}{equation.2.13}{}} +\citation{bolte2014proximal} +\newlabel{eq:local-min}{{14}{5}{\textbf {\emph {{Necessary optimality conditions.}}}}{equation.2.14}{}} +\@writefile{toc}{\contentsline {paragraph}{\emph {\textbf {Technical lemmas.}}}{5}{section*.5}} +\newlabel{lem:smoothness}{{1}{5}{\emph {\textbf {Technical lemmas.}}}{lemma.1}{}} +\newlabel{eq:smoothness of Lagrangian}{{17}{5}{\emph {\textbf {Technical lemmas.}}}{equation.2.17}{}} +\newlabel{def:grad map}{{1}{5}{\emph {\textbf {Technical lemmas.}}}{definition.1}{}} +\newlabel{eq:grad map}{{19}{5}{\emph {\textbf {Technical lemmas.}}}{equation.2.19}{}} +\citation{bolte2018nonconvex} +\newlabel{lem:11}{{2}{6}{\emph {\textbf {Technical lemmas.}}}{lemma.2}{}} +\newlabel{e:deslem}{{21}{6}{\emph {\textbf {Technical lemmas.}}}{equation.2.21}{}} +\newlabel{lem:eval Lipsc cte}{{3}{6}{\emph {\textbf {Technical lemmas.}}}{lemma.3}{}} +\newlabel{eq:defn of x+gamma}{{22}{6}{\emph {\textbf {Technical lemmas.}}}{equation.2.22}{}} +\newlabel{eq:defn of gamma line search}{{23}{6}{\emph {\textbf {Technical lemmas.}}}{equation.2.23}{}} +\newlabel{eq:moreover}{{24}{6}{\emph {\textbf {Technical lemmas.}}}{equation.2.24}{}} +\newlabel{sec:slater}{{3}{6}{Uniform Regularity}{section.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Uniform Regularity }{6}{section.3}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Solving (1) can be particularly difficult, even when it is a convex program. As an example, this figure shows a pathological case, where the Slater\IeC {\textquoteright }s condition does not apply. See Section\nobreakspace {}\ref {sec:slater} for more details.}}{6}{figure.1}} +\newlabel{fig:convex_slater}{{1}{6}{Solving (1) can be particularly difficult, even when it is a convex program. As an example, this figure shows a pathological case, where the Slater’s condition does not apply. See Section~\ref {sec:slater} for more details}{figure.1}{}} +\newlabel{defn:nonconvex slater}{{2}{7}{Uniform Regularity}{definition.2}{}} +\newlabel{eq:new slater defn}{{25}{7}{Uniform Regularity}{equation.3.25}{}} +\@writefile{toc}{\contentsline {paragraph}{\textbf {\emph {Jacobian $\operatorname {D}A$.}}}{7}{section*.6}} +\@writefile{toc}{\contentsline {paragraph}{\textbf {\emph {Subspace $S$.}}}{7}{section*.7}} +\newlabel{eq:defn_nu_A}{{26}{7}{\textbf {\emph {Subspace $S$.}}}{equation.3.26}{}} +\@writefile{toc}{\contentsline {paragraph}{\emph {\textbf {Convex case.}}}{7}{section*.8}} +\newlabel{eq:nu for cvx}{{27}{8}{\emph {\textbf {Convex case.}}}{equation.3.27}{}} +\newlabel{prop:convex}{{1}{8}{\emph {\textbf {Convex case.}}}{proposition.1}{}} +\@writefile{toc}{\contentsline {paragraph}{\emph {\textbf {Beyond the Slater's condition.}}}{8}{section*.9}} +\citation{bertsekas1976penalty} +\@writefile{toc}{\contentsline {section}{\numberline {4}Linearized AL Algorithm}{9}{section.4}} +\newlabel{Algo:2}{{4}{9}{Linearized AL Algorithm}{section.4}{}} +\@writefile{loa}{\contentsline {algorithm}{\numberline {1}{\ignorespaces HoLAL algorithm for solving problem \textup {\hbox {\mathsurround \z@ \normalfont (\ignorespaces \ref {prob:01}\unskip \@@italiccorr )}}}}{9}{algorithm.1}} +\newlabel{lem:bnd bnd Ak}{{4}{9}{Linearized AL Algorithm}{lemma.4}{}} +\newlabel{eq:low-bnd-on-nu-lemma}{{28}{9}{Linearized AL Algorithm}{equation.4.28}{}} +\newlabel{eq:bnd on Ak final}{{29}{10}{Linearized AL Algorithm}{equation.4.29}{}} +\newlabel{thm:main}{{1}{10}{Linearized AL Algorithm}{theorem.4.1}{}} +\newlabel{eq:low-bnd-on-regularity}{{32}{10}{Linearized AL Algorithm}{equation.4.32}{}} +\citation{nouiehed2018convergence} +\newlabel{eq:rates-thm}{{33}{11}{Linearized AL Algorithm}{equation.4.33}{}} +\@writefile{toc}{\contentsline {paragraph}{\textbf {\emph {Convergence rates.}}}{11}{section*.10}} +\@writefile{toc}{\contentsline {paragraph}{\emph {\textbf {Uniform regularity.}}}{11}{section*.11}} +\@writefile{toc}{\contentsline {paragraph}{\emph {\textbf {Subspace $S$.}}}{11}{section*.12}} +\@writefile{toc}{\contentsline {paragraph}{\textbf {\emph {Faster rates.}}}{11}{section*.13}} +\citation{o2017behavior} +\citation{Glowinski1975,Gabay1976,Boyd2011} +\newlabel{sec:local-opt}{{5}{12}{Local Optimality}{section.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5}Local Optimality }{12}{section.5}} +\@writefile{toc}{\contentsline {paragraph}{\emph {\textbf {Special case.}}}{12}{section*.14}} +\@writefile{toc}{\contentsline {paragraph}{\textbf {\emph {General case.}}}{12}{section*.15}} +\@writefile{toc}{\contentsline {section}{\numberline {6}Linearized ADMM}{13}{section.6}} +\newlabel{eq:admm 2}{{37}{13}{Linearized ADMM}{equation.6.37}{}} +\newlabel{eq:smoothness basics admm}{{38}{13}{Linearized ADMM}{equation.6.38}{}} +\newlabel{eq:lagrangian admm}{{39}{13}{Linearized ADMM}{equation.6.39}{}} +\newlabel{eq:admm main}{{40}{13}{Linearized ADMM}{equation.6.40}{}} +\newlabel{eq:grad map admm}{{41}{13}{Linearized ADMM}{equation.6.41}{}} +\newlabel{eq:line search x admm}{{44}{14}{Linearized ADMM}{equation.6.44}{}} +\newlabel{eq:defn of gamma line search admm}{{45}{14}{Linearized ADMM}{equation.6.45}{}} +\newlabel{Algo:3}{{6}{14}{Linearized ADMM}{equation.6.45}{}} +\@writefile{loa}{\contentsline {algorithm}{\numberline {2}{\ignorespaces Linearized ADMM for solving problem \textup {\hbox {\mathsurround \z@ \normalfont (\ignorespaces \ref {eq:admm main}\unskip \@@italiccorr )}}}}{14}{algorithm.2}} +\newlabel{thm:main admm}{{2}{14}{Linearized ADMM}{theorem.6.2}{}} +\citation{hestenes1969multiplier,powell1978fast} +\citation{bertsekas1999nonlinear,bertsekas2014constrained,lan2016iteration,nedelcu2014computational} +\citation{wang2015global,liu2017linearized} +\citation{burer2003nonlinear,burer2005local} +\citation{BKS15:Dropping-Convexity} +\citation{park2016provable} +\newlabel{eq:low-bnd-on-regularity}{{47}{15}{Linearized ADMM}{equation.6.47}{}} +\newlabel{eq:rates-thm}{{48}{15}{Linearized ADMM}{equation.6.48}{}} +\newlabel{sec:related work}{{7}{15}{Related Works}{section.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7}Related Works }{15}{section.7}} +\citation{boumal2014manopt,boumal2016global} +\citation{boumal2016global} +\citation{clason2018acceleration} +\citation{chambolle2011first} +\citation{bhojanapalli2018smoothed} +\citation{doi:10.1137/15M1031631} +\newlabel{sec:experiments}{{8}{16}{Experiments}{section.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {8}Experiments }{16}{section.8}} +\newlabel{sec:proof-of-main}{{A}{16}{Proof of Theorem \ref {thm:main}}{appendix.A}{}} +\@writefile{toc}{\contentsline {section}{\numberline {A}Proof of Theorem \ref {thm:main} }{16}{appendix.A}} +\newlabel{eq:update uk recall}{{49}{16}{Proof of Theorem \ref {thm:main}}{equation.A.49}{}} +\newlabel{eq:y update recall}{{50}{16}{Proof of Theorem \ref {thm:main}}{equation.A.50}{}} +\newlabel{eq:grad map recall}{{51}{17}{Proof of Theorem \ref {thm:main}}{equation.A.51}{}} +\newlabel{eq:smoothness rep}{{53}{17}{Proof of Theorem \ref {thm:main}}{equation.A.53}{}} +\newlabel{eq:y update unfolded}{{54}{17}{Proof of Theorem \ref {thm:main}}{equation.A.54}{}} +\newlabel{eq:key ineq}{{55}{17}{Proof of Theorem \ref {thm:main}}{equation.A.55}{}} +\newlabel{eq:long chain broken}{{57}{18}{Proof of Theorem \ref {thm:main}}{equation.A.57}{}} +\newlabel{eq:defn mu}{{58}{18}{Proof of Theorem \ref {thm:main}}{equation.A.58}{}} +\newlabel{eq:beta n sigma}{{59}{18}{Proof of Theorem \ref {thm:main}}{equation.A.59}{}} +\newlabel{eq:consequences}{{60}{19}{Proof of Theorem \ref {thm:main}}{equation.A.60}{}} +\newlabel{eq:long chain broken 10}{{61}{19}{Proof of Theorem \ref {thm:main}}{equation.A.61}{}} +\newlabel{eq:to be used for feas pre}{{63}{20}{Proof of Theorem \ref {thm:main}}{equation.A.63}{}} +\newlabel{eq:defn of BK}{{65}{20}{Proof of Theorem \ref {thm:main}}{equation.A.65}{}} +\newlabel{eq:to be used for feas}{{66}{20}{Proof of Theorem \ref {thm:main}}{equation.A.66}{}} +\newlabel{eq:to be used later on}{{67}{20}{Proof of Theorem \ref {thm:main}}{equation.A.67}{}} +\newlabel{eq:final bnd on G}{{68}{20}{Proof of Theorem \ref {thm:main}}{equation.A.68}{}} +\newlabel{eq:final bnd on feas gap}{{69}{21}{Proof of Theorem \ref {thm:main}}{equation.A.69}{}} +\newlabel{eq:overall bnd raw}{{70}{21}{Proof of Theorem \ref {thm:main}}{equation.A.70}{}} +\newlabel{eq:dual growth}{{71}{21}{Proof of Theorem \ref {thm:main}}{equation.A.71}{}} +\newlabel{eq:Bk evaluated}{{72}{21}{Proof of Theorem \ref {thm:main}}{equation.A.72}{}} +\newlabel{eq:smoothness at k}{{73}{21}{Proof of Theorem \ref {thm:main}}{equation.A.73}{}} +\newlabel{eq:low bnd on gammas}{{74}{21}{Proof of Theorem \ref {thm:main}}{equation.A.74}{}} +\newlabel{eq:exact dependences}{{76}{22}{Proof of Theorem \ref {thm:main}}{equation.A.76}{}} +\newlabel{eq:rate of feas gap}{{77}{22}{Proof of Theorem \ref {thm:main}}{equation.A.77}{}} +\newlabel{eq:suff cnd on nu-1}{{79}{22}{Proof of Theorem \ref {thm:main}}{equation.A.79}{}} +\newlabel{eq:cnd-on-nu-proof}{{82}{23}{Proof of Theorem \ref {thm:main}}{equation.A.82}{}} +\newlabel{sec:ADMM theory}{{B}{23}{Proof of Theorem \ref {thm:main admm}}{appendix.B}{}} +\@writefile{toc}{\contentsline {section}{\numberline {B}Proof of Theorem \ref {thm:main admm} }{23}{appendix.B}} +\newlabel{lem:smoothness admm}{{5}{23}{Proof of Theorem \ref {thm:main admm}}{lemma.5}{}} +\newlabel{eq:smoothness of Lagrangian admm}{{85}{23}{Proof of Theorem \ref {thm:main admm}}{equation.B.85}{}} +\newlabel{eq:local-lipschitz-admm}{{86}{23}{Proof of Theorem \ref {thm:main admm}}{equation.B.86}{}} +\newlabel{def:grad map admm}{{3}{23}{Proof of Theorem \ref {thm:main admm}}{definition.3}{}} +\newlabel{eq:grad map admm}{{87}{23}{Proof of Theorem \ref {thm:main admm}}{equation.B.87}{}} +\newlabel{lem:11 admm}{{6}{23}{Proof of Theorem \ref {thm:main admm}}{lemma.6}{}} +\newlabel{e:deslem}{{6}{23}{Proof of Theorem \ref {thm:main admm}}{equation.B.88}{}} +\newlabel{eq:deslem admm}{{89}{23}{Proof of Theorem \ref {thm:main admm}}{equation.B.89}{}} +\newlabel{lem:eval Lipsc cte admm}{{7}{24}{Proof of Theorem \ref {thm:main admm}}{lemma.7}{}} +\newlabel{eq:defn of gamma line search admm}{{91}{24}{Proof of Theorem \ref {thm:main admm}}{equation.B.91}{}} +\newlabel{eq:moreover admm}{{92}{24}{Proof of Theorem \ref {thm:main admm}}{equation.B.92}{}} +\newlabel{eq:ADMM updates recall}{{93}{24}{Proof of Theorem \ref {thm:main admm}}{equation.B.93}{}} +\newlabel{eq:decrease twice}{{96}{24}{Proof of Theorem \ref {thm:main admm}}{equation.B.96}{}} +\newlabel{eq:defn of w}{{97}{25}{Proof of Theorem \ref {thm:main admm}}{equation.B.97}{}} +\newlabel{eq:to-be-projected-admm}{{103}{25}{Proof of Theorem \ref {thm:main admm}}{equation.B.103}{}} +\newlabel{sec:proof of smoothness lemma}{{C}{25}{Proof of Lemma \ref {lem:smoothness}}{appendix.C}{}} +\@writefile{toc}{\contentsline {section}{\numberline {C}Proof of Lemma \ref {lem:smoothness}}{25}{appendix.C}} +\newlabel{sec:proof of descent lemma}{{D}{26}{Proof of Lemma \ref {lem:11}}{appendix.D}{}} +\@writefile{toc}{\contentsline {section}{\numberline {D}Proof of Lemma \ref {lem:11}}{26}{appendix.D}} +\newlabel{eq:descent pr 1}{{111}{26}{Proof of Lemma \ref {lem:11}}{equation.D.111}{}} +\newlabel{eq:opt of prox}{{112}{26}{Proof of Lemma \ref {lem:11}}{equation.D.112}{}} +\newlabel{sec:proof of linesearch}{{E}{27}{Proof of Lemma \ref {lem:eval Lipsc cte}}{appendix.E}{}} +\@writefile{toc}{\contentsline {section}{\numberline {E}Proof of Lemma \ref {lem:eval Lipsc cte}}{27}{appendix.E}} +\newlabel{eq:optimality of uplus}{{114}{27}{Proof of Lemma \ref {lem:eval Lipsc cte}}{equation.E.114}{}} +\newlabel{sec:proof of prop}{{F}{27}{Proof of Proposition \ref {prop:convex}}{appendix.F}{}} +\@writefile{toc}{\contentsline {section}{\numberline {F}Proof of Proposition \ref {prop:convex} }{27}{appendix.F}} +\newlabel{eq:no feas}{{116}{27}{Proof of Proposition \ref {prop:convex}}{equation.F.116}{}} +\newlabel{eq:counter-assump}{{117}{27}{Proof of Proposition \ref {prop:convex}}{equation.F.117}{}} +\newlabel{eq:counter-assump-rewritten}{{118}{27}{Proof of Proposition \ref {prop:convex}}{equation.F.118}{}} +\newlabel{sec:proof of bnd Ak}{{G}{28}{Proof of Lemma \ref {lem:bnd bnd Ak}}{appendix.G}{}} +\@writefile{toc}{\contentsline {section}{\numberline {G}Proof of Lemma \ref {lem:bnd bnd Ak} }{28}{appendix.G}} +\newlabel{eq:bndness in slater proof}{{119}{28}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.119}{}} +\newlabel{eq:to be projected}{{121}{28}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.121}{}} +\newlabel{eq:defn of dual cone}{{122}{28}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.122}{}} +\newlabel{eq:before Sk}{{123}{28}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.123}{}} +\newlabel{eq:defn of S}{{124}{28}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.124}{}} +\newlabel{eq:pre norm}{{125}{28}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.125}{}} +\newlabel{eq:post norm}{{126}{28}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.126}{}} +\newlabel{eq:slater proof 0}{{127}{29}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.127}{}} +\newlabel{eq:slater proof 1}{{129}{29}{Proof of Lemma \ref {lem:bnd bnd Ak}}{equation.G.129}{}} diff --git a/tex/journal_drafts/journal_main.out b/tex/journal_drafts/journal_main.out new file mode 100644 index 0000000..3d109c0 --- /dev/null +++ b/tex/journal_drafts/journal_main.out @@ -0,0 +1,15 @@ +\BOOKMARK [1][-]{section.1}{Introduction}{}% 1 +\BOOKMARK [1][-]{section.2}{Preliminaries }{}% 2 +\BOOKMARK [1][-]{section.3}{Uniform Regularity }{}% 3 +\BOOKMARK [1][-]{section.4}{Linearized AL Algorithm}{}% 4 +\BOOKMARK [1][-]{section.5}{Local Optimality }{}% 5 +\BOOKMARK [1][-]{section.6}{Linearized ADMM}{}% 6 +\BOOKMARK [1][-]{section.7}{Related Works }{}% 7 +\BOOKMARK [1][-]{section.8}{Experiments }{}% 8 +\BOOKMARK [1][-]{appendix.A}{Proof of Theorem 1 }{}% 9 +\BOOKMARK [1][-]{appendix.B}{Proof of Theorem 2 }{}% 10 +\BOOKMARK [1][-]{appendix.C}{Proof of Lemma 1}{}% 11 +\BOOKMARK [1][-]{appendix.D}{Proof of Lemma 2}{}% 12 +\BOOKMARK [1][-]{appendix.E}{Proof of Lemma 3}{}% 13 +\BOOKMARK [1][-]{appendix.F}{Proof of Proposition 1 }{}% 14 +\BOOKMARK [1][-]{appendix.G}{Proof of Lemma 4 }{}% 15 diff --git a/tex/journal_drafts/journal_main.pdf b/tex/journal_drafts/journal_main.pdf new file mode 100644 index 0000000..c580193 Binary files /dev/null and b/tex/journal_drafts/journal_main.pdf differ diff --git a/tex/journal_drafts/journal_main.synctex.gz b/tex/journal_drafts/journal_main.synctex.gz new file mode 100644 index 0000000..5b0dd11 Binary files /dev/null and b/tex/journal_drafts/journal_main.synctex.gz differ diff --git a/tex/journal_drafts/journal_main.tex b/tex/journal_drafts/journal_main.tex new file mode 100644 index 0000000..e98354d --- /dev/null +++ b/tex/journal_drafts/journal_main.tex @@ -0,0 +1,135 @@ +%%%%%%%%%%%%%%%%%%%%%%% file template.tex %%%%%%%%%%%%%%%%%%%%%%%%% +% +% This is a general template file for the LaTeX package SVJour3 +% for Springer journals. Springer Heidelberg 2010/09/16 +% +% Copy it to a new file with a new name and use it as the basis +% for your article. Delete % signs as needed. +% +% This template includes a few options for different layouts and +% content for various journals. Please consult a previous issue of +% your journal as needed. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% First comes an example EPS file -- just ignore it and +% proceed on the \documentclass line +% your LaTeX will extract the file if required +%\begin{filecontents*}{example.eps} +%%!PS-Adobe-3.0 EPSF-3.0 +%%%BoundingBox: 19 19 221 221 +%%%CreationDate: Mon Sep 29 1997 +%%%Creator: programmed by hand (JK) +%%%EndComments +%gsave +%newpath +% 20 20 moveto +% 20 220 lineto +% 220 220 lineto +% 220 20 lineto +%closepath +%2 setlinewidth +%gsave +% .4 setgray fill +%grestore +%stroke +%grestore +%\end{filecontents*} +% +\RequirePackage{fix-cm} +% +%\documentclass{svjour3} % onecolumn (standard format) +%\documentclass[smallcondensed]{svjour3} % onecolumn (ditto) +\documentclass[smallextended]{svjour3} % onecolumn (second format) +%\documentclass[twocolumn]{svjour3} % twocolumn +% +\smartqed % flush right qed marks, e.g. at end of proof +% +\usepackage{graphicx} +% +% \usepackage{mathptmx} % use Times fonts if available on your TeX system +% +% insert here the call for the packages your document requires +%\usepackage{latexsym} +% etc. +% +% please place your own definitions here and don't use \def but +% \newcommand{}{} +% +% Insert the name of "your journal" with + \journalname{Math Programming Comp.} +%c +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{graphicx} +\usepackage{algorithm} +\usepackage{color} +\usepackage{cite} + +\usepackage{hyperref} + +\input{preamble.tex} +\begin{document} + +\title{Linearized augmented Lagrangian framework for solving non-convex problems\thanks{This project has received funding from...} +} +%\subtitle{Do you have a subtitle?\\ If so, write it here} + +%\titlerunning{Short form of title} % if too long for running head + +\author{Ahmet/Fatih \and + Armin \and + Volkan \and + who else? +} + +\authorrunning{author et. al.} % if too long for running head + +%\institute{F. Author \at +% first address \\ +% Tel.: +123-45-678910\\ +% Fax: +123-45-678910\\ +% \email{fauthor@example.com} % \\ +% \emph{Present address:} of F. Author % if needed +% \and +% S. Author \at +% second address +% } + +\date{Received: / Accepted: } +% The correct dates will be entered by the editor + + +\maketitle + +\input{sections/abstract.tex} +\input{sections/introduction.tex} +\input{sections/preliminaries.tex} +\input{sections/slater.tex} +\input{sections/LinAL.tex} +\input{sections/local_optimality.tex} +\input{sections/ADMM.tex} +\input{sections/related_works.tex} +\input{sections/experiments.tex} +\appendix +\input{sections/LinAL_theory.tex} +%\input{sections/adaptive_theory.tex} +\input{sections/ADMM_theory.tex} +\input{sections/appendix.tex} + + +%\begin{acknowledgements} +%If you'd like to thank anyone, place your comments here +%and remove the percent signs. +%\end{acknowledgements} + +% BibTeX users please use one of +%\bibliographystyle{spbasic} % basic style, author-year citations +%\bibliographystyle{spmpsci} % mathematics and physical sciences +%\bibliographystyle{spphys} % APS-like style for physics +%\bibliography{bibliography.bib} % name your BibTeX data base + + +\end{document} +% end of file template.tex + diff --git a/tex/journal_drafts/preamble.tex b/tex/journal_drafts/preamble.tex new file mode 100644 index 0000000..2fe5541 --- /dev/null +++ b/tex/journal_drafts/preamble.tex @@ -0,0 +1,150 @@ +\PassOptionsToPackage{normalem}{ulem} +\newcommand{\minimize}[2]{\ensuremath{\underset{\substack{{#1}}}% +{\mathrm{minimize}}\;\;#2 }} +\newcommand{\Argmind}[2]{\ensuremath{\underset{\substack{{#1}}}% +{\mathrm{Argmin}}\;\;#2 }} +\newcommand{\Frac}[2]{\displaystyle{\frac{#1}{#2}}} +\newcommand{\menge}[2]{\big\{{#1} \;|\; {#2}\big\}} +\newcommand{\Pair}[2]{{\big\langle{{#1},{#2}}\big\rangle}} +\newcommand{\pair}[2]{{\langle{{#1},{#2}}\rangle}} +\newcommand{\Scal}[2]{{\bigg\langle{{#1}\:\bigg |~{#2}}\bigg\rangle}} +\newcommand{\Menge}[2]{\bigg\{{#1}~\bigg|~{#2}\bigg\}} +\newcommand{\lev}[1]{\ensuremath{\mathrm{lev}_{\leq #1}\:}} +\newcommand{\enve}[1]{\ensuremath{\operatorname{env}#1}} +\newcommand{\emp}{\ensuremath{{\varnothing}}} +\newcommand{\bdry}{\ensuremath{\operatorname{bdry}}} +\newcommand{\yosi}[2]{\ensuremath{\sideset{^{#2}}{}{\operatorname{}}\!\!#1}} +\newcommand{\infconv}{\ensuremath{\mbox{\small$\,\square\,$}}} +\newcommand{\scal}[2]{\left\langle{#1}\mid {#2} \right\rangle} +\newcommand{\pscal}[2]{\langle\langle{#1}\mid{#2}\rangle\rangle} +\newcommand{\norm}[1]{\|#1\|} +\newcommand{\vuo}{\ensuremath{\mbox{\footnotesize$\square$}}} +\newcommand{\exi}{\ensuremath{\exists\,}} +\newcommand{\zeroun}{\ensuremath{\left]0,1\right[}} +\newcommand{\HH}{\ensuremath{\mathcal H}} +\newcommand{\GG}{\ensuremath{\mathcal G}} +\newcommand{\YY}{\ensuremath{\mathcal Y}} +\newcommand{\XX}{\ensuremath{\mathcal X}} +\newcommand{\bary}{\ensuremath{\widetilde{\boldsymbol{y}}}} +\newcommand{\barp}{\ensuremath{\widetilde{\boldsymbol{p}}}} +\newcommand{\barq}{\ensuremath{\widetilde{\boldsymbol{q}}}} +\newcommand{\barx}{\ensuremath{\widetilde{\boldsymbol{x}}}} +\newcommand{\BL}{\ensuremath{\EuScript B}\,} +\newcommand{\BP}{\ensuremath{\EuScript P}} +\newcommand{\HHH}{\ensuremath{\boldsymbol{\mathcal H}}} +\newcommand{\WW}{\ensuremath{\boldsymbol{\mathcal W}}} +\newcommand{\KKK}{\ensuremath{\boldsymbol{\mathcal K}}} +\newcommand{\GGG}{\ensuremath{\boldsymbol{\mathcal G}}} +\newcommand{\VV}{\ensuremath{\boldsymbol{V}}} +\newcommand{\CCC}{\ensuremath{\boldsymbol{C}}} +\newcommand{\MM}{\ensuremath{\boldsymbol{M}}} +\newcommand{\SG}{\ensuremath{\boldsymbol{S}}} +\newcommand{\EE}{\ensuremath{\boldsymbol{E}}} +\newcommand{\XP}{\ensuremath{\mathcal X}^*} +\newcommand{\sri}{\ensuremath{\operatorname{sri}}} +\newcommand{\ri}{\ensuremath{\operatorname{ri}\,}} +\newcommand{\RR}{\ensuremath{\mathbb R}} +\newcommand{\KK}{\ensuremath{\mathcal K}} +\newcommand{\RP}{\ensuremath{\left[0,+\infty\right[}} +\newcommand{\RPP}{\ensuremath{\,\left]0,+\infty\right[}} +\newcommand{\RX}{\ensuremath{\,\left]-\infty,+\infty\right]}} +\newcommand{\NN}{\ensuremath{\mathbb N}} +\newcommand{\SL}{\ensuremath{\EuScript S}\,} +\newcommand{\dom}{\ensuremath{\operatorname{dom}}} +\newcommand{\cont}{\ensuremath{\operatorname{cont}}} +%\newcommand{\gr}{\ensuremath{\operatorname{gra}}} +\newcommand{\prox}{\ensuremath{\operatorname{prox}}} +\newcommand{\Prox}{\ensuremath{\operatorname{Prox}}} +\newcommand{\intdom}{\ensuremath{\operatorname{int}\operatorname{dom}}\,} +\newcommand{\inte}{\ensuremath{\operatorname{int}}} +\newcommand{\cart}{\ensuremath{\mbox{\huge{$\times$}}}} +\newcommand{\scart}{\ensuremath{\mbox{\LARGE{$\times$}}}} +\newcommand{\WC}{\ensuremath{{\mathfrak W}}} +\newcommand{\TT}{\ensuremath{{\mathbf T}}} +\newcommand{\SC}{\ensuremath{{\mathfrak S}}} +\newcommand{\rh}{\ensuremath{{\mathrm a}}} +\newcommand{\og}{\ensuremath{{\mathrm b}}} +\newcommand{\rk}{\ensuremath{{\mathsf {\mathbf a}}}} +\newcommand{\ck}{\ensuremath{{\mathsf {\mathbf u}}}} +\newcommand{\xk}{\ensuremath{{\mathsf{\mathbf x}}}} +\newcommand{\yk}{\ensuremath{{\mathsf{\mathbf y}}}} +\newcommand{\RPX}{\ensuremath{{[0,\pinf]}}} +\newcommand{\card}{\ensuremath{\operatorname{card}}} +\newcommand{\bd}{\ensuremath{\operatorname{bdry}}} +\newcommand{\Argmin}{\ensuremath{\operatorname{Argmin}}} +\newcommand{\argmin}{\ensuremath{\operatorname{argmin}}} +\newcommand{\ran}{\ensuremath{\operatorname{ran}}} +\newcommand{\zer}{\ensuremath{\operatorname{zer}}} +\newcommand{\gra}{\ensuremath{\operatorname{gra}}} +\newcommand{\conv}{\ensuremath{\operatorname{conv}}} +\newcommand{\vv}{\ensuremath{\boldsymbol{v}}} +\newcommand{\sss}{\ensuremath{\boldsymbol{s}}} +\newcommand{\xx}{\ensuremath{\boldsymbol{x}}} +\newcommand{\xs}{\ensuremath{\textsf{x}}} +\newcommand{\xo}{\ensuremath{\overline{\boldsymbol{x}}}} +\newcommand{\pp}{\ensuremath{\boldsymbol{p}}} +\newcommand{\qq}{\ensuremath{\boldsymbol{q}}} +\newcommand{\yy}{\ensuremath{\boldsymbol{y}}} +\newcommand{\ff}{\ensuremath{\boldsymbol{f}}} +\newcommand{\hh}{\ensuremath{\boldsymbol{h}}} +\newcommand{\ttt}{\ensuremath{\boldsymbol{t}}} +\newcommand{\ee}{\ensuremath{\boldsymbol{e}}} +\newcommand{\rr}{\ensuremath{\boldsymbol{r}}} +\newcommand{\gggg}{\ensuremath{\boldsymbol{g}}} +\newcommand{\zz}{\ensuremath{\boldsymbol{z}}} +\newcommand{\bb}{\ensuremath{\boldsymbol{b}}} +\newcommand{\uu}{\ensuremath{\boldsymbol{u}}} +\newcommand{\cc}{\ensuremath{\boldsymbol{c}}} +\newcommand{\dd}{\ensuremath{\boldsymbol{d}}} +\newcommand{\aaa}{\ensuremath{\boldsymbol{a}}} +\newcommand{\ww}{\ensuremath{\boldsymbol{w}}} +\newcommand{\BB}{\ensuremath{\boldsymbol{B}}} +\newcommand{\LL}{\ensuremath{\boldsymbol{L}}} +\newcommand{\PPP}{\ensuremath{\boldsymbol{\mathsf{P}}}} +\newcommand{\UU}{\ensuremath{\boldsymbol{U}}} +\newcommand{\EEE}{\ensuremath{\boldsymbol{E}}} +\newcommand{\E}{\ensuremath{\mathbf{E}}} +\newcommand{\D}{\ensuremath{\mathbf{D}}} +\newcommand{\ep}{\ensuremath{\boldsymbol{\varepsilon}}} +\newcommand{\RRR}{\ensuremath{\boldsymbol{R}}} +%\newcommand{\RRR}{\ensuremath{\boldsymbol{R}}} +\newcommand{\AAA}{\ensuremath{\boldsymbol{A}}} +\newcommand{\BBB}{\ensuremath{\boldsymbol{B}}} +\newcommand{\QQ}{\ensuremath{\boldsymbol{Q}}} +\newcommand{\SSS}{\ensuremath{\boldsymbol{S}}} +\newcommand{\DD}{\ensuremath{\boldsymbol{D}}} +\newcommand{\PP}{\ensuremath{\boldsymbol{P}}} +\newcommand{\FF}{\ensuremath{\boldsymbol{\mathcal{F}}}} +\newcommand{\cone}{\ensuremath{\operatorname{cone}}} +\newcommand{\Fix}{\ensuremath{\operatorname{Fix}}} +\newcommand{\Id}{\ensuremath{\operatorname{Id}}} +\newcommand{\diam}{\ensuremath{\operatorname{diam}}} +\newcommand{\IId}{\ensuremath{\boldsymbol{\operatorname{Id}}}} +\newcommand{\weakly}{\ensuremath{\rightharpoonup}} +\newcommand{\minf}{\ensuremath{-\infty}} +\newcommand{\pinf}{\ensuremath{+\infty}} +\newcommand{\LLambda}{\ensuremath{\boldsymbol{\Lambda}}} +\newcommand{\vva}{\ensuremath{\boldsymbol{\epsilon}}} +\newcommand{\trace}{\operatorname{tr}} + +% AE's commands +\newcommand{\edita}[1]{{\color{blue} #1}} +\newcommand{\notea}[1]{{\color{magenta} \textbf{AE: #1}}} +\newcommand{\ol}{\overline} +\newcommand{\Null}{\operatorname{null}} +\newcommand{\relint}{\operatorname{relint}} +\newcommand{\row}{\operatorname{row}} +\newcommand{\s}{\sigma} +\newcommand{\editaa}[1]{{\color{red} #1}} +\renewcommand{\b}{\beta} +\renewcommand{\L}{\mathcal{L}} % Lagrangian +\renewcommand{\i}{\iota} +\newcommand{\g}{\gamma} +\renewcommand{\cone}{\operatorname{cone}} +\newcommand{\dist}{\operatorname{dist}} +\renewcommand{\D}{\operatorname{D}} +\newcommand{\X}{X} + +% MFS's commands +\newcommand{\editf}[1]{{\color[rgb]{1,0.4,0.4} #1}} +\DeclareMathOperator*{\argmax}{argmax} % thin space, limits underneath in displays diff --git a/tex/journal_drafts/sections/ADMM.tex b/tex/journal_drafts/sections/ADMM.tex new file mode 100644 index 0000000..3aa009b --- /dev/null +++ b/tex/journal_drafts/sections/ADMM.tex @@ -0,0 +1,211 @@ +\section{Linearized ADMM} + + +In convex optimization, whenever applicable, Alternating Direction Method of Multipliers (ADMM) +\cite{Glowinski1975,Gabay1976,Boyd2011} often outperforms the augmented Lagrangian method. Additionally, ADMM often more efficiently incorporates any proximal operators. \notea{this is very vague and hand-wavy. what to say? } +Inspired by the success of ADMM in convex optimization, in this section we develop and study a (linearized) ADMM variant of Algorithm~\ref{Algo:2}. +More specifically, consider the program +\begin{align} +\begin{cases} +\underset{x,z}{\min} \,\, f(x)+g(x)+h(z)+l(z)\\ +A(x)+B(z) = 0, +\end{cases} +\label{eq:admm 2} +\end{align} +where $f,h:\RR^d\rightarrow\RR$ and $A,B:\RR^d\rightarrow\RR^d$ are smooth in the sense that +\begin{align*} +\| \nabla f(x) - \nabla f(x') \| \le \lambda_f \|x-x'\|, +\,\, +\| DA(x) - DA(x') \| \le \lambda_A \|x-x'\|, +\end{align*} +\begin{align} +\| \nabla h(z) - \nabla h(z') \| \le \lambda_h \|z-z'\|, +\,\, +\| DB(z) - DB(z') \| \le \lambda_B \|z-z'\|, +\label{eq:smoothness basics admm} +\end{align} +for every $x,x',z,z'\in \RR^d$. Above, $g,l:\RR^d\rightarrow\RR$ are proximal-friendly convex functions. +%For example, when $C,D\subset \RR^d$ and $g=1_C, l=1_D$ are the indicator functions on $C,D$, respectively, Program~\eqref{eq:admm 2} becomes +%\begin{align} +%\begin{cases} +%\underset{x,z}{\min} \,\, f(x)+h(z)\\ +%A(x)+B(z) = 0\\ +%x\in C,\qquad +%z\in D. +%\end{cases} +%\label{eq:admm 2} +%\end{align} +\notea{should we give a "vignette" here too? what would it be?} +For penalty weight $\b\ge 0$, the augmented Lagrangian corresponding to problem~\eqref{eq:admm 2} is +\begin{align} +\L_{\b}(x,z,y) & = f(x)+h(z) ++ \langle A(x)+B(z),y \rangle + \frac{\b}{2}\| A(x)+B(z) \|^2, +\label{eq:lagrangian admm} +\end{align} +and problem \eqref{eq:admm 2} is therefore equivalent to the minimax program +\begin{align} +\underset{x,z}{\min} \underset{y}{\max}\,\, \L_\b(x,z,y). +\label{eq:admm main} +\end{align} +To solve the equivalent formulation in \eqref{eq:admm main}, we propose the linearized ADMM, detailed in Algorithm~\ref{Algo:3}. Most remarks about Algorithm~\ref{Algo:2} apply to Algorithm~\ref{Algo:3} as well and, in particular, note that Algorithm~\ref{Algo:3} performs two consecutive primal updates, one on $x$ and then one on $z$. + +To parse the details of Algorithm~\ref{Algo:3}, we need to slightly change the gradient map in Definition~\ref{def:grad map} and the line search procedure in Lemma~\ref{lem:eval Lipsc cte} to match $\L_\b$ in \eqref{eq:lagrangian admm}. More specifically, the corresponding gradient maps are defined as +\begin{equation} +G_{\b,\gamma}(x,z,y) = \frac{x-x^+}{\gamma}, +\qquad +H_{\b,\iota}(x,z,y) = \frac{z-z^+}{\iota}, + \label{eq:grad map admm} +\end{equation} +where +\begin{align} +x^+=P_{g}(x-\gamma \nabla_x \mathcal{L}_ {\beta}(x,z,y)), +\qquad +z^+=P_{l}(z-\iota \nabla_z \mathcal{L}_ {\beta}(x,z,y)), +\end{align} +and $\g,\iota>0$ are the primal step sizes. +The line search procedure too is similar to Lemma~\ref{lem:eval Lipsc cte} and we set +\begin{align*} +x^+_{\gamma'} = P_g(x - \gamma' \nabla_x \mathcal{L}_\beta(x,z,y)), +\end{align*} +\begin{align} +z^+_{\iota'} = P_l(z - \iota' \nabla_z \mathcal{L}_\beta(x,z,y)), +\end{align} +\begin{align} +\gamma & := +\max \Big\{ +\gamma' ={\gamma}_0 \theta^i : +\mathcal{L}_\beta (x^+_{\gamma'},z,y) \nonumber\\ + & \qquad \qquad +\le \mathcal{L}_\beta (x,z,y) + +\left\langle x^+_{\gamma'} - x , \nabla_x \mathcal{L}_{\beta}(x,z,y) \right\rangle ++ \frac{1}{2\gamma'} \| x^+_{\gamma'} - x\|^2 +\Big\}, +\label{eq:line search x admm} +\end{align} +\begin{align} +\iota & := +\max \Big\{ +\iota' ={\iota}_0 \theta^i : +\mathcal{L}_\beta (x,z^+_{\iota'},y) \nonumber\\ + & \qquad \qquad +\le \mathcal{L}_\beta (x,z,y) + +\left\langle z^+_{\iota'} - z , \nabla_z \mathcal{L}_{\beta}(x,z,y) \right\rangle ++ \frac{1}{2\iota'} \| z^+_{\iota'} - z\|^2 +\Big\}. +\label{eq:defn of gamma line search admm} +\end{align} +The analysis of Algorithm~\ref{Algo:3} is similar to that of Algorithm~\ref{Algo:2}, involving also a similar version of Lemma~\ref{lem:bnd bnd Ak}. The convergence rate of Algorithm~\ref{Algo:3} is detailed below and proved in Appendix~\ref{sec:ADMM theory}. + + +\begin{algorithm} +\label{Algo:3} +Input: Parameters $\beta_1,\s_1,\rho,\tau> 0$, primal initialization $x_{1},z_1\in \RR^d$ with $\|A(x_1)+B(z_1)\|\le \rho$, dual initialization $y_1\in \RR^m$. +\\ + +For $k=1,2,\ldots$, execute\\ +\begin{enumerate} + +\item \textbf{(Update penalty weight)} +$ +\beta_k \leftarrow \beta_{1} \sqrt{k} \log(k+1)/\log 2. +$ +\item \textbf{(Line search in $x$)} Use the line search procedure in \eqref{eq:line search x admm} by replacing $x=x_k,z=z_k,y=y_k,\b=\b_k$ and let $\g_k \leftarrow \g$ be the output.\\ + +\item \textbf{(Descent step in $x$)} $ x_{k+1} \leftarrow P_{g }(x_{k} - \gamma_{k} \nabla_x \mathcal{L}_{\beta_{k}}(x_{k},z_k,y_{k}))$, where $\L_{\b_k}$ is the augmented Lagrangian and $P_g$ denotes the proximal operator, defined in (\ref{eq:Lagrangian},\ref{eq:defn of prox}), respectively.\\ + + +\item \textbf{(Line search in $z$)} Use the line search procedure in \eqref{eq:defn of gamma line search} by replacing $x=x_{k+1},z=z_k,y=y_k,\b=\b_k$ and let $\iota_k \leftarrow \iota$ be the output.\\ + +\item \textbf{(Descent step in $z$)} $ z_{k+1} \leftarrow P_{l }(z_{k} - \iota_{k} \nabla_z \mathcal{L}_{\beta_{k}}(x_{k+1},z_k,y_{k}))$, where $P_l$ denotes the proximal operator for $l$.\\ + +% +%\item \textbf{(Control)} Properly modify $x_{k+1},z_{k+1}$ to ensure that $\|x_{k+1}\|,\|z_{k+1}\|\le \rho'$ or $\|x_{k+1}-x_k\|\le \rho''$.\\ + +\item \textbf{(Stopping criterion)} If $\g_k \|G_{\b_k,\g_k}(x_k,z_k,y_k)\|^2+ \iota_k \|G_{\b_k,\iota_k}(x_{k+1},z_k,y_k)\|^2 + \s_k \|A(x_k)+B(z_k)\|^2 \le \tau$, then quit and return $x_{k+1},z_{k+1}$. +% as approximate minimizers of Program \eqref{prob:01}. + See \eqref{eq:grad map} for the definition of the gradient mapping. \\ +\item \textbf{(Update dual step size)} +$\s_{k+1} \leftarrow \s_{1} \min\left( {\frac{1}{\sqrt{k+1}}}, \frac{\|A(x_1)+B(z_1)\|}{|A(x_{k+1})+B(z_{k+1})\|}\cdot \frac{ \log^2 2 }{(k+1)\log^2(k+2)} \right). +$\\ +\item \textbf{(Dual ascent step)} $y_{k+1} \leftarrow y_{k} + \sigma_{k+1}(A(x_{k+1})+B(z_{k+1}))$. +\end{enumerate} +\caption{Linearized ADMM for solving problem \eqref{eq:admm main}} +\end{algorithm} + + + +%\begin{theorem}[Linearized ADMM] +%\label{thm:main admm} +%For a sufficiently large $k_0$, consider an integer interval $K=[k_0:k_1]$, and suppose that +%\begin{align} +% \inf_{k\ge k_0} f(x_k) + g(x_k)+ h(z_k) + l(z_k) + \langle A(x_k)+B(z_k) ,y_{k_0}\rangle +%>- \infty, +%\end{align} +%and that $\rho$ is large enough such that (\ref{eq:suff cnd on rho final}) holds . For $\rho'>0$, in addition to the strong smoothness of $f$ and $A$ quantified in (\ref{eq:smoothness basic}), let us define +%\begin{align} +%\lambda'_f = \max_{\|x\|\le \rho'} \|\nabla f(x)\|, +%\qquad +%\lambda'_A = \max_{\|x\| \le \rho'} \|DA(x)\|, +%\qquad +%\lambda'_B = \max_{\|x\|\le \rho'} \|DB(x)\|, +%\end{align} +%to be the (restricted) Lipschitz constants of $f,A,B$, respectively. +%Moreover, suppose that the nonconvex Slater's condition, namely, Lemma \ref{lem:bnd bnd Ak}, is in force, and +%\begin{align} +%\nu_A \ge 2\lambda_A \rho''. +%\end{align} +%Then the output of linearized ADMM in Algorithm~\ref{Algo:2} satisfies \textbf{we need a better expression below to better show the dependence on various parameters.} +%\begin{align} +%& \min_{k\in K}\,\, \min(\overline{\g},\overline{\iota})( \|G_k\|^2 + \|H_k\|^2) \sqrt{\frac{k_0 \log^2(k_0+1)}{k_1\log^2(k_1+1)}} \nonumber\\ +%& \qquad + \|A(x_k)\|^2 +%\lesssim \frac{1}{k_1-k_0}, +%\end{align} +%where $\overline{\gamma},\overline{\iota}$ are independent of $k_1$ and $\lesssim$ suppresses the dependence on all parameters except $k_1$. The exact expressions in terms of $\lambda_f,\lambda'_f,\lambda_A,\lambda'_A, \b_{k_0},\s_{k_0}, \nu_A,y_0$ are found in (\ref{eq:raw bnd on sum admm},\ref{eq:lower_band_iotas_admm}). +% +%\end{theorem} + + + +\begin{theorem}[Convergence rate of linearized ADMM] +\label{thm:main admm} +For sufficiently large integers $k_0< k_1$, consider the interval $K=[k_0:k_1]$, and consider the output sequence $\{x_k,y_k\}_{k\in K}$ of Algorithm~\ref{Algo:2}. Suppose that +\begin{align*} +\mu & := - \min(0, \inf_{k} f(x_k) + g(x_k) + \langle A(x_k) ,y_{k_0}\rangle ) \nonumber\\ +& \qquad - \min(0, \inf_{k} h(z_k) + l(z_k) + \langle B(z_k) ,y_{k_0}\rangle ) +< \infty. +\end{align*} +\notea{note that mu and some other quantities are slightly changed from the proof to simplify the presentation which is inconsequential for the proof I think.} +For $\rho'\gtrsim \sqrt{\mu}$, in addition to the strong smoothness of $f$ and $A$ quantified in (\ref{eq:smoothness basic}), let us define +\begin{align} +\lambda'_f = \max_{\|x\|\le \rho'} \|\nabla f(x)\|, +\qquad +\lambda'_A = \max_{\|x\| \le \rho'} \|\D A(x)\|,\nonumber\\ +\lambda'_h = \max_{\|z\|\le \rho'} \|\nabla h(x)\|, +\qquad +\lambda'_B = \max_{\|z\| \le \rho'} \|\D B(x)\|, +\end{align} +to be the (restricted) Lipschitz constants of $f,A,h,B$. +Suppose also that problem~(\ref{prob:01}) satisfies uniform regularity and, more specifically, +\begin{align} +\nu(g,A,l,B,S,\rho,\rho') \gtrsim +\max\left((\lambda_A+ \lambda_B) \max_{k\in K} \sqrt{(\g_k + \iota_k) \mu} , \frac{{\lambda'_f+\lambda'_A}}{\sqrt{\mu}} \right), +\label{eq:low-bnd-on-regularity} +\end{align} +with +\begin{itemize} +%\item $\rho \gtrsim -\sqrt{\mu}$, +\item $\rho'\ge \max_{k\in K} \|x_k\|$, $\rho'\ge \max_{k\in K} \|z_k\|$, +\item $S \supseteq \bigcup_{k\in K} P_{\cone(\partial g (x_{k+1}) )^*}\left( \D A(x_{k+1})^\top (A(x_{k+1})+B(z_{k+1})) \right),$ +\item $S \supseteq \bigcup_{k\in K} P_{\cone(\partial l (z_{k+1}) )^*}\left( \D B(z_{k+1})^\top (A(x_{k+1})+B(z_{k+1})) \right).$ +\end{itemize} +Then the output of Algorithm~\ref{Algo:2} satisfies +\begin{align} +\label{eq:rates-thm} +& \min_{k\in K} \Bigg( \frac{\|G_{\b_K,\g_k}(x_k,z_k,y_k)\|^2+ \|H_{\b_K,\iota_k}(x_{k+1},z_k,y_k)\|^2}{\min(\lambda_A,\lambda_B) \rho + \min(\lambda'^2_A,\lambda'^2_B)} \sqrt{\frac{k_0 \log^2(k_0+1)}{k_1\log^2(k_1+1)}} \nonumber\\ +& \qquad + \|A(x_k)+B(z_k)\|^2 \Bigg) + \lesssim \frac{1}{k_1-k_0}\left( \frac{\lambda_f'^2+\lambda_A'^2+ \lambda_h'^2 + \lambda_B'^2}{\nu(g,A,l,B,S,\rho,\rho')^2} + \mu\right), +\end{align} +where $\lesssim,\gtrsim$ above suppress the dependence on less important parameters, for the sake of clarity. +\end{theorem} + +\noindent Most of the remarks after Theorem \ref{thm:main} apply to Theorem~\ref{thm:main admm} too. diff --git a/tex/journal_drafts/sections/ADMM_theory.tex b/tex/journal_drafts/sections/ADMM_theory.tex new file mode 100644 index 0000000..7d17afb --- /dev/null +++ b/tex/journal_drafts/sections/ADMM_theory.tex @@ -0,0 +1,238 @@ +\section{Proof of Theorem \ref{thm:main admm} \label{sec:ADMM theory}} + +For completeness, let us repeat the technical lemmas and definitions of Section \ref{sec:preliminaries}, slightly adjusted here for the augmented Lagrangian of problem~\eqref{eq:admm main}, defined in \eqref{eq:lagrangian admm}. These standard results are stated below without proof. +\begin{lemma}[Smoothness]\label{lem:smoothness admm} + Given $\rho,\rho'\ge 0$, it holds that + \begin{align*} +\| \nabla_x \mathcal{L}_{\beta}(x, z,y)- \nabla_x \mathcal{L}_{\beta}(x', z, y) \| \le \lambda_{\b,z} \|x-x'\|, + \end{align*} + \begin{align} + \| \nabla_z \L_\b(x,z,y) - \nabla_z \L_\b(x,z',y) \| \le \lambda_{\b,x} \|z-z'\|, + \end{align} + for every $(x,z),(x',z),(x,z')\in \X_{\rho,\rho'}$ and $y\in\RR^m$, where + \begin{align} +\X_{\rho,\rho'}:= \{ (x'',z''): \|A(x'')+B(z'')\| \le \rho, \|x''\|\le \rho', \|z''\| \le \rho'\}, + \end{align} + \begin{align*} +\lambda_{\beta,x} +& \le \lambda_f + \sqrt{m}\lambda_A \left(\|y\| + \b\rho \right) + \b d \lambda'^2_A. +\end{align*} +\begin{align} +\lambda_{\beta,z} +& \le \lambda_h + \sqrt{m}\lambda_B \left(\|y\| + \b\rho \right) + \b d \lambda'^2_B, +\label{eq:smoothness of Lagrangian admm} +\end{align} +\begin{align} +\lambda'_A := \max_{\|x\|\le \rho'}\|\D A(x)\|, +\qquad +\lambda'_B := \max_{\|z\|\le \rho'}\|\D B(z)\|, +\label{eq:local-lipschitz-admm} +\end{align} +and $\lambda_f,\lambda_A,\lambda_h,\lambda_B$ were defined in (\ref{eq:smoothness basics admm}). +\end{lemma} +\begin{definition}\label{def:grad map admm}\textbf{{(Gradient Mapping)}} Given $x,z\in \RR^d$ and $\gamma,\iota >0$, the gradient mappings $G_{\beta,\gamma}(\cdot,z, y), G_{\b,\iota}(x,\cdot,y): \RR^d\rightarrow\RR^d$ take, respectively, $x,z\in \RR^d$ to +\begin{equation} +G_{\b,\gamma}(x,z,y) = \frac{x-x^+}{\gamma}, +\qquad +H_{\b,\iota}(x,z,y) = \frac{z-z^+}{\iota}, + \label{eq:grad map admm} +\end{equation} +where $x^+=P_{g}(x-\gamma \nabla_x \mathcal{L}_ {\beta}(x,z,y))$ and $z^+=P_{l}(z-\iota \nabla_z \mathcal{L}_ {\beta}(x,z,y))$. +\end{definition} + +\begin{lemma}[Descent lemma]\label{lem:11 admm} +For $x,z\in \RR^d$ and $y\in \RR^m$, let $x^+,z^+$ be as in Definition \ref{def:grad map admm} with $\g<1/\lambda_{\b,x}$ and $\iota<1/\lambda_{\b,z}$. +For $\rho,\rho'\ge 0$, suppose that +\begin{align} +(x,z),(x^+,z),(x,z^+) \in \X_{\rho,\rho'}. +%= \{ (x',z'): \|A(x')+B(z')\| \le \rho, \|x'\| \le \rho', \|z'\| \le \rho' \}. +\end{align} +Then it holds that + \begin{equation*} + \label{e:deslem} + \| G_{\beta,\gamma}(x,z,y)\|^{2}\leq \frac{2}{\gamma} (\mathcal{L}_\beta(x,z,y) + g (x)- \mathcal{L}_\beta(x^+,z,y)- g(x^+) ), +\end{equation*} +\begin{align} + \| H_{\beta,\iota}(x,z,y)\|^{2}\leq \frac{2}{\iota} (\mathcal{L}_\beta(x,z,y) + l (x)- \mathcal{L}_\beta(x,z^+,y)- l(x^+) ). + \label{eq:deslem admm} +\end{align} +\end{lemma} +\begin{lemma}[Line search] \label{lem:eval Lipsc cte admm} Fix $\theta \in (0,1)$ and ${\gamma}_0,\iota_0>0$. For $\gamma',\iota'>0$, let +\begin{align} +x^+_{\gamma'} = P_g(x - \gamma' \nabla_x \mathcal{L}_\beta(x,z,y)), +\qquad +z^+_{\iota'} = P_l(z - \iota' \nabla_z \mathcal{L}_\beta(x,z,y)), +\end{align} +and define +\begin{align*} +\gamma & := +\max \Big\{ +\gamma' ={\gamma}_0 \theta^i : +\mathcal{L}_\beta (x^+_{\gamma'},z,y) \nonumber\\ + & \qquad \qquad \quad +\le \mathcal{L}_\beta (x,z,y) + +\left\langle x^+_{\gamma'} - x , \nabla_x \mathcal{L}_{\beta}(x,z,y) \right\rangle ++ \frac{1}{2\gamma'} \| x^+_{\gamma'} - x\|^2 +\Big\}, +\end{align*} +\begin{align} +\iota & := +\max \Big\{ +\iota' ={\iota}_0 \theta^i : +\mathcal{L}_\beta (x,z^+_{\iota'},y) \nonumber\\ + & \qquad \qquad \quad +\le \mathcal{L}_\beta (x,z,y) + +\left\langle z^+_{\iota'} - z , \nabla_z \mathcal{L}_{\beta}(x,z,y) \right\rangle ++ \frac{1}{2\iota'} \| z^+_{\iota'} - z\|^2 +\Big\}. +\label{eq:defn of gamma line search admm} +\end{align} +Then, (\ref{eq:deslem admm}) holds and, moreover, we have that +\begin{align} + \gamma \ge \frac{\theta}{\lambda_{\beta,x}}, + \qquad + \iota \ge \frac{\theta}{\lambda_{\beta,z}}. + \label{eq:moreover admm} +\end{align} +\end{lemma} +For the reader's convenience, let us also recall the updates of Algorithm~\ref{Algo:3} in iteration $k$ as +\begin{align} +x_{k+1}& =P_g(x_k -\g_k \nabla_x \L_{\b_k} (x_k,z_k,y_k)),\nonumber\\ +z_{k+1}& =P_l(z_k - \i_k \nabla_z \L_{\b_k} (x_{k+1},z_k,y_k)),\nonumber\\ +y_{k+1}& = y_k+\s_{k+1} (A(x_{k+1})+B(z_{k+1})). +\label{eq:ADMM updates recall} +\end{align} +For every $k\in K=[k_0:k_1]$, recall that the primal step sizes $\g_k,\i_k$ are determined by line search in Lemma \ref{lem:eval Lipsc cte admm}. Moreover, the penalty weights and dual step sizes are set as +\begin{align} +\b_k & = \b_{k_0} \sqrt{\frac{k\log^2(k+1)}{k_0 \log^2(k_0+1)}}, + \nonumber\\ +\s_k & = \s_{k_0}\min\left( \sqrt{\frac{k_0}{k}} , \frac{\|A(x_{k_0})+B(z_{k_0})\|}{\|A(x_k)+B(z_k)\|} \cdot \frac{k_0 \log^2 (k_0+1)}{k \log^2 (k+1)} \right). +\end{align} +For every $k\in K$, let us set +\begin{align*} +G_k = G_{\b_k,\g_k}(x_k,z_k,y_k) = \frac{x_k-x_{k+1}}{\g_k}, +\end{align*} +\begin{align} +H_k = H_{\b_k,\iota_k}(x_{k+1},z_k,y_k)= \frac{z_k-z_{k+1}}{\i_k}, +\end{align} +for short. +The convergence analysis of Algorithm~\ref{Algo:3} only slightly differs from the one in the proof of Theorem~\ref{thm:main} and we therefore only present the proof sketch, somewhat informally. Similar to the proof of Theorem~\ref{thm:main}, two applications of Lemma~\ref{lem:11 admm} yields that +\begin{align} +\frac{\g_k \|G_k\|^2}{2} \le \L_{\b_k}(x_k,z_k,y_k) + g(x_k) - \L_{\b_k}(x_{k+1},z_k,y_k) - g(x_{k+1}), \nonumber\\ +\frac{\i_k \|H_k\|^2}{2} \le \L_{\b_k}(x_{k+1},z_k,y_k) + l(z_k) - \L_{\b_k}(x_{k+1},z_{k+1},y_k) - l(z_{k+1}), +\label{eq:decrease twice} +\end{align} +for every $k$. +By setting +\begin{align*} +u_k = [ +\begin{array}{cc} +x_k^\top & z_k^\top +\end{array} +]^\top \in \RR^{2d}, +\qquad +Q_k = [ +\begin{array}{cc} +G_k^\top & H_k^\top +\end{array} +]^\top \in \RR^{2d}, +\qquad q(u) = f(x)+h(z), +\end{align*} +\begin{align} +q'(u) = g(x) + l(z), +\qquad +D(u) = A(x)+B(z), +\qquad +\kappa_k = \min(\g_k,\iota_k), +\label{eq:defn of w} +\end{align} +for every $k\in K$ and after summing up the two inequalities in \eqref{eq:decrease twice}, we reach +\begin{align} +\frac{\kappa_k \|Q_k\|^2}{2} & \le \L_{\b_k}(u_k,y_k) ++ q'(u_k) +- \L_{\b_k}(u_{k+1},y_k) - q'(u_{k+1}), +\qquad \forall k\in K. +\end{align} +By following the same steps as in the proof of Theorem \ref{thm:main}, we find that +\begin{align} +\sum_{k=k_0}^{k_1} \frac{\kappa_k \|Q_k\|^2}{2} & \le \mu+ 2\sum_{k=k_0}^{k_1} \| A(x_k) + B(z_k) \|^2 , +\end{align} +where +\begin{align} +\mu & := \max\Bigg( \sup_{k} \Big( q(u_{k_0})+q'(u_{k_0}) - q(u_{k})-q'(u_k) + \langle A(x_{k_0})+B(z_{k_0})-A(x_k)-B(z_k) ,y_{k_0}\rangle \nonumber\\ +& \qquad \qquad + \frac{\beta_{k_0}}{2} \|A(x_{k_0})+B(z_{k_0})\|^2 \Big) , 0 \Bigg) +< \infty. +\end{align} +On the other hand, the $x$ and $z$ updates in \eqref{eq:ADMM updates recall} imply that +\begin{align} +& G_k - \nabla f(x_k) - \D A(x_k)^\top y_k \nonumber\\ +& \qquad - \b_k \D A(x_k)^\top (A(x_k) + B(z_k) ) \in \partial g(x_{k+1}), +\end{align} +\begin{align} +& H_k - \nabla h(z_k) - \D B(z_k)^\top y_k \nonumber\\ +& \qquad - \b_k \D B(z_k)^\top (A(x_{k+1})+B(z_k)) \in \partial l(z_{k+1}), +\end{align} +which can be more compactly written as +\begin{align} +& Q_k - \nabla q(u_k) - \D D(u_k)^\top y_k - \b_k \D D(u_k)^\top D(u_k) \nonumber\\ +& \qquad + \b_k \left[ +\begin{array}{c} +0\\ +\D B(z_k)^\top (A(x_k) - A(x_{k+1})) +\end{array} +\right] +\in \partial q'(u_{k+1}). +\label{eq:to-be-projected-admm} +\end{align} +Note that \eqref{eq:to-be-projected-admm} is similar to \eqref{eq:to be projected}, except for its last term, which satisfies +\begin{align} +& \b_k \left\| \left[ +\begin{array}{c} +0\\ +\D B(z_k)^\top (A(x_k) - A(x_{k+1})) +\end{array} +\right] \right\| \nonumber\\ +& = \b_k \| \D B(z_k)^\top (A(x_k) - A(x_{k+1}) \| \nonumber\\ +& \le \b_k \lambda'_A \lambda'_B \|x_{k}-x_{k+1}\| +\qquad \text{(see \eqref{eq:local-lipschitz-admm})} +\nonumber\\ +& = \b_k \g_k \lambda'_A \lambda'_B G_k, +\qquad \text{(see \eqref{eq:grad map admm})} +\end{align} +and it is not difficult to verify that $\max_{k\ge k_0} \b_k \g_k =O(1)$. From this point, the rest of the proof steps of Lemma~\ref{lem:bnd bnd Ak} and Theorem~\ref{thm:main} can be applied directly to complete the proof of Theorem~\ref{thm:main admm}. + +%For $\rho,\rho',\rho''>0$, suppose that +%\begin{align} +%\max_{k\in K} \|A(x_k)+B(z_k) \| \le \rho, +%\quad +%\max_{k\in K} \|x_k\| \le \rho', +%\quad +%\max_{k\in K} \|x_{k+1}-x_k\| \le \rho'', +%\label{eq:feas to be checked later} +%\end{align} +%\begin{align} +%\nu_A \ge 2\lambda_A \rho'', +%\end{align} +%where $\nu_A$ was defined in \eqref{eq:new slater defn}. +%Then, following the same line of argument, a similar version of Lemma~\ref{lem:bnd bnd Ak} holds and +%\begin{align} +%\|A(x_k)+B(z_k) \| \le \frac{2}{\nu_A\b_k} (\|G_k\|+ \lambda'_h+ \lambda'_A\|y_{k-1}\|). +%\end{align} +%If we assume that (\ref{eq:to be used later on},\ref{eq:suff cnd on rho}) hold, then the first bound in \eqref{eq:feas to be checked later} is in force and +%\begin{align} +%& \sum_{k=k_0}^{k_1} \kappa_k \|Q_k\|^2 + \|A(x_k)+B(z_k)\|^2 \nonumber\\ +%& \le \frac{24c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu_A^2 \b^2_{k_0}} + \frac{24c\lambda'^2_A y_{\max}^2 k_0 \log^2(k_0+1)}{\nu_A^2 \b_{k_0}^2} + 5\mu. +%\label{eq:raw bnd on sum admm} +%\end{align} +%To better interpret the above bound, we next estimate the primal step sizes $\{\g_k,\i_k\}$, which are determined by line search. Let $\lambda_{\b,u}$ denote the Lipschitz constant of $\L_{\b_k}(u,v)$ with respect to $u$. Similar to the proof of Theorem \ref{thm:main}, we find that +%\begin{align*} +%\gamma_k +%& \ge \frac{\theta }{ 2 \b_{k_0} \left( \sqrt{m}\lambda_A \rho + d \lambda'^2_A \right)}\sqrt{\frac{k_0 \log^2(k_0+1)}{k \log^2(k+1)}} \nonumber\\ +%& =: \overline{\g} \sqrt{\frac{k_0 \log^2(k_0+1)}{k \log^2(k+1)}}, +%\end{align*} +%\begin{align} +%\iota_k & \ge \frac{\theta }{ 2 \b_{k_0} \left( \sqrt{m}\lambda_B \rho + d \lambda'^2_B \right)}\sqrt{\frac{k_0 \log^2(k_0+1)}{k \log^2(k+1)}} \nonumber\\ +%& =: \overline{\iota} \sqrt{\frac{k_0 \log^2(k_0+1)}{k \log^2(k+1)}}, +%\label{eq:lower_band_iotas_admm} +%\end{align} +%for sufficiently large $k_0$. Substituting the above bounds in \eqref{eq:raw bnd on sum admm} and following the steps in the proof of Theorem \ref{thm:main} completes the proof of Theorem \ref{thm:main admm}. diff --git a/tex/journal_drafts/sections/LinAL.tex b/tex/journal_drafts/sections/LinAL.tex new file mode 100644 index 0000000..ee46b43 --- /dev/null +++ b/tex/journal_drafts/sections/LinAL.tex @@ -0,0 +1,305 @@ +\section{Linearized AL Algorithm} + +To solve the equivalent formulation of problem \eqref{prob:01} presented in \eqref{eq:minmax}, we propose a Homotopy Linearized Augmented Lagrangian algorithm (HoLAL), detailed in Algorithm~\ref{Algo:2}. At every iteration, Algorithm~\ref{Algo:2} takes a primal descent small followed by a dual ascent step. The increasing sequence of penalty weights $\{\b_k\}_k$ and the dual updates (Steps 6 and 7) are responsible for continuously enforcing the constraints in~\eqref{prob:01}. + +As we will see in the convergence analysis, the particular choice of $\b_k$ in Algorithm~\ref{Algo:2} strikes a balance between reducing the objective of \eqref{prob:01} and enforcing its constraints. Moreover, the choice of dual step size $\s_k$ in Algorithm~\ref{Algo:2} ensures that the dual variable $y_k$ remains bounded; see~\cite{bertsekas1976penalty} for a precedent in the literature of augmented Lagrangian method with a similar choice for the dual step size. + +%\notea{this next paragraph is not good.} +%Step 4 of Algorithm~\ref{Algo:2} removes pathological cases with divergent iterates. The first function of Step 4 is to clip the iterates of Algorithm~\ref{Algo:2} to a ball of radius $\rho'$. +%As an example, suppose that $g=1_C$ in \eqref{prob:01} is the indicator function for a bounded convex set $C\subset \RR^d$ and take $\rho' > \max_{x\in C} \|x\|$. Then, for sufficiently large $k$, it is not difficult to verify, by Theorem~\ref{thm:main} below, all the iterates of Algorithm~\ref{Algo:2} automatically satisfy $\|x_k\|\le \rho'$. The second function of Step 4 is to control the primal step sizes. \notea{that's bad.} + + +\notea{we should at least say something about the adaptive version, even if we don't include the proof. maybe we should include the algorithm, claim we have proved its convergence (which we did) and then use it in simulations alongside the nonadaptive version. } + + +\begin{algorithm} +\label{Algo:2} +Input: Parameters $\beta_1,\s_1,\rho,\tau> 0$, primal initialization $x_{1}\in \RR^d$ with $\|A(x_1)\|\le \rho$, dual initialization $y_1\in \RR^m$. +\\ + +For $k=1,2,\ldots$ and until convergence, execute\\ +\begin{enumerate} + +\item \textbf{(Update penalty weight)} +$ +\beta_k \leftarrow \beta_{1}\sqrt{k}\log(k+1)/\log 2 . +$\\ +\item \textbf{(Line search)} Use the line search in \eqref{eq:defn of gamma line search} with $x=x_k,y=y_k,\b=\b_k$ and let $\g_k \leftarrow \g$.\\ + +\item \textbf{(Primal descent step)} $ x_{k+1} \leftarrow P_{g }(x_{k} - \gamma_{k} \nabla \mathcal{L}_{\beta_{k}}(x_{k},y_{k}))$, where $\L_{\b_k}$ is the augmented Lagrangian and $P_g$ denotes the proximal operator, defined in (\ref{eq:Lagrangian},\ref{eq:defn of prox}), respectively.\\ +%\item \textbf{(Control)} If necessary, modify $x_{k+1}$ to ensure that $\|x_{k+1}\|\le \rho'$ and $\|x_{k+1}-x_k\|\le \rho''$. \notea{will this cause any problem?}\\ +\item \textbf{(Stopping criterion)} If $\g_k \|G_{\b_k,\g_k}(x_k,y_k)\|^2 + \s_k \|A(x_k)\|^2 \le \tau$, then quit and return $x_{k+1}$. See \eqref{eq:grad map} for the definition of $G_{\b_k,\g_k}$. \\ +\item \textbf{(Update dual step size)} +$ +\s_{k+1} \leftarrow \s_{1} \min\left( {\frac{1}{\sqrt{k+1}}},\frac{\|A(x_1)\|}{\|A(x_{k+1})\|}\cdot \frac{ \log^2 2 }{(k+1)\log^2(k+2)} \right). +$\\ +\item \textbf{(Dual ascent step)} $y_{k+1} \leftarrow y_{k} + \sigma_{k+1}A(x_{k+1})$. +\end{enumerate} +\caption{HoLAL algorithm for solving problem \eqref{prob:01}} +\end{algorithm} + + + + + + + +%Slater's condition plays a key role in convex optimization and we require a similar condition for the success of our algorithm. +%\begin{definition}\label{defn:nonconvex slater} \textbf{(Nonconvex Slater's condition)} +%Consider an interval $K=[k_0:k_1]$ and a sequence $\{x_k\}_{k=k_0}^{k_1}\subset \RR^d$. Let us set +%\begin{align} +%\cone(x_{k+1}) := \text{cone}(\partial g(x_{k+1}) )^* \subset \RR^d, +%\qquad \forall k\in K, +%\end{align} +%for short, and let $S_K\subset \RR^d$ be a subspace such that +%\begin{align} +%S _{K} \supseteq \bigcup_{k\in K} P_{\cone(x_{k+1})}\left( DA(x_{k+1})^\top A(x_{k+1}) \right), +%\label{eq:defn of S defn} +%\end{align} +%and, to simplify the notation, let $S_{K}$ also denote an orthonormal basis for this subspace. +%For $\rho,\rho'>0$, we set +%\begin{align} +%\nu_A := +%\begin{cases} +%\underset{v,x}{\min} \, \frac{\left\| S_{K}^\top P_{\cone(x)} ( DA(x)^\top v) \right\|}{\|v\|} \\ +%\|v\|\le \rho\\ +%\|x\|\le \rho', +%\end{cases} +%%\label{eq:new slater defn} +%\end{align} +%and say that Program (\ref{prob:01}) satisfies the nonconvex Slater's condition if $\nu_A >0$. +%\end{definition} +%To gain some insight about Definition \ref{defn:nonconvex slater}, suppose that $f:\RR^d\rightarrow\RR$ is convex. Consider a nonempty and bounded convex set $C\subseteq\RR^d$ and let us restrict ourselves to the choice of $g = 1_C:\RR^d\rightarrow\RR$, which takes $x\in \RR^d$ to +%\begin{align} +%g(x) = 1_C(x) = +%\begin{cases} +%0 & x \in C\\ +%\infty & x\notin C. +%\end{cases} +%\label{eq:indicator} +%\end{align} +%We also let $T_C(x)$ denote the tangent cone to $C$ at $x$, and $P_{T_C(x)}:\RR^d\rightarrow\RR^d$ denotes the orthogonal projection onto this tangent cone. +%We also set $S_K = \RR^d$ to simplify the discussion. Then, it is not difficult to verify that \eqref{eq:new slater defn} is equivalent to +%\begin{align} +%\nu_A := +%\begin{cases} +%\underset{v,x}{\min} \, \, \frac{\left\| P_{T_C(x)} A^\top v \right\|}{\|v\|} \\ +%\|v\|\le \rho\\ +%\|x\|\le \rho' +%\end{cases} +%= \begin{cases} +%\underset{x}{\min} \,\, \eta_{m}\left( P_{T_C(x)} A^\top \right) \\ +%\|x\|\le \rho', +%\end{cases} +%%\label{eq:nu for cvx} +%\end{align} +%where $\eta_{m}$ returns the $m$th largest singular value of its input matrix. The nonconvex Slater condition here, namely, $\nu_A>0$, is closely related to the standard Slater's condition in convex optimization. +%\begin{proposition}%\label{prop:convex} +%In problem (\ref{prob:01}), suppose that $f$ is a convex function, $g$ is as in (\ref{eq:indicator}), and $A:\RR^d\rightarrow\RR^m$ a linear operator, represented with the matrix $A\in \RR^{m\times d}$. Assume also that Program (\ref{prob:01}) is feasible, namely, there exists $x\in C$ such that $Ax=0$. In (\ref{eq:nu for cvx}), let us take $S_K =\RR^d$. Then the standard Slater's condition holds if the nonconvex Slater's condition ($\nu_A>0$) holds. +%\end{proposition} +%\begin{proof} +%Suppose that the standard Slater's condition does not hold, namely, that +%\begin{equation} +%\relint(\Null(A) \cap C) = \Null(A)\cap \relint(C) = \emptyset, +%\label{eq:no feas} +%\end{equation} +%where $\Null(A)$ and $\relint(C)$ denote the null space of the matrix $A$ and the relative interior of $C$, respectively. +%By assumption, there exists $x_0\in C$ such that $Ax_0=0$. It follows from \eqref{eq:no feas} that $x_0\in \text{boundary}(C)$ and that $\Null(A)$ supports $C$ at $x_0$, namely, +%$A x_0\ge 0$, for every $x_0\in C$. +%Consequently, $\Null(A) \cap T_C(x) \ne \{0\}$, where $T_C(x_0)$ is the tangent cone of the set $C$ at $x_0$. +%Equivalently, it holds that +%$\row(A)\cap N_C(u) \ne \{0\}$, where $\row(A)$ is the row space of the matrix $A$. That is, there exists a unit-norm vector $v$ such that +%$P_{T_C(x_0)}A^\top v=0$, +%and, consequently, +%$ +%\eta_{m}(P_{T_C(x_0)}A^\top) = 0 +%$. +%Let us take $\rho'=\|x_0\|$ in \eqref{eq:nu for cvx}. We then conclude that $\nu_A=0$, namely, the nonconvex Slater's condition also does not hold, thereby completing the proof of Proposition \ref{prop:convex}.\hfill \qed +%\end{proof} +% + +%The nonconvex Slater's condition is necessary for the success of Algorithm~\ref{Algo:2}. +% +% +%The following result, proved in Appendix \ref{sec:proof of bnd Ak}, uses the nonconvex Slater's condition to find a converse, thus bounding the feasibility gap with the gradient mapping. +%\begin{lemma}\label{lem:bnd bnd Ak} \textbf{\emph{(Nonconvex Slater's condition)}} +%For an integer interval $K=[k_0:k_1]$, let us set +%\begin{align} +%\cone(x_{k+1}) := \text{cone}(\partial g(x_{k+1}) )^* \subset \RR^d, +%\qquad \forall k\in K, +%\end{align} +%for short, and +%consider a subspace $S_K\subseteq \mathbb{R}^d$ such that +%\begin{align} +%S _{K} \supseteq \bigcup_{k\in K} P_{\cone(x_{k+1})}\left( DA(x_{k+1})^\top A(x_{k+1}) \right), +%\label{eq:defn of S lemma} +%\end{align} +%and, to simplify the notation, let $S_{K}$ also denote an orthonormal basis for this subspace. +%For $\rho,\rho',\rho''>0$, assume that +%\begin{align} +%\max_{k\in K}\|A(x_k)\| \le \rho, +%\qquad +%\max_{k\in K}\|x_k\| \le \rho', +%\qquad +%\max_{k\in K} \|x_{k+1}-x_k\|\le \rho''. +%\label{eq:good neighb} +%\end{align} +%Let us also set +%\begin{align} +%\nu_A := +%\begin{cases} +%\min_{v,x} \, \frac{\left\| S_{K}^\top P_{\cone(x)} ( DA(x)^\top v) \right\|}{\|v\|} \\ +%\|v\|\le \rho\\ +%\|x\|\le \rho'. +%\end{cases} +%\label{eq:new slater lemma} +%\end{align} +%and assume that $\nu_A\ge 2\lambda_A\rho''$. +%Then it holds that +%\begin{align} +%\|A(x_k)\| +%& \le \frac{2}{\nu_A\b_k} \left( \|G_k\| + \lambda'_f + \lambda'_A \| y_k\| \right), +%\qquad \forall k\in K, +%\label{eq:bnd on Ak final} +%\end{align} +%where +%\begin{align} +%\lambda'_f := \max_{\|x\| \le \rho'} \|\nabla f(x)\|, +%\qquad +%\lambda'_A := \max_{\|x\|\le \rho'} \| DA(x)\|. +%\end{align} +%\end{lemma} + + +\noindent At iteration $k$, if the primal step size $\g_k$ is sufficiently small, Step 3 of Algorithm~\ref{Algo:2} reduces the objective of \eqref{eq:minmax}. Uniform regularity ensures that this update also reduces the feasibility gap of \eqref{prob:01}. This intuition is formalized below and proved in Appendix \ref{sec:proof of bnd Ak}. +\begin{lemma}\label{lem:bnd bnd Ak} %\textbf{\emph{(Nonconvex Slater's condition)}} +For integers $k_0< k_1$, consider the integer interval $K=[k_0:k_1]$. +% and, for $\rho'>0$, suppose that +%\begin{align} +%\rho' \ge \max_{k\in K} \|x_{k}\|. +%\label{eq:good neighb} +%\end{align} +Suppose that problem~(\ref{prob:01}) satisfies uniform regularity and, more specifically, +\begin{align} +\nu(g,A,S,\rho,\rho')\ge 2\lambda_A \max_{k\in K} \g_k \|G_{\b_k,\g_k}(x_k,y_k)\|, +\label{eq:low-bnd-on-nu-lemma} +\end{align} +where $\lambda_A$ was defined in (\ref{eq:smoothness basic}) and +\begin{itemize} +\item $\rho \ge \max_{k\in K}\|A(x_k)\| $, +\item $\rho' \ge \max_{k\in K}\|x_k\| $, +\item $S \supseteq \bigcup_{k\in K} P_{\cone(\partial g (x_{k+1}) )^*}\left( \D A(x_{k+1})^\top A(x_{k+1}) \right).$ +\end{itemize} +% let us set +%\begin{align} +%\cone(x_{k+1}) := \text{cone}(\partial g(x_{k+1}) )^* \subset \RR^d, +%\qquad \forall k\in K, +%\end{align} +%for short, and +%consider a subspace $S_K\subseteq \mathbb{R}^d$ such that +%\begin{align} +%S _{K} \supseteq \bigcup_{k\in K} P_{\cone(x_{k+1})}\left( DA(x_{k+1})^\top A(x_{k+1}) \right), +%\label{eq:defn of S lemma} +%\end{align} +%and, to simplify the notation, let $S_{K}$ also denote an orthonormal basis for this subspace. +%For $\rho,\rho',\rho''>0$, assume that +%\begin{align} +%\max_{k\in K}\|A(x_k)\| \le \rho, +%\qquad +%\max_{k\in K}\|x_k\| \le \rho', +%\qquad +%\max_{k\in K} \|x_{k+1}-x_k\|\le \rho''. +%\label{eq:good neighb} +%\end{align} +%Let us also set +%\begin{align} +%\nu_A := +%\begin{cases} +%\min_{v,x} \, \frac{\left\| S_{K}^\top P_{\cone(x)} ( DA(x)^\top v) \right\|}{\|v\|} \\ +%\|v\|\le \rho\\ +%\|x\|\le \rho'. +%\end{cases} +%\label{eq:new slater lemma} +%\end{align} +%and assume that $\nu_A\ge 2\lambda_A\rho''$. +Then, for every $k\in K$, it holds that +\begin{align} +\|A(x_k)\| +& \le \frac{2}{\nu(g,A,\rho,\rho')\b_k} \left( \|G_{\b_k,\g_k}(x_k,y_k)\| + \lambda'_f + \lambda'_A \| y_k\| \right), +\label{eq:bnd on Ak final} +\end{align} +where +\begin{align} +\lambda'_f := \max_{\|x\| \le \rho'} \|\nabla f(x)\|, +\qquad +\lambda'_A := \max_{\|x\|\le \rho'} \| \D A(x)\|. +\end{align} +\end{lemma} + + +\noindent Loosely speaking, as the penalty weight $\b_k$ increases, the feasibility gap in~\eqref{prob:01} reduces, as indicated in~\eqref{eq:bnd on Ak final}. Note that the larger $\nu$, the more regular problem~\eqref{prob:01} is, and the smaller feasibility gap becomes. With the aid of Lemma~\ref{lem:bnd bnd Ak}, we can derive the convergence rate of Algorithm~\ref{Algo:2} to a first-order stationary point, with the proof deferred to Appendix~\ref{sec:proof-of-main}. For the convergence metric, we will use linear combination of the gradient mapping and the feasibility gap of problem~(\ref{prob:01}), as motivated after Definition~\ref{def:grad map}. + + + +\begin{theorem}[Convergence rate of HoLAL] +\label{thm:main} +For sufficiently large integers $k_0< k_1$, consider the interval $K=[k_0:k_1]$, and consider the output sequence $\{x_k,y_k\}_{k\in K}$ of Algorithm~\ref{Algo:2}. Suppose that +\begin{align*} +\mu := - \min(0, \inf_{k} f(x_k) + g(x_k) + \langle A(x_k) ,y_{k_0}\rangle ) +< \infty. +\end{align*} +\notea{note that mu and some other quantities are slightly changed from the proof to simplify the presentation which is inconsequential for the proof I think.}For $\rho'\gtrsim \sqrt{\mu}$, in addition to the strong smoothness of $f$ and $A$ quantified in (\ref{eq:smoothness basic}), let us define +\begin{align} +\lambda'_f = \max_{\|x\|\le \rho'} \|\nabla f(x)\|, +\qquad +\lambda'_A = \max_{\|x\| \le \rho'} \|\D A(x)\|, +\end{align} +to be the (restricted) Lipschitz constants of $f$ and $A$, respectively. +Suppose also that problem~(\ref{prob:01}) satisfies uniform regularity and, more specifically, +\begin{align} +\nu(g,A,S,\rho,\rho') \gtrsim +\max\left(\lambda_A \max_{k\in K} \sqrt{\g_k\mu} , \frac{{\lambda'_f+\lambda'_A}}{\sqrt{\mu}} \right), +\label{eq:low-bnd-on-regularity} +\end{align} +with +\begin{itemize} +%\item $\rho \gtrsim -\sqrt{\mu}$, +\item $\rho'\ge \max_{k\in K} \|x_k\|$, +\item $S \supseteq \bigcup_{k\in K} P_{\cone(\partial g (x_{k+1}) )^*}\left( \D A(x_{k+1})^\top A(x_{k+1}) \right).$ +\end{itemize} +Then the output of Algorithm~\ref{Algo:2} satisfies +\begin{align} +\label{eq:rates-thm} +& \min_{k\in K} \frac{\|G_{\b_K,\g_k}(x_k,y_k)\|^2}{\lambda_A \rho + \lambda'^2_A} \sqrt{\frac{k_0 \log^2(k_0+1)}{k_1\log^2(k_1+1)}} + \|A(x_k)\|^2 \nonumber\\ +& \lesssim \frac{1}{k_1-k_0}\left( \frac{\lambda_f'^2+\lambda_A'^2}{\nu(g,A,S,\rho,\rho')^2} + \mu\right), +\end{align} +where $\lesssim,\gtrsim$ above suppress the dependence on less important parameters, for the sake of clarity. The exact expressions +%in terms of $\lambda_f,\lambda'_f,\lambda_A,\lambda'_A, \b_{k_0},\s_{k_0},\rho, \rho', \nu(g,A,S,\rho,\rho'),y_0$ +are found in (\ref{eq:exact dependences},\ref{eq:suff cnd on nu-1},\ref{eq:cnd-on-nu-proof}). +\end{theorem} + +\noindent A few remarks about Theorem~\ref{thm:main} are in order. +\paragraph{\textbf{\emph{Convergence rates.}}} Loosely speaking, Theorem~\ref{thm:main} states that Algorithm~\ref{Algo:2} achieves first-order stationarity for \eqref{prob:01} by reducing the gradient map and the feasibility gap at the rates +\begin{align} +\|G_{\b_k,\g_k}(x_k,y_k) \|^2 = \frac{1}{\widetilde{O}(\sqrt{k})}, +\qquad +\|A(x_k) \| = \frac{1}{\widetilde{O}(\sqrt{k})}. +\end{align} +\notea{how does this rate compare with others?} + +\paragraph{\emph{\textbf{Uniform regularity.}}} +As confirmed by \eqref{eq:rates-thm}, the larger $\nu(g,A,S,\rho,\rho')$, the more regular \eqref{prob:01}, and the faster convergence rate of Algorithm~\ref{Algo:2}. In fact, for Algorithm~\ref{Algo:2} to succeed, Theorem~\ref{thm:main} requires $\nu$ to be sufficiently large (rather than just positive). We do not know if this is an artifact of the proof of technique or a fundamental problem but it is naturally expected for the convergence rate to at least slow down when $\nu$ decreases. + +The right-hand side of \eqref{eq:low-bnd-on-regularity} also depends on the largest primal step size $\max_{k\in K}\g_k$. Since $\g_k$ is found by line search in Algorithm~\ref{Algo:2}, we are unable to upper bound this quantity unless we make further assumptions on problem~(\ref{prob:01}), or slightly modify the algorithm to cap primal step sizes. However, recall that the augmented Lagrangian $\L_{\b_k}(\cdot,y_k)$ is $\lambda_{\b_k}$ Lipschitz gradient and thus typically $\g_k \approx 1/\lambda_{\b_k}$, namely, $\g_k \approx 1/\sqrt{k}$ by (\ref{eq:smoothness at k},\ref{eq:low bnd on gammas}). + +Lastly note that smoother $f,A$ also improve the convergence rate, see (\ref{eq:low-bnd-on-regularity},\ref{eq:rates-thm}). Indeed, as $f,A$ becomes smoother, problem~(\ref{prob:01}) more and more resembles a convex program, at least locally. + + + +\paragraph{\emph{\textbf{Subspace $S$.}}} +The freedom over the choice of subspace $S$ specified in Theorem~\ref{thm:main} is meant to further strengthen the result in the same spirit of the second result in Proposition~\ref{prop:convex}. + +\paragraph{\textbf{\emph{Faster rates.}}} Linear convergence to a global minimizer of problem~\eqref{prob:01} can be established for Algorithm~\ref{Algo:2} under restricted strong convexity and smoothness for $f$ in \eqref{prob:01} and certain geometric regularities for $A$ therein. \notea{cite paper with Fabian.} + + +\notea{what else should we talk about? what would the reviewers ask? what would better clarify the result for average reader?} \ No newline at end of file diff --git a/tex/journal_drafts/sections/LinAL_theory.tex b/tex/journal_drafts/sections/LinAL_theory.tex new file mode 100644 index 0000000..026d657 --- /dev/null +++ b/tex/journal_drafts/sections/LinAL_theory.tex @@ -0,0 +1,356 @@ +\section{Proof of Theorem \ref{thm:main} \label{sec:proof-of-main}} +For the reader's convenience, let us recall the updates of the algorithm in iteration $k$: +\begin{align} +x_{k+1} & = P_g( x_k - \gamma_k \nabla_x \mathcal{L}_{\beta_k} (x_k,y_k) ) +\nonumber\\ +& = P_g\Big( x_k - \gamma_k \nabla f(x_k)\nonumber\\ +& \qquad \qquad - \gamma_k DA(x_k) ^\top \left( y_k + \b_k A(x_k) +\right) \Big), +\qquad \text{(see \eqref{eq:Lagrangian})} +\label{eq:update uk recall} +\end{align} +\begin{align} +y_{k+1} =y_k + \s_{k+1} A(x_{k+1}). +\label{eq:y update recall} +\end{align} +Moreover, we will use the shorthand +\begin{equation} +G_k = G_{\beta_k,\gamma_k}(x_k,y_k) = \frac{x_k-x_{k+1}}{\gamma_k}, +\qquad \text{(see \eqref{eq:grad map})} +\label{eq:grad map recall} +\end{equation} +throughout the proof. +For integers $k_0\le k_1$, consider the interval +\begin{equation} + K = [k_0:k_1]=\{k_0,\cdots,k_1\}. + \end{equation} +Since the primal step size $\gamma_k$ is determined by the line search subroutine in Lemma \ref{lem:eval Lipsc cte}, we may now apply Lemma \ref{lem:11} for every iteration in the interval $K$ to find that +\begin{align} + \frac{\gamma_k \|G_k\|^2}{2} +& \le \mathcal{L}_{\beta_k}(x_k,y_k) + g(x_k) - \mathcal{L}_{\beta_k}(x_{k+1},y_k) - g(x_{k+1}) +\qquad \text{(see Lemma \ref{lem:11})} \nonumber\\ +& = f(x_k) + g(x_k) - f(x_{k+1})- g(x_{k+1}) + \langle A(x_k)-A(x_{k+1}) , y_k \rangle +\nonumber\\ +& \qquad + \frac{\b_k}{2}( \|A(x_k)\|^2 - \|A(x_{k+1})\|^2), +\qquad \text{(see \eqref{eq:Lagrangian})} +\label{eq:smoothness rep} +\end{align} +for every $k\in K$. +On the other hand, note that +\begin{align} +y_k = y_{k_0-1} + \sum_{i=k_0}^k \sigma_i A(x_i), +\qquad \text{(see \eqref{eq:y update recall})} +\label{eq:y update unfolded} +\end{align} +which, after substituting in \eqref{eq:smoothness rep}, yields that +\begin{align} +\frac{\gamma_k \|G_k\|^2}{2} & \le f(x_k) + g(x_k) - f(x_{k+1})-g(x_{k+1}) \nonumber\\ +& \qquad + \left\langle A(x_k) - A(x_{k+1}) , y_{k_0} + \sum_{i=k_0+1}^k \s_i A(x_i) \right\rangle \nonumber\\ +& \qquad + \frac{\b_k}{2}( \|A(x_k)\|^2-\|A(x_{k+1})\|^2) . + \label{eq:key ineq} +\end{align} +By summing up \eqref{eq:key ineq} over $k$ from $k_0$ to $k_1$, we argue that +\begin{align} +& \sum_{k=k_0}^{k_1} \frac{\gamma_k \|G_k\|^2}{2} \nonumber\\ +& \le f(x_{k_0})+g(x_{k_0}) - f(x_{k_1+1})-g(x_{k_1+1}) + \langle A(x_{k_0}) - A(x_{k_1+1}) , y_{k_0}\rangle \nonumber\\ +& \qquad + \sum_{k=k_0}^{k_1} \sum_{i=k_0+1}^k \sigma_i \left\langle A(x_k) - A(x_{k+1}) , A(x_i) \right\rangle + \nonumber\\ +& \qquad + \sum_{k=k_0}^{k_1} \frac{\beta_k}{2} \|A(x_k)\|^2 - \sum_{k=k_0}^{k_1} \frac{\beta_k}{2} \|A(x_{k+1})\|^2 +\qquad \text{(see \eqref{eq:key ineq})} +\nonumber\\ +& = f(x_{k_0})+g(x_{k_0}) - f(x_{{k_1}+1}) - g(x_{k_1+1}) + \langle A(x_{k_0}) - A(x_{{k_1}+1}) , y_{k_0} \rangle \nonumber\\ +& \qquad + \sum_{k=k_0}^{k_1} \sum_{i=k_0+1}^k \sigma_i \left\langle A(x_k) - A(x_{k+1}) , A(x_i) \right\rangle\nonumber\\ +& \qquad + \sum_{k=k_0}^{k_1} \frac{\beta_k}{2}\|A(x_k)\|^2- \sum_{k=k_0+1}^{{k_1}+1} \frac{\beta_{k-1}}{2} \|A(x_{k})\|^2. +\end{align} +By manipulating the last line above, we find that +\begin{align} +& \sum_{k=k_0}^{k_1} \frac{\gamma_k \|G_k\|^2}{2} \nonumber\\ +& \le f(x_{k_0})+g(x_{k_0}) - f(x_{{k_1}+1})-g(x_{k_1+1}) + \langle A(x_{k_0}) - A(x_{{k_1}+1}) , y_{k_0} \rangle \nonumber\\ +& \qquad + \frac{\beta_{k_0}}{2}\|A(x_{k_0})\|^2 + \sum_{i=k_0+1}^{k_1} \sum_{k=i}^{k_1} \sigma_i \left\langle A(x_k) - A(x_{k+1}) , A(x_i) \right\rangle +\nonumber\\ +& \qquad ++ \sum_{k=k_0+1}^{k_1} \frac{\beta_k - \beta_{k-1}}{2} \|A(x_k)\|^2 - \frac{\beta_{k_1}}{2} \| A(x_{k_1+1})\|^2 + \nonumber\\ +& \le \mu + \sum_{i=k_0+1}^{k_1} \sigma_i \left\langle A(x_i) - A(x_{{k_1}+1}), A(x_i)\right\rangle \nonumber\\ +& \qquad + \sum_{k=k_0+1}^{k_1} \frac{\beta_k - \beta_{k-1}}{2} \|A(x_k)\|^2 - \frac{\beta_{k_1}}{2} \| A(x_{k_1+1})\|^2 +\qquad \text{(see \eqref{eq:defn mu})} + \nonumber\\ +& = \mu + \sum_{k=k_0+1}^{k_1} \left( \sigma_k +\frac{\beta_k - \beta_{k-1}}{2} \right) \|A(x_k)\|^2 \nonumber\\ +& \qquad - \sum_{k=k_0+1}^{k_1} \sigma_k \left \langle A(x_{{k_1}+1}), A(x_k)\right\rangle - \frac{\beta_{k_1}}{2} \| A(x_{k_1+1})\|^2, + \label{eq:long chain broken} +\end{align} +where we assumed that +\begin{align} +\mu & := \max\Bigg( \sup_{k } \Big( f(x_{k_0})+g(x_{k_0}) - f(x_k) - g(x_k) + \langle A(x_{k_0})-A(x_k) ,y_{k_0}\rangle \nonumber\\ +& \qquad \qquad + \frac{\beta_{k_0}}{2} \|A(x_{k_0})\|^2 \Big), 0 \Bigg) < \infty, +\label{eq:defn mu} +\end{align} +Given initial step sizes $\b_{k_0},\s_{k_0}>0$, recall that the penalty weights and the dual step sizes of Algorithm~\ref{Algo:2} are set to +\begin{align*} +\beta_k = \b_{k_0} \sqrt{\frac{k\log^2 (k+1)}{k_0 \log^2 (k_0+1)}}, +\end{align*} +\begin{align} +\sigma_k = \s_{k_0} \min\left( \sqrt{\frac{k_0 }{k }}, \frac{ \|A(x_{k_0})\| k_0 \log^2(k_0+1)}{\|A(x_k)\| k \log^2(k+1)} \right), +\qquad \forall k \in K. +\label{eq:beta n sigma} +\end{align} +For future reference, \eqref{eq:beta n sigma} implies that +\begin{align} +\beta_k- \beta_{k-1} +& = \beta_{k-1} \left( \sqrt{\frac{k\log^{{2}}(k+1)}{(k-1)\log^{{2}}k}} -1 \right) \nonumber\\ +& \le \beta_{k-1} \cdot \frac{k\log^{{2}}(k+1) - (k-1) \log^{{2}} k}{(k-1)\log^{{2}} k} \nonumber\\ +& \le \b_{k-1} \left( +\frac{k\log^2(1+ \frac{1}{k})}{(k-1)\log^2k} + \frac{1}{k-1} + \right) +\nonumber\\ +& \le \frac{2 \beta_{k-1}}{k-1} +\qquad ( k_0 \gg 1) +\nonumber\\ +& \le \frac{{2}\beta_{k_0}}{k-1} \sqrt{\frac{(k-1)\log^{{2}}k}{k_0 \log^{{2}}(k_0+1)}} \nonumber\\ +& = \frac{ 2\beta_{k_0} \log k}{\sqrt{(k-1)k_0} \log (k_0+1)}, +\qquad \forall k \in K, +\label{eq:consequences} +\end{align} +when $k_0$ is sufficiently large. +We can therefore further simplify the last line of \eqref{eq:long chain broken} as +\begin{align} +& \sum_{k=k_0}^{k_1} \frac{\g_k \|G_k\|^2}{2} \nonumber\\ + & \le\mu + \sum_{k=k_0}^{k_1} \left(\sigma_k+ \frac{\beta_k-\beta_{k-1}}{2} \right) \|A(x_k)\|^2 +\nonumber\\ +& \qquad + + \sum_{k=k_0}^{k_1} \sigma_k \|A(x_{{k_1}+1})\| \|A(x_k)\| - \frac{\beta_{k_1}}{2} \| A(x_{k_1+1})\|^2 +\qquad \text{(see (\ref{eq:long chain broken}))} \nonumber\\ +& \le \mu + \sum_{k=k_0}^{k_1} \left(\sigma_k+ \frac{\beta_k-\beta_{k-1}+1}{2} \right) \|A(x_k)\|^2 +\nonumber\\ +& \qquad + +\frac{1}{2} \left( \sum_{k=k_0}^{k_1} \sigma_k^2 -\beta_{k_1} \right) \| A(x_{k_1+1})\|^2 +\qquad (2ab \le a^2+b^2) \nonumber\\ +& \le \mu+ 2 \sum_{k=k_0}^{k_1} \|A(x_k)\|^2, +\qquad \text{(see (\ref{eq:beta n sigma},\ref{eq:consequences}))} +\label{eq:long chain broken 10} +\end{align} +for sufficiently large $k_0$. Indeed, the coefficient of $\|A(x_{k_1+1})\|$ in the second-to-last line of \eqref{eq:long chain broken 10} is negative because +\begin{align} +& \sum_{k=k_0}^{k_1} \s_k^2 - \b_{k_1} \nonumber\\ +& \le \sum_{k=k_0}^{k_1} \frac{\s_{k_0}^2 k_0}{k} - \b_{k_0}\sqrt{\frac{k_1\log^2(k_1+1)}{k_0 \log^2(k_0+1)}} \nonumber\\ +& \le 2\s_{k_0}^2 k_0 \int_{k_0}^{k_1} \frac{da}{a} - \b_{k_0}\sqrt{\frac{k_1\log^2(k_1+1)}{k_0 \log^2(k_0+1)}} \nonumber\\ +& \le 0, +\end{align} +when $k_0$ is sufficiently large. Note that \eqref{eq:long chain broken 10} bounds the gradient mapping with the feasibility gap. A converse is given by Lemma \ref{lem:bnd bnd Ak}. +In order to apply this result, let us assume that the assumptions in Lemma~\ref{lem:bnd bnd Ak} are met. Lemma \ref{lem:bnd bnd Ak} is then in force and we may now substitute \eqref{eq:bnd on Ak final} back into \eqref{eq:long chain broken 10} to find that +\begin{align} +& \sum_{k=k_0}^{k_1} \gamma_k \|G_k\|^2 \nonumber\\ +& \le 2\sum_{k=k_0}^{{k_1}}\|A(x_k)\|^2 +2 \mu +\qquad \text{(see \eqref{eq:long chain broken 10})} +\nonumber\\ +& \le 2\sum_{k=k_0}^{k_1} \left(\frac{2}{\nu\b_k} \left( \|G_k\| + \lambda'_f + \lambda'_A \| y_k\| \right) \right)^2 + 2\mu +\qquad \text{(see \eqref{eq:bnd on Ak final})} +\nonumber\\ +& \le\sum_{k=k_0}^{k_1} \frac{32\|G_k\|^2}{ \nu^2 \b_k^2} ++ \sum_{k=k_0}^{k_1} \frac{8 \lambda'^2_f}{ \nu^2 \b_k^2 } ++ \sum_{k=k_0}^{k_1} \frac{8\lambda_A'^2 \|y_k\|^2}{ \nu^2\b_k^2} + 2\mu, +\label{eq:to be used for feas pre} +\end{align} +where we used the shorthand $\nu = \nu(g,A,S,\rho,\rho')$ and the last line above uses the inequality +\begin{align} +\left(\sum_{i=1}^p a_i\right)^2 \le p \sum_{i=1}^p a_i^2, +\end{align} +for integer $p$ and scalars $\{a_i\}_i$. If we set +\begin{align} +B_K = \sum_{k=k_0}^{k_1} \frac{\|y_k\|^2}{k\log^2 (k+1)}, +\qquad +c \ge \sum_{k=1}^{\infty} \frac{1}{k\log^2 (k+1)}, +\label{eq:defn of BK} +\end{align} +and, after recalling the choice of $\{\b_k\}_k$ in \eqref{eq:beta n sigma}, the last line of \eqref{eq:to be used for feas pre} can be simplified as +\begin{align} + \sum_{k=k_0}^{k_1} \g_k \|G_k\|^2 +& \le 2\sum_{k=k_0}^{k_1} \|A(x_k)\|^2 + 2\mu \nonumber\\ +& \le \sum_{k=k_0}^{k_1} \frac{32\|G_k\|^2 k_0 \log^2(k_0+1)}{ \nu^2 \b_{k_0}^2 k\log^2 (k+1)} + \sum_{k=k_0}^{k_1} \frac{8\lambda'^2_f k_0 \log^2 (k_0+1) }{\nu^2 \b_{k_0}^2 k\log^2 (k+1) } +2\mu +\nonumber\\ +& \qquad + \sum_{k=k_0}^{k_1} \frac{8\lambda'^2_A k_0 \log^2(k_0+1) \|y_k\|^2}{\nu^2 k \log^2(k+1)} +2\mu +\qquad \text{(see \eqref{eq:beta n sigma})} +\nonumber\\ +& \le \sum_{k=k_0}^{k_1} \frac{32 \|G_k\|^2 k_0 \log^2(k_0+1)}{ \nu^2 \b_{k_0}^2 k\log^2 (k+1)} + +\frac{8k_0\log^2(k_0+1)}{\nu^2 \b_{k_0}^2} \left( c\lambda'^2_f+ \lambda'^2_A B_K \right) +% \frac{8c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu^2 \b^2_{k_0}} +%\nonumber\\ +%& \qquad + \frac{8\lambda'^2_A B_K k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} +\nonumber\\ +& \qquad +2\mu. +\qquad \text{(see \eqref{eq:defn of BK})} +\label{eq:to be used for feas} +\end{align} +To simplify the above bound, let us assume that +\begin{equation} +\frac{32 k_0 \log^2(k_0+1) }{\nu^2 \b_{k_0}^2 k\log^2(k+1)} \le \frac{\gamma_k}{2}, +\qquad \forall k\in K. +\label{eq:to be used later on} +\end{equation} +After rearranging \eqref{eq:to be used for feas} and applying \eqref{eq:to be used later on}, we arrive at +\begin{align} +& \sum_{k=k_0}^{k_1} \frac{\gamma_k}{2} \|G_k\|^2 \nonumber\\ +& \le \sum_{k=k_0}^{k_1} \left( \gamma_k - \frac{32k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2 k\log^2(k+1)} \right) \|G_k\|^2 +\qquad \text{(see \eqref{eq:to be used later on})} +\nonumber\\ +& \le +% \frac{8c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu^2 \b^2_{k_0}} + +%\frac{8\lambda'^2_A B_K k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} +\frac{8k_0\log^2(k_0+1)}{\nu^2\b_{k_0}^2} \left( c\lambda'^2_f+\lambda'^2_A B_K \right) + + 2\mu. +\qquad \text{(see \eqref{eq:final bnd on G})} +\label{eq:final bnd on G} +\end{align} +In turn, the bound above on the gradient mapping controls the feasibility gap, namely, +\begin{align} +\sum_{k=k_0}^{{k_1}} \|A(x_k)\|^2 +& \le \sum_{k=k_0}^{k_1} \frac{\g_k \|G_k\|^2}{4 } ++ \frac{4k_0 \log^2(k_0+1)}{\nu^2\b_{k_0}^2} \left( c\lambda'^2_f+\lambda'^2_A B_K \right) +%+ \frac{4c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}} +%\nonumber\\ +%& \qquad + \frac{4\lambda'^2_A B_K k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} +\qquad \text{(see (\ref{eq:to be used for feas},\ref{eq:to be used later on}))} +\nonumber\\ +& \le +%\frac{8c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu^2 \b^2_{k_0}} +%\nonumber\\ +%& \qquad + \frac{8\lambda'^2_A B_K k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} +\frac{8k_0 \log^2(k_0+1)}{\nu^2\b_{k_0}^2} \left( c\lambda'^2_f+\lambda'^2_A B_K \right) + \mu. +\qquad \text{(see (\ref{eq:final bnd on G}))} +\label{eq:final bnd on feas gap} +\end{align} +By adding (\ref{eq:final bnd on G},\ref{eq:final bnd on feas gap}), we find that +\begin{align} +\sum_{k=k_0}^{k_1} \g_k \|G_k\|^2 + \|A(x_k)\|^2 +& \le +% \frac{24c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu^2 \b^2_{k_0}} \nonumber\\ +%& \qquad + \frac{24\lambda'^2_A B_K k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} +\frac{24k_0 \log^2(k_0+1)}{\nu^2\b_{k_0}^2} \left( c\lambda'^2_f+\lambda'^2_A B_K \right) + 5\mu. +\label{eq:overall bnd raw} +\end{align} +In order to interpret (\ref{eq:overall bnd raw}), we next estimate $B_{K}$, defined in \eqref{eq:defn of BK}. To that end, let us first control the growth of the dual sequence $\{y_k\}_k$. Recalling \eqref{eq:y update recall} and for every $k\in K$, we write that +\begin{align} +\|y_k\| & \le \|y_{k_0}\|+ \sum_{i=k_0+1}^k \s_i \|A(x_i)\| +\qquad \text{(see \eqref{eq:y update recall})} +\nonumber\\ +& \le \|y_{k_0}\|+ \sum_{i=k_0+1}^k \frac{\rho \s_{k_0} k_0 \log^2(k_0+1)}{ k\log^2(k+1)} +\qquad \text{(see (\ref{eq:good neighb},\ref{eq:beta n sigma}))} \nonumber\\ +& \le \|y_{k_0}\|+ c\rho \s_{k_0} k_0 \log^2(k_0+1) \nonumber\\ +& =: y_{\max}. +\label{eq:dual growth} +\end{align} +With the growth of the dual sequence discovered above, we evaluate $B_{K}$ as +\begin{align} +B_{K} & = \sum_{k=k_0}^{k_1} \frac{\|y_k\|^2}{k\log^2 (k+1)} +\qquad \text{(see \eqref{eq:defn of BK})} +\nonumber\\ +& \le \sum_{k=k_0}^{k_1} \frac{y_{\max}^2}{k\log^2 (k+1)} +\qquad \text{(see \eqref{eq:dual growth})} \nonumber\\ +& \le cy_{\max}^2. +\qquad \text{(see \eqref{eq:defn of BK})} +\label{eq:Bk evaluated} +\end{align} +In order to interpret (\ref{eq:overall bnd raw}), it still remains to estimate the primal step sizes $\{\g_k\}_k$. To invoke \eqref{eq:moreover}, we in turn need to gauge how smooth the augmented Lagrangian $\mathcal{L}_{\beta_k}(\cdot,y_k)$ is. For every $k\in K$, note that +\begin{align} +\lambda_{\beta_k} & \le \lambda_f+ \sqrt{m}\lambda_A \left( \|y_k\| + \b_k \rho \right)+ \b_k d \lambda'^2_A +\qquad \text{(see \eqref{eq:smoothness of Lagrangian})} \nonumber\\ +& \le (\lambda_f+ \sqrt{m}\lambda_A y_{\max} ) + \b_k \left( \sqrt{m}\lambda_A \rho + d \lambda'^2_A \right). +\qquad \text{(see \eqref{eq:dual growth})} +\label{eq:smoothness at k} +\end{align} +We are now in position to invoke \eqref{eq:moreover} by writing that +\begin{align} +\gamma_k & \ge \frac{\theta}{\lambda_{\beta_k}} \qquad \text{(see \eqref{eq:moreover})}\nonumber\\ +& \ge \frac{\theta}{ (\lambda_h+ \sqrt{m}\lambda_A y_{\max} )+ \b_k \left( \sqrt{m}\lambda_A \rho + d \lambda'^2_A \right) } \qquad +\text{(see \eqref{eq:smoothness at k})} \nonumber\\ +& \ge \frac{\theta}{ 2 \b_k \left( \sqrt{m}\lambda_A \rho + d \lambda'^2_A \right)} +\qquad ( \text{(\ref{eq:beta n sigma}) and } k_0 \gg 1 ) \nonumber\\ +& \ge \frac{\theta }{ 2 \b_{k_0} \left( \sqrt{m}\lambda_A \rho + d \lambda'^2_A \right)}\sqrt{\frac{k_0 \log^2(k_0+1)}{k \log^2(k+1)}} \qquad \text{(see \eqref{eq:beta n sigma})} \nonumber\\ +& =: \overline{\g} \sqrt{\frac{k_0 \log^2(k_0+1)}{k \log^2(k+1)}}, +\label{eq:low bnd on gammas} +\end{align} +for every $k\in K$. The first consequence of \eqref{eq:low bnd on gammas} is that \eqref{eq:to be used later on} holds automatically when $k_0$ is sufficiently large. Having estimated $B_K$ and $\{\gamma_k\}_k$, we can also rewrite~(\ref{eq:overall bnd raw}). Indeed, (\ref{eq:overall bnd raw},\ref{eq:Bk evaluated},\ref{eq:low bnd on gammas}) together imply that +\begin{align} + & \sum_{k=k_0}^{k_1} \overline{\g} \|G_k\|^2 \sqrt{\frac{k_0 \log^2(k_0+1)}{k\log^2(k+1)}} + \|A(x_k)\|^2 \nonumber\\ +& \le +% \frac{24c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu^2 \b^2_{k_0}} + \frac{24c\lambda'^2_A y_{\max}^2 k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} +\frac{24c k_0 \log^2(k_0+1)}{\nu^2\b_{k_0}^2} \left( \lambda'^2_f+\lambda'^2_A y_{\max}^2 \right) + + 5\mu, +\end{align} +and, consequently, +\begin{align} +& \min_{k\in K}\overline{\g} \|G_k\|^2 \sqrt{\frac{k_0 \log^2(k_0+1)}{k_1\log^2(k_1+1)}} + \|A(x_k)\|^2 +\nonumber\\ +& \le +\frac{24c k_0 \log^2(k_0+1)}{\nu^2\b_{k_0}^2 (k_1-k_0)} \left( \lambda'^2_f+\lambda'^2_A y_{\max}^2 \right) + + \frac{5\mu}{k_1-k_0}. +%\frac{24c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu^2 \b^2_{k_0}(k_1-k_0)} + \frac{24c\lambda'^2_A y_{\max}^2 k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2(k_1-k_0)} + \frac{5\mu}{k_1-k_0}. +\label{eq:exact dependences} +\end{align} +%\notea{marker} +%Using (\ref{eq:Bk evaluated}), we also see that, for \eqref{eq:suff cnd on rho} to hold, it suffices to have that +%\begin{align} +% \frac{8c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu_A^2 \b^2_{k_0}} +%+ \frac{8c\lambda'^2_A y_{\max}^2 k_0 \log^2(k_0+1)}{\nu_A^2 \b_{k_0}^2} + \mu \le \rho^2. +%\label{eq:suff cnd on rho final} +%\end{align} +When we applied Lemma \ref{lem:bnd bnd Ak} earlier, we did not check whether the assumptions on $\rho$ therein hold. Let us revisit this assumption. +We first derive a weaker but uniform bound on the feasibility gap. For every $k\in K$, it holds that +\begin{align} +\|A(x_k)\|^2 & \le \sum_{i=k_0}^{k_1} \|A(x_i)\|^2 +\nonumber\\ +& \le \frac{8k_0 \log^2(k_0+1)}{\nu^2\b_{k_0}^2} \left( c\lambda'^2_f+\lambda'^2_A B_K \right) + \mu +\qquad \text{(see \eqref{eq:final bnd on feas gap})} + \nonumber\\ +& \le \frac{8ck_0 \log^2(k_0+1)}{\nu^2\b_{k_0}^2} \left( \lambda'^2_f+\lambda'^2_A y_{\max}^2 \right) + \mu. + \qquad \text{(see \eqref{eq:Bk evaluated})} +\label{eq:rate of feas gap} +\end{align} +Therefore, we may replace the assumption on $\rho$ in Lemma~\ref{lem:bnd bnd Ak} with the stronger assumption that +\begin{align} +\rho^2 \ge +\frac{8c k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} \left( \lambda_f'^2+ \lambda'^2_A y_{\max}^2 \right)+\mu, +\end{align} +which, after rearranging, can be presented as +\begin{align} +\nu^2 \ge \frac{8c k_0 \log^2(k_0+1) }{\b_{k_0}^2(\rho^2- \mu)} \left( \lambda_f'^2+ \lambda'^2_A y_{\max}^2 \right), +\qquad +\rho > \sqrt{\mu}. +\label{eq:suff cnd on nu-1} +\end{align} +Note that, for \eqref{eq:suff cnd on nu-1} to hold, it is in particular necessary that $\|A(x_{k_0})\| \le \rho \sqrt{2/\b_{k_0}}$, as seen in \eqref{eq:defn mu}. That is, for Algorithm~\ref{Algo:2} to success, it must be initialized close enough to the feasible set. Lastly, let us revisit the lower bound on $\nu$ in Lemma~\ref{lem:bnd bnd Ak}, namely, \eqref{eq:low-bnd-on-nu-lemma}. First we derive a weaker but uniform bound on the gradient mapping. For every $k\in K$, it holds that +\begin{align} +& \max_{k\in K} \g_k \| G_k\| \nonumber\\ +& \le \max_{k\in K} \sqrt{\g_k} \cdot \sqrt{\max_{k\in K} \g_k \|G_k\|^2} \nonumber\\ +& \le \max_{k\in K} \sqrt{\g_k} \cdot \sqrt{\sum_{k=k_0}^{k_1} \g_k \|G_k\|^2 } \nonumber\\ +& \le \max_{k\in K} \sqrt{\g_k} +\cdot + \left( +\frac{16ck_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2 } \left( \lambda'^2_f+ \lambda'^2_A y_{\max}^2 \right) +% \frac{16c \lambda'^2_f k_0 \log^2(k_0+1)}{\nu^2 \b^2_{k_0}} + \frac{16c\lambda'^2_A y_{\max}^2 k_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} + + 4\mu \right)^{\frac{1}{2}} . + \qquad \text{(see (\ref{eq:final bnd on G},\ref{eq:Bk evaluated}))} +% & \le \max_{k\in K} \sqrt{\g_k} +%\cdot +% \left( \frac{4 \sqrt{c} \lambda'_f \sqrt{k_0} \log(k_0+1)}{\nu \b_{k_0}} + \frac{4\sqrt{c}\lambda'_A y_{\max} \sqrt{k_0} \log(k_0+1)}{\nu \b_{k_0}} + 2\sqrt{\mu} \right), +\end{align} +%where the last line uses the inequality $\sqrt{a+b+c}\le \sqrt{a}+\sqrt{b}+\sqrt{c}$ for nonnegative $a,b,c$. +Instead of \eqref{eq:low-bnd-on-nu-lemma}, it therefore suffices to make the stronger assumption that +\begin{align} +\nu \ge 2\lambda_A + \max_{k\in K} \sqrt{\g_k} +\cdot +\left( \frac{16ck_0 \log^2(k_0+1)}{\nu^2 \b_{k_0}^2} + \left( \lambda'^2_f+ \lambda'^2_A y_{\max}^2 \right) + + 4\mu \right)^{\frac{1}{2}} , +\end{align} +which can in turn be replaced with the stronger assumptions +\begin{align} +\nu \ge +\max\left( +4\sqrt{2}\lambda_A \max_{k\in K} \sqrt{\g_k \mu}, +\frac{2\sqrt{ck_0} \log(k_0+1)}{\b_{k_0} \sqrt{\mu}} (\lambda'_f + \lambda'_A y_{\max} ) +\right) + \label{eq:cnd-on-nu-proof} +\end{align} +This completes the proof of Theorem \ref{thm:main}. diff --git a/tex/journal_drafts/sections/abstract.tex b/tex/journal_drafts/sections/abstract.tex new file mode 100644 index 0000000..e1395a5 --- /dev/null +++ b/tex/journal_drafts/sections/abstract.tex @@ -0,0 +1,8 @@ +\begin{abstract} +\textbf{To be written...} + + +\keywords{Primal-dual \and Non-linear constraints\and Non-convex} +%\PACS{PACS code1 \and PACS code2 \and more} +%\subclass{MSC code1 \and MSC code2 \and more} +\end{abstract} diff --git a/tex/journal_drafts/sections/appendix.tex b/tex/journal_drafts/sections/appendix.tex new file mode 100644 index 0000000..ce23f3a --- /dev/null +++ b/tex/journal_drafts/sections/appendix.tex @@ -0,0 +1,263 @@ +\section{Proof of Lemma \ref{lem:smoothness}\label{sec:proof of smoothness lemma}} +\notea{We assume Hessian exists. We shouldn't assume that for a strictly correct proof! Do you know how to correct this?} +Note that +\begin{align} +\mathcal{L}_{\beta}(x,y) = f(x) + \sum_{i=1}^m y_i A_i (x) + \frac{\b}{2} \sum_{i=1}^m (A_i(x))^2, +\end{align} +which implies that +\begin{align} +\nabla_x \mathcal{L}_\beta(x,y) & = \nabla f(x) + \sum_{i=1}^m y_i \nabla A_i(x) + \frac{\b}{2} \sum_{i=1}^m A_i(x) \nabla A_i(x) \nonumber\\ +& = \nabla f(x) + DA(x)^\top y + \b DA(x)^\top A(x), +\end{align} +where $DA(x)$ is the Jacobian of $A$ at $x$. By taking another derivative with respect to $x$, we reach +\begin{align} +\nabla^2_x \mathcal{L}_\beta(x,y) & = \nabla^2 f(x) + \sum_{i=1}^m \left( y_i + \b A_i(x) \right) \nabla^2 A_i(x) + \b \sum_{i=1}^m \nabla A_i(x) \nabla A_i(x)^\top. +\end{align} +It follows that +\begin{align} +\|\nabla_x^2 \mathcal{L}_\beta(x,y)\| & \le \| \nabla^2 f(x) \|+ \max_i \| \nabla^2 A_i(x)\| \left (\|y\|_1+\b \|A(x)\|_1 \right) + \beta\sum_{i=1}^m \|\nabla A_i(x)\|^2 \nonumber\\ +& \le \lambda_h+ \sqrt{m} \lambda_A \left (\|y\|+\b \|A(x)\| \right) + \b \|DA(x)\|^2_F. +\end{align} +For every $x$ such that $\|A(x)\|\le \rho$ and $\|x\|\le \rho'$, we conclude that +\begin{align} +\|\nabla_x^2 \mathcal{L}_\beta(x,y)\| +& \le \lambda_f + \sqrt{m}\lambda_A \left(\|y\| + \b\rho \right) + \b \max_{\|x\|\le \rho'}\|DA(x)\|_F^2, +\end{align} +which completes the proof of Lemma \ref{lem:smoothness}. + +\section{Proof of Lemma \ref{lem:11}\label{sec:proof of descent lemma}} + +Throughout, let +\begin{align} +G = G_{\b,\g}(x,y) = \frac{x-x^+}{\g}, +\end{align} +for short. +Suppose that $\|A(x)\|\le \rho$, $\|x\|\le \rho$, and similarly $\|A(x^+)\|\le \rho$, $\|x^+\|\le \rho'$. An application of Lemma \ref{lem:smoothness} yields that +\begin{align} +\L_\b(x^+,y)+g(x^+) & \le \L_\b(x,y)+ \langle x^+-x,\nabla_x \L_\b(x,y) \rangle ++ \frac{\lambda_\b}{2} \|x^+ - x\|^2 + g(x^+) \nonumber\\ +& = \L_\b(x,y)-\g \langle G ,\nabla_x \L_\b(x,y) \rangle ++ \frac{\g^2 \lambda_\b }{2} \|G\|^2 + g(x^+) +\label{eq:descent pr 1} +\end{align} +Since $x^+ = P_g(x - \g \nabla_x \L_\b(x,y))$, we also have that +\begin{align} +G - \nabla_x \L_\b(x,y) = \xi \in \partial g(x^+). +\label{eq:opt of prox} +\end{align} +By combining (\ref{eq:descent pr 1},\ref{eq:opt of prox}), we find that +\begin{align} +\L_\b(x^+,y)+g(x^+) & +\le \L_\b(x,y) -\g \|G\|^2 + \g \langle G, \xi \rangle + \frac{\g^2 \lambda_\b}{2}\|G\|^2 + g(x^+) \nonumber\\ +& = \L_\b(x,y) -\g \|G\|^2 + \langle x- x^+ , \xi \rangle + \frac{\g^2 \lambda_\b}{2}\|G\|^2 + g(x^+) \nonumber\\ +& \le \L_\b(x,y) + g(x) - \g\left( 1-\frac{\g\lambda_\b}{2}\right) \|G\|^2, +\end{align} +where the last line above uses the convexity of $g$. Recalling that $\g\le 1/\lambda_\b$ completes the proof of Lemma \ref{lem:11}. + + +\section{Proof of Lemma \ref{lem:eval Lipsc cte}\label{sec:proof of linesearch}} + + +By optimality of $x^+_{\gamma}$ in \eqref{eq:defn of x+gamma}, we note that +\begin{equation} +x^+_{\gamma} - x +\gamma \nabla_x \mathcal{L}_\beta(x,y) = - \g\xi \in -\g \partial g (x^+_{\gamma}). +\label{eq:optimality of uplus} +\end{equation} +By definition in \eqref{eq:defn of gamma line search}, $\gamma$ also satisfies +\begin{align} +& \mathcal{L}_{\beta}(x^+_{\gamma},y) + g(x_\g^+) \nonumber\\ + & \le \mathcal{L}_\beta(x,y) + \left\langle +x^+_{\gamma} - x , \nabla_x \mathcal{L}_\beta (x,y) +\right\rangle + \frac{1}{2\gamma}\|x^+_{\gamma} - x\|^2 ++ g(x_\g^+) +\nonumber\\ +& = \mathcal{L}_\beta(x,y) + \left\langle +x - x^+_{\gamma} ,\xi +\right\rangle +- \frac{1}{2\gamma}\|x^+_{\gamma} - x\|^2 + g(x_\g^+)\nonumber\\ +& \le \mathcal{L}_\beta(x,y) +- \frac{1}{2\gamma}\|x^+_{\gamma} - x\|^2 + g(x) - g(x^+_\g) +\qquad (\text{convexity of } g) \nonumber\\ +& = \mathcal{L}_\beta(x,y) - \frac{\gamma}{2} \|G_{\beta,\gamma}(x,y)\|^2 +g(x) - g(x^+_\g), +\qquad \text{(see Definition \ref{def:grad map})} +\end{align} +which completes the proof of Lemma \ref{lem:eval Lipsc cte} since \eqref{eq:moreover} follows directly from \eqref{eq:defn of gamma line search}. + + + +\section{Proof of Proposition \ref{prop:convex} \label{sec:proof of prop}} +To prove the first claim of the proposition, suppose that the Slater's condition does not hold, namely, suppose that +\begin{equation} +\Null(A)\cap \relint(C) = \emptyset, +\label{eq:no feas} +\end{equation} +where $\Null(A)$ and $\relint(C)$ denote the null space of the matrix $A$ and the relative interior of $C$, respectively. +We have assumed that \eqref{prob:01} is feasible, namely, there exists $x\in C$ such that $Ax=0$. It follows from \eqref{eq:no feas} that $x\in \text{boundary}(C)$ and that $\Null(A)$ supports $C$ at $x$, namely, +$A x\ge 0$, for every $x\in C$. (The inequality applies to each entry of the vector $Ax$.) +Consequently, $\Null(A) \cap T_C(x) \ne \{0\}$, where $T_C(x)$ is the tangent cone of the set $C$ at $x_0$. +Equivalently, it holds that +$\row(A)\cap N_C(x) \ne \{0\}$, where $\row(A)$ is the row space of the matrix $A$ and $N_C(x)$ is the normal cone to $C$ at $x$. That is, there exists a unit-norm vector $v$ such that +$P_{T_C(x)}A^\top v=0$ +and, consequently, $P_S P_{T_C(x)}A^\top v=0$. Let us take $\rho'=\|x\|$ in \eqref{eq:nu for cvx}. We then conclude that +$$ +\nu(g,A,S,1,\|x\|)=\nu(g,A,S,\infty,\|x\|)=0, +$$ +namely, the uniform regularity also does not hold for any $\rho\ge 0$ and $\rho'=\|x\|$. The above identity follows from the homogenity of the right-hand side of \eqref{eq:nu for cvx}. +Because increasing $\rho'$ cannot increase the right-hand side of \eqref{eq:new slater defn}, we find that $\nu(g,A,S,\infty,\max_{x\in C} \|x\|)=0$, which proves the first claim in Proposition~\ref{prop:convex}. + +For the converse, we can verify that it suffices to take $\text{row}(A) \subseteq S$. +Next, suppose that uniform regularity does not hold, namely, there exists $x\in \RR^d$ such that +\begin{align} +\eta_{\min} ( P_S P_{T_C(x)} A^\top ) =0. +\label{eq:counter-assump} +\end{align} +Throughout, we assume without loss of generality that $x\in C$. Indeed, otherwise $x$ would not be feasible for problem \eqref{prob:01} with $g=1_C$ and cannot be used to study the Slater's condition in \eqref{prob:01}. Note that \eqref{eq:counter-assump} can be rewritten as +\begin{align} + \eta_{\min}(P_S P_{T_C(x)} A^\top) +& = \eta_{\min}( P_{T_C(x)} A^\top) =0, +\qquad (S = \text{aff}(C)) +\label{eq:counter-assump-rewritten} +\end{align} +where $\text{aff}(C)$ is the affine hull of $C$. +Then, since $\|x\| \le \rho'<\infty$ in \eqref{eq:nu for cvx}, we can assume throughout that $\text{boundary}(C) \cap B_{\rho'}\ne \emptyset$ and, moreover, $x\in \text{boundary}(C)$. Here, $B_{\rho'}=\{z : \|z\|\le \rho' \} $ is the ball of radius $\rho'$ at the origin. Indeed, otherwise if $x\in \text{relint}(C)$, we have that $T_C(x)=S$ and thus +\begin{align*} +\eta_{\min}(P_{S}P_{T_C(x)} A^\top) & = \eta_{\min}( P_{T_C(x)} A^\top) +\qquad (S = \text{aff}(C) ) +\nonumber\\ +& = \eta_{\min}( A^\top) +\qquad ( \text{row}(A) \subseteq S) \nonumber\\ +& >0, +\end{align*} +which contradicts \eqref{eq:counter-assump}. The last line above holds because, by assumption, $A$ is full-rank. Therefore, by \eqref{eq:counter-assump-rewritten}, there exists a unit-norm $u\in \row(A)$ such that $u\in N_C(x)$. In turn, this implies that $\text{null}(A) \cap \text{int}(C)=\emptyset$. Indeed, otherwise, any vector $v\in \text{null}(A) \cap \text{int}(C)$ satisfies $ \langle u, v \rangle <0$, which is impossible because $u\in \text{row}(A)$ and $v\in \text{null}(A)$ are orthogonal vectors. That is, the Slater's condition does not hold, which proves the second claim in Proposition~\ref{prop:convex}. + + + + + + +\section{Proof of Lemma \ref{lem:bnd bnd Ak} \label{sec:proof of bnd Ak}} + +By assumption, we have that +\begin{align} +\max_{k\in K} \|A(x_k)\| \le \rho, +\qquad \max_{k\in K} \| x_k\| \le \rho'. +%\qquad \max_{k\in K} \| x_{k+1}-x_k \| \le \rho''. +\label{eq:bndness in slater proof} +\end{align} +From the $x$ update in \eqref{eq:update uk recall}, it follows that +\begin{align} +x_{k+1}-x_k + \g_k \nabla f(x_k) + \g_k \D A(x_k)^\top (y_k + \b_k A(x_k) ) \in - \partial g(x_{k+1}), +\end{align} +which, after recalling \eqref{eq:grad map recall}, can be written as +\begin{align} +-\frac{ G_k}{\b_k} + \frac{ \nabla f(x_k)}{\b_k} ++ \frac{ \D A(x_k)^\top y_k }{\b_k} + \D A(x_k)^\top A(x_k) \in - \frac{\partial g(x_{k+1})}{\b_k \g_k}. +\label{eq:to be projected} +\end{align} +Let $\text{cone}(\partial g(x) )^*$ denote the polar of +\begin{equation} +\cone(\partial g(x))) = \bigcup_{\alpha \ge 0} \alpha \cdot \partial g(x) \subseteq \RR^d. +\label{eq:defn of dual cone} +\end{equation} +By projecting both sides \eqref{eq:to be projected} onto $\cone(\partial g(x_{k+1}))^*$, we find that +\begin{align} +& P_{\cone(\partial g(x_{k+1}))^* } \left( - \frac{G_k}{\b_k} + \frac{\nabla f(x_k)}{\b_k} + \frac{\D A(x_k)^\top y_k}{\b_k} + \D A(x_k)^\top A(x_k) \right) \nonumber\\ +& \in P_{\cone(\partial g(x_{k+1}))^* } \left( - \frac{\partial g(x_{k+1}) }{\b_k \g_k} \right) = \{ 0\}, +\label{eq:before Sk} +\end{align} +where the equality above follows from the duality of $\cone(\partial g(x_{k+1}))^*$ and $\cone(\partial g(x_{k+1}))$. +Recall also that the subspace $S\subseteq \RR^d$ satisfies +\begin{align} +S \supseteq \bigcup_{k\in K} P_{ \cone( \partial g( x_{k+1}) )^* }\left( \D A(x_{k+1})^\top A(x_{k+1}) \right), +\label{eq:defn of S} +\end{align} +and project both sides of \eqref{eq:before Sk} onto $S$ to reach +\begin{align} +& P_{S}P_{\cone(\partial g(x_{k+1}))^*}\left( - \frac{G_k}{\b_k} + \frac{\nabla f(x_k)}{\b_k} + \frac{\D A(x_k)^\top y_k}{\b_k} + \D A(x_k)^\top A(x_k) \right) = 0. +\label{eq:pre norm} +\end{align} +By taking the norm and then applying the triangle inequality above, we argue that +\begin{align} +& \left\| +P_{S} P_{\cone(\partial g(x_{k+1}))^*}( \D A(x_k)^\top A(x_k) ) + \right\| \nonumber\\ + & \le +\left\| P_{S} P_{\cone(\partial g(x_{k+1}))^*} \left( - \frac{G_k}{\b_k} + \frac{\nabla f(x_k)}{\b_k} + \frac{\D A(x_k)^\top y_k}{\b_k} +\right) \right\| + \qquad \text{(see \eqref{eq:pre norm})}. + \label{eq:post norm} +\end{align} +Because proximal map is non-expansive and $P_{S}P_{\cone(\partial g(x_{k+1}))^*}(0) = 0$, we may upper bound the last line above as +\begin{align} +& \left\| +P_{S} P_{\cone(\partial g(x_{k+1}))^*} ( \D A(x_k)^\top A(x_k) ) + \right\| \nonumber\\ + & \le +\left\| - \frac{G_k}{\b_k} + \frac{\nabla f(x_k)}{\b_k} + \frac{\D A(x_k)^\top y_k}{\b_k} + \right\| \nonumber\\ + & \le \frac{1}{\b_k} \left( \|G_k\| + \|\nabla f(x_k) \| + \|\D A(x_k)^\top y_k\| \right). +\qquad \text{(triangle inequality)} \nonumber\\ +& \le \frac{1}{\b_k} \left( \|G_k\| +\lambda'_f+ \lambda'_A \|y_k\| \right) , +\label{eq:slater proof 0} +\end{align} +where +\begin{align} +\lambda'_f := \max_{\|x\| \le \rho'} \| \nabla f(x)\|, +\qquad +\lambda'_A := \max_{\|x\| \le \rho'} \| \D A(x)\|. +\end{align} +To lower bound the first line of \eqref{eq:slater proof 0}, we invoke the restricted injectivity in Section~\ref{sec:slater}. +% +% +% +%must impose a restricted injectivity as follows. +%We let $S_{K}$ with orthonormal columns denote a basis for the subspace $S_K$ in \eqref{eq:defn of S}, to simplify the notation. We then assume that $ \nu_A>0$, where +%\begin{align} +%\nu_A := +%\begin{cases} +%\min_{v,x} \, \frac{\left\| S_{K}^\top P_{\cone(x_{k+1})} ( DA(x)^\top v) \right\|}{\|v\|} \\ +%\|v\|\le \rho\\ +%\|x\|\le \rho'. +%\end{cases} +%\label{eq:new slater proof} +%\end{align} +Indeed, recalling \eqref{eq:new slater defn} and the first bound in \eqref{eq:bndness in slater proof}, for every $k\in K $, we write that +\begin{align} +& \left\| +P_{S} P_{\cone(\partial g(x_{k+1}))^*} ( \D A(x_{k})^\top A(x_k)) + \right\| \nonumber\\ + & \ge \left\| +P_{S} P_{\cone(\partial g(x_{k+1}))^*} ( \D A(x_{k+1})^\top A(x_{k})) + \right\| + - \left\| + (\D A(x_{k+1}) - \D A(x_{k})) ^\top A(x_{k}) + \right\| \nonumber\\ + & \ge \nu(g,A,S,\rho,\rho') \|A(x_k)\| - \| \D A(x_{k+1})-\D A(x_k) \| \|A(x_k) \|, + \qquad \text{(see \eqref{eq:new slater defn})} + \label{eq:slater proof 1} +\end{align} +where the second line above again uses the non-expansiveness of $P_{S}$ and $P_{\cone(\partial g(x_{k+1}))^*}$. The remaining term in \eqref{eq:slater proof 1} is bounded as +\begin{align} + \| \D A(x_{k+1})-\D A(x_k) \| & \le \lambda_A \|x_{k+1}-x_k\| = \lambda_A \g_k \|G_k\| . + \qquad \text{(see (\ref{eq:smoothness basic},\ref{eq:bndness in slater proof}))} +\end{align} +Assuming that +\begin{align} +\nu(g,A,S,\rho,\rho') \ge 2\lambda_A \max_{k\in K} \g_k \|G_k\|, +\end{align} +allows us to simplify the last line of \eqref{eq:slater proof 1} as +\begin{align} + \left\| +P_{S} P_{\cone(\partial g(x_{k+1}))^*} ( \D A(x_{k})^\top A(x_k)) + \right\| \ge \frac{\nu(g,A,S,\rho,\rho') }{2} \|A(x_k)\|, +\end{align} +which, after substituting in \eqref{eq:slater proof 0}, yields that +\begin{align} +\|A(x_k)\| +& \le \frac{2}{\b_k\nu(g,A,S,\rho,\rho')} \left( \|G_k\| + \lambda'_f + \lambda'_A \|y_k\| \right), +\end{align} +and completes the proof of Lemma \ref{lem:bnd bnd Ak}. + + + + diff --git a/tex/journal_drafts/sections/experiments.tex b/tex/journal_drafts/sections/experiments.tex new file mode 100644 index 0000000..12a6665 --- /dev/null +++ b/tex/journal_drafts/sections/experiments.tex @@ -0,0 +1,3 @@ +\section{Experiments \label{sec:experiments}} + +\notea{we need a plan for this. } \ No newline at end of file diff --git a/tex/journal_drafts/sections/introduction.tex b/tex/journal_drafts/sections/introduction.tex new file mode 100644 index 0000000..543630f --- /dev/null +++ b/tex/journal_drafts/sections/introduction.tex @@ -0,0 +1,118 @@ +\newpage +\section{Introduction} +\label{intro} +We study the nonconvex optimization program +\begin{equation} +\label{prob:01} +\begin{cases} +\underset{x}{\min}\,\, f(x)+g(x)\\ +A(x) = 0, +\end{cases} +\end{equation} +where (possibly nonconvex) $f:\mathbb{R}^d\rightarrow\mathbb{R}$ and (possibly nonlinear) $A:\mathbb{R}^d\rightarrow\mathbb{R}^m$ satisfy +\begin{align} +\| \nabla f(x) - \nabla f(x')\| \le \lambda_f \|x-x'\|, +\quad +\| \D A(x) -\D A(x') \| \le \lambda_A \|x-x'\|, +\label{eq:smoothness basic} +\end{align} +for every $x,x'\in \mathbb{R}^d$. Above, $\nabla f(x)\in \mathbb{R}^d$ is the gradient of $f$ at $x$ and $\D A(x)\in \mathbb{R}^{m\times d}$ is the Jacobian of $A$ at $x$. Moreover, we assume that $g:\mathbb{R}^d\rightarrow\mathbb{R}$ is a proximal-friendly (but possibly nonsmooth) convex function. +%For instance, for a convex set $C\subset\RR^d$ and letting $g=1_C$ be the convex indicator function on $C$, Program~\eqref{prob:01} is a noncnovex optimization problem with the convex constraint $x\in C$. + + +A host of problems in computer science \cite{khot2011grothendieck, lovasz2003semidefinite}, machine learning \cite{mossel2015consistency, song2007dependence}, and signal processing \cite{singer2011angular, singer2011three} naturally fall under the template of~\eqref{prob:01}, including max-cut, clustering, generalized eigenvalue, as well as community detection. % +%An example of our template in \eqref{prob:01} is semi-definite programming which provides powerful relaxations to above problems. Denote the space of $d'\times d'$ symmetric matrices by $\mathbb{S}^{d'\times d'}$ and consider +% +%\begin{equation} +% \label{sdp} +% \min_x \{h'(x): A'(x) = b', ~~x \in \mathcal{C'}~~\text{and}~~x\succeq0 \} +%\end{equation} +% +%where $h': \mathbb{S}^{d'\times d'} \to \RR$, $A'\colon\mathbb{S}^{d'\times d'}\to\RR^m$, $b'\in\RR^m$, and $C' \subseteq \mathbb{R}^{d'\times d'}$. This template clearly can be put to the form of \eqref{prob:01} by using \emph{Burer-Monteiro factorization} \cite{burer2003nonlinear, burer2005local}. + +To address these applications, this paper builds up on the classical ideas in linearized augmented Lagrangian framework and proposes a simple, intuitive, and easy-to-implement algorithm to solve~\ref{prob:01} with provable convergence rate and under an interpretable geometric condition. In this context, we also develop and analyze the Alternating Direction Method of Multipliers (ADMM). Before we elaborate on the results, let us first motivate~\eqref{prob:01} with an important application to Semi-Definite Programming (SDP): + +\vspace{-3mm} +\paragraph{\textbf{Vignette: Burer-Monteiro splitting.}} +A powerful convex relaxation for max-cut, clustering, and several other problems mentioned above is provided by the SDP +\begin{equation} +\label{eq:sdp} +\begin{cases} +\underset{X\in\mathbb{S}^{d \times d}}{\min} \langle C, X \rangle \\ +B(X) = b, \,\, X \succeq 0, +\end{cases} +\end{equation} +% +where $C\in \RR^{d\times d}$ and $X$ is a positive semidefinite and symmetric $d\times d$ matrix, +%$\mathbb{S}^{d \times d}$ denotes the set of real symmetric matrices, +and ${B}: \mathbb{S}^{d\times d} \to \mathbb{R}^m$ is a linear operator. If the unique-games conjecture is true, SDPs achieve the best approximation for the underlying discrete problem~\cite{raghavendra2008optimal}. + +Since $d$ is often large, many first- and second-order methods for solving such SDPs are immediately ruled out, not only due to their high computational complexity, but also due to their storage requirements, which are $\mathcal{O}(d^2)$. + +A contemporary challenge in optimization therefore is to solve SDPs in small space and in a scalable fashion. A recent algorithm, namely, homotopy conditional gradient method based on Linear Minimization Oracles (LMO), can address this template in small space via sketching \cite{yurtsever2018conditional}; however, such LMO-based methods are extremely slow in obtaining accurate solutions. + + +%In practice, $d$ is often very large which makes interior point methods, with their poor scaling in $d$, an unattractive option for solving ~\eqref{eq:sdp}. Attempts to resolve this issue prompted extensive research in computationally- and memory-efficient SDP solvers. The first such solvers relied on the so-called Linear Minimization Oracle (LMO), reviewed in Section~\ref{sec:related work}, alongside other scalabe SDP solvers. + +A key approach for solving \eqref{prob:01}, dating back to~\cite{burer2003nonlinear, burer2005local}, is the so-called Burer-Monteiro (BR) factorization $X=UU^\top$, where $U\in\mathbb{R}^{d\times r}$ and $r$ is selected according to the guidelines in~\cite{pataki1998rank, barvinok1995problems}. \notea{maybe we should call this factorization vs splitting following the standard references like Global Optimality in Tensor Factorization, Deep Learning, and +Beyond.} +%so as to remove spurious local minima of the nonconvex factorized problem. Evidently, BR splitting has the advantage of lower storage and faster iterations. +This factorization results in the following nonconvex problem +\begin{equation} +\label{prob:nc} +\begin{cases} +\underset{U\in\mathbb{R}^{d \times r}}{\min} \langle C, UU^\top \rangle \\ +B(UU^\top) = b, +\end{cases} +\end{equation} +which can be written in the form of~\eqref{prob:01}. When $r$ is sufficiently large and under some additional assumptions, \eqref{eq:sdp} provably does not have any spurious local minima~\cite{boumal2016non,waldspurger2018rank}. + + + +The {augmented Lagrangian method} \cite{luenberger1984linear} provides a powerful framework to solve~\eqref{prob:01}, reviewed carefully in Section \ref{sec:related work}. Indeed, for positive $\beta$, it is easy to verify that \eqref{prob:01} is equivalent to +\begin{align} +\min_{x} \max_y \,\,\mathcal{L}_\beta(x,y) + g(x), +\label{eq:minmax} +\end{align} +where +\begin{align} +\label{eq:Lagrangian} +\mathcal{L}_\beta(x,y) := f(x) + \langle A(x), y \rangle + \frac{\beta}{2}\|A(x)-b\|^2, +\end{align} +is the augmented Lagrangian corresponding to \eqref{prob:01}. The equivalent formulation in \eqref{eq:minmax} naturally suggests the following iterative algorithm to solve \eqref{prob:01}: +\begin{equation}\label{e:exac} +x_{k+1} \in \underset{x}{\argmin} \, \mathcal{L}_{\beta}(x,y_k)+g(x), +\end{equation} +\begin{equation} +y_{k+1} = y_k+\s_k A(x_{k+1}). +\label{eq:dual-update} +\end{equation} +Updating $x$ above requires solving the nonconvex problem \eqref{e:exac} to global optimality, which is often intractable. The key contribution of this paper is to provably and efficiently address this challenge by proposing and analyzing a linearized augmented Lagrangian algorithm, as well as its ADMM variant. +%extend our results to solve the problem +%\begin{align} +%\begin{cases} +%\underset{x,z}{\min}\,\, f(x)+g(x)+h(z)+l(z)\\ +%A(x)+B(z) = 0, +%\end{cases} +%\label{eq:admm} +%\end{align} +%by developing and analyzing an Alternating Direction Method of Multipliers (ADMM). + + + +\paragraph{\emph{\textbf{Contributions.}} } + +In order to solve \eqref{prob:01}, this paper proposes to replace the (intractable) problem \eqref{e:exac} with the simple update +\begin{equation} +x_{k+1} = P_g (x_k - \gamma_k \nabla \mathcal{L}_{\beta_k} (x_k,y_k)), +\label{eq:new update} +\end{equation} +for carefully selected sequences $\{\beta_k,\gamma_k\}_k$. Here, $P_g$ is the proximal operator corresponding to $g$, which is often computationally inexpensive. + +Put differently, instead of fully solving~\eqref{e:exac}, this paper proposes to apply one iteration of the proximal gradient algorithm for every primal update, which is then followed by a dual update in \eqref{eq:dual-update} and an increase in the penalty weight $\b$ to gradually enforce the (nonlinear) constraints in \eqref{prob:01}. + +We prove that this fast and scalable Homotopy Linearized Augmented Lagrangian (HoLAL) achieves first-order stationarity for \eqref{prob:01} at the rate of $1/\sqrt{k}$. Under standard additional conditions, we also establish local optimality, namely, HoLAL achieves second-order stationarity for \eqref{prob:01}. We also provide an ADMM variant of HoLAL, with the same convergence rate, which is better suited for a variety of problems that require splitting. \notea{for example?} \notea{How do the rates compare with competitors? Any high level advantage we might have over competitors? Like easy implementation guidelines?} + +As with several other nonconvex solvers, the success of of HoLAL relies on (a variant of) the \emph{uniform regularity} \notea{what to cite?}, a geometric condition akin to the well-established Slater's condition in convex optimization. In fact, we establish that uniform regularity, when limited to convex problems, is equivalent to the Slater's condition. We also verify the uniform regularity in several important examples. + + diff --git a/tex/journal_drafts/sections/local_optimality.tex b/tex/journal_drafts/sections/local_optimality.tex new file mode 100644 index 0000000..6f8b4f6 --- /dev/null +++ b/tex/journal_drafts/sections/local_optimality.tex @@ -0,0 +1,24 @@ +\section{Local Optimality \label{sec:local-opt}} + +Theorem~\ref{thm:main} establishes that HoLAL, being a first-order algorithm that does not use any second-order information, achieves first-order stationarity for problem~(\ref{prob:01}) but remains silent about local optimality. As shown in~\cite{nouiehed2018convergence}, finding approximate second-order stationary points of convex-constrained problems is in general NP-hard. For this reason, we focus in this section on the special case of problem~\eqref{prob:01} with $g=0$. + + +\paragraph{\emph{\textbf{Special case.}}} As an important special case of problem~(\ref{prob:01}), if $f$ is strongly convex and the manifold $ \{x: A(x)=0\}$ is smooth enough, then any first-order stationary point of problem~\eqref{prob:01} is also a local minimum. Intuitively, this happens because the second-order terms of the Lagrangian are locally dominated by those of $f$. A concrete example is the factorized SDP in \eqref{prob:nc}, when $C$ is positive definite. +%Such problems arise in, for instance, nonlinear regression or compressive sensing \notea{what to cite?}, where $f$ +More formally, suppose that $f$ is strongly convex and both $f,A$ are twice differentiable. For a feasible pair $(x,y)$ in \eqref{prob:01}, recall from \eqref{eq:local-min} that +\begin{align} +\nabla^2_{xx} \L_{0}(x,y) & = \nabla^2 f(x) + \sum_{i=1}^m y_i \nabla^2 A_i(x) \nonumber\\ +& \succcurlyeq \nabla^2 f(x) - \| \sum_{i=1}^m y_i \nabla^2 A_i(x) \| +\qquad \text{(Weyl's inequality)} \nonumber\\ +& \succcurlyeq \nabla^2 f(x) - \|y\|_1 \cdot \max_i \| \nabla^2 A_i(x) \| \nonumber\\ +& \succcurlyeq \nabla^2 f(x) - \sqrt{m}\|y\|_2 \cdot \max_i \| \nabla^2 A_i(x) \|. +\end{align} +Therefore, if the last line above is positive definite, then $x$ is a local minimum of problem~\eqref{prob:01}. In particular, the proof of Theorem~\ref{thm:main} establishes that the output sequence $(x_k,y_k)$ of Algorithm~\ref{Algo:2} satisfies $\|y_k\|\le y_{\max}$, where $y_{\max}$ is specified in \eqref{eq:dual growth}. As such, we conclude that the output sequence of Algorithm~\ref{Algo:2} reaches second-order optimality if +\begin{align} +\min_{\|x\| \le \rho'} \eta_{\min}( \nabla^2 f(x)) > \sqrt{m}y_{\max} \cdot \max_i \max_{\|x\|\le \rho'}\| \nabla^2 A_i(x) \|, +\end{align} +namely, if $f$ is sufficiently strongly convex and $\{A_i\}_i$ are sufficiently smooth. + +\paragraph{\textbf{\emph{General case.}}} More generally, if every saddle point of \eqref{prob:01} is strict, then one can extend the analysis of \cite{o2017behavior} to show that Algorithm~\ref{Algo:2} almost surely does not converge to a saddle point. \notea{haven't actually verified this. should we go down this route?} + +\notea{beyond this, what else can we say? maybe we can talk about how in a lot of nonconvex problems (2nd order) local optimality implies global optimality. but that's not the focus of this paper and we should mention it in passing. } \ No newline at end of file diff --git a/tex/journal_drafts/sections/preliminaries.tex b/tex/journal_drafts/sections/preliminaries.tex new file mode 100644 index 0000000..a2f2061 --- /dev/null +++ b/tex/journal_drafts/sections/preliminaries.tex @@ -0,0 +1,115 @@ +\section{Preliminaries \label{sec:preliminaries}} +\paragraph{\textbf{\emph{Notation.}}} +We use the notations $\langle\cdot ,\cdot \rangle $ and $\|\cdot\|$ for the {standard inner} product and norm on $\RR^d${, respectively}. Gradient of differentiable $f:\RR^d\rightarrow\RR$ at $x$ is denoted by $\nabla f(x)$. For a differentiable map $A:\RR^d\rightarrow\RR^m$, $\D A(x$ denote its Jacobian at $x$. +For a convex function $g:\RR^d\rightarrow\RR$, the subdifferential at $x$ is denoted by $\partial g(x)$ and the proximal operator $P_g:\RR^d\rightarrow\RR^d$ takes $x$ to +\begin{align} +P_g(x) = \underset{y}{\argmin} \, g(y) + \frac{1}{2}\|x-y\|^2. +\label{eq:defn of prox} +\end{align} +In addition, if $g=1_C$ is the indicator function of a convex set or cone, we use the simpler notation $P_C$, instead of $P_{1_C}$, to denote the orthogonal projection onto $C$. +Throughout, $g^*$ and $\partial g^*$ will denote the Fenchel conjugate of $g$ and its subdifferential, respectively. For a cone $C$, we denote its polar by $C^*$, namely, +\begin{align} +C^* = \{x: \langle x,x'\rangle \le 0,\,\, \forall x' \in C \}. +\end{align} +An integer interval is denoted by $[k_0:k_1]=\{k_0,\cdots,k_1\}$ for integers $k_0 \le k_1$. For matrices, $\|\cdot\|$ and $\|\cdot\|_F$ denote the spectral and Frobenius norms, respectively. + + +\paragraph{\textbf{\emph{{Necessary optimality conditions.}}} \label{sec:opt cnds}} +{Necessary optimality conditions} for \eqref{prob:01} are well-studied~\cite{rockafellar2009variational}. {Indeed, $x$ is a first-order stationary point of \eqref{prob:01} if there exists $y\in \RR^m$ for which +\begin{align} +\begin{cases} +-\nabla f(x) - \D A(x)^\top y \in \partial g(x)\\ +A(x) = 0. +\end{cases} +\label{e:inclu1} +\end{align} +Recalling \eqref{eq:Lagrangian}, we observe that \eqref{e:inclu1} is equivalent to +\begin{align} +\begin{cases} +-\nabla_x \mathcal{L}_\beta(x,y) \in \partial g(x)\\ +A(x) = 0, +\end{cases} +\label{e:inclu2} +\end{align} +which is in turn the first-order optimality condition for \eqref{eq:minmax}. } +For second-order optimality conditions, we set $g=0$ in \eqref{prob:01} and assume that both $f,A$ are twice-differentiable. In this setting and after recalling \eqref{eq:Lagrangian}, $x$ is a local minimum of \eqref{prob:01} if there exists $y\in \RR^m$ such that +\begin{align} +\nabla^2_{xx} \L_{0}(x,y) = \nabla^2 f(x) + \sum_{i=1}^m y_i \nabla^2 A_i(x), %\succcurlyeq 0, +\label{eq:local-min} +\end{align} +is positive semidefinite. +Above, $y_i$ and $A_i$ are the $i^{\text{th}}$ components of $y$ and $A$, respectively. + +\paragraph{\emph{\textbf{Technical lemmas.}}} The following standard results and notions are frequently used throughout this paper and proved in the appendix for completeness. The first result below shows that the augmented Lagrangian is smooth, see Appendix~\ref{sec:proof of smoothness lemma} for the proof. +\begin{lemma}[Smoothness]\label{lem:smoothness} + For fixed $y\in \RR^m$ and $\b,\rho,\rho'\ge 0$, it holds that + \begin{align} +\| \nabla_x \mathcal{L}_{\beta}(x, y)- \nabla_x \mathcal{L}_{\beta}(x', y) \| \le \lambda_\b \|x-x'\|, +\quad \forall x,x'\in \X_{\rho,\rho'}, + \end{align} + where +\begin{align} +\X_{\rho,\rho'} := \{ x'': \|A(x'')\|\le \rho, \|x''\|\le \rho'\} \subset \RR^d, +\end{align} + \begin{align} +\lambda_\beta +& := \lambda_f + \sqrt{m}\lambda_A \left(\|y\| + \b\rho \right) + \b d \lambda'^2_A, +\label{eq:smoothness of Lagrangian} +\end{align} +\begin{align} +\lambda'_A := \max_{\|x\|\le \rho'}\|\D A(x)\|, +\end{align} +and $\lambda_f,\lambda_A$ were defined in (\ref{eq:smoothness basic}). +\end{lemma} +Gradient mapping~\notea{what to cite?}, defined below, plays an important role in our convergence analysis. +\begin{definition}\label{def:grad map}\textbf{{(Gradient mapping)}} Given $y\in \RR^d$ and $\gamma >0$, the gradient mapping $G_{\beta,\gamma}(\cdot; y): \RR^d\rightarrow\RR^d$ takes $x\in \RR^d$ to +\begin{equation} +G_{\b,\gamma}(x,y) = \frac{x-x^+}{\gamma}, + \label{eq:grad map} +\end{equation} +where $x^+=P_{g}(x-\gamma \nabla_x \mathcal{L}_ {\beta}(x,y))$. +\end{definition} +As the name suggests, if in particular we set $g\equiv 0$ in \eqref{prob:01}, the gradient mapping reduces to $G_{\beta,\gamma}(x,y)=\nabla f(x) $. Note also that $G_{\b,\g}(x,y)=0$ implies that $-\nabla_x \L_\b(x,y) \in \partial g(x)$. Therefore, in light of \eqref{e:inclu2}, a linear combination of $\|G_{\b,\g}(x,y)\|^2$ and the feasibility gap $\|A(x)\|^2$ is a natural metric to measure the (first-order) stationarity of a pair $(x,y)$ in problem~(\ref{prob:01}). + + +For a sufficiently small step size $\g$, the gradient mapping controls the descent in the objective function of \eqref{eq:minmax}. The following result is standard \cite[Lemma 3.2, Remark 3.2(i)]{bolte2014proximal}, but the proof is given in Appendix \ref{sec:proof of descent lemma} for completeness. + +\begin{lemma}[Descent lemma]\label{lem:11} +For $x\in \RR^d$ and $y\in \RR^m$, let $x^+ = P_g(x - \g \nabla_x \L_\b(x,y) )$, where $\g< 1/\lambda_\b$. For $\rho,\rho'\ge 0$, suppose that +\begin{align} +x,x^+ \in \X_{\rho,\rho'}= \{ x': \|A(x')\| \le \rho, \|x'\| \le \rho' \}. +\end{align} +Then it holds that + \begin{equation} + \label{e:deslem} + \| G_{\beta,\gamma}(x,y)\|^{2}\leq \frac{2}{\gamma} (\mathcal{L}_\beta(x,y) + g (x)- \mathcal{L}_\beta(x^+,y)- g(x^+) ). +\end{equation} +\end{lemma} +In {practice}, determining the step size $\gamma$ by computing the right-hand side of \eqref{eq:smoothness of Lagrangian} is infeasible, since $\lambda_f,\lambda_A,\lambda'_A$ are often unknown. Instead, we can resort to the line search technique, reviewed below and proved in Appendix~\ref{sec:proof of linesearch}. +\begin{lemma}[Line search] \label{lem:eval Lipsc cte} Fix $\theta \in (0,1)$ and ${\gamma}_0>0$. For $\gamma'>0$, let +\begin{align} +x^+_{\gamma'} = P_g(x - \gamma' \nabla_x \mathcal{L}_\beta(x,y)), +\label{eq:defn of x+gamma} +\end{align} +and define +\begin{align} +\gamma & := +\max \Big\{ +\gamma' ={\gamma}_0 \theta^i : +\mathcal{L}_\beta (x^+_{\gamma'},y) \nonumber\\ + & \qquad \qquad \quad +\le \mathcal{L}_\beta (x,y) + +\left\langle x^+_{\gamma'} - x , \nabla_x \mathcal{L}_{\beta}(x,y) \right\rangle ++ \frac{1}{2\gamma'} \| x^+_{\gamma'} - x\|^2 +\Big\}. +\label{eq:defn of gamma line search} +\end{align} +Then, (\ref{e:deslem}) holds and, moreover, we have that +\begin{align} + \gamma \ge \frac{\theta}{\lambda_\beta}. + \label{eq:moreover} +\end{align} +\end{lemma} + + + diff --git a/tex/journal_drafts/sections/related_works.tex b/tex/journal_drafts/sections/related_works.tex new file mode 100644 index 0000000..2701a1b --- /dev/null +++ b/tex/journal_drafts/sections/related_works.tex @@ -0,0 +1,36 @@ +\section{Related Works \label{sec:related work}} + +\notea{looks like major revision is required here...} +Augmented Lagrangian based methods are first proposed in~\cite{hestenes1969multiplier, powell1978fast}. +In the convex setting, standard, inexact and linearized versions of ALM are studied extensively~\cite{bertsekas1999nonlinear, bertsekas2014constrained,lan2016iteration,nedelcu2014computational}. +Some works also considered the application of ALM/ADMM to nonconvex problems~\cite{wang2015global, liu2017linearized}. +These works assume that the operator in~\eqref{prob:01} is linear, therefore, they do not apply to our setting. +%since we have a nonlinear constraint in addition to a nonconvex objective function. + +Series of influential papers from Burer and Monteiro~\cite{burer2003nonlinear, burer2005local} proposed using the splitting $X=UU^\ast$ and suggested solving the problem using ALM. +First, they did not have any inexact analysis, their analysis requires primal subproblems to be solved exactly which is not practical. +%Their practical stopping condition is also not analyzed theoretically. +Secondly, they have to put an artificial bound to the primal domain which will be ineffective in practice; which is impossible to do without knowing the norm of the solution. +% and their results do not extend to the case where projection in primal domain are required in each iteration. +Lastly, their results are for convergence only, without any rate guarantees. + +The authors focused on the special case of SDPs without linear constraints in~\cite{BKS15:Dropping-Convexity} and~\cite{park2016provable}. +They prove the convergence of gradient descent on Burer-Monteiro factorized formulation. +%In their followup work~, the authors considered projected gradient descent, but only for restricted strongly convex functions. +Their results are not able to extend to linear constraints and general convex functions. +%, therefore not applicable to general SDPs. + +Another line of work focused on solving a specific kind of SDPs by applying gradient descent or trust regions methods on manifolds~\cite{boumal2014manopt, boumal2016global}. +The authors show that they can apply gradient descent on manifolds to satisfy the first order stationarity conditions in $\mathcal{O}(1/\epsilon^2)$ iterations. +In addition, they apply trust regions methods on manifolds to satisfy the second order stationarity conditions in $\mathcal{O}(1/\epsilon^3)$ iterations. +Firstly, these methods have to assume that the problem will be on a smooth manifold, which holds for Maximum Cut and generalized eigenvalue problems, but is not satisfied for other important SDPs such as quadratic programming (QAP) and optimal power flow. +Secondly, as noted in~\cite{boumal2016global}, per iteration cost of their method for Max-Cut problem is $\mathcal{O}({n^6})$ for solving~\eqref{eqn:nonconvex-formulation1} which is astronomically larger than our cost of $\mathcal{O}(n^2r)$ where $r \ll n$. + +Another recent line of work~\cite{clason2018acceleration} focused on solving the nonlinear constrained nonconvex problem template~\eqref{eqn:nonconvex-formulation1} by adapting the primal-dual method of Chambolle and Pock~\cite{chambolle2011first}. +The authors proved the convergence of the method with rate guarantees by assuming error bound conditions on the objective function, which is not necessarily satisfied for general SDPs. +%They do not apply to the general semidefinite programming since $f(U)=\langle C, UU^\ast \rangle$. %, these conditions are not satisfied. + +\cite{bhojanapalli2018smoothed} focused on the penalty formulation of~\eqref{eqn:nonconvex-formulation1} and studied the optimality of second order stationary points of the formulation. +However, their results are for connecting the stationary points of the penalty formulation of nonconvex problem to the penalty formulation of convex problem and not to the constrained problem itself. + +\cite{doi:10.1137/15M1031631} can handle the same problem but their algorithm is much more complicated than ours. \ No newline at end of file diff --git a/tex/journal_drafts/sections/slater.tex b/tex/journal_drafts/sections/slater.tex new file mode 100644 index 0000000..34e5a86 --- /dev/null +++ b/tex/journal_drafts/sections/slater.tex @@ -0,0 +1,97 @@ +\section{Uniform Regularity \label{sec:slater}} + +The Slater's condition plays a key role in convex optimization as a sufficient condition for strong duality. As a result, SC guarantees the success of a variety of primal-dual algorithms for constrained convex programming. As a visual example, in problem~\eqref{prob:01}, when $f=0$, $g=1_C$ is the indicator function of a bounded convex set $C\subset\RR^d$, and $A$ is an affine operator, the Slater's condition removes any pathological cases, such as Figure~\ref{fig:convex_slater}, by ensuring that the affine subspace is not tangent to $C$. +\begin{figure}[H] +\begin{center} +\includegraphics[scale=.5]{figures/Slater.pdf} +\caption{Solving (1) can be particularly difficult, even when it is a convex program. As an example, this figure shows a pathological case, where the Slater’s condition does not apply. See Section~\ref{sec:slater} for more details.} +\label{fig:convex_slater} +\end{center} +\end{figure} + + +\noindent Likewise, to successfully solve problem~\eqref{prob:01} in the presence of nonlinear constraints, we require the following condition which, loosely speaking, extends the Slater's condition to the nonconvex setting, as clarified shortly afterwards. This condition, in a sense, also extends the uniform regularity, introduced in \cite[Definition 2.3]{bolte2018nonconvex}, to the more general problem~\ref{prob:01}. +\begin{definition}\label{defn:nonconvex slater} \textbf{{(Uniform regularity)}} In problem~(\ref{prob:01}), for $\rho,\rho'>0$ and subspace $S\subset \RR^{d}$, let us define +\begin{align} +\nu(g,A,S,\rho,\rho') := +\begin{cases} +\underset{v,x}{\min} \, \frac{\left\| P_S P_{\cone(\partial g(x))^*} ( \D A(x)^\top v) \right\|}{\|v\|} \\ +\|v\|\le \rho\\ +\|x\|\le \rho', +\end{cases} +\label{eq:new slater defn} +\end{align} +where $\cone(\partial g(x))$ is the cone formed by the subdifferential $\partial g(x)$, $P_{\cone(\partial g(x))^*}$ projects onto the polar of this cone, and $\D A(x)$ is the Jacobian of $A$. We say that (\ref{prob:01}) satisfies the uniform regularity if $\nu(g,A,S,\rho,\rho') >0$. +\end{definition} +Throughout, we will occasionally suppress the dependence of $\nu$ on some of its parameters to unburden the notation. A few remarks about uniform regularity are in order. + +\paragraph{\textbf{\emph{Jacobian $\D A$.}}} Let $\D A(x)^\top \overset{\operatorname{QR}}{=} Q(x) R(x)$ be the QR decomposition of $\D A(x)^\top$. As we will see shortly, $\D A(x)^\top $ in \eqref{eq:new slater defn} might be replaced with its orthonormal basis, namely, $Q(x)$, to broaden the applicability of uniform regularity. For simplicity, we will avoid this minor change and instead, whenever needed, assume that $\D A(x)$ is nonsingular; otherwise a simple QR decomposition can remove any redundancy from $A(x)=0$ in~\eqref{prob:01}. + +\paragraph{\textbf{\emph{Subspace $S$.}}} The introduction of a subspace $S$ in \eqref{eq:new slater defn} broadens the applicability of uniform regularity, as we will see shortly. In particular, when $S = \RR^{d}$, the Moreau decomposition allows us to rewrite \eqref{eq:new slater defn} as +\begin{align} +\nu(g,A,S,\rho,\rho') := +\begin{cases} +\underset{v,x}{\min} \, \frac{ \dist\left( \D A(x)^\top v , \cone(\partial g(x))\right) }{\|v\|} \\ +\|v\|\le \rho\\ +\|x\|\le \rho', +\end{cases} +\label{eq:defn_nu_A} +\end{align} +where $\dist(\cdot,\cone(\partial g(x)))$ returns the Euclidean distance to $\cone(\partial g(x))$. + + + + + +\paragraph{\emph{\textbf{Convex case.}}} +To better parse Definition \ref{defn:nonconvex slater}, let us consider the specific example where $f:\RR^d\rightarrow\RR$ is convex, $g = 1_C$ is the indicator function for a bounded convex set $C\subset \RR^d$, and $A$ is a nonsingular linear operator represented with the full-rank matrix $A\in \RR^{m\times d}$. We also let $T_C(x)$ denote the tangent cone to $C$ at $x$, and reserve $P_{T_C(x)}:\RR^d\rightarrow\RR^d$ for the orthogonal projection onto this cone. +%Assume also that $S=\RR^d$ for clarity. +%We also set $S_K = \RR^d$ to simplify the discussion. + +We can now study the geometric interpretation of uniform regularity in this setting. +Using the Moreau decomposition, it is not difficult to rewrite \eqref{eq:new slater defn} as +\begin{align} +\nu(g,A,S,\rho,\rho') & := +\begin{cases} +\underset{v,x}{\min} \, \, \frac{\left\| P_S P_{T_C(x)} A^\top v \right\|}{\|v\|} \\ +\|v\|\le \rho\\ +\|x\|\le \rho' +\end{cases} \nonumber\\ +& = \begin{cases} +\underset{x}{\min} \,\, \eta_{\min}\left( P_S P_{T_C(x)} A^\top \right) \\ +\|x\|\le \rho', +\end{cases} +\label{eq:nu for cvx} +\end{align} +where $\eta_{\min}(\cdot)$ returns the smallest singular value of its input matrix. Intuitively then, the uniform regularity ensures that the row span of $A$ is not tangent to $C$, similar to the Slater's condition, see Figure~\ref{fig:convex_slater}. This close relationship between the uniform regularity and the Slater's condition is formalized next and proved in Appendix~\ref{sec:proof of prop}. + +\begin{proposition}\label{prop:convex} +In (\ref{prob:01}), suppose that +\begin{itemize} +\item $f:\RR^d\rightarrow\RR$ is convex, +\item $g=1_C$ is the indicator on a convex set $C\subset\RR^d$, +\item $A:\RR^d\rightarrow\RR^m$ is a nonsingular linear operator, represented with the full-rank matrix $A\in \RR^{m\times d}$,\footnote{As mentioned earlier, it is easy to remove the full-rank assumption by replacing $\D A(x)$ in \eqref{eq:new slater defn} with its orthonormal basis. We assume $A$ to be full-rank for the sake of clarity at the cost of a simple QR decomposition to remove any ``redundant measurements'' from problem~\eqref{prob:01}.} +\item and the problem is feasible, namely, there exists $x\in C$ such that $Ax=0$. +\end{itemize} + Then, +\begin{itemize} +\item problem (\ref{prob:01}) satisfies the Slater's condition if there exists a subspace $S\subseteq \RR^d$ such that $\nu(g,A,S,\infty,\max_{x\in C}\|x\|)>0$. +\item Moreover, suppose that $S$ is the affine hull of $C$. + Then, (\ref{prob:01}) satisfies the Slater's condition if and only if + $\nu(g,A,S,\infty,\max_{x\in C}\|x\|)>0$. +\end{itemize} +\end{proposition} + + +\paragraph{\emph{\textbf{Beyond the Slater's condition.}}} +Unlike the Slater's condition, $\nu$ also offers information about the convergence speed. For example, suppose that $m=1$, so that $A$ is a $1\times d$ row-vector. For a small perturbation vector $\epsilon\in \RR^d$, let $C=\{x\in \RR^d: (A+\epsilon) x\ge 0\}$ be a half-space. Then the Slater's condition holds regardless of $\|\epsilon\|$. However, even though positive, $\nu(g,A,\RR^d)$ can be made arbitrarily small by making $\|\epsilon\|$ small, which can lead to arbitrarily slow convergence. +%Put differently, unlike the Slater's condition, $\nu(g,A,\RR^d)$ contains information about the convergence rate, as we will see shortly. + + +In this work, we will focus on instances of problem \eqref{prob:01} that satisfy the uniform regularity condition. To solve such problems, next section introduces and studies the HoLAL algorithm. \notea{maybe we should say that this has precedent in the literature and that we're not limiting ourselves too much.} + + + + + + diff --git a/tex/journal_drafts/spbasic.bst b/tex/journal_drafts/spbasic.bst new file mode 100644 index 0000000..d44bc2d --- /dev/null +++ b/tex/journal_drafts/spbasic.bst @@ -0,0 +1,1658 @@ +%% +%% This is file `spbasic.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `ay,nat,seq-lab,vonx,nm-rvx,ed-rev,jnrlst,dt-beg,yr-par,yrp-x,yrpp-xsp,note-yr,jxper,jttl-rm,thtit-a,pgsep-c,num-xser,ser-vol,jnm-x,btit-rm,bt-rm,pre-pub,doi,edparxc,blk-tit,in-col,fin-bare,pp,ed,abr,mth-bare,ord,jabr,xand,eprint,url,url-blk,em-x,nfss,') +%% ---------------------------------------- +%% +%%********************************************************************************%% +%% %% +%% For Springer medical, life sciences, chemistry, geology, engineering and %% +%% computer science publications. %% +%% For use with the natbib package (see below). Default is author-year citations. %% +%% When citations are numbered, please use \usepackage[numbers]{natbib}. %% +%% A lack of punctuation is the key feature. Springer-Verlag 2004/10/15 %% +%% Report bugs and improvements to: Joylene Vette-Guillaume or Frank Holzwarth %% +%% %% +%%********************************************************************************%% +%% +%% Copyright 1994-2004 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2004/02/09 4.13 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % The form of the \bibitem entries is + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... + % The essential feature is that the label (the part in brackets) consists + % of the author names, as they should appear in the citation, with the year + % in parentheses following. There must be no space before the opening + % parenthesis! + % With natbib v5.3, a full list of authors may also follow the year. + % In natbib.sty, it is possible to define the type of enclosures that is + % really wanted (brackets or parentheses), but in either case, there must + % be parentheses in the label. + % The \cite command functions as follows: + % \citet{key} ==>> Jones et al. (1990) + % \citet*{key} ==>> Jones, Baker, and Smith (1990) + % \citep{key} ==>> (Jones et al., 1990) + % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) + % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) + % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Smith + % \citeyear{key} ==>> 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + archive + author + booktitle + chapter + doi + edition + editor + eid + eprint + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label extra.label sort.label short.list } +INTEGERS { output.state before.all mid.sentence after.sentence after.block } +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} +STRINGS { s t} +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {fin.entry} +{ duplicate$ empty$ + 'pop$ + 'write$ + if$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {no.blank.or.punct} +{ "\hspace{0pt}" * before.all 'output.state := +} + +FUNCTION {date.block} +{ + add.blank +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +STRINGS {z} +FUNCTION {remove.dots} +{ 'z := + "" + { z empty$ not } + { z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = 'pop$ + { * } + if$ + } + while$ +} +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ skip$ } +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH +FUNCTION {bbl.and} +{ "and"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "eds" } + +FUNCTION {bbl.editor} +{ "ed" } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn" } + +FUNCTION {bbl.volume} +{ "vol" } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp" } + +FUNCTION {bbl.page} +{ "p" } + +FUNCTION {bbl.chapter} +{ "chap" } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "PhD thesis" } + +FUNCTION {bbl.first} +{ "1st" } + +FUNCTION {bbl.second} +{ "2nd" } + +FUNCTION {bbl.third} +{ "3rd" } + +FUNCTION {bbl.fourth} +{ "4th" } + +FUNCTION {bbl.fifth} +{ "5th" } + +FUNCTION {bbl.st} +{ "st" } + +FUNCTION {bbl.nd} +{ "nd" } + +FUNCTION {bbl.rd} +{ "rd" } + +FUNCTION {bbl.th} +{ "th" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +FUNCTION {eng.ord} +{ duplicate$ "1" swap$ * + #-2 #1 substring$ "1" = + { bbl.th * } + { duplicate$ #-1 #1 substring$ + duplicate$ "1" = + { pop$ bbl.st * } + { duplicate$ "2" = + { pop$ bbl.nd * } + { "3" = + { bbl.rd * } + { bbl.th * } + if$ + } + if$ + } + if$ + } + if$ +} + +MACRO {acmcs} {"ACM Comput Surv"} + +MACRO {acta} {"Acta Inf"} + +MACRO {cacm} {"Commun ACM"} + +MACRO {ibmjrd} {"IBM~J~Res Dev"} + +MACRO {ibmsj} {"IBM Syst~J"} + +MACRO {ieeese} {"IEEE Trans Softw Eng"} + +MACRO {ieeetc} {"IEEE Trans Comput"} + +MACRO {ieeetcad} + {"IEEE Trans Comput Aid Des"} + +MACRO {ipl} {"Inf Process Lett"} + +MACRO {jacm} {"J~ACM"} + +MACRO {jcss} {"J~Comput Syst Sci"} + +MACRO {scp} {"Sci Comput Program"} + +MACRO {sicomp} {"SIAM J~Comput"} + +MACRO {tocs} {"ACM Trans Comput Syst"} + +MACRO {tods} {"ACM Trans Database Syst"} + +MACRO {tog} {"ACM Trans Graphic"} + +MACRO {toms} {"ACM Trans Math Softw"} + +MACRO {toois} {"ACM Trans Office Inf Syst"} + +MACRO {toplas} {"ACM Trans Program Lang Syst"} + +MACRO {tcs} {"Theor Comput Sci"} + +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {format.eprint} +{ eprint duplicate$ empty$ + 'skip$ + { "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} + +STRINGS { bibinfo} +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{ f{}}{ jj}" + format.name$ + remove.dots + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + "," * + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { " " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + format.names +} +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.doi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + "\doi{" swap$ * "}" * + } + if$ +} +FUNCTION {format.note} +{ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "title" bibinfo.check +} +FUNCTION {format.full.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { "," * } + 'skip$ + if$ + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[{" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {add.period} +{ duplicate$ empty$ + 'skip$ + { "." * add.blank } + if$ +} + +FUNCTION {if.digit} +{ duplicate$ "0" = + swap$ duplicate$ "1" = + swap$ duplicate$ "2" = + swap$ duplicate$ "3" = + swap$ duplicate$ "4" = + swap$ duplicate$ "5" = + swap$ duplicate$ "6" = + swap$ duplicate$ "7" = + swap$ duplicate$ "8" = + swap$ "9" = or or or or or or or or or +} +FUNCTION {n.separate} +{ 't := + "" + #0 'numnames := + { t empty$ not } + { t #-1 #1 substring$ if.digit + { numnames #1 + 'numnames := } + { #0 'numnames := } + if$ + t #-1 #1 substring$ swap$ * + t #-2 global.max$ substring$ 't := + numnames #5 = + { duplicate$ #1 #2 substring$ swap$ + #3 global.max$ substring$ + "," swap$ * * + } + 'skip$ + if$ + } + while$ +} +FUNCTION {n.dashify} +{ + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + " (" swap$ * ")" * +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { emphasize ", " * swap$ * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +FUNCTION {convert.edition} +{ extract.num "l" change.case$ 's := + s "first" = s "1" = or + { bbl.first 't := } + { s "second" = s "2" = or + { bbl.second 't := } + { s "third" = s "3" = or + { bbl.third 't := } + { s "fourth" = s "4" = or + { bbl.fourth 't := } + { s "fifth" = s "5" = or + { bbl.fifth 't := } + { s #1 #1 substring$ is.num + { s eng.ord 't := } + { edition 't := } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + t +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + convert.edition + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} +INTEGERS { multiresult } +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + ":" * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + ":" * + } + if$ + swap$ * + } + if$ +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + number "number" bibinfo.check duplicate$ empty$ 'skip$ + { + swap$ duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "(" swap$ * ")" * + } + if$ * + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + " " * + get.bbl.editor + "(" swap$ * ") " * + * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + address empty$ t empty$ and + 'skip$ + { + t empty$ + { address "address" bibinfo.check * + } + { t * + address empty$ + 'skip$ + { ", " * address "address" bibinfo.check * } + if$ + } + if$ + } + if$ +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { + journal + remove.dots + "journal" bibinfo.check + "journal" output.check + add.blank + format.vol.num.pages output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + add.blank + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.edition output + new.sentence + format.number.series output + format.publisher.address output + } + { + new.sentence + format.book.crossref output.nonnull + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { + format.bvolume output + format.edition output + format.publisher.address output + format.chapter.pages "chapter and pages" output.check + new.sentence + format.number.series output + } + { + format.chapter.pages "chapter and pages" output.check + new.sentence + format.book.crossref output.nonnull + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.edition output + format.number.series output + format.publisher.address output + format.chapter.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.bvolume output + format.number.series output + format.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + new.sentence + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.edition output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title + "title" output.check + new.sentence + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.sentence + howpublished "howpublished" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title + "title" output.check + new.sentence + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title + "title" output.check + new.sentence + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + format.doi output + format.url output + format.note "note" output.check + format.eprint output + fin.entry +} + +FUNCTION {default.type} { misc } +READ +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} +INTEGERS { len } +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} +FUNCTION {format.lab.names} +{ 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ + " " * bbl.etal * + } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { bbl.and space.word * s #2 "{vv~}{ll}" format.name$ + * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + { pop$ "????" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { numnames #2 > nameptr #2 = and + { "zz" * year field.or.null * " " * } + 'skip$ + if$ + t sortify * + } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} +SORT +STRINGS { last.label next.extra } +INTEGERS { last.extra.num number.label } +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'number.label := +} +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} +EXECUTE {initialize.extra.label.stuff} +ITERATE {forward.pass} +REVERSE {reverse.pass} +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {bib.sort.order} +SORT +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{DOI~\discretionary{}{}{}#1}\else" + write$ newline$ + " \providecommand{\doi}{DOI~\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ + "\providecommand{\eprint}[2][]{\url{#2}}" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `spbasic.bst'. + diff --git a/tex/journal_drafts/spmpsci.bst b/tex/journal_drafts/spmpsci.bst new file mode 100644 index 0000000..145f368 --- /dev/null +++ b/tex/journal_drafts/spmpsci.bst @@ -0,0 +1,1512 @@ +%% +%% This is file `spmpsci.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `vonx,nm-rvv,yr-par,xmth,jttl-rm,thtit-a,vol-bf,volp-com,pgsep-c,num-xser,ser-vol,ser-ed,jnm-x,btit-rm,bt-rm,doi,edparxc,au-col,in-col,fin-bare,pp,ed,abr,xedn,jabr,xand,url,url-blk,nfss,') +%% ---------------------------------------- +%%********************************************************************************%% +%% %% +%% For Springer mathematics, computer science, and physical sciences journals %% +%% publications. %% +%% Report bugs and improvements to: Joylene Vette-Guillaume or Frank Holzwarth %% +%% Springer-Verlag 2004/10/15 %% +%% %% +%%********************************************************************************%% +%% +%% Copyright 1994-2004 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2004/02/09 4.13 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is a numerical citation style, and as such is standard LaTeX. + % It requires no extra package to interface to the main text. + % The form of the \bibitem entries is + % \bibitem{key}... + % Usage of \cite is as follows: + % \cite{key} ==>> [#] + % \cite[chap. 2]{key} ==>> [#, chap. 2] + % where # is a number determined by the ordering in the reference list. + % The order in the reference list is alphabetical by authors. + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + doi + edition + editor + eid + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label } +INTEGERS { output.state before.all mid.sentence after.sentence after.block } +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} +STRINGS { s t} +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {fin.entry} +{ duplicate$ empty$ + 'pop$ + 'write$ + if$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {add.colon} +{ duplicate$ empty$ + 'skip$ + { ":" * add.blank } + if$ +} + +FUNCTION {date.block} +{ + new.block +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} +FUNCTION {bolden} +{ duplicate$ empty$ + { pop$ "" } + { "\textbf{" swap$ * "}" * } + if$ +} +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH +FUNCTION {bbl.and} +{ "and"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.chapter} +{ "chap." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +MACRO {acmcs} {"ACM Comput. Surv."} + +MACRO {acta} {"Acta Inf."} + +MACRO {cacm} {"Commun. ACM"} + +MACRO {ibmjrd} {"IBM J. Res. Dev."} + +MACRO {ibmsj} {"IBM Syst.~J."} + +MACRO {ieeese} {"IEEE Trans. Software Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput. Aid. Des."} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~ACM"} + +MACRO {jcss} {"J.~Comput. Syst. Sci."} + +MACRO {scp} {"Sci. Comput. Program."} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Graphic."} + +MACRO {toms} {"ACM Trans. Math. Software"} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."} + +MACRO {tcs} {"Theor. Comput. Sci."} + +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} + +STRINGS { bibinfo} +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{ jj}{, f{.}.}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + "," * + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { " " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{f{.}.~}{vv~}{ll}{ jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + "," * + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + + " " * bbl.etal * + } + { " " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.authors} +{ author "author" format.names +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.doi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + new.block + "\doi{" swap$ * "}" * + } + if$ +} +FUNCTION {format.note} +{ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "title" bibinfo.check +} +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {if.digit} +{ duplicate$ "0" = + swap$ duplicate$ "1" = + swap$ duplicate$ "2" = + swap$ duplicate$ "3" = + swap$ duplicate$ "4" = + swap$ duplicate$ "5" = + swap$ duplicate$ "6" = + swap$ duplicate$ "7" = + swap$ duplicate$ "8" = + swap$ "9" = or or or or or or or or or +} +FUNCTION {n.separate} +{ 't := + "" + #0 'numnames := + { t empty$ not } + { t #-1 #1 substring$ if.digit + { numnames #1 + 'numnames := } + { #0 'numnames := } + if$ + t #-1 #1 substring$ swap$ * + t #-2 global.max$ substring$ 't := + numnames #5 = + { duplicate$ #1 #2 substring$ swap$ + #3 global.max$ substring$ + "," swap$ * * + } + 'skip$ + if$ + } + while$ +} +FUNCTION {n.dashify} +{ + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ + "" + duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ 'skip$ + { "there's a month but no year in " cite$ * warning$ } + if$ + * + } + { swap$ 'skip$ + { + swap$ + " " * swap$ + } + if$ + * + } + if$ + duplicate$ empty$ + 'skip$ + { + before.all 'output.state := + " (" swap$ * ")" * + } + if$ +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { emphasize ", " * swap$ * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} +INTEGERS { multiresult } +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + ", " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + ", " * + } + if$ + swap$ * + } + if$ +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + bolden + number "number" bibinfo.check duplicate$ empty$ 'skip$ + { + swap$ duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "(" swap$ * ")" * + } + if$ * + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { + format.bvolume duplicate$ empty$ 'pop$ + { ", " swap$ * * } + if$ + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + " " * + get.bbl.editor + "(" swap$ * ") " * + * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + key duplicate$ empty$ + { pop$ + journal duplicate$ empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * warning$ } + { "journal" bibinfo.check emphasize word.in swap$ * } + if$ + } + { word.in swap$ * " " *} + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + "editor" bibinfo.check + editor num.names$ duplicate$ + #2 > + { pop$ + "editor" bibinfo.check + " " * bbl.etal + * + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + "editor" bibinfo.check + " " * bbl.etal + * + } + { + bbl.and space.word + * editor #2 "{vv~}{ll}" format.name$ + "editor" bibinfo.check + * + } + if$ + } + if$ + } + if$ +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { series emphasize * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { format.booktitle duplicate$ empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + } + { word.in swap$ * } + if$ + } + { word.in key * " " *} + if$ + } + { word.in format.crossref.editor * " " *} + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + address empty$ t empty$ and + 'skip$ + { + t empty$ + { address "address" bibinfo.check * + } + { t * + address empty$ + 'skip$ + { ", " * address "address" bibinfo.check * } + if$ + } + if$ + } + if$ +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + "journal" output.check + add.blank + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + add.colon + } + { format.authors output.nonnull + add.colon + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.edition output + new.block + format.number.series output + new.sentence + format.publisher.address output + } + { + new.block + format.book.crossref output.nonnull + } + if$ + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + add.colon + new.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.date output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + add.colon + } + { format.authors output.nonnull + add.colon + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { + format.bvolume output + format.edition output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + format.publisher.address output + } + { + format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.number.series output + format.edition output + format.chapter.pages output + new.sentence + format.publisher.address output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.number.series output + format.pages output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization "organization" bibinfo.check + duplicate$ empty$ 'pop$ + { output + address "address" bibinfo.check output + } + if$ + } + { format.authors output.nonnull } + if$ + add.colon + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address new.block.checka + address "address" bibinfo.check output + } + 'skip$ + if$ + } + { + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + } + if$ + format.edition output + format.date output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title + "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + add.colon + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished "howpublished" bibinfo.check output + format.date output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry + empty.misc.check +} +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title + "title" output.check + new.block + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization "organization" bibinfo.check output + } + { format.editors output.nonnull } + if$ + add.colon + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + editor empty$ + { publisher empty$ + 'skip$ + { + new.sentence + format.publisher.address output + } + if$ + } + { publisher empty$ + { + new.sentence + format.organization.address output } + { + new.sentence + organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + if$ + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + add.colon + new.block + format.title "title" output.check + format.date output + format.doi output + new.block + format.url output + new.block + format.note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } +READ +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} +INTEGERS { len } +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { t sortify * } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} +FUNCTION {presort} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {presort} +SORT +STRINGS { longest.label } +INTEGERS { number.label longest.label.width } +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} +EXECUTE {initialize.longest.label} +ITERATE {longest.label.pass} +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * + write$ newline$ + "\providecommand{\url}[1]{{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{DOI~\discretionary{}{}{}#1}\else" + write$ newline$ + " \providecommand{\doi}{DOI~\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `spmpsci.bst'. + diff --git a/tex/journal_drafts/svglov3.clo b/tex/journal_drafts/svglov3.clo new file mode 100644 index 0000000..77c71e7 --- /dev/null +++ b/tex/journal_drafts/svglov3.clo @@ -0,0 +1,113 @@ +% SVJour3 DOCUMENT CLASS OPTION SVGLOV3 -- for standardised journals +% +% This is an enhancement for the LaTeX +% SVJour3 document class for Springer journals +% +%% +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +\ProvidesFile{svglov3.clo} + [2009/12/18 v3.2 + style option for standardised journals] +\typeout{SVJour Class option: svglov3.clo for standardised journals} +\def\validfor{svjour3} +\global\let\if@runhead\iftrue +\ExecuteOptions{final,10pt} +% No size changing allowed, hence a "copy" of size10.clo is included +\DeclareFontShape{OT1}{cmr}{m}{n}{ + <-6> cmr5 + <6-7> cmr6 + <7-8> cmr7 + <8-9> cmr8 + <9-10> cmr9 + <10-12> cmr10 + <12-17> cmr12 + <17-> cmr17 + }{} +% +\renewcommand\normalsize{% +\if@twocolumn + \@setfontsize\normalsize\@xpt{12.5pt}% +\else + \if@smallext + \@setfontsize\normalsize\@xpt\@xiipt + \else + \@setfontsize\normalsize{9.5pt}{11.5pt}% + \fi +\fi + \abovedisplayskip=3 mm plus6pt minus 4pt + \belowdisplayskip=3 mm plus6pt minus 4pt + \abovedisplayshortskip=0.0 mm plus6pt + \belowdisplayshortskip=2 mm plus4pt minus 4pt + \let\@listi\@listI} +\normalsize +\newcommand\small{% +\if@twocolumn + \@setfontsize\small{8.5pt}\@xpt +\else + \if@smallext + \@setfontsize\small\@viiipt{9.5pt}% + \else + \@setfontsize\small\@viiipt{9.25pt}% + \fi +\fi + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 4\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@}% + \belowdisplayskip \abovedisplayskip +} +\let\footnotesize\small +\newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt} +\newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt} +\if@twocolumn + \newcommand\large{\@setfontsize\large\@xiipt\@xivpt} + \newcommand\LARGE{\@setfontsize\LARGE{16pt}{18pt}} +\else + \newcommand\large{\@setfontsize\large\@xipt\@xiipt} + \newcommand\LARGE{\@setfontsize\LARGE{13pt}{15pt}} +\fi +\newcommand\Large{\@setfontsize\Large\@xivpt{16dd}} +\newcommand\huge{\@setfontsize\huge\@xxpt{25}} +\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}} +% +\def\runheadhook{\rlap{\smash{\lower6.5pt\hbox to\textwidth{\hrulefill}}}} +\if@twocolumn +\setlength{\textwidth}{17.4cm} +\setlength{\textheight}{234mm} +\AtEndOfClass{\setlength\columnsep{6mm}} +\else + \if@smallext + \setlength{\textwidth}{11.9cm} + \setlength{\textheight}{19.4cm} + \else + \setlength{\textwidth}{12.2cm} + \setlength{\textheight}{19.8cm} + \fi +\fi +% +\AtBeginDocument{% +\@ifundefined{@journalname} + {\typeout{Unknown journal: specify \string\journalname\string{% +\string} in preambel^^J}}{}} +% +\endinput +%% +%% End of file `svglov3.clo'. diff --git a/tex/journal_drafts/svjour3.cls b/tex/journal_drafts/svjour3.cls new file mode 100644 index 0000000..aa3b33d --- /dev/null +++ b/tex/journal_drafts/svjour3.cls @@ -0,0 +1,1431 @@ +% SVJour3 DOCUMENT CLASS -- version 3.2 for LaTeX2e +% +% LaTeX document class for Springer journals +% +%% +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{svjour3}[2007/05/08 v3.2 +^^JLaTeX document class for Springer journals] +\newcommand\@ptsize{} +\newif\if@restonecol +\newif\if@titlepage +\@titlepagefalse +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\DeclareOption{fleqn}{\input{fleqn.clo}\AtBeginDocument{\mathindent\z@}% +\AtBeginDocument{\@ifpackageloaded{amsmath}{\@mathmargin\z@}{}}% +\PassOptionsToPackage{fleqn}{amsmath}} +%%% +\DeclareOption{onecolumn}{} +\DeclareOption{smallcondensed}{} +\DeclareOption{twocolumn}{\@twocolumntrue\ExecuteOptions{fleqn}} +\newif\if@smallext\@smallextfalse +\DeclareOption{smallextended}{\@smallexttrue} +\let\if@mathematic\iftrue +\let\if@numbook\iffalse +\DeclareOption{numbook}{\let\if@envcntsect\iftrue + \AtEndOfPackage{% + \renewcommand\thefigure{\thesection.\@arabic\c@figure}% + \renewcommand\thetable{\thesection.\@arabic\c@table}% + \renewcommand\theequation{\thesection.\@arabic\c@equation}% + \@addtoreset{figure}{section}% + \@addtoreset{table}{section}% + \@addtoreset{equation}{section}% + }% +} +\DeclareOption{openbib}{% + \AtEndOfPackage{% + \renewcommand\@openbib@code{% + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + }% + \renewcommand\newblock{\par}}% +} +\DeclareOption{natbib}{% +\AtEndOfClass{\RequirePackage{natbib}% +% Changing some parameters of NATBIB +\setlength{\bibhang}{\parindent}% +%\setlength{\bibsep}{0mm}% +\let\bibfont=\small +\def\@biblabel#1{#1.}% +\newcommand{\etal}{et al.}% +\bibpunct{(}{)}{;}{a}{}{,}}} +% +\let\if@runhead\iffalse +\DeclareOption{runningheads}{\let\if@runhead\iftrue} +\let\if@smartrunh\iffalse +\DeclareOption{smartrunhead}{\let\if@smartrunh\iftrue} +\DeclareOption{nosmartrunhead}{\let\if@smartrunh\iffalse} +\let\if@envcntreset\iffalse +\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue} +\let\if@envcntsame\iffalse +\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue} +\let\if@envcntsect\iffalse +\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue} +\let\if@referee\iffalse +\DeclareOption{referee}{\let\if@referee\iftrue} +\def\makereferee{\def\baselinestretch{2}} +\let\if@instindent\iffalse +\DeclareOption{instindent}{\let\if@instindent\iftrue} +\let\if@smartand\iffalse +\DeclareOption{smartand}{\let\if@smartand\iftrue} +\let\if@spthms\iftrue +\DeclareOption{nospthms}{\let\if@spthms\iffalse} +% +% language and babel dependencies +\DeclareOption{deutsch}{\def\switcht@@therlang{\switcht@deutsch}% +\gdef\svlanginfo{\typeout{Man spricht deutsch.}\global\let\svlanginfo\relax}} +\DeclareOption{francais}{\def\switcht@@therlang{\switcht@francais}% +\gdef\svlanginfo{\typeout{On parle francais.}\global\let\svlanginfo\relax}} +\let\switcht@@therlang\relax +\let\svlanginfo\relax +% +\AtBeginDocument{\@ifpackageloaded{babel}{% +\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}% +\@ifundefined{extrasUKenglish}{}{\addto\extrasUKenglish{\switcht@albion}}% +\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}% +\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}% +\@ifundefined{extrasngerman}{}{\addto\extrasngerman{\switcht@deutsch}}% +}{\switcht@@therlang}% +} +% +\def\ClassInfoNoLine#1#2{% + \ClassInfo{#1}{#2\@gobble}% +} +\let\journalopt\@empty +\DeclareOption*{% +\InputIfFileExists{sv\CurrentOption.clo}{% +\global\let\journalopt\CurrentOption}{% +\ClassWarning{Springer-SVJour3}{Specified option or subpackage +"\CurrentOption" not found -}\OptionNotUsed}} +\ExecuteOptions{a4paper,twoside,10pt,instindent} +\ProcessOptions +% +\ifx\journalopt\@empty\relax +\ClassInfoNoLine{Springer-SVJour3}{extra/valid Springer sub-package (-> *.clo) +\MessageBreak not found in option list of \string\documentclass +\MessageBreak - autoactivating "global" style}{} +\input{svglov3.clo} +\else +\@ifundefined{validfor}{% +\ClassError{Springer-SVJour3}{Possible option clash for sub-package +\MessageBreak "sv\journalopt.clo" - option file not valid +\MessageBreak for this class}{Perhaps you used an option of the old +Springer class SVJour!} +}{} +\fi +% +\if@smartrunh\AtEndDocument{\islastpageeven\getlastpagenumber}\fi +% +\newcommand{\twocoltest}[2]{\if@twocolumn\def\@gtempa{#2}\else\def\@gtempa{#1}\fi +\@gtempa\makeatother} +\newcommand{\columncase}{\makeatletter\twocoltest} +% +\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00} +\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01} +\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02} +\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03} +\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04} +\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05} +\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06} +\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07} +\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08} +\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09} +\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A} +% +\setlength\parindent{15\p@} +\setlength\smallskipamount{3\p@ \@plus 1\p@ \@minus 1\p@} +\setlength\medskipamount{6\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\bigskipamount{12\p@ \@plus 4\p@ \@minus 4\p@} +\setlength\headheight{12\p@} +\setlength\headsep {14.50dd} +\setlength\topskip {10\p@} +\setlength\footskip{30\p@} +\setlength\maxdepth{.5\topskip} +% +\@settopoint\textwidth +\setlength\marginparsep {10\p@} +\setlength\marginparpush{5\p@} +\setlength\topmargin{-10pt} +\if@twocolumn + \setlength\oddsidemargin {-30\p@} + \setlength\evensidemargin{-30\p@} +\else + \setlength\oddsidemargin {\z@} + \setlength\evensidemargin{\z@} +\fi +\setlength\marginparwidth {48\p@} +\setlength\footnotesep{8\p@} +\setlength{\skip\footins}{9\p@ \@plus 4\p@ \@minus 2\p@} +\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {20\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\dblfloatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\@fptop{0\p@} +\setlength\@fpsep{12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\@fpbot{0\p@ \@plus 1fil} +\setlength\@dblfptop{0\p@} +\setlength\@dblfpsep{12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\@dblfpbot{0\p@ \@plus 1fil} +\setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@} +\def\@listi{\leftmargin\leftmargini + \parsep \z@ + \topsep 6\p@ \@plus2\p@ \@minus4\p@ + \itemsep\parsep} +\let\@listI\@listi +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep \z@ + \parsep \topsep + \itemsep \parsep} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep \z@ + \parsep \topsep + \itemsep \parsep} +\def\@listiv {\leftmargin\leftmarginiv + \labelwidth\leftmarginiv + \advance\labelwidth-\labelsep} +\def\@listv {\leftmargin\leftmarginv + \labelwidth\leftmarginv + \advance\labelwidth-\labelsep} +\def\@listvi {\leftmargin\leftmarginvi + \labelwidth\leftmarginvi + \advance\labelwidth-\labelsep} +% +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +\renewcommand\baselinestretch{} +\setlength\parskip{0\p@ \@plus \p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\setcounter{topnumber}{4} +\renewcommand\topfraction{.9} +\setcounter{bottomnumber}{2} +\renewcommand\bottomfraction{.7} +\setcounter{totalnumber}{6} +\renewcommand\textfraction{.1} +\renewcommand\floatpagefraction{.85} +\setcounter{dbltopnumber}{3} +\renewcommand\dbltopfraction{.85} +\renewcommand\dblfloatpagefraction{.85} +\def\ps@headings{% + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\small\csname runheadhook\endcsname + \rlap{\thepage}\hfil\leftmark\unskip}% + \def\@oddhead{\small\csname runheadhook\endcsname + \ignorespaces\rightmark\hfil\llap{\thepage}}% + \let\@mkboth\@gobbletwo + \let\sectionmark\@gobble + \let\subsectionmark\@gobble + } +% make indentations changeable +\def\setitemindent#1{\settowidth{\labelwidth}{#1}% + \leftmargini\labelwidth + \advance\leftmargini\labelsep + \def\@listi{\leftmargin\leftmargini + \labelwidth\leftmargini\advance\labelwidth by -\labelsep + \parsep=\parskip + \topsep=\medskipamount + \itemsep=\parskip \advance\itemsep by -\parsep}} +\def\setitemitemindent#1{\settowidth{\labelwidth}{#1}% + \leftmarginii\labelwidth + \advance\leftmarginii\labelsep +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii\advance\labelwidth by -\labelsep + \parsep=\parskip + \topsep=\z@ + \itemsep=\parskip \advance\itemsep by -\parsep}} +% labels of description +\def\descriptionlabel#1{\hspace\labelsep #1\hfil} +% adjusted environment "description" +% if an optional parameter (at the first two levels of lists) +% is present, its width is considered to be the widest mark +% throughout the current list. +\def\description{\@ifnextchar[{\@describe}{\list{}{\labelwidth\z@ + \itemindent-\leftmargin \let\makelabel\descriptionlabel}}} +\let\enddescription\endlist +% +\def\describelabel#1{#1\hfil} +\def\@describe[#1]{\relax\ifnum\@listdepth=0 +\setitemindent{#1}\else\ifnum\@listdepth=1 +\setitemitemindent{#1}\fi\fi +\list{--}{\let\makelabel\describelabel}} +% +\newdimen\logodepth +\logodepth=1.2cm +\newdimen\headerboxheight +\headerboxheight=163pt % 18 10.5dd-lines - 2\baselineskip +\if@twocolumn\else\advance\headerboxheight by-14.5mm\fi +\newdimen\betweenumberspace % dimension for space between +\betweenumberspace=3.33pt % number and text of titles. +\newdimen\aftertext % dimension for space after +\aftertext=5pt % text of title. +\newdimen\headlineindent % dimension for space between +\headlineindent=1.166cm % number and text of headings. +\if@mathematic + \def\runinend{} % \enspace} + \def\floatcounterend{\enspace} + \def\sectcounterend{} +\else + \def\runinend{.} + \def\floatcounterend{.\ } + \def\sectcounterend{.} +\fi +\def\email#1{\emailname: #1} +\def\keywords#1{\par\addvspace\medskipamount{\rightskip=0pt plus1cm +\def\and{\ifhmode\unskip\nobreak\fi\ $\cdot$ +}\noindent\keywordname\enspace\ignorespaces#1\par}} +% +\def\subclassname{{\bfseries Mathematics Subject Classification +(2010)}\enspace} +\def\subclass#1{\par\addvspace\medskipamount{\rightskip=0pt plus1cm +\def\and{\ifhmode\unskip\nobreak\fi\ $\cdot$ +}\noindent\subclassname\ignorespaces#1\par}} +% +\def\PACSname{\textbf{PACS}\enspace} +\def\PACS#1{\par\addvspace\medskipamount{\rightskip=0pt plus1cm +\def\and{\ifhmode\unskip\nobreak\fi\ $\cdot$ +}\noindent\PACSname\ignorespaces#1\par}} +% +\def\CRclassname{{\bfseries CR Subject Classification}\enspace} +\def\CRclass#1{\par\addvspace\medskipamount{\rightskip=0pt plus1cm +\def\and{\ifhmode\unskip\nobreak\fi\ $\cdot$ +}\noindent\CRclassname\ignorespaces#1\par}} +% +\def\ESMname{\textbf{Electronic Supplementary Material}\enspace} +\def\ESM#1{\par\addvspace\medskipamount +\noindent\ESMname\ignorespaces#1\par} +% +\newcounter{inst} +\newcounter{auth} +\def\authdepth{2} +\newdimen\instindent +\newbox\authrun +\newtoks\authorrunning +\newbox\titrun +\newtoks\titlerunning +\def\authorfont{\bfseries} + +\def\combirunning#1{\gdef\@combi{#1}} +\def\@combi{} +\newbox\combirun +% +\def\ps@last{\def\@evenhead{\small\rlap{\thepage}\hfil +\lastevenhead}} +\newcounter{lastpage} +\def\islastpageeven{\@ifundefined{lastpagenumber} +{\setcounter{lastpage}{0}}{\setcounter{lastpage}{\lastpagenumber}} +\ifnum\value{lastpage}>0 + \ifodd\value{lastpage}% + \else + \if@smartrunh + \thispagestyle{last}% + \fi + \fi +\fi} +\def\getlastpagenumber{\clearpage +\addtocounter{page}{-1}% + \immediate\write\@auxout{\string\gdef\string\lastpagenumber{\thepage}}% + \immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}}}% + \addtocounter{page}{1}} + +\def\journalname#1{\gdef\@journalname{#1}} + +\def\dedication#1{\gdef\@dedic{#1}} +\def\@dedic{} + +\let\@date\undefined +\def\notused{~} + +\def\institute#1{\gdef\@institute{#1}} + +\def\offprints#1{\begingroup +\def\protect{\noexpand\protect\noexpand}\xdef\@thanks{\@thanks +\protect\footnotetext[0]{\unskip\hskip-15pt{\itshape Send offprint requests +to\/}: \ignorespaces#1}}\endgroup\ignorespaces} + +%\def\mail#1{\gdef\@mail{#1}} +%\def\@mail{} + +\def\@thanks{} + +\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}% + \or \dagger\or \ddagger\or + \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi\relax} +% +%\def\invthanks#1{\footnotetext[0]{\kern-\bibindent#1}} +% +\def\nothanksmarks{\def\thanks##1{\protected@xdef\@thanks{\@thanks + \protect\footnotetext[0]{\kern-\bibindent##1}}}} +% +\def\subtitle#1{\gdef\@subtitle{#1}} +\def\@subtitle{} + +\def\headnote#1{\gdef\@headnote{#1}} +\def\@headnote{} + +\def\papertype#1{\gdef\paper@type{\MakeUppercase{#1}}} +\def\paper@type{} + +\def\ch@ckobl#1#2{\@ifundefined{@#1} + {\typeout{SVJour3 warning: Missing +\expandafter\string\csname#1\endcsname}% + \csname #1\endcsname{#2}} + {}} +% +\def\ProcessRunnHead{% + \def\\{\unskip\ \ignorespaces}% + \def\thanks##1{\unskip{}}% + \instindent=\textwidth + \advance\instindent by-\headlineindent + \if!\the\titlerunning!\else + \edef\@title{\the\titlerunning}% + \fi + \global\setbox\titrun=\hbox{\small\rmfamily\unboldmath\ignorespaces\@title + \unskip}% + \ifdim\wd\titrun>\instindent + \typeout{^^JSVJour3 Warning: Title too long for running head.}% + \typeout{Please supply a shorter form with \string\titlerunning + \space prior to \string\maketitle}% + \global\setbox\titrun=\hbox{\small\rmfamily + Title Suppressed Due to Excessive Length}% + \fi + \xdef\@title{\copy\titrun}% +% + \if!\the\authorrunning! + \else + \setcounter{auth}{1}% + \edef\@author{\the\authorrunning}% + \fi + \ifnum\value{inst}>\authdepth + \def\stripauthor##1\and##2\endauthor{% + \protected@xdef\@author{##1\unskip\unskip\if!##2!\else\ et al.\fi}}% + \expandafter\stripauthor\@author\and\endauthor + \else + \gdef\and{\unskip, \ignorespaces}% + {\def\and{\noexpand\protect\noexpand\and}% + \protected@xdef\@author{\@author}} + \fi + \global\setbox\authrun=\hbox{\small\rmfamily\unboldmath\ignorespaces + \@author\unskip}% + \ifdim\wd\authrun>\instindent + \typeout{^^JSVJour3 Warning: Author name(s) too long for running head. + ^^JPlease supply a shorter form with \string\authorrunning + \space prior to \string\maketitle}% + \global\setbox\authrun=\hbox{\small\rmfamily Please give a shorter version + with: {\tt\string\authorrunning\space and + \string\titlerunning\space prior to \string\maketitle}}% + \fi + \xdef\@author{\copy\authrun}% + \markboth{\@author}{\@title}% +} +% +\let\orithanks=\thanks +\def\thanks#1{\ClassWarning{SVJour3}{\string\thanks\space may only be +used inside of \string\title, \string\author,\MessageBreak +and \string\date\space prior to \string\maketitle}} +% +\def\maketitle{\par\let\thanks=\orithanks +\ch@ckobl{journalname}{Noname} +\ch@ckobl{date}{the date of receipt and acceptance should be inserted +later} +\ch@ckobl{title}{A title should be given} +\ch@ckobl{author}{Name(s) and initial(s) of author(s) should be given} +\ch@ckobl{institute}{Address(es) of author(s) should be given} +\begingroup +% + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{$^{\@thefnmark}$}% + \renewcommand\@makefntext[1]{% + \noindent + \hb@xt@\bibindent{\hss\@makefnmark\enspace}##1\vrule height0pt + width0pt depth8pt} +% + \def\lastand{\ifnum\value{inst}=2\relax + \unskip{} \andname\ + \else + \unskip, \andname\ + \fi}% + \def\and{\stepcounter{auth}\relax + \if@smartand + \ifnum\value{auth}=\value{inst}% + \lastand + \else + \unskip, + \fi + \else + \unskip, + \fi}% + \thispagestyle{empty} + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi +% + \global\@topnum\z@ + \if!\@thanks!\else + \@thanks +\insert\footins{\vskip-3pt\hrule\@width\if@twocolumn\columnwidth +\else 38mm\fi\vskip3pt}% + \fi + {\def\thanks##1{\unskip{}}% + \def\iand{\\[5pt]\let\and=\nand}% + \def\nand{\ifhmode\unskip\nobreak\fi\ $\cdot$ }% + \let\and=\nand + \def\at{\\\let\and=\iand}% + \footnotetext[0]{\kern-\bibindent + \ignorespaces\@institute}\vspace{5dd}}% +%\if!\@mail!\else +% \footnotetext[0]{\kern-\bibindent\mailname\ +% \ignorespaces\@mail}% +%\fi +% + \if@runhead + \ProcessRunnHead + \fi +% + \endgroup + \setcounter{footnote}{0} + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\@subtitle\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax} + +\def\makeheadbox{{% +\hbox to0pt{\vbox{\baselineskip=10dd\hrule\hbox +to\hsize{\vrule\kern3pt\vbox{\kern3pt +\hbox{\bfseries\@journalname\ manuscript No.} +\hbox{(will be inserted by the editor)} +\kern3pt}\hfil\kern3pt\vrule}\hrule}% +\hss}}} +% +\def\rubric{\setbox0=\hbox{\small\strut}\@tempdima=\ht0\advance +\@tempdima\dp0\advance\@tempdima2\fboxsep\vrule\@height\@tempdima +\@width\z@} +\newdimen\rubricwidth +% +\def\@maketitle{\newpage +\normalfont +\vbox to0pt{\if@twocolumn\vskip-39pt\else\vskip-49pt\fi +\nointerlineskip +\makeheadbox\vss}\nointerlineskip +\vbox to 0pt{\offinterlineskip\rubricwidth=\columnwidth +%%%%\vskip-12.5pt % -12.5pt +\if@twocolumn\else % one column journal + \divide\rubricwidth by144\multiply\rubricwidth by89 % perform golden section + \vskip-\topskip +\fi +\hrule\@height0.35mm\noindent +\advance\fboxsep by.25mm +\global\advance\rubricwidth by0pt +\rubric +\vss}\vskip19.5pt % war 9pt +% +\if@twocolumn\else + \gdef\footnoterule{% + \kern-3\p@ + \hrule\@width38mm % \columnwidth \rubricwidth + \kern2.6\p@} +\fi +% + \setbox\authrun=\vbox\bgroup + \if@twocolumn + \hrule\@height10.5mm\@width0\p@ + \else + \hrule\@height 2mm\@width0\p@ + \fi + \pretolerance=10000 + \rightskip=0pt plus 4cm + \nothanksmarks +% \if!\@headnote!\else +% \noindent +% {\LARGE\normalfont\itshape\ignorespaces\@headnote\par}\vskip 3.5mm +% \fi + {\LARGE\bfseries + \noindent\ignorespaces + \@title \par}\vskip 17pt\relax + \if!\@subtitle!\else + {\large\bfseries + \pretolerance=10000 + \rightskip=0pt plus 3cm + \vskip-12pt +% \noindent\ignorespaces\@subtitle \par}\vskip 11.24pt\relax + \noindent\ignorespaces\@subtitle \par}\vskip 17pt\relax + \fi + {\authorfont + \setbox0=\vbox{\setcounter{auth}{1}\def\and{\stepcounter{auth} }% + \hfuzz=2\textwidth\def\thanks##1{}\@author}% + \setcounter{footnote}{0}% + \global\value{inst}=\value{auth}% + \setcounter{auth}{1}% + \if@twocolumn + \rightskip43mm plus 4cm minus 3mm + \else % one column journal + \rightskip=\linewidth + \advance\rightskip by-\rubricwidth + \advance\rightskip by0pt plus 4cm minus 3mm + \fi +% +\def\and{\unskip\nobreak\enskip{\boldmath$\cdot$}\enskip\ignorespaces}% + \noindent\ignorespaces\@author\vskip7.23pt} +% + \small + \if!\@dedic!\else + \par + \normalsize\it + \addvspace\baselineskip + \noindent\@dedic + \fi + \egroup % end of header box + \@tempdima=\headerboxheight + \advance\@tempdima by-\ht\authrun + \unvbox\authrun + \ifdim\@tempdima>0pt + \vrule width0pt height\@tempdima\par + \fi + \noindent{\small\@date\if@twocolumn\vskip 7.2mm\else\vskip 5.2mm\fi} + \global\@minipagetrue + \global\everypar{\global\@minipagefalse\global\everypar{}}% +%\vskip22.47pt +} +% +\if@mathematic + \def\vec#1{\ensuremath{\mathchoice + {\mbox{\boldmath$\displaystyle\mathbf{#1}$}} + {\mbox{\boldmath$\textstyle\mathbf{#1}$}} + {\mbox{\boldmath$\scriptstyle\mathbf{#1}$}} + {\mbox{\boldmath$\scriptscriptstyle\mathbf{#1}$}}}} +\else + \def\vec#1{\ensuremath{\mathchoice + {\mbox{\boldmath$\displaystyle#1$}} + {\mbox{\boldmath$\textstyle#1$}} + {\mbox{\boldmath$\scriptstyle#1$}} + {\mbox{\boldmath$\scriptscriptstyle#1$}}}} +\fi +% +\def\tens#1{\ensuremath{\mathsf{#1}}} +% +\setcounter{secnumdepth}{3} +\newcounter {section} +\newcounter {subsection}[section] +\newcounter {subsubsection}[subsection] +\newcounter {paragraph}[subsubsection] +\newcounter {subparagraph}[paragraph] +\renewcommand\thesection {\@arabic\c@section} +\renewcommand\thesubsection {\thesection.\@arabic\c@subsection} +\renewcommand\thesubsubsection{\thesubsection.\@arabic\c@subsubsection} +\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph} +\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph} +% +\def\@hangfrom#1{\setbox\@tempboxa\hbox{#1}% + \hangindent \z@\noindent\box\@tempboxa} +% +\def\@seccntformat#1{\csname the#1\endcsname\sectcounterend +\hskip\betweenumberspace} +% +% \newif\if@sectrule +% \if@twocolumn\else\let\@sectruletrue=\relax\fi +% \if@avier\let\@sectruletrue=\relax\fi +% \def\makesectrule{\if@sectrule\global\@sectrulefalse\null\vglue-\topskip +% \hrule\nobreak\parskip=5pt\relax\fi} +% % +% \let\makesectruleori=\makesectrule +% \def\restoresectrule{\global\let\makesectrule=\makesectruleori\global\@sectrulefalse} +% \def\nosectrule{\let\makesectrule=\restoresectrule} +% +\def\@startsection#1#2#3#4#5#6{% + \if@noskipsec \leavevmode \fi + \par + \@tempskipa #4\relax + \@afterindenttrue + \ifdim \@tempskipa <\z@ + \@tempskipa -\@tempskipa \@afterindentfalse + \fi + \if@nobreak + \everypar{}% + \else + \addpenalty\@secpenalty\addvspace\@tempskipa + \fi +% \ifnum#2=1\relax\@sectruletrue\fi + \@ifstar + {\@ssect{#3}{#4}{#5}{#6}}% + {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} +% +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup + #6{% \makesectrule + \@hangfrom{\hskip #3\relax\@svsec}% + \raggedright + \hyphenpenalty \@M% + \interlinepenalty \@M #8\@@par}% + \endgroup + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname\sectcounterend}% + \fi + #7}% + \else + \def\@svsechd{% + #6{\hskip #3\relax + \@svsec #8\/\hskip\aftertext}% + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}}% + \fi + \@xsect{#5}} +% +\def\@ssect#1#2#3#4#5{% + \@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + \begingroup + #4{% \makesectrule + \@hangfrom{\hskip #1}% + \interlinepenalty \@M #5\@@par}% + \endgroup + \else + \def\@svsechd{#4{\hskip #1\relax #5}}% + \fi + \@xsect{#3}} + +% +% measures and setting of sections +% +\def\section{\@startsection{section}{1}{\z@}% + {-21dd plus-8pt minus-4pt}{10.5dd} + {\normalsize\bfseries\boldmath}} +\def\subsection{\@startsection{subsection}{2}{\z@}% + {-21dd plus-8pt minus-4pt}{10.5dd} + {\normalsize\upshape}} +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-13dd plus-8pt minus-4pt}{10.5dd} + {\normalsize\itshape}} +\def\paragraph{\@startsection{paragraph}{4}{\z@}% + {-13pt plus-8pt minus-4pt}{\z@}{\normalsize\itshape}} + +\setlength\leftmargini {\parindent} +\leftmargin \leftmargini +\setlength\leftmarginii {\parindent} +\setlength\leftmarginiii {1.87em} +\setlength\leftmarginiv {1.7em} +\setlength\leftmarginv {.5em} +\setlength\leftmarginvi {.5em} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +\renewcommand\theenumi{\@arabic\c@enumi} +\renewcommand\theenumii{\@alph\c@enumii} +\renewcommand\theenumiii{\@roman\c@enumiii} +\renewcommand\theenumiv{\@Alph\c@enumiv} +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +\newcommand\labelitemi{\normalfont\bfseries --} +\newcommand\labelitemii{\normalfont\bfseries --} +\newcommand\labelitemiii{$\m@th\bullet$} +\newcommand\labelitemiv{$\m@th\cdot$} + +\if@spthms +% definition of the "\spnewtheorem" command. +% +% Usage: +% +% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font} +% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font} +% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font} +% +% New is "cap_font" and "body_font". It stands for +% fontdefinition of the caption and the text itself. +% +% "\spnewtheorem*" gives a theorem without number. +% +% A defined spnewthoerem environment is used as described +% by Lamport. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\@thmcountersep{} +\def\@thmcounterend{} +\newcommand\nocaption{\noexpand\@gobble} +\newdimen\spthmsep \spthmsep=5pt + +\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}} + +% definition of \spnewtheorem with number + +\def\@spnthm#1#2{% + \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}} +\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}} + +\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@addtoreset{#1}{#3}% + \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand + \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spothm#1[#2]#3#4#5{% + \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{the#1}{\@nameuse{the#2}}% + \expandafter\xdef\csname #1name\endcsname{#3}% + \global\@namedef{#1}{\@spthm{#2}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}}} + +\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\labelsep=\spthmsep\refstepcounter{#1}% +\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}} + +\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}% + \ignorespaces} + +\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname + the#1\endcsname}{#5}{#3}{#4}\ignorespaces} + +\def\normalthmheadings{\def\@spbegintheorem##1##2##3##4{\trivlist\normalfont + \item[\hskip\labelsep{##3##1\ ##2\@thmcounterend}]##4} +\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{##4(##3)\@thmcounterend\ }##5}} +\normalthmheadings + +\def\reversethmheadings{\def\@spbegintheorem##1##2##3##4{\trivlist\normalfont + \item[\hskip\labelsep{##3##2\ ##1\@thmcounterend}]##4} +\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##2\ ##1}]{##4(##3)\@thmcounterend\ }##5}} + +% definition of \spnewtheorem* without number + +\def\@sthm#1#2{\@Ynthm{#1}{#2}} + +\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}} + +\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces} + +\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1} + {#4}{#2}{#3}\ignorespaces} + +\def\@Begintheorem#1#2#3{#3\trivlist + \item[\hskip\labelsep{#2#1\@thmcounterend}]} + +\def\@Opargbegintheorem#1#2#3#4{#4\trivlist + \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }} + +% initialize theorem environment + +\if@envcntsect + \def\@thmcountersep{.} + \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape} +\else + \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape} + \if@envcntreset + \@addtoreset{theorem}{section} + \else + \@addtoreset{theorem}{chapter} + \fi +\fi + +%definition of divers theorem environments +\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily} +\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily} +\if@envcntsame % all environments like "Theorem" - using its counter + \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}} +\else % all environments with their own counter + \if@envcntsect % show section counter + \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}} + \else % not numbered with section + \if@envcntreset + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{section}} + \else + \let\spn@wtheorem=\@spynthm + \fi + \fi +\fi +% +\let\spdefaulttheorem=\spn@wtheorem +% +\spn@wtheorem{case}{Case}{\itshape}{\rmfamily} +\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily} +\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape} +\spn@wtheorem{definition}{Definition}{\bfseries}{\rmfamily} +\spn@wtheorem{example}{Example}{\itshape}{\rmfamily} +\spn@wtheorem{exercise}{Exercise}{\bfseries}{\rmfamily} +\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape} +\spn@wtheorem{note}{Note}{\itshape}{\rmfamily} +\spn@wtheorem{problem}{Problem}{\bfseries}{\rmfamily} +\spn@wtheorem{property}{Property}{\itshape}{\rmfamily} +\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape} +\spn@wtheorem{question}{Question}{\itshape}{\rmfamily} +\spn@wtheorem{solution}{Solution}{\bfseries}{\rmfamily} +\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily} +% +\newenvironment{theopargself} + {\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5} + \def\@Opargbegintheorem##1##2##3##4{##4\trivlist + \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }}}{} +\newenvironment{theopargself*} + {\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{\hspace*{-\labelsep}##4##3\@thmcounterend}##5} + \def\@Opargbegintheorem##1##2##3##4{##4\trivlist + \item[\hskip\labelsep{##3##1}]{\hspace*{-\labelsep}##3##2\@thmcounterend}}}{} +% +\fi + +\def\@takefromreset#1#2{% + \def\@tempa{#1}% + \let\@tempd\@elt + \def\@elt##1{% + \def\@tempb{##1}% + \ifx\@tempa\@tempb\else + \@addtoreset{##1}{#2}% + \fi}% + \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname + \expandafter\def\csname cl@#2\endcsname{}% + \@tempc + \let\@elt\@tempd} + +\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}} +\def\qed{\ifmmode\else\unskip\quad\fi\squareforqed} +\def\smartqed{\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil +\penalty50\hskip1em\null\nobreak\hfil\squareforqed +\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}} + +% Define `abstract' environment +\def\abstract{\topsep=0pt\partopsep=0pt\parsep=0pt\itemsep=0pt\relax +\trivlist\item[\hskip\labelsep +{\bfseries\abstractname}]\if!\abstractname!\hskip-\labelsep\fi} +\if@twocolumn +% \if@avier +% \def\endabstract{\endtrivlist\addvspace{5mm}\strich} +% \def\strich{\hrule\vskip1ptplus12pt} +% \else + \def\endabstract{\endtrivlist\addvspace{3mm}} +% \fi +\else +\fi +% +\newenvironment{verse} + {\let\\\@centercr + \list{}{\itemsep \z@ + \itemindent -1.5em% + \listparindent\itemindent + \rightmargin \leftmargin + \advance\leftmargin 1.5em}% + \item\relax} + {\endlist} +\newenvironment{quotation} + {\list{}{\listparindent 1.5em% + \itemindent \listparindent + \rightmargin \leftmargin + \parsep \z@ \@plus\p@}% + \item\relax} + {\endlist} +\newenvironment{quote} + {\list{}{\rightmargin\leftmargin}% + \item\relax} + {\endlist} +\newcommand\appendix{\par\small + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \renewcommand\thesection{\@Alph\c@section}} +\setlength\arraycolsep{1.5\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +\renewcommand\theequation{\@arabic\c@equation} +\newcounter{figure} +\renewcommand\thefigure{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename~\thefigure} +\newenvironment{figure} + {\@float{figure}} + {\end@float} +\newenvironment{figure*} + {\@dblfloat{figure}} + {\end@dblfloat} +\newcounter{table} +\renewcommand\thetable{\@arabic\c@table} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename~\thetable} +\newenvironment{table} + {\@float{table}} + {\end@float} +\newenvironment{table*} + {\@dblfloat{table}} + {\end@dblfloat} +% +\def \@floatboxreset {% + \reset@font + \small + \@setnobreak + \@setminipage +} +% +\newcommand{\tableheadseprule}{\noalign{\hrule height.375mm}} +% +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{10\p@} +\setlength\belowcaptionskip{0\p@} +\newcommand\leftlegendglue{} + +\def\fig@type{figure} + +\newdimen\figcapgap\figcapgap=3pt +\newdimen\tabcapgap\tabcapgap=5.5pt + +\@ifundefined{floatlegendstyle}{\def\floatlegendstyle{\bfseries}}{} + +\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +\def\capstrut{\vrule\@width\z@\@height\topskip} + +\@ifundefined{captionstyle}{\def\captionstyle{\normalfont\small}}{} + +\long\def\@makecaption#1#2{% + \captionstyle + \ifx\@captype\fig@type + \vskip\figcapgap + \fi + \setbox\@tempboxa\hbox{{\floatlegendstyle #1\floatcounterend}% + \capstrut #2}% + \ifdim \wd\@tempboxa >\hsize + {\floatlegendstyle #1\floatcounterend}\capstrut #2\par + \else + \hbox to\hsize{\leftlegendglue\unhbox\@tempboxa\hfil}% + \fi + \ifx\@captype\fig@type\else + \vskip\tabcapgap + \fi} + +\newdimen\figgap\figgap=1cc +\long\def\@makesidecaption#1#2{% + \parbox[b]{\@tempdimb}{\captionstyle{\floatlegendstyle + #1\floatcounterend}#2}} +\def\sidecaption#1\caption{% +\setbox\@tempboxa=\hbox{#1\unskip}% +\if@twocolumn + \ifdim\hsize<\textwidth\else + \ifdim\wd\@tempboxa<\columnwidth + \typeout{Double column float fits into single column - + ^^Jyou'd better switch the environment. }% + \fi + \fi +\fi +\@tempdimb=\hsize +\advance\@tempdimb by-\figgap +\advance\@tempdimb by-\wd\@tempboxa +\ifdim\@tempdimb<3cm + \typeout{\string\sidecaption: No sufficient room for the legend; + using normal \string\caption. }% + \unhbox\@tempboxa + \let\@capcommand=\@caption +\else + \let\@capcommand=\@sidecaption + \leavevmode + \unhbox\@tempboxa + \hfill +\fi +\refstepcounter\@captype +\@dblarg{\@capcommand\@captype}} + +\long\def\@sidecaption#1[#2]#3{\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \@makesidecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +% Define `acknowledgement' environment +\def\acknowledgement{\par\addvspace{17pt}\small\rmfamily +\trivlist\if!\ackname!\item[]\else +\item[\hskip\labelsep +{\bfseries\ackname}]\fi} +\def\endacknowledgement{\endtrivlist\addvspace{6pt}} +\newenvironment{acknowledgements}{\begin{acknowledgement}} +{\end{acknowledgement}} +% Define `noteadd' environment +\def\noteadd{\par\addvspace{17pt}\small\rmfamily +\trivlist\item[\hskip\labelsep +{\itshape\noteaddname}]} +\def\endnoteadd{\endtrivlist\addvspace{6pt}} + +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg{2.55em} +\newcommand\@dotsep{4.5} +\setcounter{tocdepth}{1} +\newcommand\tableofcontents{% + \section*{\contentsname}% + \@starttoc{toc}% + \addtocontents{toc}{\begingroup\protect\small}% + \AtEndDocument{\addtocontents{toc}{\endgroup}}% + } +\newcommand*\l@part[2]{% + \ifnum \c@tocdepth >-2\relax + \addpenalty\@secpenalty + \addvspace{2.25em \@plus\p@}% + \begingroup + \setlength\@tempdima{3em}% + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + {\leavevmode + \large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par + \nobreak + \if@compatibility + \global\@nobreaktrue + \everypar{\global\@nobreakfalse\everypar{}}% + \fi + \endgroup + \fi} +\newcommand*\l@section{\@dottedtocline{1}{0pt}{1.5em}} +\newcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}} +\newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}} +\newcommand*\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}} +\newcommand*\l@subparagraph{\@dottedtocline{5}{10em}{5em}} +\newcommand\listoffigures{% + \section*{\listfigurename + \@mkboth{\listfigurename}% + {\listfigurename}}% + \@starttoc{lof}% + } +\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} +\newcommand\listoftables{% + \section*{\listtablename + \@mkboth{\listtablename}{\listtablename}}% + \@starttoc{lot}% + } +\let\l@table\l@figure +\newdimen\bibindent +\setlength\bibindent{\parindent} +\def\@biblabel#1{#1.} +\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw + {\let\protect\noexpand + \immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +\newenvironment{thebibliography}[1] + {\section*{\refname + \@mkboth{\refname}{\refname}}\small + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +% +\newcount\@tempcntc +\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi + \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do + {\@ifundefined + {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries + ?}\@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}% + \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne + \@citea\def\@citea{,\hskip0.1em\ignorespaces}\hbox{\csname b@\@citeb\endcsname}% + \else + \advance\@tempcntb\@ne + \ifnum\@tempcntb=\@tempcntc + \else\advance\@tempcntb\m@ne\@citeo + \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}} +\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else + \@citea\def\@citea{,\hskip0.1em\ignorespaces}% + \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else + {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else \def\@citea{--}\fi + \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi} +% +\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \columnseprule \z@ + \columnsep 35\p@ + \twocolumn[\section*{\indexname}]% + \@mkboth{\indexname}{\indexname}% + \thispagestyle{plain}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} + +\if@twocolumn + \renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width\columnwidth + \kern2.6\p@} +\else + \renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width.382\columnwidth + \kern2.6\p@} +\fi +\newcommand\@makefntext[1]{% + \noindent + \hb@xt@\bibindent{\hss\@makefnmark\enspace}#1} +% +\def\trans@english{\switcht@albion} +\def\trans@french{\switcht@francais} +\def\trans@german{\switcht@deutsch} +\newenvironment{translation}[1]{\if!#1!\else +\@ifundefined{selectlanguage}{\csname trans@#1\endcsname}{\selectlanguage{#1}}% +\fi}{} +% languages +% English section +\def\switcht@albion{%\typeout{English spoken.}% + \def\abstractname{Abstract}% + \def\ackname{Acknowledgements}% + \def\andname{and}% + \def\lastandname{, and}% + \def\appendixname{Appendix}% + \def\chaptername{Chapter}% + \def\claimname{Claim}% + \def\conjecturename{Conjecture}% + \def\contentsname{Contents}% + \def\corollaryname{Corollary}% + \def\definitionname{Definition}% + \def\emailname{E-mail}% + \def\examplename{Example}% + \def\exercisename{Exercise}% + \def\figurename{Fig.}% + \def\keywordname{{\bfseries Keywords}}% + \def\indexname{Index}% + \def\lemmaname{Lemma}% + \def\contriblistname{List of Contributors}% + \def\listfigurename{List of Figures}% + \def\listtablename{List of Tables}% + \def\mailname{{\itshape Correspondence to\/}:}% + \def\noteaddname{Note added in proof}% + \def\notename{Note}% + \def\partname{Part}% + \def\problemname{Problem}% + \def\proofname{Proof}% + \def\propertyname{Property}% + \def\questionname{Question}% + \def\refname{References}% + \def\remarkname{Remark}% + \def\seename{see}% + \def\solutionname{Solution}% + \def\tablename{Table}% + \def\theoremname{Theorem}% +}\switcht@albion % make English default +% +% French section +\def\switcht@francais{\svlanginfo +%\typeout{On parle francais.}% + \def\abstractname{R\'esum\'e\runinend}% + \def\ackname{Remerciements\runinend}% + \def\andname{et}% + \def\lastandname{ et}% + \def\appendixname{Appendice}% + \def\chaptername{Chapitre}% + \def\claimname{Pr\'etention}% + \def\conjecturename{Hypoth\`ese}% + \def\contentsname{Table des mati\`eres}% + \def\corollaryname{Corollaire}% + \def\definitionname{D\'efinition}% + \def\emailname{E-mail}% + \def\examplename{Exemple}% + \def\exercisename{Exercice}% + \def\figurename{Fig.}% + \def\keywordname{{\bfseries Mots-cl\'e\runinend}}% + \def\indexname{Index}% + \def\lemmaname{Lemme}% + \def\contriblistname{Liste des contributeurs}% + \def\listfigurename{Liste des figures}% + \def\listtablename{Liste des tables}% + \def\mailname{{\itshape Correspondence to\/}:}% + \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}% + \def\notename{Remarque}% + \def\partname{Partie}% + \def\problemname{Probl\`eme}% + \def\proofname{Preuve}% + \def\propertyname{Caract\'eristique}% +%\def\propositionname{Proposition}% + \def\questionname{Question}% + \def\refname{Bibliographie}% + \def\remarkname{Remarque}% + \def\seename{voyez}% + \def\solutionname{Solution}% +%\def\subclassname{{\it Subject Classifications\/}:}% + \def\tablename{Tableau}% + \def\theoremname{Th\'eor\`eme}% +} +% +% German section +\def\switcht@deutsch{\svlanginfo +%\typeout{Man spricht deutsch.}% + \def\abstractname{Zusammenfassung\runinend}% + \def\ackname{Danksagung\runinend}% + \def\andname{und}% + \def\lastandname{ und}% + \def\appendixname{Anhang}% + \def\chaptername{Kapitel}% + \def\claimname{Behauptung}% + \def\conjecturename{Hypothese}% + \def\contentsname{Inhaltsverzeichnis}% + \def\corollaryname{Korollar}% +%\def\definitionname{Definition}% + \def\emailname{E-Mail}% + \def\examplename{Beispiel}% + \def\exercisename{\"Ubung}% + \def\figurename{Abb.}% + \def\keywordname{{\bfseries Schl\"usselw\"orter\runinend}}% + \def\indexname{Index}% +%\def\lemmaname{Lemma}% + \def\contriblistname{Mitarbeiter}% + \def\listfigurename{Abbildungsverzeichnis}% + \def\listtablename{Tabellenverzeichnis}% + \def\mailname{{\itshape Correspondence to\/}:}% + \def\noteaddname{Nachtrag}% + \def\notename{Anmerkung}% + \def\partname{Teil}% +%\def\problemname{Problem}% + \def\proofname{Beweis}% + \def\propertyname{Eigenschaft}% +%\def\propositionname{Proposition}% + \def\questionname{Frage}% + \def\refname{Literatur}% + \def\remarkname{Anmerkung}% + \def\seename{siehe}% + \def\solutionname{L\"osung}% +%\def\subclassname{{\it Subject Classifications\/}:}% + \def\tablename{Tabelle}% +%\def\theoremname{Theorem}% +} +\newcommand\today{} +\edef\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\setlength\columnsep{1.5cc} +\setlength\columnseprule{0\p@} +% +\frenchspacing +\clubpenalty=10000 +\widowpenalty=10000 +\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil +\global\let\@textbottom\relax}} +\pagestyle{headings} +\pagenumbering{arabic} +\if@twocolumn + \twocolumn +\fi +%\if@avier +% \onecolumn +% \setlength{\textwidth}{156mm} +% \setlength{\textheight}{226mm} +%\fi +\if@referee + \makereferee +\fi +\flushbottom +\endinput +%% +%% End of file `svjour3.cls'.