<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/los-movimientos-part-ii-solving-large-pickup-and-delivery-problems-with-adaptive-large-neighborhoo-miinonmi4" -->

---
title: Los Movimientos, Part II: Solving Large...
description: A hands-on Python implementation of Adaptive Large Neighborhood Search (ALNS) applied to a real-world pickup-and-delivery vehicle routing problem with time...
canonical: https://daily.dev/posts/los-movimientos-part-ii-solving-large-pickup-and-delivery-problems-with-adaptive-large-neighborhoo-miinonmi4
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Los Movimientos, Part II: Solving Large Pickup-and-Delivery Problems with Adaptive Large Neighborhood Search | daily.dev
og:description: A hands-on Python implementation of Adaptive Large Neighborhood Search (ALNS) applied to a real-world pickup-and-delivery vehicle routing problem with time...
og:url: https://daily.dev/posts/los-movimientos-part-ii-solving-large-pickup-and-delivery-problems-with-adaptive-large-neighborhoo-miinonmi4
og:image: https://api.daily.dev/og/posts/MIinOnmi4.png
og:image:alt: Los Movimientos, Part II: Solving Large Pickup-and-Delivery Problems with Adaptive Large Neighborhood Search
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Los Movimientos, Part II: Solving Large Pickup-and-Delivery Problems with Adaptive Large Neighborhood Search

**[Towards Data Science](https://daily.dev/sources/tds)** · 31 min read · 0 upvotes · 0 comments

## Summary

A hands-on Python implementation of Adaptive Large Neighborhood Search (ALNS) applied to a real-world pickup-and-delivery vehicle routing problem with time windows, capacity constraints, and mandatory driver rest breaks. The post explains why exact MILP solvers become impractical at scale, then walks through building the full ALNS solution: three destroy operators (random, worst, related removal), two repair operators (greedy and regret-2 insertion), simulated annealing acceptance, and roulette-wheel operator selection. Using the open-source `alns` Python library, the algorithm reduces the initial objective value by nearly 10x across 5,000 iterations, serving all 24 transportation requests across 6 vehicles while respecting all operational constraints including mandatory roadside breaks for long journeys.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://towardsdatascience.com/los-movimientos-part-ii-solving-large-pickup-and-delivery-problems-with-adaptive-large-neighborhood-search>

## Similar posts on daily.dev

- [“Los Movimientos”: The Routing Problem That Nearly Broke My Spirit](https://daily.dev/posts/los-movimientos-the-routing-problem-that-nearly-broke-my-spirit-dfklfbtvt) · Towards Data Science · 0 upvotes · 0 comments
- [A Generalizable MARL-LP Approach for Scheduling in Logistics](https://daily.dev/posts/a-generalizable-marl-lp-approach-for-scheduling-in-logistics-w2pysyaww) · Towards Data Science · 1 upvotes · 0 comments
- [Surviving High Uncertainty in Logistics with MARL](https://daily.dev/posts/surviving-high-uncertainty-in-logistics-with-marl-ny3hjc1wf) · Towards Data Science · 0 upvotes · 0 comments
- [Supercharging DoorDash logistics through causal ML and joint optimization](https://daily.dev/posts/supercharging-doordash-logistics-through-causal-ml-and-joint-optimization-dayt4yydi) · Doordash · 1 upvotes · 0 comments

---

Tags: [#python](https://daily.dev/tags/python)

[View this post on daily.dev](https://daily.dev/posts/los-movimientos-part-ii-solving-large-pickup-and-delivery-problems-with-adaptive-large-neighborhoo-miinonmi4)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Los Movimientos, Part II: Solving Large Pickup-and-Delivery Problems with Adaptive Large Neighborhood Search","url":"https://daily.dev/posts/los-movimientos-part-ii-solving-large-pickup-and-delivery-problems-with-adaptive-large-neighborhoo-miinonmi4","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/los-movimientos-part-ii-solving-large-pickup-and-delivery-problems-with-adaptive-large-neighborhoo-miinonmi4"},"datePublished":"2026-07-29T13:51:55.479Z","dateModified":"2026-07-29T13:52:18.924Z","description":"A hands-on Python implementation of Adaptive Large Neighborhood Search (ALNS) applied to a real-world pickup-and-delivery vehicle routing problem with time...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/92662358fdf28476ddee0f3036e77a27?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/92662358fdf28476ddee0f3036e77a27?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Towards Data Science","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Towards Data Science","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/tds","url":"https://daily.dev/sources/tds"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/los-movimientos-part-ii-solving-large-pickup-and-delivery-problems-with-adaptive-large-neighborhoo-miinonmi4","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"python","timeRequired":"PT31M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Towards Data Science","item":"https://daily.dev/sources/tds"},{"@type":"ListItem","position":3,"name":"Los Movimientos, Part II: Solving Large Pickup-and-Delivery Problems with Adaptive Large Neighborhood Search"}]}
```

