{"id":1148,"date":"2025-10-29T10:43:59","date_gmt":"2025-10-29T10:43:59","guid":{"rendered":"https:\/\/aiportcenter.nl\/?page_id=1148"},"modified":"2025-11-29T21:35:53","modified_gmt":"2025-11-29T21:35:53","slug":"berth-allocation","status":"publish","type":"page","link":"https:\/\/aiportcenter.nl\/index.php\/berth-allocation\/","title":{"rendered":"Berth Allocation"},"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\">Berth Allocation<\/span>\n\n  <\/nav>\n<\/div>\n<\/div>\n\n<!-- ======= \/END BREADCRUMB ======= -->\n\n\n\n<!-- ========= BERTH-ALLOCATION (POLISHED - CSS ONLY, TABLE HOVER RESTORED) ========= -->\n<div class=\"pc-container polished\" id=\"berth-allocation\">\n  <header class=\"pc-hero\" role=\"banner\" aria-label=\"Berth Allocation 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>Berth Allocation Problem<\/h1>\n      <p class=\"lead\">\n        The <strong>Berth Allocation Problem (BAP)<\/strong> addresses the allocation of berth space for vessels in container terminals with spatial and temporal decisions.\n        It is central to terminal management, directly influencing turnaround time, congestion, and service quality.\n        The challenge lies in efficiently allocating berths amid dynamic arrivals, vessel priorities, and physical limitations,\n        ensuring both operational efficiency and fairness in port logistics.\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 (2\u00d72 Cards) ===== -->\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 total vessel waiting and berth idle time.<\/li>\n            <li>Balance utilization and fairness across terminals and services.<\/li>\n            <li>Enable trade-offs between punctuality and operational cost.<\/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>Vessel\u2013berth assignment (which berth each vessel uses).<\/li>\n            <li>Service start\/finish times (temporal allocation).<\/li>\n            <li>Sequencing of vessels along the quay wall.<\/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>No overlap at the same berth segment (mutual exclusivity).<\/li>\n            <li>Compatibility with length, draft\/depth, and tidal windows.<\/li>\n            <li>Earliest\/latest start, precedence, and time-window limits.<\/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>AIS trajectories and historical berth occupancy.<\/li>\n            <li>Portbase\/HaMIS and terminal operation schedules.<\/li>\n            <li>Turnaround records and tide\/depth constraints.<\/li>\n          <\/ul>\n        <\/article>\n      <\/div>\n    <\/section>\n\n    <!-- ===== Related Port-Call Processes (same styling as Optimization Focus) ===== -->\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\">Port-call processes that relate to berth allocation \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\/pre-arrival\/\">\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>Pre-Arrival<\/h3>\n          <\/div>\n          <ul>\n            <li>Notifications, documentation and coordination ahead of port entry that feed berth allocation decisions.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/port-arrival\/\">\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=\"M12 2 2 7l10 5 10-5-10-5Zm0 7L2 4v13l10 5 10-5V4l-10 5Z\"\/><\/svg><\/span>\n            <h3>Port-Arrival<\/h3>\n          <\/div>\n          <ul>\n            <li>Arrival handling, pilot\/tug coordination and sequencing that interact with berth timing.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/anchoring\/\">\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 20h18v2H3v-2Zm2-2h2V8h6v10h2V6h2V4H7V2H5v16Z\"\/><\/svg><\/span>\n            <h3>Anchoring<\/h3>\n          <\/div>\n          <ul>\n            <li>Anchoring and waiting-area management that affects berth sequencing and congestion.<\/li>\n          <\/ul>\n        <\/article>\n\n        <article class=\"pc-card\" data-url=\"https:\/\/aiportcenter.nl\/index.php\/berth-visit\/\">\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=\"M12 2a10 10 0 1 1-7.07 17.07L12 12V2Z\"\/><\/svg><\/span>\n            <h3>Berth Visit<\/h3>\n          <\/div>\n          <ul>\n            <li>Covers on\u2011quay operations and crane sequencing that implement berth allocation decisions.<\/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>Arrivals known within the planning horizon (static case).<\/li>\n        <li>Each vessel occupies one berth for its service duration.<\/li>\n        <li>Handling and travel times are deterministic and pre-estimated.<\/li>\n        <li>No overlap at the same berth; exclusivity enforced.<\/li>\n        <li>Vessel\u2013berth compatibility by length and depth\/draft.<\/li>\n        <li>Tidal restrictions validated before assignment.<\/li>\n        <li>Pilotage\/towage availability modeled externally.<\/li>\n      <\/ul>\n    <\/section>\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 berth allocation 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<\/th><th>Description<\/th><\/tr><\/thead>\n          <tbody>\n            <tr>\n              <td><a href=\"https:\/\/www.fisheries.noaa.gov\/inport\/item\/59927\" target=\"_blank\" rel=\"noopener\">NOAA\/BOEM Marine Cadastre \u2013 AIS Vessel Tracks (2019)<\/a><\/td>\n              <td>Shows the location and characteristics of commercial and recreational boats as a sequence of positions transmitted by an Automatic Identification System (AIS).<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/www.fisheries.noaa.gov\/inport\/item\/61037\" target=\"_blank\" rel=\"noopener\">NOAA\/BOEM Marine Cadastre \u2013 AIS Vessel Transit Counts (2019)<\/a><\/td>\n              <td>Navigation safety device that transmits and monitors the location and characteristics of many vessels in U.S. and international waters in real-time.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/noaa.hub.arcgis.com\/pages\/22fb5273ccb54f6aa423f6667a856761\" target=\"_blank\" rel=\"noopener\">Marine Cadastre \u2013 Vessel Traffic<\/a><\/td>\n              <td>The data available in the table contains broadcast point data for U.S. coastal waters for calendar years 2009 through 2025.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/portwatch.imf.org\/\" target=\"_blank\" rel=\"noopener\">PortWatch Tracker<\/a><\/td>\n              <td>Open platform designed to monitor and simulate disruptions to maritime trade flows.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.europa.eu\/data\/datasets\/9d97b03f-ed6d-4cd3-86a8-2e1b9cbf7a5d\" target=\"_blank\" rel=\"noopener\">European Data<\/a><\/td>\n              <td>Open data service (API) with real-time, free information about open bridges.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/noaa.hub.arcgis.com\/pages\/22fb5273ccb54f6aa423f6667a856761\" target=\"_blank\" rel=\"noopener\">NOAA GeoPlatform<\/a><\/td>\n              <td>The data available in the table contains broadcast point data for U.S. coastal waters for calendar years 2009 through 2025.<\/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:\/\/andreas-ernst.github.io\/Mathprog-ORlib\/info\/readmeBAP.html\" target=\"_blank\" rel=\"noopener\">MathProg OR-Lib BAP Dataset<\/a><\/td>\n              <td>Standard benchmark for static\/dynamic BAPs with varied sizes and configurations for algorithm testing.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.dtu.dk\/articles\/dataset\/Berth_Allocation_And_Crane_Assignment_Problem_with_Transhipment_handling\/28870757\" target=\"_blank\" rel=\"noopener\">DTU BACAP Dataset<\/a><\/td>\n              <td>Joint berth &amp; crane assignment instances (quay geometry, handling times); suited for integrated optimization.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/www.scm.bwl.uni-kiel.de\/de\/forschung\/research-data\" target=\"_blank\" rel=\"noopener\">Kiel University SCM<\/a><\/td>\n              <td>Benchmark Instances for Berth Allocation and Crane Assignment.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/researchdata.edu.au\/berth-allocation-problem-restrictions-datasets\/1332043\" target=\"_blank\" rel=\"noopener\">Channel-restricted BAP datasets<\/a><\/td>\n              <td>Datatasets related to the computational study presented in the paper &#8220;The Berth Allocation Problem with Channel Restrictions&#8221;.<\/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 data require AIS\/PCS pre-processing, whereas benchmark sets enable controlled comparisons of optimization methods.\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#berth-allocation.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 *\/\n#berth-allocation #assumptions ul li,\n#berth-allocation #modeling ul li {\n  color: var(--muted);\n}\n\n\/* === Rest of your CSS unchanged === *\/\n#berth-allocation .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#berth-allocation .pc-hero-bg::before, #berth-allocation .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#berth-allocation .pc-hero-inner{ position: relative; z-index: 1; }\n#berth-allocation .pc-hero-eyebrow{ font-size:.8rem; letter-spacing:.12em; text-transform:uppercase; color:var(--accent); margin-bottom:6px; font-weight:600; }\n#berth-allocation .pc-hero h1{ margin:.1rem 0 .4rem; font-size: clamp(1.4rem, 2.2vw, 2rem); letter-spacing:-.2px; }\n#berth-allocation .lead{ margin:0; color: var(--muted); font-size: .98rem; }\n\n#berth-allocation .pc-steps-nav{ display:flex; gap:10px; flex-wrap:wrap; margin-top:14px; }\n#berth-allocation .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#berth-allocation .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#berth-allocation .chip:hover{ transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.10); }\n\n#berth-allocation .card{ position: relative; background: var(--card); border-radius: var(--radius); padding: 18px; margin: 16px 0; box-shadow: var(--shadow); }\n#berth-allocation .card-head h2{ font-size: 1.2rem; margin: 0 0 6px; display:flex; align-items:center; gap:10px; }\n#berth-allocation .card-head .sub{ color: var(--muted); font-size:.95rem; }\n#berth-allocation .pc-desc{ color: var(--muted); margin: 0 0 10px; }\n#berth-allocation .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); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events:none; opacity:.7; }\n  #berth-allocation .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#berth-allocation .pc-grid.two-fixed{ display:grid; gap: 14px; margin-top: 10px; grid-template-columns: 1fr; }\n@media (min-width: 900px){ #berth-allocation .pc-grid.two-fixed{ grid-template-columns: repeat(2, minmax(0,1fr)); } }\n#berth-allocation .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#berth-allocation .pc-card:hover{ transform: translateY(-3px); box-shadow: 0 14px 28px rgba(10, 29, 56, .12); }\n#berth-allocation .pc-card-head{ display:flex; align-items:center; gap:10px; margin-bottom:6px; }\n#berth-allocation .pc-card h3{ margin:0; font-size:1.05rem; font-weight:700; }\n#berth-allocation .pc-card ul{ margin:0; padding-left: 1.15rem; color: var(--muted); }\n#berth-allocation .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#berth-allocation .pc-icon svg{ display:block; }\n\n@media (min-width: 900px){\n  #berth-allocation.pc-container.polished{ display:grid; grid-template-columns: 260px 1fr; gap:20px; align-items:start; }\n  #berth-allocation .pc-hero{ grid-column: 1 \/ -1; }\n  #berth-allocation .pc-toc{ grid-column: 1; align-self:start; }\n  #berth-allocation .pc-main{ grid-column: 2; min-width:0; }\n}\n\n#berth-allocation a{ color: var(--accent); text-decoration: none; }\n#berth-allocation a:hover{ text-decoration: underline; }\n\n#berth-allocation .pc-table-wrap{ margin-top: 8px; }\n#berth-allocation .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#berth-allocation .pc-table:hover,\n#berth-allocation .pc-table:focus-within{\n  transform: translateY(-3px);\n  box-shadow: 0 10px 24px rgba(10, 29, 56, 0.12);\n}\n#berth-allocation .pc-table th, #berth-allocation .pc-table td{\n  border: 1px solid rgba(10,106,176,.2); padding: 10px 12px; vertical-align: top; word-wrap: break-word;\n}\n#berth-allocation .pc-table thead th{\n  background: rgba(215,236,251,0.55); color: #000; font-weight: 700; text-align: center;\n}\n#berth-allocation .pc-table tbody td:first-child{ color: #084EAE; }\n#berth-allocation .pc-table tbody td:first-child a{ color:#084EAE; text-decoration:none; }\n#berth-allocation .pc-table tbody td:first-child a:hover{ text-decoration:underline; }\n#berth-allocation .pc-table tbody td:nth-child(2){ color: var(--muted); }\n\n#berth-allocation :is(a,button,[tabindex]){ outline: none; }\n#berth-allocation :is(a,button,[tabindex]):focus{ box-shadow: var(--ring); border-radius: 8px; }\n\n@media (prefers-reduced-motion: reduce){\n  #berth-allocation .pc-table{ transition: none; }\n  #berth-allocation .pc-table:hover,\n  #berth-allocation .pc-table:focus-within{ transform: none; box-shadow: none; }\n}\n\n\/* ===== ONLY ADDED: Sidebar menu styling from Yard-Crane, namespaced ===== *\/\n#berth-allocation .pc-toc{ position: sticky; top: 140px; margin: 18px 0; z-index: 1; align-self: start; }\n#berth-allocation .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#berth-allocation .pc-toc-title{ font-size:.9rem; font-weight:700; margin-bottom:6px; color: var(--accent); }\n#berth-allocation .pc-toc ol{ list-style:none; padding:0; margin:0; display:grid; gap:6px; }\n#berth-allocation .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#berth-allocation .pc-toc a:hover{ background: rgba(43,176,237,.08); box-shadow: var(--ring); }\n<\/style>\n<script>\n  (function(){\n    \/\/ Make Port-call Processes cards clickable (data-url priority -> title mapping -> index fallback)\n    const researchLinks = [\n      { title: 'Pre-Arrival', url: 'https:\/\/aiportcenter.nl\/index.php\/pre-arrival\/' },\n      { title: 'Port-Arrival', url: 'https:\/\/aiportcenter.nl\/index.php\/port-arrival\/' },\n      { title: 'Anchoring', url: 'https:\/\/aiportcenter.nl\/index.php\/anchoring\/' },\n      { title: 'Berth Visit', url: 'https:\/\/aiportcenter.nl\/index.php\/berth-visit\/' }\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 the processes item\n    const toc = document.querySelector('#berth-allocation .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 after = toc.querySelector('a[href=\"#focus\"]');\n        if(after && after.parentNode) toc.insertBefore(li, after.parentNode.nextSibling);\n        else toc.appendChild(li);\n      }\n    }\n  })();\n<\/script>\n\n<!-- ========= \/END BERTH-ALLOCATION (POLISHED - CSS ONLY, TABLE HOVER RESTORED) ========= -->\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Home \u203a Port-Call Data Hub \u203a Research Problems \u203a Berth Allocation Port-Call Optimization Data-Hub Berth Allocation Problem The Berth Allocation Problem (BAP) addresses the allocation of berth space for vessels in container terminals with spatial and temporal decisions. It is central to terminal management, directly influencing turnaround time, congestion, and service quality. The challenge lies [&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-1148","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 Berth Allocation Port-Call Optimization Data-Hub Berth Allocation Problem The Berth Allocation Problem (BAP) addresses the allocation of berth space for vessels in container terminals with spatial and temporal decisions. It is central to terminal management, directly influencing turnaround time, congestion, and service quality. The challenge lies&hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1148","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=1148"}],"version-history":[{"count":68,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1148\/revisions"}],"predecessor-version":[{"id":1638,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1148\/revisions\/1638"}],"wp:attachment":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/media?parent=1148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}