Skip to main content
. 2025 Aug 6;26(15):7587. doi: 10.3390/ijms26157587
Algorithm 1 Genetic-Embedded Nuclear Reaction Optimization (GNR) Algorithm
Require: Dataset D, Population size N = 500, Max generations T = 30, Early stopping patience P = 5
Ensure: Optimized subset of gene
                       ▷ Preprocessing and Filtering
1:  Handle missing values (mean imputation)
2:  Normalize features using Z-score
3:  Encode categorical labels (if any)
4:  Compute F-score for each gene
5:  Select top 500 genes based on F-score
                              ▷ Initialization
6:   for each subset size k ∈ {5, 10, 15} do
7:      Initialize population of continuous vectors xi ∈ [0, 1]D
8:      Randomly initialize each xi in population
9:      Evaluate fitness using SVM with LOOCV
10:    Set Xbest ← best solution, no_improve ← 0
                 ▷ Fission Phase: Exploration via perturbation
11:    for g = 1 to T do
12:    for each solution xi do
13:       Generate new solution xiFi  using Equation (2)
14:       Compute dynamic step sizes using Equations (3) and (4)
15:       Apply mutation factors using Equations (5) and (6)
16:    end for
            ▷ Fusion Phase: Exploitation with embedded crossover
17:    for each solution xi do
18:       Apply ionization via Equation (7)
19:       if solutions are similar then
20:       Apply Lévy flight adjustment using Equation (8)
21:       end if
22:       Generate xiFu as follows:
23:       if rand < 0.3 then
24:       Select random solution xrand
25:       for each gene d ∈ {1, . . . , D} do
26:          xiFu [d] ← if rand < 0.8: Xbest [d]; else: xrand [d]
27:       end for
28:       else
29:       Apply fusion using Equation (9) or (10) depending on similarity
30:       end if
31:    end for
                ▷ Fitness Evaluation and Best Solution Update
32:    for each solution xi do
33:       Evaluate fitness via SVM + LOOCV
34:       if Fitness(xi) > Fitness(Xbest) then
35:       Update Xbestxi, reset no_improve ← 0
36:       else
37:       Increment no_improveno_improve + 1
38:       end if
39:    end for
40:    if no_improveP then
41:       break
42:    end if
43:    end for
44:   end for
                               ▷ Final Output
45:   return best gene subset Xbest