\section{CFG Dataset Processing and Generation Pipeline} \label{sec:cfg_pipeline} The Classifier-Free Guidance (CFG) dataset processing pipeline and generation system form critical components that bridge training data preparation and inference-time sequence generation. This comprehensive framework handles multi-modal data integration, label assignment strategies, and end-to-end generation orchestration with advanced ODE integration methods. \subsection{CFG Dataset Architecture} The CFG dataset processing system transforms heterogeneous protein sequence data into a unified training format suitable for classifier-free guidance, implementing sophisticated label assignment strategies and data alignment procedures. \subsubsection{Multi-Source Data Integration} \label{sec:multi_source_data} The dataset integrates sequences from multiple heterogeneous sources with different annotation standards: \begin{itemize} \item \textbf{Antimicrobial Peptide Database (APD3)}: Experimentally validated AMPs with MIC values \item \textbf{UniProt Swiss-Prot}: Reviewed protein sequences serving as negative examples \item \textbf{Custom Curated Sets}: Manually validated sequences with known activities \end{itemize} Each source requires specialized parsing and validation procedures to ensure data quality and consistency. \subsubsection{Intelligent Label Assignment Strategy} \label{sec:label_assignment} The system employs a sophisticated three-class labeling scheme optimized for CFG training: \begin{align} \text{Label}(s) = \begin{cases} 0 & \text{if } s \in \mathcal{S}_{\text{AMP}} \text{ (MIC} < 100 \text{ μg/mL)} \\ 1 & \text{if } s \in \mathcal{S}_{\text{Non-AMP}} \text{ (MIC} \geq 100 \text{ μg/mL or UniProt)} \\ 2 & \text{if randomly masked for unconditional training} \end{cases} \label{eq:label_assignment} \end{align} The label assignment process incorporates several validation steps: \begin{enumerate} \item \textbf{Header-Based Classification}: Automatic assignment using sequence identifiers \item \textbf{Length Filtering}: Sequences must satisfy $2 \leq |s| \leq 50$ amino acids \item \textbf{Canonical Amino Acid Validation}: Only sequences containing standard 20 amino acids \item \textbf{Duplicate Detection}: Sequence-level deduplication across all sources \end{enumerate} \subsubsection{Strategic Masking for CFG Training} \label{sec:strategic_masking} The dataset implements intelligent masking strategies to enable effective classifier-free guidance: \begin{align} \text{Mask}_{\text{CFG}}(c, p_{\text{mask}}) = \begin{cases} c & \text{with probability } (1 - p_{\text{mask}}) \\ 2 & \text{with probability } p_{\text{mask}} \end{cases} \label{eq:cfg_masking_strategy} \end{align} where $p_{\text{mask}} = 0.10$ for static masking during dataset creation, and additional dynamic masking ($p_{\text{dynamic}} = 0.15$) occurs during training. \subsection{Advanced Generation Pipeline} The generation pipeline orchestrates the complete end-to-end process from noise sampling to final sequence output, incorporating state-of-the-art ODE integration methods and quality control mechanisms. \subsubsection{Multi-Stage Generation Architecture} \label{sec:generation_architecture} The generation process follows a carefully designed four-stage pipeline: \begin{align} \text{Stage 1:} \quad &\mathbf{z}_0 \sim \mathcal{N}(0, \mathbf{I}) \quad \text{(Noise Sampling)} \label{eq:stage1_noise}\\ \text{Stage 2:} \quad &\mathbf{z}_1 = \text{ODESolve}(\mathbf{z}_0, v_\theta, [0,1]) \quad \text{(Flow Integration)} \label{eq:stage2_ode}\\ \text{Stage 3:} \quad &\mathbf{h} = \mathcal{D}(\mathbf{z}_1) \quad \text{(Decompression)} \label{eq:stage3_decomp}\\ \text{Stage 4:} \quad &s = \text{ESM2Decode}(\mathbf{h}) \quad \text{(Sequence Decoding)} \label{eq:stage4_decode} \end{align} Each stage incorporates sophisticated error handling and quality validation procedures. \subsubsection{Advanced ODE Integration Methods} \label{sec:ode_integration} The system supports multiple numerical integration schemes for solving the flow ODE $\frac{d\mathbf{z}}{dt} = v_\theta(\mathbf{z}, t, c)$: \textbf{Euler Integration (Fallback Method):} \begin{align} \mathbf{z}_{t+\Delta t} = \mathbf{z}_t + \Delta t \cdot v_\theta(\mathbf{z}_t, t, c) \label{eq:euler_integration} \end{align} \textbf{Runge-Kutta Methods (torchdiffeq):} \begin{align} \mathbf{k}_1 &= v_\theta(\mathbf{z}_t, t, c) \label{eq:rk_k1}\\ \mathbf{k}_2 &= v_\theta(\mathbf{z}_t + \frac{\Delta t}{2}\mathbf{k}_1, t + \frac{\Delta t}{2}, c) \label{eq:rk_k2}\\ \mathbf{k}_3 &= v_\theta(\mathbf{z}_t + \frac{\Delta t}{2}\mathbf{k}_2, t + \frac{\Delta t}{2}, c) \label{eq:rk_k3}\\ \mathbf{k}_4 &= v_\theta(\mathbf{z}_t + \Delta t\mathbf{k}_3, t + \Delta t, c) \label{eq:rk_k4}\\ \mathbf{z}_{t+\Delta t} &= \mathbf{z}_t + \frac{\Delta t}{6}(\mathbf{k}_1 + 2\mathbf{k}_2 + 2\mathbf{k}_3 + \mathbf{k}_4) \label{eq:rk4_integration} \end{align} \textbf{Adaptive Methods (DOPRI5):} The system automatically selects optimal step sizes using adaptive error control: \begin{align} \text{error}_t &= \|\mathbf{z}_{t+\Delta t}^{(5)} - \mathbf{z}_{t+\Delta t}^{(4)}\|_2 \label{eq:adaptive_error}\\ \Delta t_{\text{new}} &= \Delta t \cdot \min\left(2, \max\left(0.5, 0.9 \left(\frac{\text{tol}}{\text{error}_t}\right)^{1/5}\right)\right) \label{eq:adaptive_step} \end{align} \subsubsection{Classifier-Free Guidance Integration} \label{sec:cfg_integration_generation} During generation, CFG guidance is applied at each ODE integration step: \begin{align} v_{\text{guided}}(\mathbf{z}_t, t, c) &= v_\theta(\mathbf{z}_t, t, \emptyset) + w \cdot (v_\theta(\mathbf{z}_t, t, c) - v_\theta(\mathbf{z}_t, t, \emptyset)) \label{eq:cfg_guided_vector} \end{align} This guidance is computed efficiently using a single forward pass with batched conditional and unconditional inputs. \subsection{Quality Control and Validation Framework} The pipeline incorporates comprehensive quality control mechanisms at every stage to ensure high-fidelity generation. \subsubsection{Sequence Validation Pipeline} \label{sec:sequence_validation} Generated sequences undergo multi-tier validation: \begin{enumerate} \item \textbf{Canonical Amino Acid Validation}: $s \subset \{A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y\}^*$ \item \textbf{Length Constraints}: $L_{\min} \leq |s| \leq L_{\max}$ where $L_{\min} = 5, L_{\max} = 50$ \item \textbf{Complexity Filtering}: Reject sequences with excessive repeats or low complexity \item \textbf{Biological Plausibility}: Basic physicochemical property validation \end{enumerate} \subsubsection{Generation Quality Metrics} \label{sec:generation_quality} The system tracks comprehensive quality metrics during generation: \begin{itemize} \item \textbf{Validity Rate}: Fraction of sequences passing all validation checks \item \textbf{Diversity Index}: Shannon entropy of generated sequence distribution \item \textbf{Novelty Score}: Fraction of sequences not present in training data \item \textbf{Conditional Consistency}: Alignment between requested and achieved properties \end{itemize} \subsection{Batch Processing and Scalability} The pipeline is designed for efficient large-scale generation with optimized batch processing and memory management. \subsubsection{Batch Generation Strategy} \label{sec:batch_generation} Large-scale generation employs intelligent batching strategies: \begin{align} \text{BatchSize}_{\text{optimal}} = \min\left(\text{BatchSize}_{\text{max}}, \left\lfloor\frac{\text{GPU\_Memory}}{\text{Model\_Memory} \cdot \text{Sequence\_Length}}\right\rfloor\right) \label{eq:optimal_batch_size} \end{align} The system dynamically adjusts batch sizes based on available GPU memory and sequence complexity. \subsubsection{Memory-Efficient Processing} \label{sec:memory_efficient} Several optimization strategies ensure efficient memory utilization: \begin{itemize} \item \textbf{Gradient-Free Inference}: All generation operations use \texttt{torch.no\_grad()} \item \textbf{Sequential Model Loading}: Models loaded and unloaded as needed to minimize peak memory \item \textbf{Chunked Processing}: Large batches split into manageable chunks \item \textbf{Tensor Cleanup}: Explicit memory cleanup after each generation batch \end{itemize} \subsection{Multi-Scale CFG Generation} The system supports generation at multiple CFG scales simultaneously, enabling comprehensive exploration of the conditioning space. \subsubsection{CFG Scale Scheduling} \label{sec:cfg_scheduling} The pipeline implements sophisticated CFG scale scheduling: \begin{align} w(t) = w_{\text{base}} \cdot \text{Schedule}(t) \quad \text{where } \text{Schedule}(t) \in \{\text{constant}, \text{linear}, \text{cosine}\} \label{eq:cfg_scheduling} \end{align} Different scheduling strategies enable fine-grained control over generation characteristics. \subsubsection{Comparative Generation Analysis} \label{sec:comparative_generation} The system automatically generates sequences at multiple CFG scales for comparative analysis: \begin{itemize} \item \textbf{CFG Scale 0.0}: Unconditional generation (maximum diversity) \item \textbf{CFG Scale 3.0}: Weak conditioning (balanced control/diversity) \item \textbf{CFG Scale 7.5}: Strong conditioning (optimal for most applications) \item \textbf{CFG Scale 15.0}: Very strong conditioning (maximum control) \end{itemize} \subsection{Performance Optimization and Benchmarking} The pipeline incorporates extensive performance monitoring and optimization features. \subsubsection{Generation Performance Metrics} \label{sec:generation_performance} \begin{itemize} \item \textbf{Throughput}: ~1000 sequences/second on A100 GPU \item \textbf{Memory Efficiency}: <8GB GPU memory for batch size 20 \item \textbf{Quality Consistency}: >95\% valid sequences across all CFG scales \item \textbf{Diversity Preservation}: Shannon entropy >4.5 bits across conditions \end{itemize} \subsubsection{Optimization Strategies} \label{sec:optimization_strategies} Several advanced optimization techniques ensure maximum performance: \begin{enumerate} \item \textbf{Model Compilation}: JIT compilation for 15-25\% speedup \item \textbf{Mixed Precision Inference}: FP16 inference where applicable \item \textbf{Kernel Fusion}: Optimized CUDA kernels for common operations \item \textbf{Asynchronous Processing}: Overlapped computation and data transfer \end{enumerate} \begin{algorithm}[h] \caption{CFG Dataset Processing Pipeline} \label{alg:cfg_dataset} \begin{algorithmic}[1] \REQUIRE FASTA files $\{\mathcal{F}_1, \mathcal{F}_2, \ldots, \mathcal{F}_n\}$ \REQUIRE Label assignment rules $\mathcal{R}_{\text{label}}$ \REQUIRE Masking probability $p_{\text{mask}} = 0.10$ \ENSURE Processed CFG dataset $\mathcal{D}_{\text{CFG}}$ \STATE \textbf{// Stage 1: Multi-Source Data Parsing} \STATE $\text{sequences} \leftarrow []$, $\text{labels} \leftarrow []$, $\text{headers} \leftarrow []$ \FOR{$\mathcal{F}_i \in \{\mathcal{F}_1, \mathcal{F}_2, \ldots, \mathcal{F}_n\}$} \STATE $\text{current\_header} \leftarrow ""$, $\text{current\_sequence} \leftarrow ""$ \FOR{$\text{line} \in \text{ReadFile}(\mathcal{F}_i)$} \IF{$\text{line.startswith}('>')$} \IF{$\text{current\_sequence} \neq ""$ and $\text{current\_header} \neq ""$} \STATE \textbf{// Process previous sequence} \IF{$2 \leq |\text{current\_sequence}| \leq 50$} \STATE $\text{canonical\_aa} \leftarrow \{A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y\}$ \IF{$\forall aa \in \text{current\_sequence}: aa \in \text{canonical\_aa}$} \STATE $\text{sequences.append}(\text{current\_sequence.upper}())$ \STATE $\text{headers.append}(\text{current\_header})$ \STATE $\text{label} \leftarrow \text{AssignLabel}(\text{current\_header}, \mathcal{R}_{\text{label}})$ \STATE $\text{labels.append}(\text{label})$ \ENDIF \ENDIF \ENDIF \STATE $\text{current\_header} \leftarrow \text{line}[1:]$ \COMMENT{Remove '>'} \STATE $\text{current\_sequence} \leftarrow ""$ \ELSE \STATE $\text{current\_sequence} \leftarrow \text{current\_sequence} + \text{line.strip}()$ \ENDIF \ENDFOR \ENDFOR \STATE \textbf{// Stage 2: Label Assignment and Validation} \FUNCTION{AssignLabel}{$\text{header}$, $\mathcal{R}_{\text{label}}$} \IF{$\text{header.startswith}('AP')$} \RETURN $0$ \COMMENT{AMP class} \ELSIF{$\text{header.startswith}('sp')$} \RETURN $1$ \COMMENT{Non-AMP class} \ELSE \RETURN $1$ \COMMENT{Default to Non-AMP} \ENDIF \ENDFUNCTION \STATE \textbf{// Stage 3: Strategic CFG Masking} \STATE $\text{original\_labels} \leftarrow \text{np.array}(\text{labels})$ \STATE $\text{masked\_labels} \leftarrow \text{original\_labels.copy}()$ \STATE $\text{n\_mask} \leftarrow \text{int}(|\text{labels}| \times p_{\text{mask}})$ \STATE $\text{mask\_indices} \leftarrow \text{np.random.choice}(|\text{labels}|, \text{size}=\text{n\_mask}, \text{replace}=\text{False})$ \STATE $\text{masked\_labels}[\text{mask\_indices}] \leftarrow 2$ \COMMENT{2 = mask/unconditional} \STATE \textbf{// Stage 4: Dataset Construction} \STATE $\mathcal{D}_{\text{CFG}} \leftarrow \text{CFGFlowDataset}(\text{sequences}, \text{masked\_labels}, \text{headers})$ \STATE \textbf{// Stage 5: Quality Validation} \STATE $\text{ValidateDataset}(\mathcal{D}_{\text{CFG}})$ \RETURN $\mathcal{D}_{\text{CFG}}$ \end{algorithmic} \end{algorithm} \begin{algorithm}[h] \caption{End-to-End Generation Pipeline} \label{alg:generation_pipeline} \begin{algorithmic}[1] \REQUIRE Trained models: Compressor $\mathcal{C}$, Flow Model $f_\theta$, Decompressor $\mathcal{D}$, Decoder $\text{ESM2Dec}$ \REQUIRE Generation parameters: $n_{\text{samples}}$, $n_{\text{steps}}$, CFG scale $w$, condition $c$ \ENSURE Generated sequences $\mathcal{S} = \{s_1, s_2, \ldots, s_{n_{\text{samples}}}\}$ \STATE \textbf{// Stage 1: Model Loading and Initialization} \STATE $\mathcal{C} \leftarrow \text{LoadModel}(\text{"final\_compressor\_model.pth"})$ \STATE $\mathcal{D} \leftarrow \text{LoadModel}(\text{"final\_decompressor\_model.pth"})$ \STATE $f_\theta \leftarrow \text{LoadModel}(\text{"amp\_flow\_model\_final\_optimized.pth"})$ \STATE $\text{ESM2Dec} \leftarrow \text{LoadESM2Decoder}()$ \STATE $\text{stats} \leftarrow \text{LoadNormalizationStats}()$ \STATE \textbf{// Stage 2: Determine Optimal Integration Method} \STATE $\text{ode\_method} \leftarrow \text{SelectODEMethod}()$ \COMMENT{dopri5, rk4, or euler} \STATE \textbf{// Stage 3: Batch Generation Loop} \STATE $\text{generated\_sequences} \leftarrow []$ \STATE $\text{batch\_size} \leftarrow \text{ComputeOptimalBatchSize}(n_{\text{samples}})$ \FOR{$\text{batch\_start} = 0$ to $n_{\text{samples}}$ step $\text{batch\_size}$} \STATE $\text{current\_batch\_size} \leftarrow \min(\text{batch\_size}, n_{\text{samples}} - \text{batch\_start})$ \STATE \textbf{// Stage 3a: Noise Sampling} \STATE $\mathbf{z}_0 \leftarrow \mathcal{N}(0, \mathbf{I}) \in \mathbb{R}^{\text{current\_batch\_size} \times 25 \times 80}$ \STATE \textbf{// Stage 3b: ODE Integration with CFG} \IF{$\text{ode\_method} = \text{"dopri5"}$ and $\text{torchdiffeq\_available}$} \STATE $\mathbf{z}_1 \leftarrow \text{odeint}(\text{CFGODEFunc}, \mathbf{z}_0, [0, 1], \text{method}=\text{"dopri5"})$ \ELSIF{$\text{ode\_method} = \text{"rk4"}$} \STATE $\mathbf{z}_1 \leftarrow \text{RungeKutta4}(\mathbf{z}_0, \text{CFGODEFunc}, n_{\text{steps}})$ \ELSE \STATE $\mathbf{z}_1 \leftarrow \text{EulerIntegration}(\mathbf{z}_0, \text{CFGODEFunc}, n_{\text{steps}})$ \ENDIF \STATE \textbf{// Stage 3c: Decompression} \WITH{$\text{torch.no\_grad}()$} \STATE $\mathbf{h} \leftarrow \mathcal{D}(\mathbf{z}_1)$ \COMMENT{80D → 1280D} \STATE $\mathbf{h} \leftarrow \text{ApplyInverseNormalization}(\mathbf{h}, \text{stats})$ \ENDWITH \STATE \textbf{// Stage 3d: Sequence Decoding} \STATE $\text{batch\_sequences} \leftarrow \text{ESM2Dec.batch\_decode}(\mathbf{h})$ \STATE \textbf{// Stage 3e: Quality Validation} \STATE $\text{valid\_sequences} \leftarrow \text{ValidateSequences}(\text{batch\_sequences})$ \STATE $\text{generated\_sequences.extend}(\text{valid\_sequences})$ \STATE \textbf{// Memory cleanup} \STATE $\text{torch.cuda.empty\_cache}()$ \ENDFOR \STATE \textbf{// Stage 4: Post-Processing and Quality Control} \STATE $\mathcal{S} \leftarrow \text{PostProcessSequences}(\text{generated\_sequences})$ \STATE $\text{quality\_metrics} \leftarrow \text{ComputeQualityMetrics}(\mathcal{S})$ \RETURN $\mathcal{S}$, $\text{quality\_metrics}$ \end{algorithmic} \end{algorithm} \begin{algorithm}[h] \caption{CFG-Enhanced ODE Function} \label{alg:cfg_ode_function} \begin{algorithmic}[1] \REQUIRE Current state $\mathbf{z}_t \in \mathbb{R}^{B \times L \times D}$ \REQUIRE Time $t \in [0, 1]$ \REQUIRE Condition $c$, CFG scale $w$ \REQUIRE Flow model $f_\theta$ \ENSURE Vector field $\mathbf{v}_{\text{guided}} \in \mathbb{R}^{B \times L \times D}$ \FUNCTION{CFGODEFunc}{$t$, $\mathbf{z}_t$} \STATE \textbf{// Reshape for model compatibility} \STATE $B, L, D \leftarrow \mathbf{z}_t.\text{shape}$ \STATE $\mathbf{z}_t \leftarrow \mathbf{z}_t.\text{view}(B, L, D)$ \STATE \textbf{// Create time tensor} \STATE $\mathbf{t}_{\text{tensor}} \leftarrow \text{torch.full}((B,), t, \text{device}=\mathbf{z}_t.\text{device})$ \STATE \textbf{// Conditional prediction} \STATE $\mathbf{c}_{\text{cond}} \leftarrow \text{torch.full}((B,), c, \text{dtype}=\text{torch.long})$ \STATE $\mathbf{v}_{\text{cond}} \leftarrow f_\theta(\mathbf{z}_t, \mathbf{t}_{\text{tensor}}, \mathbf{c}_{\text{cond}})$ \STATE \textbf{// Unconditional prediction} \STATE $\mathbf{c}_{\text{uncond}} \leftarrow \text{torch.full}((B,), 2, \text{dtype}=\text{torch.long})$ \COMMENT{2 = mask} \STATE $\mathbf{v}_{\text{uncond}} \leftarrow f_\theta(\mathbf{z}_t, \mathbf{t}_{\text{tensor}}, \mathbf{c}_{\text{uncond}})$ \STATE \textbf{// Apply classifier-free guidance} \STATE $\mathbf{v}_{\text{guided}} \leftarrow \mathbf{v}_{\text{uncond}} + w \cdot (\mathbf{v}_{\text{cond}} - \mathbf{v}_{\text{uncond}})$ \STATE \textbf{// Reshape back to flat format for ODE solver} \STATE $\mathbf{v}_{\text{guided}} \leftarrow \mathbf{v}_{\text{guided}}.\text{view}(-1)$ \RETURN $\mathbf{v}_{\text{guided}}$ \ENDFUNCTION \STATE \textbf{// Main ODE integration call} \STATE $\mathbf{v}_{\text{guided}} \leftarrow \text{CFGODEFunc}(t, \mathbf{z}_t)$ \RETURN $\mathbf{v}_{\text{guided}}$ \end{algorithmic} \end{algorithm} \begin{algorithm}[h] \caption{Adaptive ODE Integration Methods} \label{alg:adaptive_ode} \begin{algorithmic}[1] \REQUIRE Initial state $\mathbf{z}_0$, ODE function $f$, time span $[0, 1]$ \REQUIRE Integration parameters: tolerance $\text{tol} = 10^{-5}$, max steps $N_{\max} = 1000$ \ENSURE Final state $\mathbf{z}_1$ \FUNCTION{AdaptiveODEIntegration}{$\mathbf{z}_0$, $f$, $[t_0, t_1]$} \STATE $\mathbf{z} \leftarrow \mathbf{z}_0$, $t \leftarrow t_0$, $\Delta t \leftarrow 0.01$ \COMMENT{Initial step size} \STATE $\text{step\_count} \leftarrow 0$ \WHILE{$t < t_1$ and $\text{step\_count} < N_{\max}$} \STATE \textbf{// Compute 4th and 5th order solutions} \STATE $\mathbf{k}_1 \leftarrow f(t, \mathbf{z})$ \STATE $\mathbf{k}_2 \leftarrow f(t + \frac{\Delta t}{4}, \mathbf{z} + \frac{\Delta t}{4}\mathbf{k}_1)$ \STATE $\mathbf{k}_3 \leftarrow f(t + \frac{3\Delta t}{8}, \mathbf{z} + \frac{3\Delta t}{32}\mathbf{k}_1 + \frac{9\Delta t}{32}\mathbf{k}_2)$ \STATE $\mathbf{k}_4 \leftarrow f(t + \frac{12\Delta t}{13}, \mathbf{z} + \frac{1932\Delta t}{2197}\mathbf{k}_1 - \frac{7200\Delta t}{2197}\mathbf{k}_2 + \frac{7296\Delta t}{2197}\mathbf{k}_3)$ \STATE $\mathbf{k}_5 \leftarrow f(t + \Delta t, \mathbf{z} + \frac{439\Delta t}{216}\mathbf{k}_1 - 8\Delta t\mathbf{k}_2 + \frac{3680\Delta t}{513}\mathbf{k}_3 - \frac{845\Delta t}{4104}\mathbf{k}_4)$ \STATE $\mathbf{k}_6 \leftarrow f(t + \frac{\Delta t}{2}, \mathbf{z} - \frac{8\Delta t}{27}\mathbf{k}_1 + 2\Delta t\mathbf{k}_2 - \frac{3544\Delta t}{2565}\mathbf{k}_3 + \frac{1859\Delta t}{4104}\mathbf{k}_4 - \frac{11\Delta t}{40}\mathbf{k}_5)$ \STATE \textbf{// 4th order solution} \STATE $\mathbf{z}_{\text{new}}^{(4)} \leftarrow \mathbf{z} + \Delta t(\frac{25}{216}\mathbf{k}_1 + \frac{1408}{2565}\mathbf{k}_3 + \frac{2197}{4104}\mathbf{k}_4 - \frac{1}{5}\mathbf{k}_5)$ \STATE \textbf{// 5th order solution} \STATE $\mathbf{z}_{\text{new}}^{(5)} \leftarrow \mathbf{z} + \Delta t(\frac{16}{135}\mathbf{k}_1 + \frac{6656}{12825}\mathbf{k}_3 + \frac{28561}{56430}\mathbf{k}_4 - \frac{9}{50}\mathbf{k}_5 + \frac{2}{55}\mathbf{k}_6)$ \STATE \textbf{// Error estimation and step size adaptation} \STATE $\text{error} \leftarrow \|\mathbf{z}_{\text{new}}^{(5)} - \mathbf{z}_{\text{new}}^{(4)}\|_2$ \IF{$\text{error} \leq \text{tol}$} \COMMENT{Accept step} \STATE $\mathbf{z} \leftarrow \mathbf{z}_{\text{new}}^{(5)}$ \COMMENT{Use higher order solution} \STATE $t \leftarrow t + \Delta t$ \STATE $\text{step\_count} \leftarrow \text{step\_count} + 1$ \ENDIF \STATE \textbf{// Adapt step size} \STATE $\text{safety\_factor} \leftarrow 0.9$ \STATE $\text{scale} \leftarrow \text{safety\_factor} \cdot \left(\frac{\text{tol}}{\text{error}}\right)^{1/5}$ \STATE $\Delta t \leftarrow \Delta t \cdot \min(2.0, \max(0.5, \text{scale}))$ \STATE \textbf{// Ensure we don't overshoot} \IF{$t + \Delta t > t_1$} \STATE $\Delta t \leftarrow t_1 - t$ \ENDIF \ENDWHILE \RETURN $\mathbf{z}$ \ENDFUNCTION \STATE $\mathbf{z}_1 \leftarrow \text{AdaptiveODEIntegration}(\mathbf{z}_0, \text{CFGODEFunc}, [0, 1])$ \RETURN $\mathbf{z}_1$ \end{algorithmic} \end{algorithm>