ltfmselector 0.1.13__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/.gitignore +6 -1
  2. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/PKG-INFO +1 -1
  3. ltfmselector-0.2.1/doc/00Introduction.tex +14 -0
  4. ltfmselector-0.2.1/doc/01ReinforcementLearning.tex +37 -0
  5. ltfmselector-0.2.1/doc/02MDP.tex +58 -0
  6. ltfmselector-0.2.1/doc/03DQL.tex +89 -0
  7. ltfmselector-0.2.1/doc/04ExampleDQL.tex +112 -0
  8. ltfmselector-0.2.1/doc/06PatSpecFMS_Reconstruction.tex +0 -0
  9. ltfmselector-0.2.1/doc/07Results.tex +15 -0
  10. ltfmselector-0.2.1/doc/08Discussion.tex +0 -0
  11. ltfmselector-0.2.1/doc/09Conclusion.tex +0 -0
  12. ltfmselector-0.2.1/doc/Makefile +42 -0
  13. ltfmselector-0.2.1/doc/abstract.tex +17 -0
  14. ltfmselector-0.2.1/doc/figures/InversedPendulum.eps +0 -0
  15. ltfmselector-0.2.1/doc/figures/ReinforcementLearning.eps +0 -0
  16. ltfmselector-0.2.1/doc/figures/fig1.eps +0 -0
  17. ltfmselector-0.2.1/doc/history.txt +139 -0
  18. ltfmselector-0.2.1/doc/llncs.cls +1218 -0
  19. ltfmselector-0.2.1/doc/llncsdoc.pdf +0 -0
  20. ltfmselector-0.2.1/doc/main.tex +115 -0
  21. ltfmselector-0.2.1/doc/readme.txt +19 -0
  22. ltfmselector-0.2.1/doc/references.bib +292 -0
  23. ltfmselector-0.2.1/doc/samplepaper.pdf +0 -0
  24. ltfmselector-0.2.1/doc/samplepaper.tex +150 -0
  25. ltfmselector-0.2.1/doc/splncs04.bst +1548 -0
  26. ltfmselector-0.2.1/dqntutorial/PendulumDuration.eps +10011 -0
  27. ltfmselector-0.2.1/dqntutorial/QValuesPendulum.eps +17919 -0
  28. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/pyproject.toml +1 -1
  29. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/src/ltfmselector/env.py +73 -2
  30. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/src/ltfmselector/ltfmselector.py +66 -4
  31. ltfmselector-0.2.1/src/ltfmselector/py.typed +0 -0
  32. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/.github/workflows/release.yaml +0 -0
  33. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/LICENSE +0 -0
  34. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/README.md +0 -0
  35. /ltfmselector-0.1.13/src/ltfmselector/py.typed → /ltfmselector-0.2.1/doc/05PatSpecFMS_AgentEnv.tex +0 -0
  36. {ltfmselector-0.1.13/dqntutorial → ltfmselector-0.2.1/doc/figures}/PendulumDuration.eps +0 -0
  37. {ltfmselector-0.1.13/dqntutorial → ltfmselector-0.2.1/doc/figures}/QValuesPendulum.eps +0 -0
  38. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/dqntutorial/DQNTutorial_byPaszke.ipynb +0 -0
  39. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/dqntutorial/EpsDecay.eps +0 -0
  40. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/dqntutorial/Q_TargetValuesPendulum.eps +0 -0
  41. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/examples/00_Classification.ipynb +0 -0
  42. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/examples/01_Classification_wCustomPredictionModels.ipynb +0 -0
  43. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/examples/02_Classification_wGridSearch.ipynb +0 -0
  44. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/examples/03_Regression.ipynb +0 -0
  45. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/icons/icon.png +0 -0
  46. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/icons/icon.svg +0 -0
  47. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/src/ltfmselector/__init__.py +0 -0
  48. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/src/ltfmselector/utils.py +0 -0
  49. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/tests/test_regression_tol.py +0 -0
  50. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/tests/test_save_load.py +0 -0
  51. {ltfmselector-0.1.13 → ltfmselector-0.2.1}/tests/utils_fortesting.py +0 -0
@@ -17,4 +17,9 @@ runs*
17
17
 
18
18
  # Dev
19
19
  predictionModels.py
20
- stdutils
20
+ stdutils
21
+ examples/train.py
22
+ RBRHX_ModalScores.xlsx
23
+
24
+ # LaTeX
25
+ *converted-to.pdf
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ltfmselector
3
- Version: 0.1.13
3
+ Version: 0.2.1
4
4
  Summary: Locally-Tailored Feature and Model Selector with Deep Q-Learning
5
5
  Project-URL: GitHub, https://github.com/RenZhen95/ltfmselector/
6
6
  Author-email: RenZhen95 <j-liaw@hotmail.com>
@@ -0,0 +1,14 @@
1
+ Poststroke gait rehabilitation requires a personalized therapy, usually designed by an interdisciplinary medical team via time-consuming assessments \cite{raab2020,liaw2025}. An automated gait assessment tool based on gait measurements and interdisciplinary knowledge could allow for faster poststroke evaluation, while providing relevant feedback via objective analysis of a patient’s status. One major challenge of using gait data for this purpose is its high dimensionality, which is usually met by carrying out feature selection on a fixed feature set. Owing to the individual uniqueness of each patient in terms of physical and functional statuses \cite{lee2020}, we present a dynamic feature and model selection approach using reinforcement learning (RL).
2
+
3
+ \cite{lee2020} has for instance shown that when performing the ``Bring a Hand to Mouth''-exercise during stroke rehabilitation, different stroke patients compensate for the affected motion in different ways. Other than inter-patient variability, the relevant biomarkers of a patient have also been shown to change with the severity of one's condition. \cite{pistacchi2017} showed for instance how reduced step lengths appeared to be a specific feature of Parkinson's disease in its early stages, and as the disease progresses to its moderate stage, gait asymmetry, double-limb support, and increased cadence becomes more characteristic, followed by freezing of gait and reduced balance in its advanced stages. Notably, research \cite{huang2016,biase2020} have highlighted the necessity of adapting the analyzed gait parameters to evolve in tandem with the disease's condition.
4
+
5
+ Therefore, it is hypothesized that a CDSS which dynamically selects salient features per individual patient should be more beneficial over classically selecting a fixed subset of informative features \cite{lee2020,lee2021}. It is after all the therapist's goal to design a therapy plan, \emph{tailored to a specific patient}. Moreover, simply presenting a multitude of variables can easily overwhelm a therapist and hinder one from obtaining useful insights \cite{lee2021}. A CDSS that can automatically identify a subset of patient-specific relevant features should thus greatly help a therapist save precious time \cite{lee2021}, especially in light of the current shortage of medical staff \cite{healthcareburden}.
6
+
7
+ Inspired by the application of RL in controlling mechanical systems (i.e. balancing an inversed pendulum), the Deep $Q$-Learning (DQL) algorithm is applied in this work to select an optimal feature subset of the extracted gait features, coupled along with a corresponding prediction (supervised learning) model to automatically assess gait poststroke. Earlier works by \cite{lee2020,lee2021} have applied DQL to develop a CDSS that automatically assesses a patient's ability in performing functional exercises, while delivering patient-specific relevant features for each corresponding task. In contrast, the method developed here is $(i)$ applied to the context of gait-assessment poststroke and $(ii)$ extended to include model selection. Model selection in this work will cover both the selection of a \emph{learning algorithm} and the subsequent \emph{hyperparameter tuning}.
8
+
9
+ The issue of model selection is often described as more an art than a strict science \cite{raschka2020}, a notion underpinned by the ``No Free Lunch'' theorem by \cite{nofreelunch}, which proves that no single optimization algorithm can outperform all others across all possible problem spaces or datasets. Consequently, the selection of a model should be guided by the characteristics of the dataset, instead of a reliance on a universal ``best'' model. The common practice among practitioners is to employ hold out or/and cross validation techniques to evaluate and select the optimal model hyperparameters and learning algorithm \cite{nestedcv,raschka2020}. In this work, the ability of model-free RL to learn an optimal policy purely, based on the saved experiences of the agent-environment interaction is leveraged to dynamically select
10
+ \begin{enumerate}
11
+ \item a subset of features, alongside
12
+ \item a learning algorithm and its corresponding optimal hyperparameters,
13
+ \end{enumerate}
14
+ based on each individal patient's extracted gait features. The learning algorithm and its corresponding optimal hyperparameters will be referred to as the \emph{prediction model} (PM) in the remainder of this paper.
@@ -0,0 +1,37 @@
1
+ RL is a branch of machine learning that deals with learning control laws and policies to interact with an environment, from experience \cite{brunton2022}. In contrast to supervised learning, RL does not require a training dataset to learn, but rather an environment to interact with and via trial-and-error, learn the best course of action to achieve a long-term objective \cite{mnih2015,sutton2018}. The learning is guided via feedback, or formally \emph{reinforcement}, a concept biologically inspired from the study of animal psychology, where animals have been observed to be ``hardwired'' to recognize pain and hunger as negative rewards, and food intake as positive rewards, and thus, mold their behavior accordingly to best maximize (positive) rewards \cite{pavlov2010,brunton2022}. As shown in Figure \ref{fig:RLSchematic}, an agent senses the \emph{state} of its \emph{environment}, and learns to take \emph{actions} that maximizes cumulative future rewards. Specifically, the agent arrives at a sequence of different states $\nvec{s}$ by performing actions $a$, which either lead to positive or negative rewards $R$ used for learning \cite{brunton2022}.
2
+ \begin{figure}[h!]
3
+ \centering
4
+ \begin{overpic}[width=1.0\columnwidth]{ReinforcementLearning.eps}
5
+ % Nouns
6
+ \put(66, 33){\emph{ENVIRONMENT}}
7
+ \put(8, 26){\emph{AGENT}}
8
+ \put(1.3, 17){\emph{STATE}, $\nvec{s}$}
9
+ \put(38, 27){\emph{POLICY}}
10
+ \put(39, 25){$\policy$}
11
+ \put(35, 38){\emph{REWARD}, $R$}
12
+ % Verbs
13
+ \put(40, 1){Observe \emph{STATE}, $\nvec{s}$}
14
+ \put(51.5, 23){Perform}
15
+ \put(51.5, 20){\emph{ACTION}, $a$}
16
+ % Variables
17
+ \put(19, 24){$\dot{x}$}
18
+ \put(19, 20){$x$}
19
+ \put(19, 16){$\varphi$}
20
+ \put(19, 12){$\dot{\varphi}$}
21
+ % Environment
22
+ \put(96, 9){$x$}
23
+ \put(71, 30){$y$}
24
+ \put(77, 4){$x$}
25
+ \put(89.8, 4.5){$\dot{x}$}
26
+ \put(76, 11){$F$}
27
+ \put(44, 19.5){$+F$}
28
+ \put(44, 14){$-F$}
29
+ \put(90, 28){$\varphi$}
30
+ \put(95, 21){$\dot{\varphi}$}
31
+ \put(72, 21){$\nvec{s}=\begin{bmatrix}x \\ \dot{x} \\ \varphi \\ \dot{\varphi}\end{bmatrix}$}
32
+ % Parameters
33
+
34
+ \end{overpic}
35
+ \caption{Schematic of RL, where an agent senses its environmental state $\nvec{s}$ and performs an action $a$, according to a policy $\policy$ that is optimized through learning to maximize cumulative future rewards $R$. In recent works, a typical approach to represent the policy $\policy$ is to use a deep neural network. Such a policy is known as a \emph{deep policy network}. Figure adapted from \cite{brunton2022}.}
36
+ \label{fig:RLSchematic}
37
+ \end{figure}
@@ -0,0 +1,58 @@
1
+ The \emph{environment} is represented by the state $\nvec{s}_t$ at the current time-step $t$. The agent then performs an \emph{action} $a_t$ according to a learned \emph{policy} $\policy$, which results in the current state $\nvec{s}_t$ evolving to the \emph{next state} $\nvec{s}_{t+1}$, and the agent receiving an appropriate \emph{reward} $R_{t+1} \in \mathbb{R}$ one time-step later \cite{sutton2018,brunton2022}. These collectively form an \emph{experience} $\boldsymbol{e}_t$, which describes the knowledge an agent has amassed from interacting with the environment, usually expressed for a given time-step $t$ as a tuple $\boldsymbol{e}_t = \left( \nvec{s}_t \, , a_t \, , \nvec{s}_{t+1} \, , R_{t+1} \right)$ \cite{almahamid2021}. The agent-environment interaction thereby yields a \emph{trajectory}, as shown in (\ref{eq:Trajectory}) \cite{sutton2018}
2
+ \begin{equation}
3
+ \nvec{s}_0 \,, a_0 \,, R_1 \,, \nvec{s}_1 \,, a_1 \,, R_2 \,, \nvec{s}_2 \,, a_2 \,, R_3 \,, \cdots \,,
4
+ \label{eq:Trajectory}
5
+ \end{equation}
6
+ or in terms of experiences \cite{brunton2022}
7
+ \begin{equation}
8
+ \boldsymbol{e}_0 \,, \boldsymbol{e}_1 \,, \boldsymbol{e}_2 \,, \cdots \,.
9
+ \label{eq:TrajectoryExperiences}
10
+ \end{equation}
11
+ Formally described, the environment evolves according to a \emph{Markov decision process} (MDP), where the random variables $R_t \in \mathcal{R}$ and $\nvec{s}_{t} \in \mathcal{S}$ each have defined discrete probability distributions, that depend only on the preceding state and action, and not other previous states or hidden variables \cite{sutton2018,brunton2022}. Specifically, the probability of particular values of these random variables $r \in \mathcal{R} \in \mathbb{R}$ and $\nvec{s}' \in \mathcal{S}$ at the next time-step $t+1$, given the state $\nvec{s}$ and action $a$ at the current time-step $t$, is given as
12
+ \begin{equation}
13
+ P(\nvec{s}', r \,|\, \nvec{s}, a) = \mathrm{Pr}\left\{ \nvec{s}_{t+1} = \nvec{s}' , R_{t+1} = r \,|\, \nvec{s}_t = s, a_t = a \right\} \,.
14
+ \label{eq:MDPDynamics}
15
+ \end{equation}
16
+ The expected reward given a state-action pair can in turn be computed with (\ref{eq:RewardFunction})
17
+ \begin{equation}
18
+ r(\nvec{s}, a) = \mathbb{E} \left[ R_{t+1} \,|\, \nvec{s}_{t}=\nvec{s}, a_t = a \right] = \sum_{r \in \mathcal{R}} r \sum_{\nvec{s}' \in \mathcal{S}} P(\nvec{s}', r \,|\, \nvec{s}, a) \,.
19
+ \label{eq:RewardFunction}
20
+ \end{equation}
21
+ Depending on the application, ``time-steps'' does not necessarily have to be fixed intervals of real time, but may include successive stages of decision making.
22
+
23
+ In short, the goal of RL is to maximize the sum of rewards in the long run \cite{sutton2018}. Formally, this can be described as maximizing the expected discounted \emph{return} as defined in (\ref{eq:Return})
24
+ \begin{equation}
25
+ G_{t} = R_{t+1} + \gamma R_{t+2} + \gamma^{2} R_{t+3} + \cdots = \sum_{k=0}^{\infty} \gamma^{k} R_{t+1+k} \,,
26
+ \label{eq:Return}
27
+ \end{equation}
28
+ where $\gamma$ denotes the \emph{discount rate} \cite{sutton2018,brunton2022}. For the agent to learn a policy that maximizes the return $G$, it is necessary for the agent to be able to gauge the ``desirability'' of being in a given state $\nvec{s}_t$, which can be quantified via the \emph{value function} (\ref{eq:ValueFunction})
29
+ \begin{equation}
30
+ \begin{split}
31
+ V_{\policy} (\nvec{s}) &= \mathbb{E}_{\policy} \left[ G_{t} \left. \, \right\rvert \, \nvec{s}_t = \nvec{s} \right] \\
32
+ &= \mathbb{E}_{\policy} \left[ R_{t+1} + \gamma G_{t+1} \left. \, \right\rvert \, \nvec{s}_t = \nvec{s} \right] \\
33
+ &= \sum_{a} \policy(a \,|\, \nvec{s}) \sum_{\nvec{s}'} \sum_{r} P(\nvec{s}', r \,|\, \nvec{s}, a) \left[ r + \gamma\mathbb{E}_{\policy} \left[ G_{t+1}|\nvec{s}_{t+1}=\nvec{s}' \right] \right] \\
34
+ &= \sum_{a} \policy(a \,|\, \nvec{s}) \sum_{\nvec{s}', r} P(\nvec{s}', r \,|\, \nvec{s}, a) \left[ r + \gamma V_{\policy}(\nvec{s}') \right] \,,
35
+ \text{ for all } \nvec{s} \in \mathcal{S} \,.
36
+ \end{split}
37
+ \label{eq:ValueFunction}
38
+ \end{equation}
39
+ (\ref{eq:ValueFunction}) describes the expected discounted return when starting from $\nvec{s}$, and following $\policy$ thereafter \cite{sutton2018}. The optimal policy can thus be rewritten in terms of the value function as
40
+ \begin{equation}
41
+ \begin{split}
42
+ V_{\optpolicy} (\nvec{s}) &= \max_{a} \mathbb{E} \left[R_{t+1} + \gamma V_{\optpolicy}(\nvec{s}') \, \rvert \, \nvec{s}_{t}=\nvec{s} \,, a_{t}=a \right] \\
43
+ &= \max_{a} \sum_{\nvec{s}', r} P(\nvec{s}', r \,|\, \nvec{s}, a) \left[ r + \gamma V_{\optpolicy}(\nvec{s}') \right] \,,
44
+ \end{split}
45
+ \label{eq:BellmanEq}
46
+ \end{equation}
47
+ Equation (\ref{eq:BellmanEq}), also known as the \emph{Bellman equation} can be broken down and recursively written for every subsequence of steps. This property is crucial because it implies that a control policy for a multi-step procedure must also be locally optimal for every subsequence of steps, thus allowing for a large optimization problem to be solved by recursively dividing and locally optimizing entire sequence \cite{bellman1966,sutton2018,brunton2022}
48
+
49
+ The discount factor $\gamma$ helps guide the agent towards learning a behavior that balances the trade-off between immediate gratification and long-term strategic gains \cite{sutton2018}. This is crucial in helping the agent deal with problem-domains, where the optimal solutions involve a multi-step procedure \cite{brunton2022}. Consider the example of chess, where the ultimate goal is to checkmate the opponent at a later point in time. To achieve this, the agent may accept sacrifices, even if this results temporarily in an unfavorable immediate position \cite{huegle2022}.
50
+
51
+ Classically, the value function $V$ is computed iteratively and used to search for better policies via methods of dynamic programming, such as policy and value iteration \cite{sutton2018}. Classical dynamic programming is however of limited utility for two main reasons \cite{sutton2018,brunton2022}, namely
52
+ \begin{enumerate}
53
+ \item the assumption of a perfect model, i.e. \emph{a priori} knowledge of the environmental transition dynamics $P(\nvec{s}, r \,|\, \nvec{s}, a)$ and
54
+ \item memory and computational constraints, for handling large and combinatorial state spaces.
55
+ \end{enumerate}
56
+ In most modern applications, the environmental transition dynamics $P(\nvec{s}, r \,|\, \nvec{s}, a)$ is not known beforehand. Moreover, not only are the state spaces too enormous to be stored in tables, but they also require too much time and data to be filled accurately \cite{sutton2018,brunton2022}. One approach in dealing with this issue is to apply a function approximator to model the value function based on gathered experiences, such as a deep learning neural network \cite{sutton2018,mnih2015}.
57
+
58
+ There exist various RL algorithms in the literature \cite{almahamid2021}, each suited for different environment types. The choice of RL algorithm depends namely on the $(i)$ number of states and $(ii)$ action types. For this work involving an environment that comprises an $(i)$ \emph{unlimited} number of states, $(ii)$ an agent that performs \emph{discrete} actions, and $(iii)$ no a priori knowledge of the environment dynamics, the Deep Q-Learning algorithm by \cite{mnih2015} is best suited. Moving forward, the equations in the next sections will only be formulated deterministically (i.e. $P(\nvec{s}, r \,|\, \nvec{s}, a)=1$).
@@ -0,0 +1,89 @@
1
+ To begin, the \emph{quality function}, also referred to as the \emph{action-value} function \cite{watkins1992,mnih2015,sutton2018,almahamid2021} is defined as
2
+ \begin{equation}
3
+ \begin{split}
4
+ Q_{\policy} (\nvec{s}, a) = R(\nvec{s}, a) + \gamma V_{\policy}(\nvec{s}')\,,
5
+ \end{split}
6
+ \label{eq:QualityFunction}
7
+ \end{equation}
8
+ which describes the \emph{joint-desirability} of performing the action $a$ for the given state $\nvec{s}$. Following this formulation, the agent selects the action $a$ that yields the maximum $Q$-value, for the given state $\nvec{s}$ as shown in (\ref{eq:QLearningAction})
9
+ \begin{equation}
10
+ \policy (\nvec{s}) = \argmax_{a} Q_{\policy} (\nvec{s}, a) \, .
11
+ \label{eq:QLearningAction}
12
+ \end{equation}
13
+ The goal in \emph{Q-Learning} \cite{watkins1992,almahamid2021} is for the agent to learn an optimal policy that maximizes the action-value function
14
+ \begin{equation}
15
+ \begin{aligned}
16
+ Q_{\optpolicy} (\nvec{s}, a) = \max_{\policy} Q_{\policy} (\nvec{s}, a) &= R(\nvec{s}, a) & &+ \, \gamma \max_{a'} Q_{\optpolicy} (\nvec{s}', a') \\
17
+ &= r & &+ \, \gamma \max_{a'} Q_{\optpolicy} (\nvec{s}', a') \,,
18
+ \end{aligned}
19
+ \end{equation}
20
+ which yields the following intuition. If the optimal value $Q_{\optpolicy} (\nvec{s}', a')$ for the state $\nvec{s}'$ at the next time-step is known for all possible actions $a'$, then the optimal strategy is to simply select the action $a'$ that maximizes the value of $r + \gamma Q_{\optpolicy} (\nvec{s}', a')$ \cite{mnih2015}.
21
+
22
+ In the original $Q$-Learning, the optimal action-value function is obtained via a value iteration algorithm, where the $Q$-values are essentially maintained in a $Q$-Table and updated iteratively \cite{watkins1992,almahamid2021}. In the seminal work by \cite{mnih2015}, Deep $Q$-Learning (DQL) was introduced, where a deep convolutional neural network was used to approximate the action-value $Q_{\policy}$ through some parameterization $\boldsymbol{\theta}$.
23
+ \begin{equation}
24
+ Q_{\policy} (\nvec{s}, a) \approx Q_{\policy} (\nvec{s}, a; \boldsymbol{\theta}) \,.
25
+ \end{equation}
26
+ The neural network function approximator of the parameters $\boldsymbol{\theta}$ is referred to as the \emph{Q-network}, where $\boldsymbol{\theta}$ updated by minimizing the loss function (\ref{eq:DQNLossFunction})
27
+ \begin{equation}
28
+ \min_{\boldsymbol{\theta}} \dfrac{1}{|\mathcal{B}|} \sum_{\boldsymbol{e} \in \mathcal{B}} \left[ \left( r + \gamma \max_{a'} Q_{\policy} (\nvec{s}', a'; \boldsymbol{\theta}) \right) - Q_{\policy} (\nvec{s}, a; \boldsymbol{\theta}) \right]^2 \, ,
29
+ \label{eq:DQNLossFunction}
30
+ \end{equation}
31
+ over a batch of samples $\mathcal{B}$ \cite{mnih2015}, where each sample pertains to a sampled experience $\boldsymbol{e} = \left( \nvec{s} \, , a \, , \nvec{s}' \, , r \right)$. The term on the right is referred to as the \emph{target values} $\left( r + \gamma \max_{a'} Q_{\policy} (\nvec{s}', a'; \boldsymbol{\theta}) \right)$. To deal with the well-known instability of using deep neural networks in RL, \cite{mnih2015} introduces two key ideas, namely $(i)$ updating the neural network over \emph{randomly sampled experiences} of the agent-environment interactions and $(ii)$ only \emph{periodically updating} the neural network towards the target values. The first idea involves storing the agent's experiences $\boldsymbol{e}_t$ at each time-step $t$ into a \emph{replay memory} $D_t = \left\{ \boldsymbol{e}_1\,, \boldsymbol{e}_2\,, \cdots\,, \boldsymbol{e}_t \right\}$, from which a batch of experiences are then randomly sampled $\mathcal{B}_{D} \subseteq D$ to update the $Q$-network \cite{mnih2015}. This helps break the correlations between each consecutive experience, thus preventing undesired feedback loops during learning \cite{mnih2015}.
32
+
33
+ The second idea is implemented by using a clone of the $Q$-network, termed the \emph{target network} $\hat{Q}_{\policy}$ to generate the target values, whose parameters $\boldsymbol{\theta}^{-}$ follow the parameters $\boldsymbol{\theta}$ of the $Q$-network with a slight delay, which helps the learning better converge \cite{mnih2015}. Following the suggestion by \cite{lillicrap2015}, the parameters $\boldsymbol{\theta}^{-}$ are updated \emph{softly} according to (\ref{eq:TargetUpdates}).
34
+ \begin{equation}
35
+ \boldsymbol{\theta}^{-} = \tau \boldsymbol{\theta} + \left(1 - \tau \right) \boldsymbol{\theta}^{-} \,,
36
+ \label{eq:TargetUpdates}
37
+ \end{equation}
38
+ where $\tau$ denotes the \emph{soft target update rate}. The $Q$-network's weights are thereby updated according to
39
+ \begin{equation}
40
+ \min_{\boldsymbol{\theta}} \dfrac{1}{|\mathcal{B}_{D}|} \sum_{\boldsymbol{e} \in \mathcal{B}_D} \left[ \left( r + \gamma \max_{a'} \hat{Q}_{\policy} (\nvec{s}', a'; \boldsymbol{\theta}^{-}) \right) - Q_{\policy} (\nvec{s}, a; \boldsymbol{\theta}) \right]^2 \, .
41
+ \label{eq:DQNLossFunction2}
42
+ \end{equation}
43
+ To promote exploration, the agent's action is selected according to an \emph{$\epsilon$-greedy} algorithm, where the parameter $\epsilon$ denotes the probability of the agent performing a random action instead of the maximizing action according to (\ref{eq:QLearningAction}) \cite{mnih2015,brunton2022}. Intuitively, as the $Q$-function improves over the course of training, $\epsilon$ should gradually decay, allowing the agent to increasingly choose the maximizing action \cite{brunton2022}. For this work, $\epsilon$ is implemented to decay exponentially according to (\ref{eq:EpsilonExpDecay})
44
+ \begin{equation}
45
+ \epsilon = \left( {\epsilon}_{\text{initial}} - {\epsilon}_{\text{final}} \right) e^{-\frac{t_c}{{\epsilon}_{\text{decay}}}} + {\epsilon}_{\text{final}} \, ,
46
+ \label{eq:EpsilonExpDecay}
47
+ \end{equation}
48
+ where $t_c$ denotes the cumulative time-steps over episodes, and ${\epsilon}_{\text{initial}}$, ${\epsilon}_{\text{final}}$, and ${\epsilon}_{\text{decay}}$, the initial value, final value, and decay rate of $\epsilon$, respectively.
49
+
50
+ Algorithm \ref{alg:DQN} shows how DQL is implemented in this work, combined with experience replay and an $\epsilon$-greedy algorithm for selecting actions. The $Q$-network is updated at every time-step $t$, provided the memory $D$ contains at least the number of user-specified batch size for training $|\mathcal{B}_D|$. Moreover, the memory $D$ is implemented in practice as a finite-sized cache which stores only the $N$ most recent experiences, discarding the oldest samples as new ones are added \cite{mnih2015,lillicrap2015}.
51
+ \begin{algorithm}[!t]
52
+ \caption{DQL with experience replay, combined with an $\epsilon$-greedy algorithm for promoting random exploration \cite{mnih2015}. The notations $\nvec{s}_{k,t}$, $a_{k,t}$, $\nvec{s}_{k,t+1}$, $r_{k,t}$, and $y_{k,t}$ denote the state, action, next state, reward, and target values of the $k$-th episode, at time-step $t$ respectively.}
53
+ \label{alg:DQN}
54
+ \begin{algorithmic}
55
+ \State Initialize number of episodes $K$
56
+ \State Initialize replay memory $D$ with capacity $N$
57
+ \State Initialize discount rate $\gamma$
58
+ \State Initialize batch size $|\mathcal{B}_{D}|$ for updating parameters $\boldsymbol{\theta}$
59
+ \State Initialize $Q$-network $Q_{\policy}$ with random weights $\boldsymbol{\theta}$
60
+ \State Initialize target network $\hat{Q}_{\policy}$ with weights $\boldsymbol{\theta}^{-} = \boldsymbol{\theta}$
61
+ \State Initialize soft target update rate $\tau$
62
+ \State Initialize $\epsilon$ with parameters ${\epsilon}_{\text{initial}}$, ${\epsilon}_{\text{final}}$, and ${\epsilon}_{\text{decay}}$ for random exploration
63
+ \State Initialize counter for cumulative time-steps over episodes $t_c = 1$
64
+ \For{$k := 1$ to $K$} \Comment for each $k$-th episode
65
+ \State Initialize time-step $t=1$
66
+ \State Initialize initital state $\nvec{s}_{k,t=1}$
67
+ \While{$T_{\text{end}}$ is false} \Comment termination condition for $k$-th episode not fulfilled
68
+ \State With probability of $\epsilon$ select a random action $a_{k,t}$,
69
+ \State $\quad$ otherwise $a_{k,t} = \max_{a_{k,t}} Q(\nvec{s}_{k,t}, a_{k,t})$
70
+ \State Execute action $a_{k,t}$, and observe reward $r_{k,t}$ and next state $\nvec{s}_{k,t+1}$
71
+ \State Store episode $\boldsymbol{e}_{k,t} = \left( \nvec{s}_{k,t} \, , a_{k,t} \, , \nvec{s}_{k,t+1} \, , r_{k,t} \right)$ in replay memory $D$
72
+ \If{$|D| \geq |\mathcal{B}_{D}|$} \Comment if number of stored experiences are at least batch size
73
+ \State Sample minibatch of random episodes $\boldsymbol{e}_{j} = \left( \nvec{s}_{j} \, , a_{j} \, , \nvec{s}_{j} \, , r_{j} \right)$ from $D$
74
+ \If{$T_{end}$ is true} \Comment termination condition for $k$-th episode fulfilled
75
+ \State $y_{j} = r_{j}$
76
+ \Else
77
+ \State $y_{j} = r_{j} + \gamma \max_{a_{j}'} \hat{Q}_{\policy} (\nvec{s}_{j}', a_{j}'; \boldsymbol{\theta}^{-})$
78
+ \EndIf
79
+ \State Perform a gradient descent step on $\left( y_{j} - Q_{\policy} (\nvec{s}_j, a_j; \boldsymbol{\theta}) \right)^2$
80
+ \State $\quad$ with respect to $Q$-network parameters $\boldsymbol{\theta}$
81
+ \EndIf
82
+ \State Update parameters of target network $\boldsymbol{\theta}^{-}$ towards $\boldsymbol{\theta}$ according to (\ref{eq:TargetUpdates})
83
+ \State Update $\epsilon$ according to (\ref{eq:EpsilonExpDecay})
84
+ \State Update time-step counter $t = t + 1$
85
+ \State Update cumulative time-step counter $t_c = t_c + 1$
86
+ \EndWhile
87
+ \EndFor
88
+ \end{algorithmic}
89
+ \end{algorithm}
@@ -0,0 +1,112 @@
1
+ Consider the classical example of balancing an inversed pendulum on a cart by applying a series of forces to the cart. The \emph{environment} at a given time-step $t$ is represented by the state $\nvec{s}_t = \begin{smallmatrix} \begin{bmatrix} x_{t} & \dot{x}_{t} & \varphi_{t} & \dot{\varphi}_{t} \end{bmatrix}^T \end{smallmatrix}$, where the variables $x_{t}$, $\dot{x}_{t}$, $\varphi_{t}$, and $\dot{\varphi}_{t}$ denote the cart's position, and cart's velocity in the $x$-direction, the pendulum's angle with respect to the vertical, and the pendulum's angular velocity, at the time-step $t$, respectively. The available choices of action $a \in \mathcal{A} = \left\{ -F \ +F \right\}$ are applying a constant force $F$ to the cart in either the right or left direction. According to the performed action $a_{t} = {\policy}(\nvec{s}_t)$, the environmental state evolves to the next state $\nvec{s}_{t+1}$, as governed by the dynamical equations of the cart and pendulum as shown in (\ref{eq:AngularAccCartPole}) and (\ref{eq:AccCartPole}). Frictional effects are neglected for the sake of simplicity.
2
+ \begin{equation}
3
+ \begin{split}
4
+ \ddot{\varphi}_{t} &= \frac{a_t \cos{{\varphi}_t} + m_p \dot{{\varphi}_t}^2 \ell \sin{{\varphi}_t} \cos{{\varphi}_t} - (m_c + m_p)g\sin{{\varphi}_t}}
5
+ { \dfrac{4}{3} \ell (m_c + m_p) - m_p \ell \cos{{\varphi}_t}^2} \,, \\
6
+ a_t &=
7
+ \begin{cases}
8
+ +F & \text{force F applied to the right of the cart} \\
9
+ -F & \text{force F applied to the left of the cart}
10
+ \end{cases}
11
+ \end{split}
12
+ \label{eq:AngularAccCartPole}
13
+ \end{equation}
14
+ \begin{equation}
15
+ \ddot{x}_{t} = \frac{1}{\cos{{\varphi}_t}} \left[ \dfrac{4}{3} \ell \ddot{{\varphi}_t} + g\sin{{\varphi}_t} \right]
16
+ \label{eq:AccCartPole}
17
+ \end{equation}
18
+ The mass of the cart is denoted by $m_c$, and the pendulum modelled by a massless rod of length $\ell$, with a point mass $m_p$ fixed on one end as shown Figure \ref{fig:RLSchematic}, while the other end is in turn attached to the cart by a revolute joint. Applying for instance, the Euler method over a step size $\Delta t$, the next state $\nvec{s}_{t+1}$ is obtained as shown in (\ref{eq:EulerIntegrationCartPole})
19
+ \begin{equation}
20
+ \nvec{s}_{t+1} =
21
+ \begin{bmatrix}
22
+ x_{t+1} \\ \dot{x}_{t+1} \\ \varphi_{t+1} \\ \dot{\varphi}_{t+1}
23
+ \end{bmatrix} =
24
+ \begin{bmatrix}
25
+ x_{t} + \dot{x}_{t} \cdot \Delta t\\
26
+ \dot{x}_{t} + \ddot{x}_{t} \cdot \Delta t\\
27
+ \varphi_{t} + \dot{\varphi}_{t} \cdot \Delta t\\
28
+ \dot{\varphi}_{t} + \ddot{\varphi}_{t} \cdot \Delta t
29
+ \end{bmatrix} \,.
30
+ \label{eq:EulerIntegrationCartPole}
31
+ \end{equation}
32
+ The reward function is defined as shown in (\ref{eq:RewardFunctionCartPole})
33
+ \begin{equation}
34
+ R(\nvec{s}_{t+1}) =
35
+ \begin{cases}
36
+ +1 & \text{if } |{\varphi}_{t+1}| < \varphi^* \\
37
+ 0 & \text{if } |{\varphi}_{t+1}| \geq \varphi^*
38
+ \end{cases} \,,
39
+ \label{eq:RewardFunctionCartPole}
40
+ \end{equation}
41
+ and the termination condition in (\ref{eq:TerminationConditionCartPole})
42
+ \begin{equation}
43
+ T_{\text{end}} =
44
+ \left\{
45
+ \begin{array}{rll}
46
+ \text{true} & \text{if } |{\varphi}_{t+1}| \geq \varphi^* & \text{(pendulum falls over)} \\
47
+ \text{true} & \text{if } |{x}_{t+1}| \geq x^* & \text{(positional limit of cart due to physical constraints)} \\
48
+ \text{true} & \text{if } t = 500 & \text{(end simulation due to time-constraint)} \\
49
+ \text{false} & \text{otherwise} & \text{(pendulum kept balanced)}
50
+ \end{array}
51
+ \right. \,,
52
+ \label{eq:TerminationConditionCartPole}
53
+ \end{equation}
54
+ where $\varphi^*$ and $x^*$ denote thresholds for the angle of the pendulum with respect to the vertical and position of the cart in the $x$-direction, respectively. The DQL algorithm has since been adapted to develop other algorithms such as the Deep Deterministic Policy Gradient algorithm by \cite{lillicrap2015}, which allows for continuous (real-valued) and high-dimensional action spaces.
55
+
56
+ To implement this example, the environmental parameters, as well as the DQL agent hyperparameters are initialized with values as shown in Table \ref{tab:CartPoleParameters}. The policy and target networks were implemented as multilayer perceptron (MLP) with two hidden layers, each with 128 neurons. The agent is then subsequently trained according to Algorithm \ref{alg:DQN} over 750 episodes, where the parameters $\boldsymbol{\theta}$ of the $Q$-network are optimized using an AdamW optimizer \cite{loshchilov2017}, with the learning rate $l_r$. The learning was carried out on a 5.3 GHz Intel\textsuperscript{\textregistered{}} Core\texttrademark{} i9-10900K CPU, and implemented with the deep learning framework PyTorch \cite{pytorch}, as well as other libraries for applications in science and data analysis (e.g. pandas \cite{pandas}, SciPy \cite{scipy}, NumPy \cite{numpy}) in the Python programming language.
57
+
58
+ As shown in Figure \ref{fig:PendulumDuration}, the duration (i.e. total time-steps) of the pendulum kept balanced increases over the course of training and even ultimately reaches the maximum permitted number of time-steps as set in (\ref{eq:TerminationConditionCartPole}). One can also observe how the agent progressively improves, and its learning eventually converges to an optimal policy $\optpolicy$, as implied in Figure \ref{fig:QValuesProgression} with the converging $Q$-Values.
59
+ \begin{table}[H]
60
+ \centering
61
+ \begin{tabular}{p{0.65\textwidth}p{0.055\textwidth}p{0.1\textwidth}}
62
+ \hline
63
+ \multicolumn{3}{l}{\textbf{Environmental Parameters}} \\
64
+ \hline
65
+ Mass of cart & $m_c$ & 1.0 \si{kg} \\
66
+ Mass of point mass on end of pole & $m_p$ & 0.1 \si{kg} \\
67
+ Length of pole & $\ell$ & 1.0 \si{m} \\
68
+ Magnitude of force applied to cart in $x$-direction & $F$ & 10 \si{N} \\
69
+ Gravitational acceleration & $g$ & 9.8 \si{m/s^2} \\
70
+ Threshold angle with respect to vertical & $\varphi^*$ & \ang{12} \\
71
+ Threshold position of cart in $x$-direciton & $x^*$ & 2.4 \si{m} \\
72
+ Step size & $\Delta t$ & 0.02 \si{s} \\
73
+ \hline
74
+ \multicolumn{3}{l}{\textbf{Agent Hyperparameters}} \\
75
+ \hline
76
+ Number of episodes & $K$ & 750 \\
77
+ Number of experiences stored in replay memory & $N$ & 10000 \\
78
+ Discount rate & $\gamma$ & 0.99 \\
79
+ Batch size of experiences drawn from replay memory & $|\mathcal{B}_{D}|$ & 128 \\
80
+ Learning rate of AdamW optimizer & $l_r$ & \num{1e-4} \\
81
+ Soft target update rate & $\tau$ & 0.005 \\
82
+ Initial probability $\epsilon$ for random exploration & $\epsilon_{\text{initial}}$ & 0.9 \\
83
+ Final probability $\epsilon$ for random exploration & $\epsilon_{\text{final}}$ & 0.05 \\
84
+ Decay rate of probability $\epsilon$ for random exploration & $\epsilon_{\text{decay}}$ & 1000 \\
85
+ \hline
86
+ \end{tabular}
87
+ \caption{Environmental parameters for the example of balancing an inversed pendulum on a cart, and the learning hyperparameters of the DQL agent.}
88
+ \label{tab:CartPoleParameters}
89
+ \end{table}
90
+ \begin{figure}[H]
91
+ \centering
92
+ \vspace{-1.0em}
93
+ \includegraphics[width=1.0\textwidth]{PendulumDuration}
94
+ % Matptlotlib Customized Settings
95
+ % figsize=(6.25, 3.5)
96
+ % loc='left', fontsize='large'
97
+ \vspace{-1.5em}
98
+ \caption{Duration of pendulum kept upright over training episodes.}
99
+ \label{fig:PendulumDuration}
100
+ \end{figure}
101
+ % \begin{figure}[H]
102
+ % \centering
103
+ % \vspace{-1.0em}
104
+ % \includegraphics[width=1.0\textwidth]{QValuesPendulum}
105
+ % % Matptlotlib Customized Settings
106
+ % % figsize=(5.5, 3.5)
107
+ % % ax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
108
+ % % loc='left', fontsize='large
109
+ % \vspace{-1.5em}
110
+ % \caption{Progression of $Q$-values over the course of training.}
111
+ % \label{fig:QValuesProgression}
112
+ % \end{figure}
File without changes
@@ -0,0 +1,15 @@
1
+ \begin{table}
2
+ \caption{Table captions should be placed above the
3
+ tables.}\label{tab1}
4
+ \begin{tabular}{|l|l|l|}
5
+ \hline
6
+ Heading level & Example & Font size and style\\
7
+ \hline
8
+ Title (centered) & {\Large\bfseries Lecture Notes} & 14 point, bold\\
9
+ 1st-level heading & {\large\bfseries 1 Introduction} & 12 point, bold\\
10
+ 2nd-level heading & {\bfseries 2.1 Printing Area} & 10 point, bold\\
11
+ 3rd-level heading & {\bfseries Run-in Heading in Bold.} Text follows & 10 point, bold\\
12
+ 4th-level heading & {\itshape Lowest Level Heading.} Text follows & 10 point, italic\\
13
+ \hline
14
+ \end{tabular}
15
+ \end{table}
File without changes
File without changes
@@ -0,0 +1,42 @@
1
+ # === === === === === === === === === === ===
2
+ # @Author : Liaw
3
+ # @Date : 08.07.2025
4
+ #
5
+ # Makefile to compile a LaTeX project using
6
+ # your own customized Docker image based on
7
+ # texlive's official Docker image
8
+ #
9
+ # === === === === === === === === === === ===
10
+
11
+ # Name of the the "main" file to compile
12
+ NAME=main
13
+
14
+ DOCKER_LATEXCOMPILER=liawlatex
15
+
16
+ all:
17
+ docker run --rm -v "$(shell pwd):/project" -w /project $(DOCKER_LATEXCOMPILER) latexmk -pdf -file-line-error -bibtex $(NAME).tex
18
+
19
+ clean:
20
+ rm -f *.toc
21
+ rm -f $(NAME).dvi
22
+ rm -f *.log
23
+ rm -f *.aux
24
+ rm -f $(NAME).ps
25
+ rm -f $(NAME).pdf
26
+ rm -f *~
27
+ rm -f *.fls
28
+ rm -f *.fdb_latexmk
29
+ rm -f *.bbl
30
+ rm -f *.blg
31
+ rm -f *.glo
32
+ rm -f *.ist
33
+ rm -f *.acn
34
+ rm -f *.bcf*
35
+ rm -f *.bbl*
36
+ rm -f *.run*
37
+ rm -f *.acr
38
+ rm -f *.alg
39
+ rm -f *.glg
40
+ rm -f *.gls
41
+ rm -f *.out
42
+ rm -f *.glsdefs
@@ -0,0 +1,17 @@
1
+ % Abstract should be limited to 150--250 words.
2
+ Designing personalized therapy for poststroke gait rehabilitation often involves the effort of an interdisciplinary medical team and tedious assessments. An automated gait assessment tool based on gait measurements and interdisciplinary knowledge could help experts with faster gait assessments, while providing objective feedback. Gait measurements are however high-dimensional, making the development of such tools challenging. Inspired by the application of Deep Q-Learning in solving physical problems, this study presents a method for dynamic feature and model selection. The search space is formulated as a partially observable Markov Decision Process, where the agent iteratively explores the 680 extracted gait features and various prediction models, to learn optimal patient-specific combinations of feature subsets and prediction models. The model was developed using a dataset of 904 stride pairs from 100 hemiparetic stroke patients. Each patient was evaluated by an interdisciplinary board using the Stroke Mobility Score, a multiple-cue clinical observational score comprised of six subscores, each pertaining to a functional criterion of gait. The agent was trained to approximate optimal decision-making, receiving rewards for accurate predictions and efficient feature selection. Results demonstrated excellent predictive performance, achieving a coefficient of determination ($R^2$) of 0.83 on the test set. Crucially, the tool identifies patient-specific key features, that could help clinicians by highlighting specific therapeutic targets tailored to individual needs, thus potentially providing a solution for personalized poststroke therapy.
3
+
4
+ %% ORIGINAL
5
+ % Designing personalized therapy for poststroke gait rehabilitation often involves the effort of an interdisciplinary medical team and tedious assessments. An automated gait-assessment tool based on gait measurements and interdisciplinary knowledge could help experts with faster gait assessments, while providing objective feedback. However, developing such a tool based on gait data can be challenging due to the high dimensionality of the training datasets typically derived from gait measurements.
6
+ %
7
+ % While a common approach involves carrying out feature selection on a fixed feature set, this work presents a dynamic feature and model selection approach using reinforcement learning. Hereby, the task of selecting the optimal feature set and corresponding prediction model to map gait data to expert gait-assessment is formulated as a partially observable Markov Decision Process (POMDP), where an agent learns by autonomously exploring different options for each available sample iteratively.
8
+ %
9
+ % This approach adds a patient-specific component to the gait assessment tool, which could assist clinicians in tailoring personalized therapy.
10
+ %
11
+ % To achieve this, a dataset is first obtained from 100 hemiparetic stroke-patients which received a clinical examination and a full-body instrumented gait-analysis. An interdisciplinary board of medical experts assigned each patient a Stroke Mobility Score, a multiple-cue clinical observational score comprised of six sub-scores, each pertaining to a functional criterion of gait.
12
+ %
13
+ % From the measurements, 904 measured stride pairs of 100 patients were obtained, 690 gait features extracted, and the dataset split 70/30 for training and testing. As a preprocessing step, expert knowledge was used to trim the features accordingly, followed by filtering out statistically non-discriminatory features. Within the setting of a POMDP, the agent is allowed to either query a feature or a prediction model, or make a prediction based on the selected feature set and prediction model.
14
+ %
15
+ % The agent is then rewarded accordingly for each action, before transitioning onto a next state where the process is repeated iteratively. Over the course of many iterations, the agent eventually learns to select an optimal set of actions, given a set of features of a stride pair measurement.
16
+ %
17
+ % The agent is trained using a Deep Q-Learning algorithm that approximates the Bellman equation by training a deep neural network iteratively on a batch of randomly chosen transitions. The trained agent tested on the test dataset yielded excellent predictive performance, showing a coefficient of determination of 0.85, while delivering patient-specific key features. The delivered patient-specific key features could help clinicians focus on key therapeutic targets, specifically tailored to a patient's needs.
Binary file
@@ -0,0 +1,139 @@
1
+ Version history for the LLNCS LaTeX2e class
2
+
3
+ date filename version action/reason/acknowledgements
4
+ ----------------------------------------------------------------------------
5
+ 29.5.96 letter.txt beta naming problems (subject index file)
6
+ thanks to Dr. Martin Held, Salzburg, AT
7
+
8
+ subjindx.ind renamed to subjidx.ind as required
9
+ by llncs.dem
10
+
11
+ history.txt introducing this file
12
+
13
+ 30.5.96 llncs.cls incompatibility with new article.cls of
14
+ 1995/12/20 v1.3q Standard LaTeX document class,
15
+ \if@openbib is no longer defined,
16
+ reported by Ralf Heckmann and Graham Gough
17
+ solution by David Carlisle
18
+
19
+ 10.6.96 llncs.cls problems with fragile commands in \author field
20
+ reported by Michael Gschwind, TU Wien
21
+
22
+ 25.7.96 llncs.cls revision a corrects:
23
+ wrong size of text area, floats not \small,
24
+ some LaTeX generated texts
25
+ reported by Michael Sperber, Uni Tuebingen
26
+
27
+ 16.4.97 all files 2.1 leaving beta state,
28
+ raising version counter to 2.1
29
+
30
+ 8.6.97 llncs.cls 2.1a revision a corrects:
31
+ unbreakable citation lists, reported by
32
+ Sergio Antoy of Portland State University
33
+
34
+ 11.12.97 llncs.cls 2.2 "general" headings centered; two new elements
35
+ for the article header: \email and \homedir;
36
+ complete revision of special environments:
37
+ \newtheorem replaced with \spnewtheorem,
38
+ introduced the theopargself environment;
39
+ two column parts made with multicol package;
40
+ add ons to work with the hyperref package
41
+
42
+ 07.01.98 llncs.cls 2.2 changed \email to simply switch to \tt
43
+
44
+ 25.03.98 llncs.cls 2.3 new class option "oribibl" to suppress
45
+ changes to the thebibliograpy environment
46
+ and retain pure LaTeX codes - useful
47
+ for most BibTeX applications
48
+
49
+ 16.04.98 llncs.cls 2.3 if option "oribibl" is given, extend the
50
+ thebibliograpy hook with "\small", suggested
51
+ by Clemens Ballarin, University of Cambridge
52
+
53
+ 20.11.98 llncs.cls 2.4 pagestyle "titlepage" - useful for
54
+ compilation of whole LNCS volumes
55
+
56
+ 12.01.99 llncs.cls 2.5 counters of orthogonal numbered special
57
+ environments are reset each new contribution
58
+
59
+ 27.04.99 llncs.cls 2.6 new command \thisbottomragged for the
60
+ actual page; indention of the footnote
61
+ made variable with \fnindent (default 1em);
62
+ new command \url that copys its argument
63
+
64
+ 2.03.00 llncs.cls 2.7 \figurename and \tablename made compatible
65
+ to babel, suggested by Jo Hereth, TU Darmstadt;
66
+ definition of \url moved \AtBeginDocument
67
+ (allows for url package of Donald Arseneau),
68
+ suggested by Manfred Hauswirth, TU of Vienna;
69
+ \large for part entries in the TOC
70
+
71
+ 16.04.00 llncs.cls 2.8 new option "orivec" to preserve the original
72
+ vector definition, read "arrow" accent
73
+
74
+ 17.01.01 llncs.cls 2.9 hardwired texts made polyglot,
75
+ available languages: english (default),
76
+ french, german - all are "babel-proof"
77
+
78
+ 20.06.01 splncs.bst public release of a BibTeX style for LNCS,
79
+ nobly provided by Jason Noble
80
+
81
+ 14.08.01 llncs.cls 2.10 TOC: authors flushleft,
82
+ entries without hyphenation; suggested
83
+ by Wiro Niessen, Imaging Center - Utrecht
84
+
85
+ 23.01.02 llncs.cls 2.11 fixed footnote number confusion with
86
+ \thanks, numbered institutes, and normal
87
+ footnote entries; error reported by
88
+ Saverio Cittadini, Istituto Tecnico
89
+ Industriale "Tito Sarrocchi" - Siena
90
+
91
+ 28.01.02 llncs.cls 2.12 fixed footnote fix; error reported by
92
+ Chris Mesterharm, CS Dept. Rutgers - NJ
93
+
94
+ 28.01.02 llncs.cls 2.13 fixed the fix (programmer needs vacation)
95
+
96
+ 17.08.04 llncs.cls 2.14 TOC: authors indented, smart \and handling
97
+ for the TOC suggested by Thomas Gabel
98
+ University of Osnabrueck
99
+
100
+ 07.03.06 splncs.bst fix for BibTeX entries without year; patch
101
+ provided by Jerry James, Utah State University
102
+
103
+ 14.06.06 splncs_srt.bst a sorting BibTeX style for LNCS, feature
104
+ provided by Tobias Heindel, FMI Uni-Stuttgart
105
+
106
+ 16.10.06 llncs.dem 2.3 removed affiliations from \tocauthor demo
107
+
108
+ 11.12.07 llncs.doc note on online visibility of given e-mail address
109
+
110
+ 15.06.09 splncs03.bst new BibTeX style compliant with the current
111
+ requirements, provided by Maurizio "Titto"
112
+ Patrignani of Universita' Roma Tre
113
+
114
+ 30.03.10 llncs.cls 2.15 fixed broken hyperref interoperability;
115
+ patch provided by Sven Koehler,
116
+ Hamburg University of Technology
117
+
118
+ 15.04.10 llncs.cls 2.16 fixed hyperref warning for informatory TOC entries;
119
+ introduced \keywords command - finally;
120
+ blank removed from \keywordname, flaw reported
121
+ by Armin B. Wagner, IGW TU Vienna
122
+
123
+ 15.04.10 llncs.cls 2.17 fixed missing switch "openright" used by \backmatter;
124
+ flaw reported by Tobias Pape, University of Potsdam
125
+
126
+ 27.09.13 llncs.cls 2.18 fixed "ngerman" incompatibility; solution provided
127
+ by Bastian Pfleging, University of Stuttgart
128
+
129
+ 04.09.17 llncs.cls 2.19 introduced \orcidID command
130
+
131
+ 10.03.18 llncs.cls 2.20 adjusted \doi according to CrossRef requirements;
132
+ TOC: removed affiliation numbers
133
+
134
+ splncs04.bst added doi field;
135
+ bold journal numbers
136
+
137
+ samplepaper.tex new sample paper
138
+
139
+ llncsdoc.pdf new LaTeX class documentation