{"id":1191,"date":"2025-10-29T12:14:37","date_gmt":"2025-10-29T12:14:37","guid":{"rendered":"https:\/\/aiportcenter.nl\/?page_id=1191"},"modified":"2025-11-29T21:41:24","modified_gmt":"2025-11-29T21:41:24","slug":"yard-crane","status":"publish","type":"page","link":"https:\/\/aiportcenter.nl\/index.php\/yard-crane\/","title":{"rendered":"Yard-Crane"},"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-Crane Scheduling<\/span>\n\n  <\/nav>\n<\/div>\n<\/div>\n\n<!-- ======= \/END BREADCRUMB ======= -->\n\n\n\n<!-- ========= YARD-CRANE SCHEDULING (POLISHED - CSS ONLY, TABLE HOVER RESTORED) ========= -->\n<div class=\"pc-container polished\" id=\"yard-crane\">\n  <header class=\"pc-hero\" role=\"banner\" aria-label=\"Yard-Crane Scheduling 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-Crane Scheduling Problem<\/h1>\n      <p class=\"lead\">\n        The <strong>Yard-Crane Scheduling Problem (YCSP)<\/strong> decides how to sequence storage and retrieval jobs for one or more yard cranes (RTG\/RMG) across yard blocks.\n        Schedules must respect <em>inter-crane interference<\/em>, <em>non-crossing\/separation<\/em> rules, travel and hoist times, and job ready times (truck\/AGV arrivals).\n        Typical goals include minimizing vessel-related makespan, reducing truck\/AGV waiting, and balancing crane workloads.\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=\"#datasets\" 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=\"#datasets\">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, which limits apply, and which data support 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 vessel\/yard makespan and truck\/AGV waiting.<\/li>\n            <li>Reduce crane empty travel and interference delays.<\/li>\n            <li>Balance workload; enable energy\/throughput trade-offs.<\/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\/sequencing of jobs per crane with start\/finish times.<\/li>\n            <li>Feasible crane moves between bays\/blocks with separation.<\/li>\n            <li>Optional: dynamic I\/O point selection and buffer use.<\/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>Inter-crane interference:<\/strong> minimum separation; no crossing on the same rail.<\/li>\n            <li>Job ready times, bay travel and hoist times, precedence rules.<\/li>\n            <li>Block boundaries, transfer zones, and safety margins.<\/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 (job timestamps, locations), bay-plan\/stowage.<\/li>\n            <li>Crane kinematics (speeds\/accels), block layouts, rail distances.<\/li>\n            <li>Truck\/AGV arrival processes and I\/O buffer status.<\/li>\n          <\/ul>\n        <\/article>\n      <\/div>\n    <\/section>\n    <!-- (moved) Related Research Problems removed from here because it's placed earlier -->\n\n    <!-- ===== Related Port-Call Processes ===== -->\n    <section class=\"pc-step card\" 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\">Related Port-Call Processes<\/h2>\n        <div class=\"sub\">Processes related to yard-crane scheduling \u2014 click a card to open the process page.<\/div>\n      <\/header>\n\n      <!-- Instructional note: clickable cards (subtle pulsing dot) -->\n      <div class=\"pc-research-note\" aria-hidden=\"false\" style=\"margin-top:8px; margin-bottom:8px; display:flex; align-items:center; gap:10px;\">\n        <style>\n          \/* Scoped highlight dot for research note (matches Pre-Arrival) *\/\n          .pc-research-note .highlight-dot{ display:inline-block; width:14px; height:14px; border-radius:50%;\n            background: linear-gradient(90deg,#74c9ff,#2aa7e8); box-shadow:0 2px 6px rgba(42,175,244,0.18); margin-right:10px; vertical-align:middle;\n            animation: pcPulse 2.2s ease-in-out infinite; flex:0 0 auto; }\n          .pc-research-note .instruction{ font-size:.95rem; color:var(--muted); margin:0; }\n          @keyframes pcPulse{ 0%,100%{ transform:scale(1); } 50%{ transform:scale(1.15); } }\n        <\/style>\n        <span class=\"highlight-dot\" aria-hidden=\"true\"><\/span>\n        <div class=\"instruction\">Click any card to open the process page related to the optimization problem.<\/div>\n      <\/div>\n\n      <div class=\"pc-grid two-fixed\" style=\"margin-top:6px;\">\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\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M3 19a1 1 0 0 0 .894.553h16.212A1 1 0 0 0 21 19v-2h-2v-5.382l-7-2.333-7 2.333V17H3v2Zm4-4h10v2H7v-2Zm6-9V4h-2v2H5v2.118l7-2.333 7 2.333V6h-6Z\"\/><\/svg><\/span>\n            <h3>Customs<\/h3>\n          <\/div>\n          <ul>\n            <li>Regulatory clearance and documentation processes that affect gate flows and release times.<\/li>\n          <\/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\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"currentColor\"><path d=\"M3 6h18v2H3V6Zm0 4h12v2H3v-2Zm0 4h8v2H3v-2Z\"\/><\/svg><\/span>\n            <h3>Hinterland Transport<\/h3>\n          <\/div>\n          <ul>\n            <li>Rail\/road barge coordination and modal scheduling that determine container ingress\/egress timing.<\/li>\n          <\/ul>\n        <\/article>\n      <\/div>\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>Job set and locations known in advance (static YCSP variant).<\/li>\n        <li>Cranes share a rail per block with fixed safety separation.<\/li>\n        <li>Travel\/handling times are deterministic or scenario-based.<\/li>\n        <li>Precedence reflects stacking rules and equipment interfaces.<\/li>\n        <li>Optional: I\/O point selection included when buffers are modeled.<\/li>\n      <\/ul>\n    <\/section>\n\n    <!-- removed duplicate Research\/Processes section (moved earlier) -->\n\n    <!-- ===== Available Datasets ===== -->\n    <section class=\"pc-step card\" id=\"datasets\" aria-labelledby=\"title-datasets\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\">\n        <h2 id=\"title-datasets\">Available Datasets<\/h2>\n        <div class=\"sub\">Publicly accessible and benchmark datasets for yard-crane scheduling research and validation.<\/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 \/ Case<\/th><th>Description<\/th><\/tr><\/thead>\n          <tbody>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/yvp2b4rtp3\/1\" target=\"_blank\">Real Terminal Event Logs<\/a><\/td>\n              <td>timestamps, workers, costs, plus yard fields such as: yard block and yard slot. The user can extract storage\/retrieval tasks and build YC schedules from the logs (License: CC BY-NC 4.0).<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/archive.ics.uci.edu\/dataset\/436\/container+crane+controller+data+set\" target=\"_blank\">UCI ML Repository<\/a><\/td>\n              <td>Real crane controller signals, including speed, angle, and power. The dataset is a control-level (not a ready YC schedule), but useful for data-driven timing\/energy models that can parameterize YC task durations.<\/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\/3nkk9dprpn\/2\" target=\"_blank\">Multi-YC Scheduling Instances<\/a><\/td>\n              <td>Instances for 3 cranes \/ 2 blocks with 6\u201312 tasks. Provided as direct files for algorithm testing (License CC BY 4.0).<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/www.instances.de\/dfg\/published.php\" target=\"_blank\">Test Data Generator<\/a><\/td>\n              <td>Generator for test instances of scheduling problems concerning cranes in transshipment terminals.<\/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        Real-world datasets are typically restricted due to confidentiality, but the cited studies document realistic layouts and parameters.\n        The public benchmarks (e.g., Mendeley multi-crane sets, I\/O point selection instances) enable reproducible evaluation and method comparison.\n      <\/p>\n    <\/section>\n  <\/main>\n<\/div>\n\n<style>\n\/* Keep everything from your original Berth Allocation polished CSS \u2014 unchanged *\/\nh1.entry-title, .entry-title, .page-title { display: none !important; }\n\nhtml { scroll-behavior: smooth; }\n\n\/* === Your original styles remain exactly as-is === *\/\n#yard-crane.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\/* Rest of your CSS untouched *\/\n#yard-crane .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-crane .pc-hero-bg::before, #yard-crane .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-crane .pc-hero-inner{ position: relative; z-index: 1; }\n#yard-crane .pc-hero-eyebrow{ font-size:.8rem; letter-spacing:.12em; text-transform:uppercase; color:var(--accent); margin-bottom:6px; font-weight:600; }\n#yard-crane .pc-hero h1{ margin:.1rem 0 .4rem; font-size: clamp(1.4rem, 2.2vw, 2rem); letter-spacing:-.2px; }\n#yard-crane .lead{ margin:0; color: var(--muted); font-size: .98rem; }\n\n#yard-crane .pc-steps-nav{ display:flex; gap:10px; flex-wrap:wrap; margin-top:14px; }\n#yard-crane .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-crane .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-crane .chip:hover{ transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.10); }\n\n#yard-crane .card{ position: relative; background: var(--card); border-radius: var(--radius); padding: 18px; margin: 16px 0; box-shadow: var(--shadow); }\n#yard-crane .card-head h2{ font-size: 1.2rem; margin: 0 0 6px; display:flex; align-items:center; gap:10px; }\n#yard-crane .card-head .sub{ color: var(--muted); font-size:.95rem; }\n#yard-crane .pc-desc{ color: var(--muted); margin: 0 0 10px; }\n#yard-crane .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-crane .pc-grid.two-fixed{ display:grid; gap: 14px; margin-top: 10px; grid-template-columns: 1fr; }\n@media (min-width: 900px){ #yard-crane .pc-grid.two-fixed{ grid-template-columns: repeat(2, minmax(0,1fr)); } }\n#yard-crane .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-crane .pc-card:hover{ transform: translateY(-3px); box-shadow: 0 14px 28px rgba(10, 29, 56, .12); }\n#yard-crane .pc-card-head{ display:flex; align-items:center; gap:10px; margin-bottom:6px; }\n#yard-crane .pc-card h3{ margin:0; font-size:1.05rem; font-weight:700; }\n#yard-crane .pc-card ul{ margin:0; padding-left: 1.15rem; color: var(--muted); }\n#yard-crane .pc-icon{ display:inline-grid; place-items:center; width:28px; height:28px; border-radius:8px; background: linear-gradient(135deg, rgba(10,106,176,.15), rgba(43,176,237,.15)); color: var(--accent); flex-shrink:0; }\n#yard-crane .pc-icon svg{ display:block; }\n\n@media (min-width: 900px){\n  #yard-crane.pc-container.polished{ display:grid; grid-template-columns: 260px 1fr; gap:20px; align-items:start; }\n  #yard-crane .pc-hero{ grid-column: 1 \/ -1; }\n  #yard-crane .pc-toc{ grid-column: 1; align-self:start; }\n  #yard-crane .pc-main{ grid-column: 2; min-width:0; }\n}\n\n#yard-crane a{ color: var(--accent); text-decoration: none; }\n#yard-crane a:hover{ text-decoration: underline; }\n\n#yard-crane .pc-table-wrap{ margin-top: 8px; }\n#yard-crane .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-crane .pc-table:hover,\n#yard-crane .pc-table:focus-within{\n  transform: translateY(-3px);\n  box-shadow: 0 10px 24px rgba(10, 29, 56, 0.12);\n}\n#yard-crane .pc-table th, #yard-crane .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-crane .pc-table thead th{\n  background: rgba(215,236,251,0.55); color: #000; font-weight: 700; text-align: center;\n}\n#yard-crane .pc-table tbody td:first-child{ color: #084EAE; }\n#yard-crane .pc-table tbody td:first-child a{ color:#084EAE; text-decoration:none; }\n#yard-crane .pc-table tbody td:first-child a:hover{ text-decoration:underline; }\n#yard-crane .pc-table tbody td:nth-child(2){ color: var(--muted); }\n\n#yard-crane :is(a,button,[tabindex]){ outline: none; }\n#yard-crane :is(a,button,[tabindex]):focus{ box-shadow: var(--ring); border-radius: 8px; }\n\n@media (prefers-reduced-motion: reduce){\n  #yard-crane .pc-table{ transition: none; }\n  #yard-crane .pc-table:hover,\n  #yard-crane .pc-table:focus-within{ transform: none; box-shadow: none; }\n}\n\n\/* Sidebar menu styling identical to your original *\/\n#yard-crane .pc-toc{ position: sticky; top: 140px; margin: 18px 0; z-index: 1; align-self: start; }\n#yard-crane .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-crane .pc-toc-title{ font-size:.9rem; font-weight:700; margin-bottom:6px; color: var(--accent); }\n#yard-crane .pc-toc ol{ list-style:none; padding:0; margin:0; display:grid; gap:6px; }\n#yard-crane .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-crane .pc-toc a:hover{ background: rgba(43,176,237,.08); box-shadow: var(--ring); }\n<\/style>\n    <script>\n  (function(){\n    const researchLinks = [\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 = [];\n    const section = document.getElementById('processes');\n    if(!section) return;\n    const cards = Array.from(section.querySelectorAll('.pc-card'));\n    cards.forEach((card, idx) => {\n      const h3 = card.querySelector('h3');\n      const title = h3 ? h3.textContent.trim() : null;\n      const dataUrl = card.dataset && (card.dataset.url || card.dataset.href || card.dataset.link);\n      let mapping = null;\n      if(dataUrl) mapping = { url: dataUrl };\n      if(!mapping) mapping = researchLinks.find(r => r.title === title && r.url);\n      if(!mapping && linksByIndex[idx]) mapping = { url: linksByIndex[idx] };\n\n      if(mapping && mapping.url){\n        card.tabIndex = 0;\n        card.setAttribute('role','link');\n        card.style.cursor = 'pointer';\n\n        card.addEventListener('click', () => window.open(mapping.url, '_blank'));\n        card.addEventListener('keydown', (ev) => { if(ev.key === 'Enter' || ev.key === ' '){ ev.preventDefault(); window.open(mapping.url, '_blank'); } });\n\n        const anchor = document.createElement('a');\n        anchor.href = mapping.url;\n        anchor.target = '_blank';\n        anchor.rel = 'noopener noreferrer';\n        anchor.setAttribute('aria-hidden','true');\n        anchor.style.position = 'absolute'; anchor.style.inset = '0'; anchor.style.zIndex = '2'; anchor.style.background = 'transparent'; anchor.style.textDecoration = 'none';\n        const pos = getComputedStyle(card).position;\n        if(!pos || pos === 'static') card.style.position = 'relative';\n        card.appendChild(anchor);\n      }\n    });\n\n    \/\/ Ensure TOC shows processes item\n    const toc = document.querySelector('#yard-crane .pc-toc ol');\n    if(toc){\n      const existing = toc.querySelector('a[href=\"#processes\"]');\n      if(!existing){\n        const li = document.createElement('li');\n        const a = document.createElement('a'); a.href = '#processes'; a.textContent = 'Port-Call Processes';\n        li.appendChild(a);\n        const focusItem = toc.querySelector('a[href=\"#focus\"]');\n        if(focusItem && focusItem.parentNode) toc.insertBefore(li, focusItem.parentNode.nextSibling);\n        else toc.appendChild(li);\n      } else {\n        existing.textContent = 'Port-Call Processes';\n      }\n    }\n  })();\n<\/script>\n<!-- ========= \/END YARD-CRANE SCHEDULING (POLISHED - CSS ONLY, TABLE HOVER RESTORED) ========= -->\n","protected":false},"excerpt":{"rendered":"<p>Home \u203a Port-Call Data Hub \u203a Research Problems \u203a Yard-Crane Scheduling Port-Call Optimization Data-Hub Yard-Crane Scheduling Problem The Yard-Crane Scheduling Problem (YCSP) decides how to sequence storage and retrieval jobs for one or more yard cranes (RTG\/RMG) across yard blocks. Schedules must respect inter-crane interference, non-crossing\/separation rules, travel and hoist times, and job ready times [&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-1191","page","type-page","status-publish","hentry"],"blocksy_meta":[],"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-Crane Scheduling Port-Call Optimization Data-Hub Yard-Crane Scheduling Problem The Yard-Crane Scheduling Problem (YCSP) decides how to sequence storage and retrieval jobs for one or more yard cranes (RTG\/RMG) across yard blocks. Schedules must respect inter-crane interference, non-crossing\/separation rules, travel and hoist times, and job ready times&hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1191","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=1191"}],"version-history":[{"count":17,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1191\/revisions"}],"predecessor-version":[{"id":1642,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1191\/revisions\/1642"}],"wp:attachment":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/media?parent=1191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}