{"id":1187,"date":"2025-10-29T10:58:37","date_gmt":"2025-10-29T10:58:37","guid":{"rendered":"https:\/\/aiportcenter.nl\/?page_id=1187"},"modified":"2025-11-29T21:37:05","modified_gmt":"2025-11-29T21:37:05","slug":"quay-crane","status":"publish","type":"page","link":"https:\/\/aiportcenter.nl\/index.php\/quay-crane\/","title":{"rendered":"Quay-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\">Quay-Crane Scheduling<\/span>\n\n  <\/nav>\n<\/div>\n<\/div>\n\n<!-- ======= \/END BREADCRUMB ======= -->\n\n\n\n<!-- ========= QUAY-CRANE SCHEDULING (POLISHED - CSS ONLY, TABLE HOVER RESTORED) ========= -->\n<div class=\"pc-container polished\" id=\"quay-crane\">\n  <header class=\"pc-hero\" role=\"banner\" aria-label=\"Quay-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>Quay-Crane Scheduling Problem<\/h1>\n      <p class=\"lead\">\n        The <strong>Quay-Crane Scheduling Problem (QCSP)<\/strong> determines how to sequence container handling tasks across multiple quay cranes assigned to a vessel, while respecting\n        <em>non-crossing<\/em> and <em>interference\/safety-margin<\/em> constraints. Objectives typically include minimizing vessel turnaround\/makespan and smoothing crane workloads.\n        QCSP is closely related to (and often integrated with) berth allocation and quay-crane assignment.\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=\"#research\" 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=\"#research\">Port-Cal 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 vessel handling time (makespan\/turnaround).<\/li>\n            <li>Reduce crane interference and empty travel; smooth workloads.<\/li>\n            <li>Support multi-objective goals (e.g., energy or emissions) when needed.<\/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 bay tasks to cranes over time (who does what, when).<\/li>\n            <li>Sequence of tasks per crane and task start\/finish times.<\/li>\n            <li>Feasible crane moves along the quay (respecting safety margins).<\/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>Non-crossing:<\/strong> adjacent cranes cannot pass each other on the same rail.<\/li>\n            <li><strong>Interference\/safety margins:<\/strong> minimum bay distance between cranes.<\/li>\n            <li>Precedence between bay tasks; travel\/hoist times and crane speeds.<\/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>Bay-plan\/stowage (import\/export moves, work content per bay).<\/li>\n            <li>QC performance curves (hoist\/slew\/trolley), rail distances, safety margins.<\/li>\n            <li>TOS logs\/telemetry; integrated BAP\/QCAP inputs if coupled.<\/li>\n          <\/ul>\n        <\/article>\n      <\/div>\n    <\/section>\n\n    <!-- ===== Related Research Problems ===== -->\n    <section class=\"pc-step card\" id=\"research\" aria-labelledby=\"title-research\">\n      <div class=\"card-accent\" aria-hidden=\"true\"><\/div>\n      <header class=\"card-head\">\n        <h2 id=\"title-research\">Related Port-Call Processes<\/h2>\n        <div class=\"sub\">Processes related to quay-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\/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\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\"><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><\/span>\n            <h3>Terminal Operations<\/h3>\n          <\/div>\n          <ul>\n            <li>Procedures and resource deployment on terminals that influence crane assignment and throughput.<\/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\">\n        <h2 id=\"title-assumptions\">Main Assumptions<\/h2>\n      <\/header>\n      <ul>\n        <li>Vessel\u2019s bay-level work content is known (static QCSP variant).<\/li>\n        <li>Assigned cranes operate on the same rail with non-crossing limits.<\/li>\n        <li>Interference is modeled via safety margins (minimum bay gaps).<\/li>\n        <li>Travel\/handling times deterministic or scenario-based if robust\/stochastic.<\/li>\n        <li>Precedence constraints reflect stowage rules and operational logic.<\/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 quay-crane scheduling research and validation.<\/div>\n      <\/header>\n\n      <!-- Keep original subsection titles exactly as before -->\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\/6d9stwzjhp\/1\" target=\"_blank\" rel=\"noopener\">QCSPgen<\/a><\/td>\n              <td>Supplementary research data for tandem-QC operations; includes input sets used to validate an exact algorithm for real terminal scenarios (License: CC BY 4.0).<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/y2h864xdhr\/2\" target=\"_blank\" rel=\"noopener\">Tandem-QC<\/a><\/td>\n              <td>Open dataset coupling tandem-QC scheduling with truck\/slot planning. Useful if the QCSP interacts with horizontal transport (License: CC BY 4.0).<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/data.mendeley.com\/datasets\/3vjsyyk3pm\/1\" target=\"_blank\" rel=\"noopener\">Berth-and-QC<\/a><\/td>\n              <td>Weekly berth-and-QC planning instances. Good for experiments that link tactical berth plans with operational QC scheduling (License: CC BY-NC).<\/td>\n            <\/tr>\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:\/\/www.scm.bwl.uni-kiel.de\/de\/forschung\/research-data\" target=\"_blank\" rel=\"noopener\">QCSPgen<\/a><\/td>\n              <td>Official generator used in the literature to create the standard QCSP instance families. Page also links file format and benchmark results.<\/td>\n            <\/tr>\n            <tr>\n              <td><a href=\"https:\/\/prodlog.wiwi.uni-halle.de\/qcspgen\/\" target=\"_blank\" rel=\"noopener\">QCSPgen project page<\/a><\/td>\n              <td>Direct project page for the QCSP instance generator (configure bays, cranes, precedence, and safety margins).<\/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 are often proprietary (accessible via collaborations), while public benchmarks (Kiel sets, Kim &amp; Park family, QCSPgen) enable reproducible comparisons.\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\n\/* Smooth scrolling without JS *\/\nhtml { scroll-behavior: smooth; }\n\n\/* ===== Scoped design to #quay-crane only ===== *\/\n#quay-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\/******** Hero ********\/\n#quay-crane .pc-hero {\n  position: relative; overflow: hidden;\n  border-radius: calc(var(--radius) + 4px);\n  padding: 28px 28px 20px;\n  box-shadow: var(--shadow);\n  background: linear-gradient(180deg, rgba(10,106,176,.03), rgba(10,106,176,.005));\n}\n#quay-crane .pc-hero-bg::before,\n#quay-crane .pc-hero-bg::after{\n  content:\"\"; position:absolute; inset:auto -10% -40% -10%; height:180px;\n  background: radial-gradient(60% 80% at 50% 0%, rgba(43,176,237,.08), transparent 70%);\n  filter: blur(40px); pointer-events:none;\n}\n#quay-crane .pc-hero-inner{ position: relative; z-index: 1; }\n#quay-crane .pc-hero-eyebrow{\n  font-size:.8rem; letter-spacing:.12em; text-transform:uppercase; color:var(--accent);\n  margin-bottom:6px; font-weight:600;\n}\n#quay-crane .pc-hero h1{ margin:.1rem 0 .4rem; font-size: clamp(1.4rem, 2.2vw, 2rem); letter-spacing:-.2px; }\n#quay-crane .lead{ margin:0; color: var(--muted); font-size: .98rem; }\n\n#quay-crane .pc-steps-nav{ display:flex; gap:10px; flex-wrap:wrap; margin-top:14px; }\n#quay-crane .chip{\n  display:inline-flex; align-items:center; gap:.5rem; padding:.48rem .72rem; border-radius:999px;\n  background: #fff; color: var(--ink); box-shadow: var(--shadow); text-decoration:none; transition: transform .2s ease, box-shadow .2s ease;\n}\n#quay-crane .chip .num{\n  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}\n#quay-crane .chip:hover{ transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.10); }\n\n\/******** Sidebar (non-JS, static) ********\/\n#quay-crane .pc-toc{ position: sticky; top: 140px; margin: 18px 0; z-index: 1; }\n#quay-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#quay-crane .pc-toc-title{ font-size:.9rem; font-weight:700; margin-bottom:6px; color: var(--accent); }\n#quay-crane .pc-toc ol{ list-style:none; padding:0; margin:0; display:grid; gap:6px; }\n#quay-crane .pc-toc a{ color: var(--ink); text-decoration:none; padding:6px 8px; border-radius:8px; display:block; }\n#quay-crane .pc-toc a:hover{ background: rgba(43,176,237,.08); box-shadow: var(--ring); }\n\n\/******** Cards ********\/\n#quay-crane .card{\n  position: relative; background: var(--card); border-radius: var(--radius);\n  padding: 18px; margin: 16px 0; box-shadow: var(--shadow);\n}\n#quay-crane .card-head h2{ font-size: 1.2rem; margin: 0 0 6px; display:flex; align-items:center; gap:10px; }\n#quay-crane .card-head .sub{ color: var(--muted); font-size:.95rem; }\n#quay-crane .pc-desc{ color: var(--muted); margin: 0 0 10px; }\n\/* gradient border accent *\/\n#quay-crane .card-accent{\n  position:absolute; inset:0; border-radius: inherit; padding:1px;\n  background: linear-gradient(135deg, rgba(10,106,176,.28), rgba(43,176,237,.28));\n  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);\n  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);\n  -webkit-mask-composite: xor; mask-composite: exclude; pointer-events:none; opacity:.7;\n}\n\n\/******** Grid: EXACTLY 2 columns on desktop, 1 on mobile ********\/\n#quay-crane .pc-grid.two-fixed{\n  display:grid; gap: 14px; margin-top: 10px;\n  grid-template-columns: 1fr; \/* mobile default: 1 column *\/\n}\n@media (min-width: 900px){\n  #quay-crane .pc-grid.two-fixed{ grid-template-columns: repeat(2, minmax(0,1fr)); }\n}\n#quay-crane .pc-card{\n  background:#fff; border:1px solid rgba(10,106,176,.10);\n  border-radius: 12px; padding: 14px; transition: transform .2s ease, box-shadow .2s ease;\n  box-shadow: 0 8px 22px rgba(10,29,56,.06);\n}\n#quay-crane .pc-card:hover{ transform: translateY(-3px); box-shadow: 0 14px 28px rgba(10, 29, 56, .12); }\n#quay-crane .pc-card-head{ display:flex; align-items:center; gap:10px; margin-bottom:6px; }\n#quay-crane .pc-card h3{ margin:0; font-size:1.05rem; font-weight:700; }\n\/* Use muted grey for lists in assumptions & modeling *\/\n#quay-crane #assumptions ul li,\n#quay-crane #modeling ul li { color: var(--muted); }\n#quay-crane .pc-card ul{ margin:0; padding-left: 1.15rem; color: var(--muted); }\n#quay-crane .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#quay-crane .pc-icon svg{ display:block; }\n\n\/******** Layout grid (sidebar + main) ********\/\n@media (min-width: 900px){\n  #quay-crane.pc-container.polished{ display:grid; grid-template-columns: 260px 1fr; gap:20px; align-items:start; }\n  #quay-crane .pc-hero{ grid-column: 1 \/ -1; }\n  #quay-crane .pc-toc{ grid-column: 1; align-self:start; }\n  #quay-crane .pc-main{ grid-column: 2; min-width:0; }\n}\n\n\/******** Links ********\/\n#quay-crane a{ color: var(--accent); text-decoration: none; }\n#quay-crane a:hover{ text-decoration: underline; }\n\n\/******** Tables (with restored hover animation) ********\/\n#quay-crane .pc-table-wrap{ margin-top: 8px; }\n#quay-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;  \/* animation restored *\/\n  will-change: transform;                                  \/* smooth GPU hint *\/\n}\n#quay-crane .pc-table:hover,\n#quay-crane .pc-table:focus-within{\n  transform: translateY(-3px);                             \/* lift on hover *\/\n  box-shadow: 0 10px 24px rgba(10, 29, 56, 0.12);          \/* soft shadow *\/\n}\n#quay-crane .pc-table th, #quay-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#quay-crane .pc-table thead th{\n  background: rgba(215,236,251,0.55); color: #000; font-weight: 700; text-align: center;\n}\n#quay-crane .pc-table tbody td:first-child{ color: #084EAE; }\n#quay-crane .pc-table tbody td:first-child a{ color:#084EAE; text-decoration:none; }\n#quay-crane .pc-table tbody td:first-child a:hover{ text-decoration:underline; }\n#quay-crane .pc-table tbody td:nth-child(2){ color: var(--muted); }\n\n\/******** Accessible focus ********\/\n#quay-crane :is(a,button,[tabindex]){ outline: none; }\n#quay-crane :is(a,button,[tabindex]):focus{ box-shadow: var(--ring); border-radius: 8px; }\n@media (prefers-reduced-motion: reduce){\n  #quay-crane .pc-table{ transition: none; }\n  #quay-crane .pc-table:hover,\n  #quay-crane .pc-table:focus-within{ transform: none; box-shadow: none; }\n}\n<\/style>\n<script>\n  (function(){\n    const researchLinks = [\n      { title: 'Berth Visit', url: 'https:\/\/aiportcenter.nl\/index.php\/berth-visit\/' },\n      { title: 'Terminal Operations', url: 'https:\/\/aiportcenter.nl\/index.php\/terminal-operations\/' }\n    ];\n\n    const linksByIndex = [];\n    const section = document.getElementById('research');\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 research item (if not present)\n    const toc = document.querySelector('#quay-crane .pc-toc ol');\n    if(toc){\n      const existing = toc.querySelector('a[href=\"#research\"]');\n      if(!existing){\n        const li = document.createElement('li');\n        const a = document.createElement('a'); a.href = '#research'; a.textContent = 'Research Problems';\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      }\n    }\n  })();\n<\/script>\n<!-- ========= \/END QUAY-CRANE SCHEDULING (POLISHED - CSS ONLY, TABLE HOVER RESTORED) ========= -->\n","protected":false},"excerpt":{"rendered":"<p>Home \u203a Port-Call Data Hub \u203a Research Problems \u203a Quay-Crane Scheduling Port-Call Optimization Data-Hub Quay-Crane Scheduling Problem The Quay-Crane Scheduling Problem (QCSP) determines how to sequence container handling tasks across multiple quay cranes assigned to a vessel, while respecting non-crossing and interference\/safety-margin constraints. Objectives typically include minimizing vessel turnaround\/makespan and smoothing crane workloads. QCSP is [&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-1187","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 Quay-Crane Scheduling Port-Call Optimization Data-Hub Quay-Crane Scheduling Problem The Quay-Crane Scheduling Problem (QCSP) determines how to sequence container handling tasks across multiple quay cranes assigned to a vessel, while respecting non-crossing and interference\/safety-margin constraints. Objectives typically include minimizing vessel turnaround\/makespan and smoothing crane workloads. QCSP is&hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1187","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=1187"}],"version-history":[{"count":13,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1187\/revisions"}],"predecessor-version":[{"id":1639,"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/pages\/1187\/revisions\/1639"}],"wp:attachment":[{"href":"https:\/\/aiportcenter.nl\/index.php\/wp-json\/wp\/v2\/media?parent=1187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}