This project enables testing and analysis of cloud scheduling algorithms, with primary focus on:
- MO-LCA (Multi-Objective League Championship Algorithm)
- Comparative analysis with other algorithms (ACO, PSO, Round Robin)
- Performance evaluation in simulated cloud environments
- Multi-objective cloud scheduling optimization using MO-LCA
- Comparative analysis of algorithms (ACO, PSO, Round Robin)
- Modular architecture with orchestration for easy integration
- Interactive web interface for configuration and visualization
- Plugin architecture for the algorithm module for easy algorithms integration
- Cloud simulation environment using CloudSim-Plus framework
- Python: 3.7+
- Node.js: 20.x+
- Java: JDK 17+ (for simulator)
- Maven: 3.6+ (for Java build)
- npm: 10.x+
git clone https://github.com/ghifarhaidar/cloud-scheduling-using-lca.git
cd cloud-scheduling-using-lca/
conda create -n myenv -y
conda init
conda activate myenv
conda install maven nodejs numpy -y
cd backend/
npm install
cd ../frontend/
npm install
cd ..
python3 run.py --job 3
git clone https://github.com/ghifarhaidar/cloud-scheduling-using-lca.git
cd cloud-scheduling-using-lca/
python3 -m venv .venv
source .venv/bin/activate
sudo apt-get update
sudo apt-get install -y maven nodejs npm python3-pip
pip install --upgrade pip
pip install numpy
cd backend/
npm install
cd ..
cd frontend/
npm install
cd ..
python3 run.py --job 3
save your env variable in both the 'frontend/' and 'backend/'
then run npm run start in both backend and frontend folders
pytest tests/test_full_workflow.py
1. Algorithms Module
Contains implementations of scheduling algorithms:
/lca/
:MO_LCA.py
: Multi-Objective League Championship Algorithmmakespan_LCA.py
,cost_LCA.py
(single-objective variants)
/algorithms/
:ACO.py
: Ant Colony Optimization implementationPSO.py
: Particle Swarm Optimization variantRound_Robin.py
: Traditional round-robin baseline
2. CloudSim-Plus Integration (/src/main/java/
)
- Custom Java classes extending CloudSim-Plus:
MyDatacenterBroker.java
: Modified broker for custom schedulingMyVmCost.java
: Custom VM cost modelingSimulation.java
: Core simulation runner
3. Backend Service (/backend/
)
- Node.js API features:
runOrchestrator.js
: Invokes The main Orchestrator that runs algorithm and simulation executionresultProcessor.js
: Handles simulation output- REST API routes in
api.js
for frontend communication
4. Frontend Interface (/frontend/
)
- React-based UI with:
- Configuration setup Page (
SetConfigPage.jsx
) - Fitness evolution visualization (
FitnessPage.jsx
) - Results visualization (
ResultsSection.jsx
) - Pareto front visualization (
resultsPage.jsx
)
- Configuration setup Page (
Simulation Pipeline:
-
Configuration Phase
- User sets up MO-LCA parameters (population size, iterations, etc.)
- Configures simulation environment (VM counts, cloudlets, etc.)
-
Execution Phase
- Frontend sends configuration to Backend API
- Backend orchestrates:
a. Runs MO-LCA and other desired scheduling algorithm
b. Triggers Java simulator
c. Processes CloudSim-Plus output metrics
-
Visualization Phase
- Backend returns processed results to Frontend
- Interactive React components display:
- Scheduling performance metrics
- Comparative algorithm analysis
- Pareto fronts for multi-objective optimization
- Fitness evolution
Plugin Architecture:
- New algorithms can be added by:
- Adding implementation in
/algorithms/
- Updating
configs/all_algorithms.json
- No core changes required
- Adding implementation in
- JSON configs in
/configs/
control:- Algorithm parameters
- Cloud infrastructure specs
detailed files architecture:
.
├── algorithms
│ ├── ACO.py
│ ├── main.py
│ ├── PSO.py
│ └── Round_Robin.py
├── backend
│ ├── config
│ │ ├── config.js
│ │ └── corsOptions.js
│ ├── example.env
│ ├── middleware
│ │ ├── asyncHandler.js
│ │ ├── errorHandler.js
│ │ └── logging.js
│ ├── package.json
│ ├── package-lock.json
│ ├── routes
│ │ └── api.js
│ ├── server.js
│ └── utils
│ ├── fileHandlers.js
│ ├── resultProcessor.js
│ ├── runExperiments.js
│ └── runOrchestrator.js
├── clean_and_update.sh
├── configs
│ └── all_algorithms.json
├── frontend
│ ├── eslint.config.js
│ ├── example.env.local
│ ├── index.html
│ ├── package.json
│ ├── package-lock.json
│ ├── public
│ │ └── icon.svg
│ ├── src
│ │ ├── App.css
│ │ ├── App.jsx
│ │ ├── assets
│ │ │ └── react.svg
│ │ ├── components
│ │ │ ├── AlgorithmCard.jsx
│ │ │ ├── AlgorithmConfiguration.jsx
│ │ │ ├── CustomConfigSection.jsx
│ │ │ ├── loadingError.jsx
│ │ │ ├── loading.jsx
│ │ │ ├── NavBar.jsx
│ │ │ ├── ResultsSection.jsx
│ │ │ ├── SelectableAlgorithmCard.jsx
│ │ │ └── SimulationConfiguration.jsx
│ │ ├── index.css
│ │ ├── main.jsx
│ │ ├── pages
│ │ │ ├── EditConfigPage.jsx
│ │ │ ├── FitnessPage.jsx
│ │ │ ├── HomePage.jsx
│ │ │ ├── ResultsPage.jsx
│ │ │ ├── RunPage.jsx
│ │ │ └── SetConfigPage.jsx
│ │ ├── styles
│ │ │ ├── buttons.css
│ │ │ ├── cards.css
│ │ │ ├── navbar.css
│ │ │ └── resultsPage.css
│ │ └── utils
│ │ ├── api.js
│ │ ├── fitnessPageUtil.js
│ │ ├── resultPreprocessing.js
│ │ └── setConfigPageUtil.js
│ └── vite.config.js
├── .github
│ └── workflows
│ └── integration.yml
├── .gitignore
├── lca
│ ├── config.py
│ ├── cost_config.py
│ ├── cost_LCA.py
│ ├── dev.py
│ ├── main.py
│ ├── makespan_LCA.py
│ ├── MO_LCA.py
│ ├── Non_Vectorized_MO_LCA.py
│ ├── util.py
│ └── vectorized_dev.py
├── pom.xml
├── README.md
├── run.py
├── src
│ └── main
│ └── java
│ ├── brokers
│ │ └── MyDatacenterBroker.java
│ ├── org
│ │ └── simulations
│ │ └── Simulation.java
│ ├── utils
│ │ └── commons.java
│ └── vms
│ └── MyVmCost.java
└── tests
└── test_full_workflow.py
Project documentation is available in /.docs/
directory: