{"id":1205,"date":"2025-10-29T12:37:14","date_gmt":"2025-10-29T12:37:14","guid":{"rendered":"https:\/\/aiportcenter.nl\/?page_id=1205"},"modified":"2025-11-29T21:42:20","modified_gmt":"2025-11-29T21:42:20","slug":"yard-vehicle-routing","status":"publish","type":"page","link":"https:\/\/aiportcenter.nl\/index.php\/yard-vehicle-routing\/","title":{"rendered":"Yard-Vehicle Routing"},"content":{"rendered":"\n<!-- ======= BREADCRUMB (FULL WIDTH MATCH + ADMIN LINK + WP SPACING REMOVED) ======= -->\n\n<style>\n\/* Remove WordPress default spacing ONLY for this breadcrumb block *\/\n.breadcrumb-wrapper.wp-block-html {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n\/* Wrapper that matches .pc-container.polished width *\/\n.breadcrumb-container {\n  max-width: 1200px;\n  margin: -110px auto 0 auto;   \/* negative top only *\/\n  padding: 0 20px;\n  box-sizing: border-box;\n  position: relative;\n  z-index: 10;\n}\n\n\/* Styled breadcrumb bar *\/\n.breadcrumb {\n  font-family: Inter, system-ui, sans-serif;\n  font-size: 0.92rem;\n  color: var(--muted, #5b6570);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 6px;\n\n  margin-top: 8px;\n  margin-bottom: 12px;\n\n  padding: 10px 14px;\n  border-radius: 10px;\n  background: linear-gradient(180deg, rgba(10,106,176,0.06), rgba(10,106,176,0.02));\n  box-shadow: 0 2px 6px rgba(10,29,56,0.08);\n  border: 1px solid rgba(10,106,176,0.12);\n}\n\n.breadcrumb a {\n  color: var(--accent, #0a5c94);\n  text-decoration: none;\n  font-weight: 500;\n}\n\n.breadcrumb a:hover {\n  text-decoration: underline;\n}\n\n.breadcrumb .current {\n  color: var(--muted, #5b6570);\n  font-weight: 500;\n}\n<\/style>\n\n<div class=\"breadcrumb-wrapper wp-block-html\">\n<div class=\"breadcrumb-container\">\n  <nav class=\"breadcrumb\">\n\n    <a href=\"https:\/\/aiportcenter.nl\/\">Home<\/a>\n    <span>\u203a<\/span>\n\n    <a href=\"https:\/\/aiportcenter.nl\/index.php\/port-call\/\">Port-Call Data Hub<\/a>\n    <span>\u203a<\/span>\n\n    <a href=\"https:\/\/aiportcenter.nl\/index.php\/port-call\/#research-section\">Research Problems<\/a>\n    <span>\u203a<\/span>\n\n    <span class=\"current\">Yard-Vehicle Routing<\/span>\n\n  <\/nav>\n<\/div>\n<\/div>\n\n<!-- ======= \/END BREADCRUMB ======= -->\n\n\n\n<!-- ========= YARD-VEHICLE ROUTING PROBLEM (POLISHED \u2014 IDENTICAL TO BERTH-ALLOCATION) ========= -->\n<div class=\"pc-container polished\" id=\"yard-vehicle-routing\">\n  <header class=\"pc-hero\" role=\"banner\" aria-label=\"Yard-Vehicle Routing overview\">\n    <div class=\"pc-hero-bg\" aria-hidden=\"true\"><\/div>\n    <div class=\"pc-hero-inner\">\n      <div class=\"pc-hero-eyebrow\">Port-Call Optimization Data-Hub<\/div>\n      <h1>Yard-Vehicle Routing Problem<\/h1>\n      <p class=\"lead\">\n        The <strong>Yard-Vehicle Routing Problem (YVRP)<\/strong> determines how internal transport vehicles (AGVs, ALVs, straddle carriers, or terminal tractors)\n        move containers between quay cranes, yard blocks, rail terminals, and gates.\n        Routes must be <em>conflict-free<\/em> and respect <em>safety, precedence, and charging constraints<\/em>.\n        The main goals are to minimize container transfer time, reduce empty travel, and balance fleet utilization under dynamic conditions.\n      <\/p>\n      <nav class=\"pc-steps-nav\" aria-label=\"Sections\">\n        <a href=\"#focus\" class=\"chip\"><span class=\"num\">1<\/span> Optimization Focus<\/a>\n        <a href=\"#processes\" class=\"chip\"><span class=\"num\">2<\/span> Port-Call Processes<\/a>\n        <a href=\"#assumptions\" class=\"chip\"><span class=\"num\">3<\/span> Main Assumptions<\/a>\n        <a href=\"#studies\" class=\"chip\"><span class=\"num\">4<\/span> Available Datasets<\/a>\n      <\/nav>\n    <\/div>\n  <\/header>\n\n  <aside class=\"pc-toc\" aria-label=\"On-page navigation\">\n    <div class=\"pc-toc-inner\">\n      <div class=\"pc-toc-title\">On this page<\/div>\n      <ol>\n        <li><a href=\"#focus\">Optimization Focus<\/a><\/li>\n        <li><a href=\"#processes\">Port-Call Processes<\/a><\/li>\n        <li><a href=\"#assumptions\">Main Assumptions<\/a><\/li>\n        <li><a href=\"#studies\">Available Datasets<\/a><\/li>\n      <\/ol>\n    <\/div>\n  <\/aside>\n\n  <main class=\"pc-main\">\n\n    <!-- ===== Optimization Focus ===== -->\n    <section class=\"pc-step card\" id=\"focus\" aria-labelledby=\"title-focus\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\">\n        <h2 id=\"title-focus\">Optimization Focus<\/h2>\n        <div class=\"sub\">What is optimized, what is decided, what limits apply, and what data drive the model.<\/div>\n      <\/header>\n\n      <div class=\"pc-grid two-fixed\">\n        <!-- Row 1 -->\n        <article class=\"pc-card\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M12 2a10 10 0 1 1-7.07 17.07L12 12V2Z\"\/><\/svg>\n            <\/span>\n            <h3>Objective<\/h3>\n          <\/div>\n          <ul>\n            <li>Minimize container transport time between quay, yard, and gate\/rail points.<\/li>\n            <li>Reduce empty travel and avoid route conflicts or congestion.<\/li>\n            <li>Balance vehicle workload and manage AGV energy\/charging cycles efficiently.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M5 4h14v2H5V4Zm0 6h10v2H5v-2Zm0 6h6v2H5v-2Zm10-8 4-3v12l-4-3V8Z\"\/><\/svg>\n            <\/span>\n            <h3>Decision Variables<\/h3>\n          <\/div>\n          <ul>\n            <li>Assignment of transport jobs (quay\u2194yard, yard\u2194gate\/rail) to specific vehicles.<\/li>\n            <li>Conflict-free paths and start\/finish times per task and route segment.<\/li>\n            <li>Battery-aware dispatching and recharging schedules for automated vehicles.<\/li>\n          <\/ul>\n        <\/article>\n\n        <!-- Row 2 -->\n        <article class=\"pc-card\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M4 5h16v2H4V5Zm0 4h10v2H4V9Zm0 4h6v2H4v-2Zm0 4h16v2H4v-2Z\"\/><\/svg>\n            <\/span>\n            <h3>Constraints<\/h3>\n          <\/div>\n          <ul>\n            <li><strong>Conflict-free routing:<\/strong> no collisions, safe distance, and limited lane capacity.<\/li>\n            <li>Task release times, crane precedence, and time windows for synchronization.<\/li>\n            <li>Vehicle kinematic limits, battery constraints, and lane direction rules.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M4 6h16v2H4V6Zm0 4h16v8H4v-8Zm2 2v4h12v-4H6Z\"\/><\/svg>\n            <\/span>\n            <h3>Data Sources<\/h3>\n          <\/div>\n          <ul>\n            <li>TOS logs: QC moves, yard inputs\/outputs, truck\/rail arrivals, container IDs.<\/li>\n            <li>Network graph: arcs, intersections, buffer zones, and one-way lanes.<\/li>\n            <li>Telemetry: vehicle positions, speeds, energy levels, and maintenance status.<\/li>\n          <\/ul>\n        <\/article>\n      <\/div>\n    <\/section>\n\n    <!-- ===== Related Port-Call Processes ===== -->\n    <section class=\"pc-step card pc-research-note\" id=\"processes\" aria-labelledby=\"title-processes\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\">\n        <h2 id=\"title-processes\">Port-Call Processes<\/h2>\n        <div class=\"sub\">Related port-call process descriptions \u2014 quick links to AI Port Center pages.<\/div>\n      <\/header>\n\n      <p class=\"pc-desc\" style=\"margin-top:6px;\">\n        <span class=\"highlight-dot\" aria-hidden=\"true\"><\/span>\n        Explore related processes on the AI Port Center. Click a card to open the corresponding process page.\n      <\/p>\n\n      <div class=\"pc-grid two-fixed\" style=\"margin-top:10px;\">\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/terminal-operations\/\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M3 3h18v4H3V3Zm0 7h12v4H3v-4Zm0 7h6v4H3v-4Z\"\/><\/svg>\n            <\/span>\n            <h3>Terminal Operations<\/h3>\n          <\/div>\n          <ul class=\"pc-desc\"><li>Crane assignment, berth-to-yard transfers and terminal-level planning that drives yard-vehicle demand.<\/li><\/ul>\n        <\/article>\n\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/customs\/\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M12 2l4 4H8l4-4Zm6 6v12H6V8h12Z\"\/><\/svg>\n            <\/span>\n            <h3>Customs<\/h3>\n          <\/div>\n          <ul class=\"pc-desc\"><li>Data exchanges and clearance procedures affecting container release and yard workflows.<\/li><\/ul>\n        <\/article>\n\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/hinterland-transport\/\">\n          <div class=\"pc-card-head\">\n            <span class=\"pc-icon\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M3 13h2v-2H3v2Zm4 0h14v-2H7v2Zm0 6h14v-2H7v2Z\"\/><\/svg>\n            <\/span>\n            <h3>Hinterland Transport<\/h3>\n          <\/div>\n          <ul class=\"pc-desc\"><li>Truck and rail connections that create time-windows and constraints for yard operations.<\/li><\/ul>\n        <\/article>\n      <\/div>\n\n      <script>\n      (function(){\n        const container = document.getElementById('processes');\n        if(!container) return;\n\n        const researchLinks = [\n          { title: 'Terminal Operations', url: 'https:\/\/aiportcenter.nl\/index.php\/terminal-operations\/' },\n          { title: 'Customs', url: 'https:\/\/aiportcenter.nl\/index.php\/customs\/' },\n          { title: 'Hinterland Transport', url: 'https:\/\/aiportcenter.nl\/index.php\/hinterland-transport\/' }\n        ];\n\n        const linksByIndex = researchLinks.map(r=>r.url);\n\n        const cards = Array.from(container.querySelectorAll('.pc-card'));\n        cards.forEach((card, idx)=>{\n          card.tabIndex = 0;\n          card.setAttribute('role','link');\n          card.style.cursor = 'pointer';\n\n          \/\/ create invisible anchor overlay to preserve pointer semantics & context menu\n          const anchor = document.createElement('a');\n          anchor.setAttribute('aria-hidden','true');\n          anchor.target = '_blank';\n          anchor.rel = 'noopener noreferrer';\n          anchor.style.position = 'absolute';\n          anchor.style.inset = '0';\n          anchor.style.zIndex = '1';\n          anchor.style.opacity = '0';\n          anchor.style.textDecoration = 'none';\n          card.style.position = card.style.position || 'relative';\n          card.appendChild(anchor);\n\n          function resolveUrl(){\n            if(card.dataset && card.dataset.url) return card.dataset.url;\n            const titleEl = card.querySelector('h3');\n            if(titleEl){\n              const found = researchLinks.find(r => r.title === titleEl.textContent.trim());\n              if(found) return found.url;\n            }\n            return linksByIndex[idx] || linksByIndex[0];\n          }\n\n          card.addEventListener('click', ()=>{\n            const url = resolveUrl();\n            if(!url) return;\n            anchor.href = url;\n            anchor.click();\n          });\n\n          card.addEventListener('keydown', (ev)=>{\n            if(ev.key === 'Enter' || ev.key === ' ' || ev.code === 'Space'){\n              ev.preventDefault();\n              const url = resolveUrl();\n              if(!url) return;\n              anchor.href = url;\n              anchor.click();\n            }\n          });\n        });\n      })();\n      <\/script>\n    <\/section>\n\n    <!-- ===== Main Assumptions ===== -->\n    <section class=\"pc-step card\" id=\"assumptions\" aria-labelledby=\"title-assumptions\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\"><h2 id=\"title-assumptions\">Main Assumptions<\/h2><\/header>\n      <ul>\n        <li>Tasks are known over a rolling horizon; re-optimization occurs as new events arrive.<\/li>\n        <li>Lane capacities, intersections, and turning rules ensure conflict-free traffic.<\/li>\n        <li>Service times are estimated or data-driven; travel times may depend on congestion.<\/li>\n        <li>Integration with crane and gate scheduling improves overall terminal coordination.<\/li>\n      <\/ul>\n    <\/section>\n\n    <!-- ===== Reference Studies ===== -->\n    <section class=\"pc-step card\" id=\"studies\" aria-labelledby=\"title-studies\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\">\n        <h2 id=\"title-studies\">Available Datasets<\/h2>\n        <div class=\"sub\">Key academic and applied works on yard-vehicle routing and dispatching.<\/div>\n      <\/header>\n\n      <h3 style=\"color:#0a5c94; margin-top:8px; font-size:1rem;\">\ud83e\udded Real-World Datasets<\/h3>\n      <div class=\"pc-table-wrap\">\n        <table class=\"pc-table pc-anim-table\" role=\"table\" aria-label=\"Real-world datasets\">\n          <thead><tr><th>Dataset<\/th><th>Description<\/th><\/tr><\/thead>\n          <tbody>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/yvp2b4rtp3\/1\" target=\"_blank\">Container-Terminal Event Logs<\/a><\/td>\n              <td>Rich event logs (months) with timestamps and yard fields (e.g., block\/slot). Ideal to extract quay-yard pickup\/delivery jobs, dwell times, and service windows for YVRP.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/www.portbase.com\/en\/services\/vessel-visit-api\/\" target=\"_blank\">Vessel Visit API \u2013 Portbase (Rotterdam)<\/a><\/td>\n              <td>TProduction API for vessel-level port-call data; use ETAs\/ETDs and terminal planning to build time-phased yard-move demand aligned to berth plans (Registration required).<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/www.portofantwerpbruges.com\/en\/our-port\/open-data-platform\/eta-terminal\" target=\"_blank\">ETA Terminal Open-Data API \u2013 Port of Antwerp-Bruges (NxtPort)<\/a><\/td>\n              <td>Open-data API exposing vessel ETA and cargo opening times per terminal. Handy to derive realistic release windows for yard jobs (Free key via NxtPort procedure.)<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/myterminal.ect.nl\/api-products\/\" target=\"_blank\">MyTerminal \/ Terminal APIs \u2013 ECT (Rotterdam)<\/a><\/td>\n              <td>Commercial APIs (e.g., Quay Planning, Object Status) providing real-time vessel status, planning, and object events. Useful to reconstruct intra-terminal transport demand.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/www.portbase.com\/en\/marketplace\/premium-terminal-data-add-on-cargo-controller\/\" target=\"_blank\">Premium Terminal Data via Portbase \u2013 RWG\/APMT\/ECT<\/a><\/td>\n              <td>Feed of terminal ETAs\/ETDs and discharge info via Portbase Cargo Controller. Ssupports high-fidelity demand timelines for yard moves.<\/td>\n            <\/tr>\n          <\/tbody>\n        <\/table>\n      <\/div>\n\n      <h3 style=\"color:#0a5c94; margin-top:24px; font-size:1rem;\">\u2699\ufe0f Synthetic Benchmark Instances<\/h3>\n      <div class=\"pc-table-wrap\">\n        <table class=\"pc-table pc-anim-table\" role=\"table\" aria-label=\"Synthetic datasets\">\n          <thead><tr><th>Dataset<\/th><th>Description<\/th><\/tr><\/thead>\n          <tbody>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/txzgxpfvfd\" target=\"_blank\">Multi-YC Instances<\/a><\/td>\n              <td>Ready-made instance files (multi-crane, multi-block; ranging between 6\u201312 tasks) suitable to synthesize YVRP job lists between quay bays and yard blocks.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/m69nbt37tz\/1\" target=\"_blank\">Bulk-Port Routing Models<\/a><\/td>\n              <td>Routing datasets and published solutions for intra-port transport. Map directly to yard-tractor networks with node\/OD definitions.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.4tu.nl\/articles\/dataset\/Instance_data_set_for_The_Value_of_Information_Sharing_for_Platform-Based_Collaborative_Vehicle_Routing\/12763868\" target=\"_blank\">Dynamic PDPTW<\/a><\/td>\n              <td>Dynamic pickup-and-delivery instances for live re-planning. Ideal for testing online dispatch heuristics in dynamic yard environments.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/3fwc3twwn6\/3\" target=\"_blank\">DVRP Kilby Set<\/a><\/td>\n              <td>Classic dynamic VRP instances with request arrival times. Useful for evaluating event-driven yard-vehicle dispatching..<\/td>\n            <\/tr>\n          <\/tbody>\n        <\/table>\n      <\/div>\n\n      <p class=\"pc-desc\" style=\"font-size:.95rem; color:#5b6570; margin-top:8px;\">\n        While few public datasets exist due to terminal confidentiality, academic benchmarks reflect realistic layouts and traffic dynamics.\n      <\/p>\n    <\/section>\n  <\/main>\n<\/div>\n\n<style>\n\/* Hide default WP titles if present *\/\nh1.entry-title, .entry-title, .page-title { display: none !important; }\n\nhtml { scroll-behavior: smooth; }\n\n#yard-vehicle-routing.pc-container.polished{\n  --ink: #0b1220;\n  --muted: #5b6570;\n  --bg: #f6f8fb;\n  --card: #ffffff;\n  --accent: #0a5c94;\n  --accent-2: #7ccdf0;\n  --radius: 14px;\n  --shadow: 0 8px 28px rgba(10, 29, 56, 0.09);\n  --gap: 18px;\n  --ring: 0 0 0 3px rgba(43,176,237,.25);\n  position: relative;\n  isolation: isolate;\n  width: 100%;\n  max-width: 1200px;\n  margin: -15px;\n  padding: 20px;\n  box-sizing: border-box;\n  font-family: Inter, system-ui, Segoe UI, Roboto, Arial, sans-serif;\n  color: var(--ink);\n  background: transparent;\n}\n\n\/* Apply grey color to lists in Main Assumptions and Modeling Approaches (matches BAP) *\/\n#yard-vehicle-routing #assumptions ul li,\n#yard-vehicle-routing #modeling ul li { color: var(--muted); }\n\n\/* HERO *\/\n#yard-vehicle-routing .pc-hero { position: relative; overflow: hidden; border-radius: calc(var(--radius) + 4px); padding: 28px 28px 20px; box-shadow: var(--shadow); background: linear-gradient(180deg, rgba(10,106,176,.03), rgba(10,106,176,.005)); }\n#yard-vehicle-routing .pc-hero-bg::before, #yard-vehicle-routing .pc-hero-bg::after { content:\"\"; position:absolute; inset:auto -10% -40% -10%; height:180px; background: radial-gradient(60% 80% at 50% 0%, rgba(43,176,237,.08), transparent 70%); filter: blur(40px); pointer-events:none; }\n#yard-vehicle-routing .pc-hero-inner{ position: relative; z-index: 1; }\n#yard-vehicle-routing .pc-hero-eyebrow{ font-size:.8rem; letter-spacing:.12em; text-transform:uppercase; color:var(--accent); margin-bottom:6px; font-weight:600; }\n#yard-vehicle-routing .pc-hero h1{ margin:.1rem 0 .4rem; font-size: clamp(1.4rem, 2.2vw, 2rem); letter-spacing:-.2px; }\n#yard-vehicle-routing .lead{ margin:0; color: var(--muted); font-size: .98rem; }\n\n#yard-vehicle-routing .pc-steps-nav{ display:flex; gap:10px; flex-wrap:wrap; margin-top:14px; }\n#yard-vehicle-routing .chip{ display:inline-flex; align-items:center; gap:.5rem; padding:.48rem .72rem; border-radius:999px; background: #fff; color: var(--ink); box-shadow: var(--shadow); text-decoration:none; transition: transform .2s ease, box-shadow .2s ease; }\n#yard-vehicle-routing .chip .num{ display:inline-grid; place-items:center; width:24px; height:24px; border-radius:50%; font-size:.9rem; font-weight:700; color:#fff; background: linear-gradient(135deg, var(--accent), var(--accent-2)); }\n#yard-vehicle-routing .chip:hover{ transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.10); }\n\n\/* CARDS *\/\n#yard-vehicle-routing .card{ position: relative; background: var(--card); border-radius: var(--radius); padding: 18px; margin: 16px 0; box-shadow: var(--shadow); }\n#yard-vehicle-routing .card-head h2{ font-size: 1.2rem; margin: 0 0 6px; display:flex; align-items:center; gap:10px; }\n#yard-vehicle-routing .card-head .sub{ color: var(--muted); font-size:.95rem; }\n#yard-vehicle-routing .pc-desc{ color: var(--muted); margin: 0 0 10px; }\n#yard-vehicle-routing .card-accent{ position:absolute; inset:0; border-radius: inherit; padding:1px; background: linear-gradient(135deg, rgba(10,106,176,.28), rgba(43,176,237,.28)); -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events:none; opacity:.7; }\n\n#yard-vehicle-routing .pc-grid.two-fixed{ display:grid; gap: 14px; margin-top: 10px; grid-template-columns: 1fr; }\n@media (min-width: 900px){ #yard-vehicle-routing .pc-grid.two-fixed{ grid-template-columns: repeat(2, minmax(0,1fr)); } }\n#yard-vehicle-routing .pc-card{ background:#fff; border:1px solid rgba(10,106,176,.10); border-radius: 12px; padding: 14px; transition: transform .2s ease, box-shadow .2s ease; box-shadow: 0 8px 22px rgba(10,29,56,.06); }\n#yard-vehicle-routing .pc-card:hover{ transform: translateY(-3px); box-shadow: 0 14px 28px rgba(10, 29, 56, .12); }\n#yard-vehicle-routing .pc-card-head{ display:flex; align-items:center; gap:10px; margin-bottom:6px; }\n#yard-vehicle-routing .pc-card h3{ margin:0; font-size:1.05rem; font-weight:700; }\n#yard-vehicle-routing .pc-card ul{ margin:0; padding-left: 1.15rem; color: var(--muted); }\n#yard-vehicle-routing .pc-icon{ display:inline-grid; place-items:center; width:28px; height:28px; border-radius:8px;\n  background: linear-gradient(135deg, rgba(10,106,176,.15), rgba(43,176,237,.15)); color: var(--accent); flex-shrink:0; }\n#yard-vehicle-routing .pc-icon svg{ display:block; }\n\n\/* Pulsing hint used by research\/process cards (scoped) \u2014 match Yard-Crane styling *\/\n#yard-vehicle-routing .pc-research-note .highlight-dot,\n#yard-vehicle-routing .highlight-dot{\n  display:inline-block;\n  width:14px;\n  height:14px;\n  border-radius:50%;\n  background: linear-gradient(90deg,#74c9ff,#2aa7e8);\n  box-shadow: 0 2px 6px rgba(42,175,244,0.18);\n  margin-right:10px;\n  vertical-align: middle;\n  animation: pcPulse 2.2s ease-in-out infinite;\n  flex: 0 0 auto;\n  position: relative;\n  top: 0;\n}\n\n@keyframes pcPulse{ 0%,100%{ transform: scale(1); } 50%{ transform: scale(1.15); } }\n\n\/* Layout columns to match BAP *\/\n@media (min-width: 900px){\n  #yard-vehicle-routing.pc-container.polished{ display:grid; grid-template-columns: 260px 1fr; gap:20px; align-items:start; }\n  #yard-vehicle-routing .pc-hero{ grid-column: 1 \/ -1; }\n  #yard-vehicle-routing .pc-toc{ grid-column: 1; align-self:start; }\n  #yard-vehicle-routing .pc-main{ grid-column: 2; min-width:0; }\n}\n\n\/* Links and focus ring *\/\n#yard-vehicle-routing a{ color: var(--accent); text-decoration: none; }\n#yard-vehicle-routing a:hover{ text-decoration: underline; }\n#yard-vehicle-routing :is(a,button,[tabindex]){ outline: none; }\n#yard-vehicle-routing :is(a,button,[tabindex]):focus{ box-shadow: var(--ring); border-radius: 8px; }\n\n\/* TOC *\/\n#yard-vehicle-routing .pc-toc{ position: sticky; top: 140px; margin: 18px 0; z-index: 1; align-self: start; }\n#yard-vehicle-routing .pc-toc-inner{\n  border-radius: var(--radius); background: #ffffff; box-shadow: var(--shadow);\n  padding: 14px 16px; border: 1px solid rgba(10,106,176,.10);\n}\n#yard-vehicle-routing .pc-toc-title{ font-size:.9rem; font-weight:700; margin-bottom:6px; color: var(--accent); }\n#yard-vehicle-routing .pc-toc ol{ list-style:none; padding:0; margin:0; display:grid; gap:6px; }\n#yard-vehicle-routing .pc-toc a{ color: var(--ink); text-decoration:none; padding:6px 8px; border-radius:8px; display:block; transition:background .2s ease, box-shadow .2s ease; }\n#yard-vehicle-routing .pc-toc a:hover{ background: rgba(43,176,237,.08); box-shadow: var(--ring); }\n\n\/* TABLES (including hover elevation like BAP) *\/\n#yard-vehicle-routing .pc-table-wrap{ margin-top: 8px; }\n#yard-vehicle-routing .pc-table{\n  width: 100%; border-collapse: collapse; background: #fff;\n  border: 1px solid rgba(10,106,176,.25); table-layout: fixed;\n  transition: transform .16s ease, box-shadow .16s ease;\n  will-change: transform;\n}\n#yard-vehicle-routing .pc-table:hover,\n#yard-vehicle-routing .pc-table:focus-within{\n  transform: translateY(-3px);\n  box-shadow: 0 10px 24px rgba(10, 29, 56, 0.12);\n}\n#yard-vehicle-routing .pc-table th, #yard-vehicle-routing .pc-table td{\n  border: 1px solid rgba(10,106,176,.2); padding: 10px 12px; vertical-align: top; word-wrap: break-word;\n}\n#yard-vehicle-routing .pc-table thead th{\n  background: rgba(215,236,251,0.55); color: #000; font-weight: 700; text-align: center;\n}\n#yard-vehicle-routing .pc-table tbody td:first-child{ color: #084EAE; }\n#yard-vehicle-routing .pc-table tbody td:first-child a{ color:#084EAE; text-decoration:none; }\n#yard-vehicle-routing .pc-table tbody td:first-child a:hover{ text-decoration:underline; }\n#yard-vehicle-routing .pc-table tbody td:nth-child(2){ color: var(--muted); }\n\n@media (prefers-reduced-motion: reduce){\n  #yard-vehicle-routing .pc-table{ transition: none; }\n  #yard-vehicle-routing .pc-table:hover,\n  #yard-vehicle-routing .pc-table:focus-within{ transform: none; box-shadow: none; }\n}\n<\/style>\n<!-- ========= \/END YARD-VEHICLE ROUTING PROBLEM ========= -->\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Home \u203a Port-Call Data Hub \u203a Research Problems \u203a Yard-Vehicle Routing Port-Call Optimization Data-Hub Yard-Vehicle Routing Problem The Yard-Vehicle Routing Problem (YVRP) determines how internal transport vehicles (AGVs, ALVs, straddle carriers, or terminal tractors) move containers between quay cranes, yard blocks, rail terminals, and gates. Routes must be conflict-free and respect safety, precedence, and charging [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-1205","page","type-page","status-publish","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"peterwenzel","author_link":"https:\/\/aiportcenter.nl\/index.php\/author\/peterwenzel\/"},"uagb_comment_info":0,"uagb_excerpt":"Home \u203a Port-Call Data Hub \u203a Research Problems \u203a Yard-Vehicle Routing Port-Call Optimization Data-Hub Yard-Vehicle Routing Problem The Yard-Vehicle Routing Problem (YVRP) determines how internal transport vehicles (AGVs, ALVs, straddle carriers, or terminal tractors) move containers between quay cranes, yard blocks, rail terminals, and gates. Routes must be conflict-free and respect safety, precedence, and charging&hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/comments?post=1205"}],"version-history":[{"count":13,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1205\/revisions"}],"predecessor-version":[{"id":1643,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1205\/revisions\/1643"}],"wp:attachment":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/media?parent=1205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}