Sign inSign up

dnaevolutions/jopt_touroptimizer

By dnaevolutions

•Updated 6 months ago

JOpt.TourOptimizer - Route optimization, scheduling & resource planning (reactive REST service)

Image
Integration & delivery
API management
Machine learning & AI
0

10K+

dnaevolutions/jopt_touroptimizer repository overview

DNA Evolutions Logo

⁠JOpt.TourOptimizer REST Server

Route optimization, scheduling, and resource planning as a reactive REST service.

Documentation⁠ · Server Guide⁠ · REST Clients⁠ · AI Assistant⁠ · Live Demo⁠ · Contact⁠

Docker Pulls Website LinkedIn


⁠What is this?

JOpt.TourOptimizer is a backend optimization engine for vehicle routing, field service scheduling, and resource planning. This repository provides the containerized REST server: a reactive Spring WebFlux application that exposes the full optimizer via REST endpoints with an OpenAPI 3 contract (Swagger UI).

You send a JSON optimization request. The server returns an optimized plan with routes, schedules, cost breakdowns, and violation details.

This is a pre-built Docker image. You do not need to compile anything. Pull the image, start the container, and call the API.


⁠Quick start

docker run -d --rm --name jopt-touroptimizer \
  -p 8081:8081 \
  -e SPRING_PROFILES_ACTIVE=cors \
  dnaevolutions/jopt_touroptimizer:latest

Swagger UI: http://localhost:8081/swagger-ui/index.html⁠
OpenAPI JSON: http://localhost:8081/v3/api-docs⁠

That is all you need to start evaluating. Paste a JSON payload into the Swagger UI and run an optimization.

Free mode: Up to 20 elements (nodes + resources) without a license. Extended evaluation (37 elements) with a free sign-up⁠.

For full deployment documentation (including database mode, Kubernetes, Terraform, and platform-specific guides), see the Server Guide⁠.


⁠Full start (with database for fire-and-forget mode)

For asynchronous job submission, persistence, and webhook-based result delivery:

# Create a network
docker network create mongonetwork

# Start MongoDB
docker run -d --name dnamongo --network mongonetwork \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=dnauser \
  -e MONGO_INITDB_ROOT_PASSWORD=dnapwd \
  mongo:latest

# Start TourOptimizer with all features
docker run --rm --name jopt-touroptimizer \
  --network mongonetwork \
  -p 8081:8081 \
  -e SPRING_PROFILES_ACTIVE=cors \
  -e DNA_DATABASE_ACTIVE=true \
  -e DNA_DATABASE_URI="mongodb://dnauser:dnapwd@dnamongo:27017/admin" \
  -e DNA_DATABASE_DB=touroptimizer \
  -e DNA_SHOW_SYNCH_CONTROLLERS=true \
  -e DNA_DATABASE_FREE_SEARCH_ENABLED=true \
  -e DNA_DATABASE_JOB_IMPORT_ENABLED=true \
  -e DNA_WEBHOOK_VALIDATION=relaxed \
  dnaevolutions/jopt_touroptimizer:latest

For details on fire-and-forget mode, see the FAF documentation⁠.


⁠Architecture

PropertyValue
RuntimeJava 17, Spring Boot 3.4.x
HTTP stackSpring WebFlux (reactive, non-blocking)
APIREST + OpenAPI 3.0 (Swagger UI) + SSE streaming
StateStateless core. Optional MongoDB for async jobs.
ScalingHorizontal. No sticky sessions. No shared in-memory state.
Compute profileCPU-bound optimization, memory-intensive problem graphs
ImagePre-built. No build tooling required.

The server exposes synchronous endpoints (request, wait, result) and asynchronous fire-and-forget endpoints (submit job, poll or receive webhook). Progress streaming is available via Server-Sent Events.


⁠REST client libraries

OpenAPI-generated client libraries are available for multiple languages:

All clients connect to this server. For client setup instructions, see the REST Client documentation⁠.

Docker networking note: If your client runs inside a container and the server runs on the host, use http://host.docker.internal:8081 instead of http://localhost:8081.


⁠Docker sandboxes (browser-based evaluation)

If you want to explore JOpt in a browser IDE without any local toolchain, Docker sandboxes are available:

SandboxImagePortPassword
Java SDK Examplesdnaevolutions/jopt_example_server:latest8042jopt
Java REST Clientdnaevolutions/jopt_rest_example_server:latest8043joptrest
Python REST Clientdnaevolutions/jopt_py_example_server:latest8033jopt
C# REST Clientdnaevolutions/jopt_net_example_server:latest8023joptrest

Example:

docker run -it -d --name jopt-examples \
  -p 127.0.0.1:8042:8080 \
  dnaevolutions/jopt_example_server:latest

Open http://localhost:8042⁠ in your browser. For details, see the Sandboxes documentation⁠.


⁠Key features

JOpt.TourOptimizer supports a comprehensive set of routing and scheduling features. For the full list with documentation links, see the Feature List⁠ and Special Features⁠.

Highlights:

  • Pillar Nodes: guaranteed SLA matching by architecture, not by penalty costs
  • AutoFilter: multi-solution infeasibility management with transparent exclusion reporting
  • Manufacturing Planning: dynamic production quantities as optimizer-controlled planning variables
  • ZoneCodes: per-shift territory switching with multi-zone node membership
  • Zone Crossing Penalization: asymmetric directional costs for bridge/tunnel/toll boundaries
  • Pickup and Delivery: SimpleLoads, FlexLoads, TimedLoads, split delivery optimization
  • Overnight Stay: multi-day routing with policy thresholds and recovery rules
  • FlexTime: flexible shift starts (positive and negative) with labor policy controls
  • Open Assessor: custom business rules injected via a stable, minimal interface
  • Reactive Events: 9 typed RxJava 3 event streams, native Spring WebFlux integration

⁠Deployment guides

For production deployment on different platforms:


⁠Licensing

ModeLimitRequirement
Free20 elementsNone
Evaluation37 elementsFree sign-up⁠
ProductionUnlimitedLicense key (contact us⁠)

License documentation: License feature guide⁠


⁠Further resources


⁠Agreement

For license agreements and further information about license plans, please visit www.dna-evolutions.com⁠.


DNA Evolutions GmbH
Website⁠ · [email protected]⁠ · LinkedIn⁠ · GitHub⁠

Tag summary

Content type

Image

Digest

sha256:9de1308ce…

Size

191.9 MB

Last updated

6 months ago

docker pull dnaevolutions/jopt_touroptimizer