A MATLAB Optimization Platform for Education and Experimentation in Dynamic Environments
Git repository: Danial-Yazdani/EDOLAB-MATLAB (github.com)
The current version is v2.00
-
MAI PENG, pengmai@cug.edu.cn, School of Automation, China University of Geosciences,Wuhan, Hubei Key Laboratory of Advanced Control and Intelligent Automation for Complex Systems, and Engineering Research Center of Intelligent Technology for Geo-Exploration, Ministry of Education, China, 430074;
-
DELARAM YAZDANI, delaram.yazdani@yahoo.com, Liverpool Logistics, Offshore and Marine (LOOM) Research Institute, Faculty of Engineering and Technology, Liverpool John Moores University, United Kingdom, L2 2ER;
-
DANIAL YAZDANI, danial.yazdani@gmail.com, Business Intelligence Group, Department of Technology, WINC Australia, Australia;
-
ZENENG SHE, 20s151103@stu.hit.edu.cn, School of Computer Science and Technology, Harbin Institute of Technology, Shenzhen, China, 518055;
-
WENJIAN LUO, luowenjian@hit.edu.cn, Guangdong Provincial Key Laboratory of Novel Security Intelligence Technologies, School of Computer Science and Technology, Harbin Institute of Technology and Peng Cheng Laboratory, Shenzhen, China, 518055;
-
CHANGHE LI, School of Artificial Intelligence, Anhui University of Science & Technology, Hefei, China, 230000;
-
JUERGEN BRANKE, Juergen.Branke@wbs.ac.uk, Operational Research and Management Sciences Group in Warwick Business school, University of Warwick, Coventry, United Kingdom, CV4 7AL;
-
TRUNG THANH NGUYEN, T.T.Nguyen@ljmu.ac.uk, The Liverpool Logistics, Offshore and Marine (LOOM) Research Institute, Faculty of Engineering and Technology, Liverpool John Moores University, Liverpool, United Kingdom, L2 2ER;
-
AMIR H. GANDOMI, Gandomi@uts.edu.au, Faculty of Engineering & Information Technology, University of Technology Sydney, Ultimo, Australia, 2007 and University Research and Innovation Center (EKIK), Obuda University, Budapest, Hungary, 1034;
-
SHENGXIANG YANG, syang@dmu.ac.uk, Institute of Artificial Intelligence (IAI), School of Computer Science and Informatics, De Montfort University, Leicester, United Kingdom, LE1 9BH;
-
YAOCHU JIN, yaochu.jin@uni-bielefeld.de, Faculty of Technology, Bielefeld University, Bielefeld, Germany, 33615;
-
XIN YAO, xiny@sustech.edu.cn, Research Institute of Trustworthy Autonomous Systems (RITAS), and Guangdong Provincial Key Laboratory of Brain inspired Intelligent Computation, Department of Computer Science and Engineering, Southern University of Science and Technology, Shenzhen, China, 518055 and The Center of Excellence for Research in Computational Intelligence and Applications (CERCIA), School of Computer Science, University of Birmingham, Birmingham, United Kingdom, B15 2TT.
# clone the project
git clone https://github.com/Danial-Yazdani/EDOLAB-MATLABModular structure with core components:
├── Algorithm/ # EDOA implementations (ACFPSO, CDE, mQSO, etc.)
├── Benchmark/ # Benchmark generators (GMPB, MPB, FPs, GDBG)
├── Utility/ # Helper functions
├── OctaveVersion/ # Octave supports
├── GUIMode.m # GUI entry point
└── CodeMode.m # Script mode entry
The current version of the GUI Mode is relatively well-developed, and we strongly recommend using it.
% Launch graphical interface
run GUIMode.m- Experimentation module
Core Features:
- Experiment configuration management
- Batch task processing
- Real-time progress monitoring
- Statistical significance analysis
- Interactive visualizations (Trend/Box plots)
- Education module
Core Features:
- Step-by-step visualization of optimization process
- Interactive control over iteration playback
- Real-time population behavior tracking
- Interactive control, freely start, stop, or jump to any iteration
% Configure Algorithm & Benchmark in CodeMode.m
AlgorithmName = 'mQSO';
BenchmarkName = 'MPB';
VisualizationOverOptimization = 0; % 1=Education Mode
% Configure algorithm parameters in getAlgConfigurableParameters_EDO.m
function ConfigurableParameters = getAlgConfigurableParameters_mQSO()
% PopulationSize: Number of particles in each sub-swarm.
ConfigurableParameters.PopulationSize = struct( ...
'value', 5, ...
'type', 'integer', ...
'range', [0, 100], ...
'description', 'Number of particles in each sub-swarm.');
% x: Inertia weight used in velocity update.
ConfigurableParameters.x = struct( ...
'value', 0.729843788, ...
'type', 'numeric', ...
'range', [0, 2], ...
'description', 'Inertia weight used in particle velocity update.');
% c1: Cognitive coefficient influencing personal best position attraction.
ConfigurableParameters.c1 = struct( ...
'value', 2.05, ...
'type', 'numeric', ...
'range', [0, 5], ...
'description', 'Cognitive coefficient that scales influence of personal best.');
% c2: Social coefficient influencing global best position attraction.
ConfigurableParameters.c2 = struct( ...
'value', 2.05, ...
'type', 'numeric', ...
'range', [0, 5], ...
'description', 'Social coefficient that scales influence of global best.');
% QuantumNumber: Number of quantum particles generated per iteration.
ConfigurableParameters.QuantumNumber = struct( ...
'value', 5, ...
'type', 'integer', ...
'range', [0, 100], ...
'description', 'Number of quantum particles generated to explore space around best solution.');
% SwarmNumber: Total number of sub-swarms in the population.
ConfigurableParameters.SwarmNumber = struct( ...
'value', 10, ...
'type', 'integer', ...
'range', [0, 100], ...
'description', 'Number of sub-swarms.');
end
% Configure benchmark parameters in getProConfigurableParameters_Benchmark.m
function ConfigurableParameters = getProConfigurableParameters_MPB()
% Dimension: Dimensionality of the search space
ConfigurableParameters.Dimension = struct( ...
'value', 5, ...
'type', 'integer', ...
'range', [2, 100], ...
'description', 'Number of dimensions in the optimization problem.');
% PeakNumber: Quantity of peaks in dynamic landscape
ConfigurableParameters.PeakNumber = struct( ...
'value', 10, ...
'type', 'integer', ...
'range', [1, 500], ...
'description', 'Number of peaks in the dynamic environment.');
% ChangeFrequency: Evaluations between environmental changes
ConfigurableParameters.ChangeFrequency = struct( ...
'value', 5000, ...
'type', 'integer', ...
'range', [100, 20000], ...
'description', 'Number of function evaluations between environment changes.');
% ShiftSeverity: Magnitude of peak position changes
ConfigurableParameters.ShiftSeverity = struct( ...
'value', 1, ...
'type', 'numeric', ...
'range', [0, 10], ...
'description', 'Magnitude of positional shifts during environment changes.');
% EnvironmentNumber: Total environmental states
ConfigurableParameters.EnvironmentNumber = struct( ...
'value', 100, ...
'type', 'integer', ...
'range', [1, 1000], ...
'description', 'Total number of distinct environmental states.');
% HeightSeverity: Intensity of peak height variations
ConfigurableParameters.HeightSeverity = struct( ...
'value', 7, ...
'type', 'numeric', ...
'range', [0, 20], ...
'description', 'Intensity factor for peak height modifications.');
% WidthSeverity: Intensity of peak width variations
ConfigurableParameters.WidthSeverity = struct( ...
'value', 1, ...
'type', 'numeric', ...
'range', [0, 6], ...
'description', 'Intensity factor for peak width modifications.');
end
run CodeMode.m-
Create algorithm folder
UnderAlgorithm/, create a new sub-folder named after your EDOA (e.g.XYZ). -
Implement the five core functions
Place these files inside your new folder:main_XYZ.m
Main entry point—must accept and return the standardized Problem and Output structures.SubPopulationGenerator_XYZ.m
Generates or updates the algorithm’s subpopulations.IterativeComponents_XYZ.m
Contains the core search/update loop for each iteration.ChangeReaction_XYZ.m
Handles detection of and adaptation to environmental changes.getAlgConfigurableParameters_XYZ.m
Defines all user-configurable parameters (fields:value,type,range,description).
-
Hook into CodeMode
Ensure thatCodeMode.mcan invokemain_XYZ.mby setting:AlgorithmName = 'XYZ';
-
Visualization & Output
- Use the
%% Visualization for educationsection pattern from existing EDOAs to collect GUI data. - At the end of
main_XYZ.m, assemble anResults.Indicatorsstructure consistent with EDOLAB’s reporting modules.
- Use the
-
Create benchmark folder Under
Benchmark/, create a sub-folder named after your benchmark (e.g.ABC). -
Implement the three core files Inside
Benchmark/ABC/add:-
getProConfigurableParameters_ABC.mDefineConfigurableParameterswith fields:ConfigurableParameters.ParamName = struct( ... 'value', <default>, ... 'type', '<numeric|integer|option>', ... 'range', [...], ... 'description', '…' ... );
-
BenchmarkGenerator_ABC.mBuilds theProblemstructure (environments, dynamics) based solely on the parameters fromgetProConfigurableParameters_ABC.m. -
fitness_ABC.mComputes the baseline fitness for each solution, conforming to EDOLAB’s input/output conventions.
-
-
Automatic integration Once these files are in place, your new benchmark will appear in the GUI list and can be run via
CodeMode.m.
-
Edit the JSON interface Open
Indicators/indicators.jsonand add:"MyMetric": { "type": "FE based" // or "Environment based" / "None" }
-
Implement in
fitness.mInfitness.m, compute and store your metric:% FE based (every evaluation) Problem.Indicators.MyMetric.trend(Problem.FE) = <your calculation>; % Environment based (per environment) Problem.Indicators.MyMetric.trend(Problem.EnvironmentCounter) = <your calculation>; % None (final only) Problem.Indicators.MyMetric.final = <your calculation>;
-
Verify & Use
- In GUI Mode, run one task and check the Completed Tasks panlel or Statistical Analysis panel to see your new indicator.
- In Code Mode, confirm
Results.Indicators.MyMetricappears in results.
EDOLAB provides full functionality in Octave through its dedicated OctaveVersion implementation. This standalone version maintains all core features while addressing key compatibility requirements.
- Install required packages:
pkg install -forge io statistics
pkg load io statistics- Compile KDTree component:
cd OctaveVersion/Benchmark
mkoctfile --mex ConstructKDTree.cpp- Execute the main controller script:
run OctaveVersion/OctaveCodeMode.mFor more information about EDOLAB, please refer to the paper and user manual. If you need further assistance, please contact Mai Peng at pengmai1998@gmail.com or Danial Yazdani at danial.yazdani@gmail.com.
- GUI Mode requires MATLAB R2020b+ and the Parallel Computing Toolbox. Recommended MATLAB R2024a or later.
- Code Mode requires MATLAB R2016b+.
This program is to be used under the terms of the GNU General Public License
Copyright (c) 2022-present Danial Yazdani

