Repository files navigation

TSP Algorithm Lab

A full-stack educational laboratory for exploring and comparing algorithms for the Travelling Salesperson Problem (TSP).

The project combines a Spring Boot REST backend, a React and TypeScript visualization frontend, and a custom TSPLIB parser. It was developed as a team project for the Efficient Algorithms module at Hochschule Bremen.

Highlights

  • Browse and parse TSPLIB benchmark instances and known tours
  • Visualize Euclidean instances as interactive graphs
  • Explore geographical instances with Leaflet maps and route overlays
  • Run multiple exact, approximate, heuristic, and metaheuristic algorithms
  • Compare several Simulated Annealing implementations in an LLM Battle view
  • Inspect runtime, tour length, path validity, and implementation characteristics
  • Use a project-specific TSPLIB parser instead of relying only on an external parser library

Implemented algorithms

AlgorithmCategoryPurpose
Nearest NeighborGreedy heuristicFast construction of a valid tour
Dynamic ProgrammingExact algorithmOptimal solution for small instances; limited to 26 nodes
ChristofidesApproximation algorithmStructured approximation for metric TSP instances
Simulated AnnealingMetaheuristicStochastic search with controlled acceptance of worse solutions
Dantzig–Fulkerson–Johnson ILPInteger linear programmingIterative subtour elimination using the project's own simplex/ILP components
Claude SA variantLLM comparisonAlternative Simulated Annealing implementation
Gemma SA variantLLM comparisonAlternative Simulated Annealing implementation
Qwen3-Coder-Next SA variantLLM comparisonAlternative Simulated Annealing implementation

The LLM-generated variants are included for comparative and educational purposes. They are evaluated using the same project data structures and common parameters.

Architecture

flowchart LR
UI[React + TypeScript frontend] -->|REST / JSON| API[Spring Boot API]
API --> ALG[Algorithm implementations]
API --> ADAPTER[TSPLIB adapter]
ADAPTER --> PARSER[Custom TSPLIB parser]
PARSER --> DATA[TSPLIB benchmark files]
ALG --> UI
Loading

Modules

tsp-algorithm-lab/
├── ealg-application/ # Spring Boot API and TSP algorithms
├── ealg-own-tsp-lib/ # Custom TSPLIB parser and data model
├── ealg-react-frontend/ # React, TypeScript, graph and map visualizations
├── docs/ # Architecture and algorithm documentation
├── .github/workflows/ # Continuous integration
├── CONTRIBUTORS.md
├── THIRD_PARTY_NOTICES.md
└── pom.xml # Multi-module Maven parent

More detail is available in:

Technology stack

AreaTechnology
BackendJava 17, Spring Boot 2.7, Spring Web
API documentationOpenAPI / Swagger UI
FrontendReact 18, TypeScript, Webpack
UI componentsRSuite
Graph visualizationCytoscape and Graphology-based components
MapsLeaflet and React Leaflet
Build toolsMaven and npm
Benchmark formatTSPLIB
CIGitHub Actions

Prerequisites

  • Java 17 or newer
  • Maven 3.9 or newer
  • Node.js 18 or newer
  • npm 9 or newer

The repository does not include generated dependency folders or build output. Run the installation commands after cloning.

Running locally

1. Start the backend

Install the Maven modules once from the repository root:

mvn install -DskipTests -Dskip.frontend.assets=true

Then start the application module:

mvn -f ealg-application/pom.xml -Dskip.frontend.assets=true spring-boot:run

The backend is available at:

http://localhost:8080/tsp

2. Start the frontend

In a second terminal:

cd ealg-react-frontend
npm install
npm start

The frontend is available at:

http://localhost:3100

Production build

Build the frontend first so its static output can be included by the backend build:

cd ealg-react-frontend
npm ci
npm run build
cd ..
mvn clean verify

Frontend output is generated in ealg-react-frontend/assets/. Build output is ignored by Git.

API overview

The backend uses the /tsp context path. Important routes include:

MethodRouteDescription
GET/tsp/api/tspInstances/metaList metadata for bundled TSP instances
GET/tsp/api/tspInstances/geo/metaList geographical TSP instances
GET/tsp/api/tspInstance?tspName=berlin52Parse and return one TSP instance
GET/tsp/api/tourInstancesReturn bundled known tours
GET/tsp/api/possibleAlgorithmsList registered algorithms
GET/tsp/api/possibleAlgorithms/{algorithm}/tspInstance/{instance}Solve an instance using the selected algorithm

Swagger UI is normally available at:

http://localhost:8080/tsp/swagger-ui/index.html

Validation

Frontend:

cd ealg-react-frontend
npm run typecheck
npm run build

Backend and parser library:

mvn clean verify

Contributors

This was a collaborative course project by:

  • Serkay Celik
  • Nour Ahmad
  • Ahmet Kislali

See CONTRIBUTORS.md for project roles and contribution notes.

Data and third-party material

The repository contains TSPLIB benchmark instances and generated API client code. The project team does not claim ownership of third-party benchmark data or libraries. See THIRD_PARTY_NOTICES.md.

Course slides, papers, presentation exports, dependency folders, and generated build artifacts have intentionally been excluded from this public portfolio package.

License

No open-source license is granted for the project-specific source code. The repository is shared as academic and portfolio work. Third-party components remain subject to their respective licenses and terms.

About

A full-stack algorithm visualization platform developed as a university team project to compare multiple approaches to the Traveling Salesman Problem, including exact, heuristic, approximation, and LLM-generated solutions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

TSP Algorithm Lab

A full-stack educational laboratory for exploring and comparing algorithms for the Travelling Salesperson Problem (TSP).

The project combines a Spring Boot REST backend, a React and TypeScript visualization frontend, and a custom TSPLIB parser. It was developed as a team project for the Efficient Algorithms module at Hochschule Bremen.

Highlights

  • Browse and parse TSPLIB benchmark instances and known tours
  • Visualize Euclidean instances as interactive graphs
  • Explore geographical instances with Leaflet maps and route overlays
  • Run multiple exact, approximate, heuristic, and metaheuristic algorithms
  • Compare several Simulated Annealing implementations in an LLM Battle view
  • Inspect runtime, tour length, path validity, and implementation characteristics
  • Use a project-specific TSPLIB parser instead of relying only on an external parser library

Implemented algorithms

AlgorithmCategoryPurpose
Nearest NeighborGreedy heuristicFast construction of a valid tour
Dynamic ProgrammingExact algorithmOptimal solution for small instances; limited to 26 nodes
ChristofidesApproximation algorithmStructured approximation for metric TSP instances
Simulated AnnealingMetaheuristicStochastic search with controlled acceptance of worse solutions
Dantzig–Fulkerson–Johnson ILPInteger linear programmingIterative subtour elimination using the project's own simplex/ILP components
Claude SA variantLLM comparisonAlternative Simulated Annealing implementation
Gemma SA variantLLM comparisonAlternative Simulated Annealing implementation
Qwen3-Coder-Next SA variantLLM comparisonAlternative Simulated Annealing implementation

The LLM-generated variants are included for comparative and educational purposes. They are evaluated using the same project data structures and common parameters.

Architecture

flowchart LR
UI[React + TypeScript frontend] -->|REST / JSON| API[Spring Boot API]
API --> ALG[Algorithm implementations]
API --> ADAPTER[TSPLIB adapter]
ADAPTER --> PARSER[Custom TSPLIB parser]
PARSER --> DATA[TSPLIB benchmark files]
ALG --> UI
Loading

Modules

tsp-algorithm-lab/
├── ealg-application/ # Spring Boot API and TSP algorithms
├── ealg-own-tsp-lib/ # Custom TSPLIB parser and data model
├── ealg-react-frontend/ # React, TypeScript, graph and map visualizations
├── docs/ # Architecture and algorithm documentation
├── .github/workflows/ # Continuous integration
├── CONTRIBUTORS.md
├── THIRD_PARTY_NOTICES.md
└── pom.xml # Multi-module Maven parent

More detail is available in:

Technology stack

AreaTechnology
BackendJava 17, Spring Boot 2.7, Spring Web
API documentationOpenAPI / Swagger UI
FrontendReact 18, TypeScript, Webpack
UI componentsRSuite
Graph visualizationCytoscape and Graphology-based components
MapsLeaflet and React Leaflet
Build toolsMaven and npm
Benchmark formatTSPLIB
CIGitHub Actions

Prerequisites

  • Java 17 or newer
  • Maven 3.9 or newer
  • Node.js 18 or newer
  • npm 9 or newer

The repository does not include generated dependency folders or build output. Run the installation commands after cloning.

Running locally

1. Start the backend

Install the Maven modules once from the repository root:

mvn install -DskipTests -Dskip.frontend.assets=true

Then start the application module:

mvn -f ealg-application/pom.xml -Dskip.frontend.assets=true spring-boot:run

The backend is available at:

http://localhost:8080/tsp

2. Start the frontend

In a second terminal:

cd ealg-react-frontend
npm install
npm start

The frontend is available at:

http://localhost:3100

Production build

Build the frontend first so its static output can be included by the backend build:

cd ealg-react-frontend
npm ci
npm run build
cd ..
mvn clean verify

Frontend output is generated in ealg-react-frontend/assets/. Build output is ignored by Git.

API overview

The backend uses the /tsp context path. Important routes include:

MethodRouteDescription
GET/tsp/api/tspInstances/metaList metadata for bundled TSP instances
GET/tsp/api/tspInstances/geo/metaList geographical TSP instances
GET/tsp/api/tspInstance?tspName=berlin52Parse and return one TSP instance
GET/tsp/api/tourInstancesReturn bundled known tours
GET/tsp/api/possibleAlgorithmsList registered algorithms
GET/tsp/api/possibleAlgorithms/{algorithm}/tspInstance/{instance}Solve an instance using the selected algorithm

Swagger UI is normally available at:

http://localhost:8080/tsp/swagger-ui/index.html

Validation

Frontend:

cd ealg-react-frontend
npm run typecheck
npm run build

Backend and parser library:

mvn clean verify

Contributors

This was a collaborative course project by:

  • Serkay Celik
  • Nour Ahmad
  • Ahmet Kislali

See CONTRIBUTORS.md for project roles and contribution notes.

Data and third-party material

The repository contains TSPLIB benchmark instances and generated API client code. The project team does not claim ownership of third-party benchmark data or libraries. See THIRD_PARTY_NOTICES.md.

Course slides, papers, presentation exports, dependency folders, and generated build artifacts have intentionally been excluded from this public portfolio package.

License

No open-source license is granted for the project-specific source code. The repository is shared as academic and portfolio work. Third-party components remain subject to their respective licenses and terms.

About

A full-stack algorithm visualization platform developed as a university team project to compare multiple approaches to the Traveling Salesman Problem, including exact, heuristic, approximation, and LLM-generated solutions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TSP Algorithm Lab

A full-stack educational laboratory for exploring and comparing algorithms for the Travelling Salesperson Problem (TSP).

The project combines a Spring Boot REST backend, a React and TypeScript visualization frontend, and a custom TSPLIB parser. It was developed as a team project for the Efficient Algorithms module at Hochschule Bremen.

Highlights

  • Browse and parse TSPLIB benchmark instances and known tours
  • Visualize Euclidean instances as interactive graphs
  • Explore geographical instances with Leaflet maps and route overlays
  • Run multiple exact, approximate, heuristic, and metaheuristic algorithms
  • Compare several Simulated Annealing implementations in an LLM Battle view
  • Inspect runtime, tour length, path validity, and implementation characteristics
  • Use a project-specific TSPLIB parser instead of relying only on an external parser library

Implemented algorithms

AlgorithmCategoryPurpose
Nearest NeighborGreedy heuristicFast construction of a valid tour
Dynamic ProgrammingExact algorithmOptimal solution for small instances; limited to 26 nodes
ChristofidesApproximation algorithmStructured approximation for metric TSP instances
Simulated AnnealingMetaheuristicStochastic search with controlled acceptance of worse solutions
Dantzig–Fulkerson–Johnson ILPInteger linear programmingIterative subtour elimination using the project's own simplex/ILP components
Claude SA variantLLM comparisonAlternative Simulated Annealing implementation
Gemma SA variantLLM comparisonAlternative Simulated Annealing implementation
Qwen3-Coder-Next SA variantLLM comparisonAlternative Simulated Annealing implementation

The LLM-generated variants are included for comparative and educational purposes. They are evaluated using the same project data structures and common parameters.

Architecture

flowchart LR
UI[React + TypeScript frontend] -->|REST / JSON| API[Spring Boot API]
API --> ALG[Algorithm implementations]
API --> ADAPTER[TSPLIB adapter]
ADAPTER --> PARSER[Custom TSPLIB parser]
PARSER --> DATA[TSPLIB benchmark files]
ALG --> UI
Loading

Modules

tsp-algorithm-lab/
├── ealg-application/ # Spring Boot API and TSP algorithms
├── ealg-own-tsp-lib/ # Custom TSPLIB parser and data model
├── ealg-react-frontend/ # React, TypeScript, graph and map visualizations
├── docs/ # Architecture and algorithm documentation
├── .github/workflows/ # Continuous integration
├── CONTRIBUTORS.md
├── THIRD_PARTY_NOTICES.md
└── pom.xml # Multi-module Maven parent

More detail is available in:

Technology stack

AreaTechnology
BackendJava 17, Spring Boot 2.7, Spring Web
API documentationOpenAPI / Swagger UI
FrontendReact 18, TypeScript, Webpack
UI componentsRSuite
Graph visualizationCytoscape and Graphology-based components
MapsLeaflet and React Leaflet
Build toolsMaven and npm
Benchmark formatTSPLIB
CIGitHub Actions

Prerequisites

  • Java 17 or newer
  • Maven 3.9 or newer
  • Node.js 18 or newer
  • npm 9 or newer

The repository does not include generated dependency folders or build output. Run the installation commands after cloning.

Running locally

1. Start the backend

Install the Maven modules once from the repository root:

mvn install -DskipTests -Dskip.frontend.assets=true

Then start the application module:

mvn -f ealg-application/pom.xml -Dskip.frontend.assets=true spring-boot:run

The backend is available at:

http://localhost:8080/tsp

2. Start the frontend

In a second terminal:

cd ealg-react-frontend
npm install
npm start

The frontend is available at:

http://localhost:3100

Production build

Build the frontend first so its static output can be included by the backend build:

cd ealg-react-frontend
npm ci
npm run build
cd ..
mvn clean verify

Frontend output is generated in ealg-react-frontend/assets/. Build output is ignored by Git.

API overview

The backend uses the /tsp context path. Important routes include:

MethodRouteDescription
GET/tsp/api/tspInstances/metaList metadata for bundled TSP instances
GET/tsp/api/tspInstances/geo/metaList geographical TSP instances
GET/tsp/api/tspInstance?tspName=berlin52Parse and return one TSP instance
GET/tsp/api/tourInstancesReturn bundled known tours
GET/tsp/api/possibleAlgorithmsList registered algorithms
GET/tsp/api/possibleAlgorithms/{algorithm}/tspInstance/{instance}Solve an instance using the selected algorithm

Swagger UI is normally available at:

http://localhost:8080/tsp/swagger-ui/index.html

Validation

Frontend:

cd ealg-react-frontend
npm run typecheck
npm run build

Backend and parser library:

mvn clean verify

Contributors

This was a collaborative course project by:

  • Serkay Celik
  • Nour Ahmad
  • Ahmet Kislali

See CONTRIBUTORS.md for project roles and contribution notes.

Data and third-party material

The repository contains TSPLIB benchmark instances and generated API client code. The project team does not claim ownership of third-party benchmark data or libraries. See THIRD_PARTY_NOTICES.md.

Course slides, papers, presentation exports, dependency folders, and generated build artifacts have intentionally been excluded from this public portfolio package.

License

No open-source license is granted for the project-specific source code. The repository is shared as academic and portfolio work. Third-party components remain subject to their respective licenses and terms.

About

A full-stack algorithm visualization platform developed as a university team project to compare multiple approaches to the Traveling Salesman Problem, including exact, heuristic, approximation, and LLM-generated solutions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TSP Algorithm Lab

A full-stack educational laboratory for exploring and comparing algorithms for the Travelling Salesperson Problem (TSP).

The project combines a Spring Boot REST backend, a React and TypeScript visualization frontend, and a custom TSPLIB parser. It was developed as a team project for the Efficient Algorithms module at Hochschule Bremen.

Highlights

  • Browse and parse TSPLIB benchmark instances and known tours
  • Visualize Euclidean instances as interactive graphs
  • Explore geographical instances with Leaflet maps and route overlays
  • Run multiple exact, approximate, heuristic, and metaheuristic algorithms
  • Compare several Simulated Annealing implementations in an LLM Battle view
  • Inspect runtime, tour length, path validity, and implementation characteristics
  • Use a project-specific TSPLIB parser instead of relying only on an external parser library

Implemented algorithms

AlgorithmCategoryPurpose
Nearest NeighborGreedy heuristicFast construction of a valid tour
Dynamic ProgrammingExact algorithmOptimal solution for small instances; limited to 26 nodes
ChristofidesApproximation algorithmStructured approximation for metric TSP instances
Simulated AnnealingMetaheuristicStochastic search with controlled acceptance of worse solutions
Dantzig–Fulkerson–Johnson ILPInteger linear programmingIterative subtour elimination using the project's own simplex/ILP components
Claude SA variantLLM comparisonAlternative Simulated Annealing implementation
Gemma SA variantLLM comparisonAlternative Simulated Annealing implementation
Qwen3-Coder-Next SA variantLLM comparisonAlternative Simulated Annealing implementation

The LLM-generated variants are included for comparative and educational purposes. They are evaluated using the same project data structures and common parameters.

Architecture

flowchart LR
UI[React + TypeScript frontend] -->|REST / JSON| API[Spring Boot API]
API --> ALG[Algorithm implementations]
API --> ADAPTER[TSPLIB adapter]
ADAPTER --> PARSER[Custom TSPLIB parser]
PARSER --> DATA[TSPLIB benchmark files]
ALG --> UI
Loading

Modules

tsp-algorithm-lab/
├── ealg-application/ # Spring Boot API and TSP algorithms
├── ealg-own-tsp-lib/ # Custom TSPLIB parser and data model
├── ealg-react-frontend/ # React, TypeScript, graph and map visualizations
├── docs/ # Architecture and algorithm documentation
├── .github/workflows/ # Continuous integration
├── CONTRIBUTORS.md
├── THIRD_PARTY_NOTICES.md
└── pom.xml # Multi-module Maven parent

More detail is available in:

Technology stack

AreaTechnology
BackendJava 17, Spring Boot 2.7, Spring Web
API documentationOpenAPI / Swagger UI
FrontendReact 18, TypeScript, Webpack
UI componentsRSuite
Graph visualizationCytoscape and Graphology-based components
MapsLeaflet and React Leaflet
Build toolsMaven and npm
Benchmark formatTSPLIB
CIGitHub Actions

Prerequisites

  • Java 17 or newer
  • Maven 3.9 or newer
  • Node.js 18 or newer
  • npm 9 or newer

The repository does not include generated dependency folders or build output. Run the installation commands after cloning.

Running locally

1. Start the backend

Install the Maven modules once from the repository root:

mvn install -DskipTests -Dskip.frontend.assets=true

Then start the application module:

mvn -f ealg-application/pom.xml -Dskip.frontend.assets=true spring-boot:run

The backend is available at:

http://localhost:8080/tsp

2. Start the frontend

In a second terminal:

cd ealg-react-frontend
npm install
npm start

The frontend is available at:

http://localhost:3100

Production build

Build the frontend first so its static output can be included by the backend build:

cd ealg-react-frontend
npm ci
npm run build
cd ..
mvn clean verify

Frontend output is generated in ealg-react-frontend/assets/. Build output is ignored by Git.

API overview

The backend uses the /tsp context path. Important routes include:

MethodRouteDescription
GET/tsp/api/tspInstances/metaList metadata for bundled TSP instances
GET/tsp/api/tspInstances/geo/metaList geographical TSP instances
GET/tsp/api/tspInstance?tspName=berlin52Parse and return one TSP instance
GET/tsp/api/tourInstancesReturn bundled known tours
GET/tsp/api/possibleAlgorithmsList registered algorithms
GET/tsp/api/possibleAlgorithms/{algorithm}/tspInstance/{instance}Solve an instance using the selected algorithm

Swagger UI is normally available at:

http://localhost:8080/tsp/swagger-ui/index.html

Validation

Frontend:

cd ealg-react-frontend
npm run typecheck
npm run build

Backend and parser library:

mvn clean verify

Contributors

This was a collaborative course project by:

  • Serkay Celik
  • Nour Ahmad
  • Ahmet Kislali

See CONTRIBUTORS.md for project roles and contribution notes.

Data and third-party material

The repository contains TSPLIB benchmark instances and generated API client code. The project team does not claim ownership of third-party benchmark data or libraries. See THIRD_PARTY_NOTICES.md.

Course slides, papers, presentation exports, dependency folders, and generated build artifacts have intentionally been excluded from this public portfolio package.

License

No open-source license is granted for the project-specific source code. The repository is shared as academic and portfolio work. Third-party components remain subject to their respective licenses and terms.

About

A full-stack algorithm visualization platform developed as a university team project to compare multiple approaches to the Traveling Salesman Problem, including exact, heuristic, approximation, and LLM-generated solutions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

TSP Algorithm Lab

A full-stack educational laboratory for exploring and comparing algorithms for the Travelling Salesperson Problem (TSP).

The project combines a Spring Boot REST backend, a React and TypeScript visualization frontend, and a custom TSPLIB parser. It was developed as a team project for the Efficient Algorithms module at Hochschule Bremen.

Highlights

  • Browse and parse TSPLIB benchmark instances and known tours
  • Visualize Euclidean instances as interactive graphs
  • Explore geographical instances with Leaflet maps and route overlays
  • Run multiple exact, approximate, heuristic, and metaheuristic algorithms
  • Compare several Simulated Annealing implementations in an LLM Battle view
  • Inspect runtime, tour length, path validity, and implementation characteristics
  • Use a project-specific TSPLIB parser instead of relying only on an external parser library

Implemented algorithms

AlgorithmCategoryPurpose
Nearest NeighborGreedy heuristicFast construction of a valid tour
Dynamic ProgrammingExact algorithmOptimal solution for small instances; limited to 26 nodes
ChristofidesApproximation algorithmStructured approximation for metric TSP instances
Simulated AnnealingMetaheuristicStochastic search with controlled acceptance of worse solutions
Dantzig–Fulkerson–Johnson ILPInteger linear programmingIterative subtour elimination using the project's own simplex/ILP components
Claude SA variantLLM comparisonAlternative Simulated Annealing implementation
Gemma SA variantLLM comparisonAlternative Simulated Annealing implementation
Qwen3-Coder-Next SA variantLLM comparisonAlternative Simulated Annealing implementation

The LLM-generated variants are included for comparative and educational purposes. They are evaluated using the same project data structures and common parameters.

Architecture

flowchart LR
UI[React + TypeScript frontend] -->|REST / JSON| API[Spring Boot API]
API --> ALG[Algorithm implementations]
API --> ADAPTER[TSPLIB adapter]
ADAPTER --> PARSER[Custom TSPLIB parser]
PARSER --> DATA[TSPLIB benchmark files]
ALG --> UI
Loading

Modules

tsp-algorithm-lab/
├── ealg-application/ # Spring Boot API and TSP algorithms
├── ealg-own-tsp-lib/ # Custom TSPLIB parser and data model
├── ealg-react-frontend/ # React, TypeScript, graph and map visualizations
├── docs/ # Architecture and algorithm documentation
├── .github/workflows/ # Continuous integration
├── CONTRIBUTORS.md
├── THIRD_PARTY_NOTICES.md
└── pom.xml # Multi-module Maven parent

More detail is available in:

Technology stack

AreaTechnology
BackendJava 17, Spring Boot 2.7, Spring Web
API documentationOpenAPI / Swagger UI
FrontendReact 18, TypeScript, Webpack
UI componentsRSuite
Graph visualizationCytoscape and Graphology-based components
MapsLeaflet and React Leaflet
Build toolsMaven and npm
Benchmark formatTSPLIB
CIGitHub Actions

Prerequisites

  • Java 17 or newer
  • Maven 3.9 or newer
  • Node.js 18 or newer
  • npm 9 or newer

The repository does not include generated dependency folders or build output. Run the installation commands after cloning.

Running locally

1. Start the backend

Install the Maven modules once from the repository root:

mvn install -DskipTests -Dskip.frontend.assets=true

Then start the application module:

mvn -f ealg-application/pom.xml -Dskip.frontend.assets=true spring-boot:run

The backend is available at:

http://localhost:8080/tsp

2. Start the frontend

In a second terminal:

cd ealg-react-frontend
npm install
npm start

The frontend is available at:

http://localhost:3100

Production build

Build the frontend first so its static output can be included by the backend build:

cd ealg-react-frontend
npm ci
npm run build
cd ..
mvn clean verify

Frontend output is generated in ealg-react-frontend/assets/. Build output is ignored by Git.

API overview

The backend uses the /tsp context path. Important routes include:

MethodRouteDescription
GET/tsp/api/tspInstances/metaList metadata for bundled TSP instances
GET/tsp/api/tspInstances/geo/metaList geographical TSP instances
GET/tsp/api/tspInstance?tspName=berlin52Parse and return one TSP instance
GET/tsp/api/tourInstancesReturn bundled known tours
GET/tsp/api/possibleAlgorithmsList registered algorithms
GET/tsp/api/possibleAlgorithms/{algorithm}/tspInstance/{instance}Solve an instance using the selected algorithm

Swagger UI is normally available at:

http://localhost:8080/tsp/swagger-ui/index.html

Validation

Frontend:

cd ealg-react-frontend
npm run typecheck
npm run build

Backend and parser library:

mvn clean verify

Contributors

This was a collaborative course project by:

  • Serkay Celik
  • Nour Ahmad
  • Ahmet Kislali

See CONTRIBUTORS.md for project roles and contribution notes.

Data and third-party material

The repository contains TSPLIB benchmark instances and generated API client code. The project team does not claim ownership of third-party benchmark data or libraries. See THIRD_PARTY_NOTICES.md.

Course slides, papers, presentation exports, dependency folders, and generated build artifacts have intentionally been excluded from this public portfolio package.

License

No open-source license is granted for the project-specific source code. The repository is shared as academic and portfolio work. Third-party components remain subject to their respective licenses and terms.

About

A full-stack algorithm visualization platform developed as a university team project to compare multiple approaches to the Traveling Salesman Problem, including exact, heuristic, approximation, and LLM-generated solutions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TSP Algorithm Lab

A full-stack educational laboratory for exploring and comparing algorithms for the Travelling Salesperson Problem (TSP).

The project combines a Spring Boot REST backend, a React and TypeScript visualization frontend, and a custom TSPLIB parser. It was developed as a team project for the Efficient Algorithms module at Hochschule Bremen.

Highlights

  • Browse and parse TSPLIB benchmark instances and known tours
  • Visualize Euclidean instances as interactive graphs
  • Explore geographical instances with Leaflet maps and route overlays
  • Run multiple exact, approximate, heuristic, and metaheuristic algorithms
  • Compare several Simulated Annealing implementations in an LLM Battle view
  • Inspect runtime, tour length, path validity, and implementation characteristics
  • Use a project-specific TSPLIB parser instead of relying only on an external parser library

Implemented algorithms

AlgorithmCategoryPurpose
Nearest NeighborGreedy heuristicFast construction of a valid tour
Dynamic ProgrammingExact algorithmOptimal solution for small instances; limited to 26 nodes
ChristofidesApproximation algorithmStructured approximation for metric TSP instances
Simulated AnnealingMetaheuristicStochastic search with controlled acceptance of worse solutions
Dantzig–Fulkerson–Johnson ILPInteger linear programmingIterative subtour elimination using the project's own simplex/ILP components
Claude SA variantLLM comparisonAlternative Simulated Annealing implementation
Gemma SA variantLLM comparisonAlternative Simulated Annealing implementation
Qwen3-Coder-Next SA variantLLM comparisonAlternative Simulated Annealing implementation

The LLM-generated variants are included for comparative and educational purposes. They are evaluated using the same project data structures and common parameters.

Architecture

flowchart LR
UI[React + TypeScript frontend] -->|REST / JSON| API[Spring Boot API]
API --> ALG[Algorithm implementations]
API --> ADAPTER[TSPLIB adapter]
ADAPTER --> PARSER[Custom TSPLIB parser]
PARSER --> DATA[TSPLIB benchmark files]
ALG --> UI
Loading

Modules

tsp-algorithm-lab/
├── ealg-application/ # Spring Boot API and TSP algorithms
├── ealg-own-tsp-lib/ # Custom TSPLIB parser and data model
├── ealg-react-frontend/ # React, TypeScript, graph and map visualizations
├── docs/ # Architecture and algorithm documentation
├── .github/workflows/ # Continuous integration
├── CONTRIBUTORS.md
├── THIRD_PARTY_NOTICES.md
└── pom.xml # Multi-module Maven parent

More detail is available in:

Technology stack

AreaTechnology
BackendJava 17, Spring Boot 2.7, Spring Web
API documentationOpenAPI / Swagger UI
FrontendReact 18, TypeScript, Webpack
UI componentsRSuite
Graph visualizationCytoscape and Graphology-based components
MapsLeaflet and React Leaflet
Build toolsMaven and npm
Benchmark formatTSPLIB
CIGitHub Actions

Prerequisites

  • Java 17 or newer
  • Maven 3.9 or newer
  • Node.js 18 or newer
  • npm 9 or newer

The repository does not include generated dependency folders or build output. Run the installation commands after cloning.

Running locally

1. Start the backend

Install the Maven modules once from the repository root:

mvn install -DskipTests -Dskip.frontend.assets=true

Then start the application module:

mvn -f ealg-application/pom.xml -Dskip.frontend.assets=true spring-boot:run

The backend is available at:

http://localhost:8080/tsp

2. Start the frontend

In a second terminal:

cd ealg-react-frontend
npm install
npm start

The frontend is available at:

http://localhost:3100

Production build

Build the frontend first so its static output can be included by the backend build:

cd ealg-react-frontend
npm ci
npm run build
cd ..
mvn clean verify

Frontend output is generated in ealg-react-frontend/assets/. Build output is ignored by Git.

API overview

The backend uses the /tsp context path. Important routes include:

MethodRouteDescription
GET/tsp/api/tspInstances/metaList metadata for bundled TSP instances
GET/tsp/api/tspInstances/geo/metaList geographical TSP instances
GET/tsp/api/tspInstance?tspName=berlin52Parse and return one TSP instance
GET/tsp/api/tourInstancesReturn bundled known tours
GET/tsp/api/possibleAlgorithmsList registered algorithms
GET/tsp/api/possibleAlgorithms/{algorithm}/tspInstance/{instance}Solve an instance using the selected algorithm

Swagger UI is normally available at:

http://localhost:8080/tsp/swagger-ui/index.html

Validation

Frontend:

cd ealg-react-frontend
npm run typecheck
npm run build

Backend and parser library:

mvn clean verify

Contributors

This was a collaborative course project by:

  • Serkay Celik
  • Nour Ahmad
  • Ahmet Kislali

See CONTRIBUTORS.md for project roles and contribution notes.

Data and third-party material

The repository contains TSPLIB benchmark instances and generated API client code. The project team does not claim ownership of third-party benchmark data or libraries. See THIRD_PARTY_NOTICES.md.

Course slides, papers, presentation exports, dependency folders, and generated build artifacts have intentionally been excluded from this public portfolio package.

License

No open-source license is granted for the project-specific source code. The repository is shared as academic and portfolio work. Third-party components remain subject to their respective licenses and terms.

About

A full-stack algorithm visualization platform developed as a university team project to compare multiple approaches to the Traveling Salesman Problem, including exact, heuristic, approximation, and LLM-generated solutions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TSP Algorithm Lab

A full-stack educational laboratory for exploring and comparing algorithms for the Travelling Salesperson Problem (TSP).

The project combines a Spring Boot REST backend, a React and TypeScript visualization frontend, and a custom TSPLIB parser. It was developed as a team project for the Efficient Algorithms module at Hochschule Bremen.

Highlights

  • Browse and parse TSPLIB benchmark instances and known tours
  • Visualize Euclidean instances as interactive graphs
  • Explore geographical instances with Leaflet maps and route overlays
  • Run multiple exact, approximate, heuristic, and metaheuristic algorithms
  • Compare several Simulated Annealing implementations in an LLM Battle view
  • Inspect runtime, tour length, path validity, and implementation characteristics
  • Use a project-specific TSPLIB parser instead of relying only on an external parser library

Implemented algorithms

AlgorithmCategoryPurpose
Nearest NeighborGreedy heuristicFast construction of a valid tour
Dynamic ProgrammingExact algorithmOptimal solution for small instances; limited to 26 nodes
ChristofidesApproximation algorithmStructured approximation for metric TSP instances
Simulated AnnealingMetaheuristicStochastic search with controlled acceptance of worse solutions
Dantzig–Fulkerson–Johnson ILPInteger linear programmingIterative subtour elimination using the project's own simplex/ILP components
Claude SA variantLLM comparisonAlternative Simulated Annealing implementation
Gemma SA variantLLM comparisonAlternative Simulated Annealing implementation
Qwen3-Coder-Next SA variantLLM comparisonAlternative Simulated Annealing implementation

The LLM-generated variants are included for comparative and educational purposes. They are evaluated using the same project data structures and common parameters.

Architecture

flowchart LR
UI[React + TypeScript frontend] -->|REST / JSON| API[Spring Boot API]
API --> ALG[Algorithm implementations]
API --> ADAPTER[TSPLIB adapter]
ADAPTER --> PARSER[Custom TSPLIB parser]
PARSER --> DATA[TSPLIB benchmark files]
ALG --> UI
Loading

Modules

tsp-algorithm-lab/
├── ealg-application/ # Spring Boot API and TSP algorithms
├── ealg-own-tsp-lib/ # Custom TSPLIB parser and data model
├── ealg-react-frontend/ # React, TypeScript, graph and map visualizations
├── docs/ # Architecture and algorithm documentation
├── .github/workflows/ # Continuous integration
├── CONTRIBUTORS.md
├── THIRD_PARTY_NOTICES.md
└── pom.xml # Multi-module Maven parent

More detail is available in:

Technology stack

AreaTechnology
BackendJava 17, Spring Boot 2.7, Spring Web
API documentationOpenAPI / Swagger UI
FrontendReact 18, TypeScript, Webpack
UI componentsRSuite
Graph visualizationCytoscape and Graphology-based components
MapsLeaflet and React Leaflet
Build toolsMaven and npm
Benchmark formatTSPLIB
CIGitHub Actions

Prerequisites

  • Java 17 or newer
  • Maven 3.9 or newer
  • Node.js 18 or newer
  • npm 9 or newer

The repository does not include generated dependency folders or build output. Run the installation commands after cloning.

Running locally

1. Start the backend

Install the Maven modules once from the repository root:

mvn install -DskipTests -Dskip.frontend.assets=true

Then start the application module:

mvn -f ealg-application/pom.xml -Dskip.frontend.assets=true spring-boot:run

The backend is available at:

http://localhost:8080/tsp

2. Start the frontend

In a second terminal:

cd ealg-react-frontend
npm install
npm start

The frontend is available at:

http://localhost:3100

Production build

Build the frontend first so its static output can be included by the backend build:

cd ealg-react-frontend
npm ci
npm run build
cd ..
mvn clean verify

Frontend output is generated in ealg-react-frontend/assets/. Build output is ignored by Git.

API overview

The backend uses the /tsp context path. Important routes include:

MethodRouteDescription
GET/tsp/api/tspInstances/metaList metadata for bundled TSP instances
GET/tsp/api/tspInstances/geo/metaList geographical TSP instances
GET/tsp/api/tspInstance?tspName=berlin52Parse and return one TSP instance
GET/tsp/api/tourInstancesReturn bundled known tours
GET/tsp/api/possibleAlgorithmsList registered algorithms
GET/tsp/api/possibleAlgorithms/{algorithm}/tspInstance/{instance}Solve an instance using the selected algorithm

Swagger UI is normally available at:

http://localhost:8080/tsp/swagger-ui/index.html

Validation

Frontend:

cd ealg-react-frontend
npm run typecheck
npm run build

Backend and parser library:

mvn clean verify

Contributors

This was a collaborative course project by:

  • Serkay Celik
  • Nour Ahmad
  • Ahmet Kislali

See CONTRIBUTORS.md for project roles and contribution notes.

Data and third-party material

The repository contains TSPLIB benchmark instances and generated API client code. The project team does not claim ownership of third-party benchmark data or libraries. See THIRD_PARTY_NOTICES.md.

Course slides, papers, presentation exports, dependency folders, and generated build artifacts have intentionally been excluded from this public portfolio package.

License

No open-source license is granted for the project-specific source code. The repository is shared as academic and portfolio work. Third-party components remain subject to their respective licenses and terms.

About

A full-stack algorithm visualization platform developed as a university team project to compare multiple approaches to the Traveling Salesman Problem, including exact, heuristic, approximation, and LLM-generated solutions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

TSP Algorithm Lab

A full-stack educational laboratory for exploring and comparing algorithms for the Travelling Salesperson Problem (TSP).

The project combines a Spring Boot REST backend, a React and TypeScript visualization frontend, and a custom TSPLIB parser. It was developed as a team project for the Efficient Algorithms module at Hochschule Bremen.

Highlights

  • Browse and parse TSPLIB benchmark instances and known tours
  • Visualize Euclidean instances as interactive graphs
  • Explore geographical instances with Leaflet maps and route overlays
  • Run multiple exact, approximate, heuristic, and metaheuristic algorithms
  • Compare several Simulated Annealing implementations in an LLM Battle view
  • Inspect runtime, tour length, path validity, and implementation characteristics
  • Use a project-specific TSPLIB parser instead of relying only on an external parser library

Implemented algorithms

AlgorithmCategoryPurpose
Nearest NeighborGreedy heuristicFast construction of a valid tour
Dynamic ProgrammingExact algorithmOptimal solution for small instances; limited to 26 nodes
ChristofidesApproximation algorithmStructured approximation for metric TSP instances
Simulated AnnealingMetaheuristicStochastic search with controlled acceptance of worse solutions
Dantzig–Fulkerson–Johnson ILPInteger linear programmingIterative subtour elimination using the project's own simplex/ILP components
Claude SA variantLLM comparisonAlternative Simulated Annealing implementation
Gemma SA variantLLM comparisonAlternative Simulated Annealing implementation
Qwen3-Coder-Next SA variantLLM comparisonAlternative Simulated Annealing implementation

The LLM-generated variants are included for comparative and educational purposes. They are evaluated using the same project data structures and common parameters.

Architecture

flowchart LR
UI[React + TypeScript frontend] -->|REST / JSON| API[Spring Boot API]
API --> ALG[Algorithm implementations]
API --> ADAPTER[TSPLIB adapter]
ADAPTER --> PARSER[Custom TSPLIB parser]
PARSER --> DATA[TSPLIB benchmark files]
ALG --> UI
Loading

Modules

tsp-algorithm-lab/
├── ealg-application/ # Spring Boot API and TSP algorithms
├── ealg-own-tsp-lib/ # Custom TSPLIB parser and data model
├── ealg-react-frontend/ # React, TypeScript, graph and map visualizations
├── docs/ # Architecture and algorithm documentation
├── .github/workflows/ # Continuous integration
├── CONTRIBUTORS.md
├── THIRD_PARTY_NOTICES.md
└── pom.xml # Multi-module Maven parent

More detail is available in:

Technology stack

AreaTechnology
BackendJava 17, Spring Boot 2.7, Spring Web
API documentationOpenAPI / Swagger UI
FrontendReact 18, TypeScript, Webpack
UI componentsRSuite
Graph visualizationCytoscape and Graphology-based components
MapsLeaflet and React Leaflet
Build toolsMaven and npm
Benchmark formatTSPLIB
CIGitHub Actions

Prerequisites

  • Java 17 or newer
  • Maven 3.9 or newer
  • Node.js 18 or newer
  • npm 9 or newer

The repository does not include generated dependency folders or build output. Run the installation commands after cloning.

Running locally

1. Start the backend

Install the Maven modules once from the repository root:

mvn install -DskipTests -Dskip.frontend.assets=true

Then start the application module:

mvn -f ealg-application/pom.xml -Dskip.frontend.assets=true spring-boot:run

The backend is available at:

http://localhost:8080/tsp

2. Start the frontend

In a second terminal:

cd ealg-react-frontend
npm install
npm start

The frontend is available at:

http://localhost:3100

Production build

Build the frontend first so its static output can be included by the backend build:

cd ealg-react-frontend
npm ci
npm run build
cd ..
mvn clean verify

Frontend output is generated in ealg-react-frontend/assets/. Build output is ignored by Git.

API overview

The backend uses the /tsp context path. Important routes include:

MethodRouteDescription
GET/tsp/api/tspInstances/metaList metadata for bundled TSP instances
GET/tsp/api/tspInstances/geo/metaList geographical TSP instances
GET/tsp/api/tspInstance?tspName=berlin52Parse and return one TSP instance
GET/tsp/api/tourInstancesReturn bundled known tours
GET/tsp/api/possibleAlgorithmsList registered algorithms
GET/tsp/api/possibleAlgorithms/{algorithm}/tspInstance/{instance}Solve an instance using the selected algorithm

Swagger UI is normally available at:

http://localhost:8080/tsp/swagger-ui/index.html

Validation

Frontend:

cd ealg-react-frontend
npm run typecheck
npm run build

Backend and parser library:

mvn clean verify

Contributors

This was a collaborative course project by:

  • Serkay Celik
  • Nour Ahmad
  • Ahmet Kislali

See CONTRIBUTORS.md for project roles and contribution notes.

Data and third-party material

The repository contains TSPLIB benchmark instances and generated API client code. The project team does not claim ownership of third-party benchmark data or libraries. See THIRD_PARTY_NOTICES.md.

Course slides, papers, presentation exports, dependency folders, and generated build artifacts have intentionally been excluded from this public portfolio package.

License

No open-source license is granted for the project-specific source code. The repository is shared as academic and portfolio work. Third-party components remain subject to their respective licenses and terms.

About

A full-stack algorithm visualization platform developed as a university team project to compare multiple approaches to the Traveling Salesman Problem, including exact, heuristic, approximation, and LLM-generated solutions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages