Maritime Response Awareness ตอน 1: ตอบสนองต่อภัยที่วิเคราะห์มาให้ได้ ไม่ใช่รีบไปช้อปของ

Response ไม่ใช่การซื้อของอย่างเดียว — ต้องไล่ตั้งแต่ตีกรอบ จัดคนก่อนเครื่องมือ เขียนแผนและ SOP แลกข้อมูลกับเพื่อน ไปจนถึงขอให้เพื่อนช่วยตาม UNCLOS ผ่านตัวอย่างออสเตรเลียกับสิงคโปร์ แล้วปิดด้วยโค้ด Python ขีดเข็มสกัดเรือและเลือกลำที่ไปทันจริง

1 ตุลาคม 2026เวลาอ่าน 18 นาที#GIS#Software Engineer
Maritime Response Awareness ตอน 1: ตอบสนองต่อภัยที่วิเคราะห์มาให้ได้ ไม่ใช่รีบไปช้อปของ

Maritime Threat Awareness ปิดท้ายไว้ด้วยภาพที่ค่อนข้างใจร้าย จอขึ้นแดงแจ๋ ระบบยกมือว่าเรือลำนี้น่าสงสัยที่สุดของคืนนี้ คะแนนมีเหตุผลกำกับครบ alert วิ่งไปถึงโต๊ะที่ถูกคน แต่เรือตรวจการณ์ที่ว่างอยู่ลำเดียวกำลังเติมน้ำมันอยู่อีกฝั่งของอ่าว

ภาพนั้นคือโจทย์ของขาที่สามของ MDA ที่เลานิยามไว้ตั้งแต่บทความแรกว่า "ถ้ามันมีพิษจริง กูมีอะไรส่งไปได้บ้าง แล้วตอนนี้ของกูอยู่ตรงไหน" ชื่อเต็มๆ ของมันคือ Maritime Response Awareness การตอบสนองต่อภัยคุกคามที่วิเคราะห์ออกมาจากขั้น Threat Awareness

มันเป็นขั้นตอนสุดท้ายของ MDA ก่อนที่วงจะวนกลับไปเริ่ม Situational Awareness รอบใหม่ ถ้าเทียบกับ OODA Loop ที่เคยเล่าไว้ ก็คือจังหวะ Act นั่นเอง ส่วนตอนนี้ตั้งใจจะตอบสัญญาที่ค้างไว้ว่า พอหาภัยเจอแล้ว จะตอบสนองยังไงให้ ทันและถูกลำ โค้ดมีนะ ท้ายบทมีขีดเข็ม intercept ด้วย Python สี่ก้อน แต่ครึ่งแรกขอบ่นเรื่องที่อยากบ่นมานานก่อน

Response ไม่ใช่ตะกร้าช้อปปิ้ง — ซื้อของคือบรรทัดสุดท้าย ​

เรื่องที่อยากเน้นย้ำที่สุดของตอนนี้คือ ผู้บริหารหน่วยงานรัฐบริษัทบ้านเรามักจะคิดว่า Response คือ การซื้อของ อันนั้นน่ะอย่างสุดท้ายเลย มันมีอีกหลายอย่างที่ต้องทำก่อนจะไปถึงตรงนั้น

ถ้าไล่ตามลำดับ ของที่ต้องมีก่อนหน้าตาเป็นประมาณนี้

  • วางกำลัง แบ่งเขต ตีกรอบ — ใครรับผิดชอบพื้นที่ไหน ช่วงงานไหน แล้วใครถืออำนาจสั่ง
  • จัดสรรทรัพยากร — คนอันดับแรก ที่อยู่ของคน แล้วค่อยมาเงิน แล้วก็เครื่องมือ
  • แผนการปฏิบัติ แผนต่างๆ และ SOP — เขียนไว้ก่อน และซ้อมก่อนวันเกิดเหตุ
  • แลกเปลี่ยนข้อมูลข่าวสารกับหน่วยงานอื่น — ทั้งในประเทศและเพื่อนบ้าน
  • ขอรับการสนับสนุนเมื่อเรื่องอยู่นอกเขต — ตามกรอบของ UNCLOS

สังเกตว่าเครื่องมือโผล่มาแค่ครั้งเดียวในลิสต์ และยังไปนอนอยู่ท้ายแถวของข้อสองด้วย ซึ่งไม่ได้แปลว่าเครื่องมือไม่สำคัญ มันแปลว่าเครื่องมือที่ซื้อมาก่อนข้ออื่นจะพร้อม ก็จะจอดเฉยๆ รอข้ออื่นอยู่ดี

แผนภาพหัวเรื่อง Response ไม่ใช่ตะกร้าช้อปปิ้ง คำโปรยใต้หัวเรื่องว่าไล่ทีละขั้นจากล่างขึ้นบน ซื้อของคือขั้นสุดท้าย เป็นบันไดสีเขียวอมฟ้าไล่จากซ้ายล่างขึ้นไปขวาบน ขั้นที่หนึ่งติดป้ายว่าวางกำลัง แบ่งเขต ตีกรอบ ใครดูตรงไหน ใครสั่งได้ มีไอคอนแผนที่แบ่งเป็นโซนสามสี ขั้นที่สองติดป้ายว่าจัดสรรทรัพยากร แบ่งเป็นขั้นย่อยสี่ขั้นเรียงกันคือคน ที่อยู่ของคน เงิน และเครื่องมือ พร้อมไอคอนคน บ้าน เหรียญ และประแจกับเรือ ขั้นที่สามติดป้ายว่าแผนและ SOP เขียนไว้ก่อน ซ้อมก่อนวันจริง มีไอคอนแฟ้ม SOP กับปฏิทิน ขั้นที่สี่ติดป้ายว่าแลกข้อมูลกับหน่วยอื่น ในประเทศและเพื่อนบ้าน มีไอคอนอาคารสองหลังกับลูกศรสองทาง ขั้นที่ห้าติดป้ายว่าขอสนับสนุนนอกเขต ตามกรอบ UNCLOS มีเรือสองลำคนละธงคั่นด้วยเส้นเขตทางทะเล ถัดไปเป็นขั้นที่หกแยกออกมาเป็นกรอบเส้นประสีส้ม เขียนว่าซื้อของ มาทีหลังสุด มีไอคอนรถเข็นช้อปปิ้งตั้งอยู่ด้านบน มุมซ้ายล่างมีคนตัวเล็กสีแดงติดป้ายว่าใจร้อน เส้นประโค้งจากตัวเขากระโดดข้ามทุกขั้นตรงไปที่รถเข็น กลางทางมีกากบาทสีแดงพร้อมข้อความว่ากระโดดข้ามทุกขั้นไปซื้อก่อน = ได้ของมาจอดรอขั้นอื่นอยู่ดี

ห้าข้อนี้ไม่ได้มโนเอง ถ้าไปดูประเทศที่ทำเรื่องนี้จริงจังใกล้บ้านเรา ทั้งออสเตรเลียกับสิงคโปร์ จะเจอของครบทุกข้อ ไล่ดูกันทีละข้อเลย

วางกำลัง แบ่งเขต ตีกรอบ — ใครดูตรงไหน ใครสั่งได้ ​

เริ่มจากบ้านจิงโจ้ที่ค้างไว้ตั้งแต่ตอนที่แล้ว Maritime Border Command (MBC) ของ Australian Border Force (ABF) ไม่ได้เป็นแค่ห้องประสานงานที่นั่งส่งอีเมล มี HQ อยู่ที่ Canberra คุมคนกว่า 1,000 คน ทั้งลูกเรือของเรือ ABF และเรือกองทัพเรือ (RAN) ไปจนถึงเครื่องบินเฝ้าระวังและตอบสนอง

จุดที่เลาชอบที่สุดคือเก้าอี้ผู้บัญชาการ คนที่นั่งเป็นพลเรือตรีของ RAN ที่สาบานตนเป็นเจ้าหน้าที่ ABF ด้วย เลยสั่ง asset ได้ทั้งของ ABF และของกองทัพ (ADF) จากเก้าอี้ตัวเดียว งานหลายหน่วยมักติดตรงที่เรือเป็นของหน่วยหนึ่ง เครื่องบินเป็นของอีกหน่วย เขาแก้ด้วยการให้คนคนเดียวใส่หมวกสองใบ

ฝั่งกองทัพที่มาร่วมใน MBC ใช้ชื่อว่า Operation Resolute ดูแลพื้นที่ราว 10% ของผิวโลก ของที่ "may be allocated" มีตั้งแต่เครื่องบินลาดตระเวนของกองทัพอากาศทางตะวันตกเฉียงเหนือและทางเหนือ เรือตรวจการณ์ของกองทัพเรือที่ออกทุกวัน ไปจนถึงหน่วยลาดตระเวนของกองทัพบก และจำนวนก็ขึ้นกับว่าได้รับมอบ asset มาเท่าไหร่ คำสำคัญอยู่ที่ allocated กำลังพวกนี้ถูกมอบมาให้ใช้ ไม่ได้เป็นของ MBC ตั้งแต่เกิด

การแบ่งเขตไม่จำเป็นต้องเป็นเส้นบนแผนที่เสมอไป Operation Sovereign Borders ที่ดูแลเรื่องลักลอบเข้าเมืองทางเรือ แบ่ง task group ตาม ช่วงของงาน เป็นสามกลุ่ม

  • Disruption and Deterrence — AFP นำ ตัดตอนตั้งแต่ต้นทาง
  • Detection, Interception and Transfer — MBC นำ ตรวจจับ สกัด และส่งต่อ
  • Regional Processing, Resettlement and Returns — งานหลังจากนั้นทั้งหมด

อีกอย่างที่ต้องตีกรอบให้ชัดคือ จุดส่งไม้ รายงานของ ANAO ฉบับปี 2009–10 เล่าว่าหน่วยรุ่นก่อนของ MBC วางแผนบินลาดตระเวนและคุมเรือที่ออกไป "respond to surveillance contacts" โดยทำ "on behalf of AFMA as the enforcement authority" แปลว่าคนตรวจจับและส่งเรือไป เป็นคนละคนกับคนที่ถืออำนาจบังคับใช้กฎหมายเรื่องประมง (AFMA) ระบบ C2 ที่ไม่รู้ว่าไม้ถูกส่งต่อตรงไหน ก็จะส่ง alert ไปหาคนที่ทำอะไรกับมันไม่ได้

ข้ามมาฝั่งสิงคโปร์ โครงของเขาชื่อ National Maritime Security System (NMSS) ตั้งปี 2011 เป็นกรอบระดับทั้งรัฐบาลสำหรับ "detection and monitoring of maritime security threats and the coordination of operational responses" สายสั่งการเรียงเป็นชั้นชัดเจน

  • ชั้นบน ปลัดกระทรวงกลาโหมกับปลัดกระทรวงมหาดไทยนั่งเป็นประธานร่วมของ Homefront Crisis Executive Group (MARSEC)
  • ถัดลงมาเป็น Crisis Management Group (MARSEC) ที่ให้ ผู้บัญชาการทหารเรือเป็น Crisis Manager "to ensure a unified command and control"
  • ชั้นปฏิบัติคือ SMCC (Singapore Maritime Crisis Centre) ที่ Changi C2 Centre รวม incident manager จากกองทัพเรือ การท่าเรือ (MPA) ตรวจคนเข้าเมือง (ICA) ตำรวจน้ำ (PCG) และศุลกากร ใช้งานเต็มรูปแบบปี 2013 แล้วช่วงหลังดึงตำรวจกับหน่วยป้องกันภัยพลเรือนเข้ามาด้วย

ฝั่งสหรัฐฯ ก็มีโครงคล้ายกัน ชื่อ MOTR Plan (2006) กับ GMCC ที่ตั้งเมื่อ ก.พ. 2010 ใน USCG ทำหน้าที่ประสาน 24 ชั่วโมงเวลามีเหตุทางทะเลที่พาดหลายกระทรวง สามประเทศ สามชื่อ แต่คำถามเดียวกันเป๊ะ พอเกิดเหตุแล้ว ใครเป็นคนสั่ง ต้องตอบได้ก่อนเรือลำแรกจะออกจากท่า

คนก่อน ที่อยู่ของคน แล้วค่อยเงิน เครื่องมือมาทีหลังสุด ​

ลำดับ "คนก่อนเครื่องมือ" ฟังดูเหมือนคำคมติดผนังห้องประชุม จนกว่าจะไปเปิดรายงาน ANAO ฉบับที่ 21 ปี 2018–19 ที่ตรวจการซ่อมบำรุงและสนับสนุนเรือตรวจการณ์ Cape Class แปดลำของ ABF ตัวเลขในนั้นเล่าเรื่องได้ดีกว่าคำคมเยอะ

  • ตอนอนุมัติงบซื้อ Cape แปดลำ (งบปี 2010) รัฐบาลตั้งไว้ว่าต้องลาดตระเวนรวม 2,400 วันต่อปี (ลำละ 300 วัน) ซึ่งเป็นก้อนราว 73% ของเป้า ทั้งกองเรือ ABF ที่ 3,320 วันต่อปี ที่เหลือมาจากเรือลำอื่นในกอง
  • ปี 2016–17 ทั้งกองทำได้ 2,626 วัน ในนั้นเป็นของ Cape 1,987 วัน ส่วนที่ขาดไป รายงานบอกว่าเหตุหลักคืองานแก้ defect ของ Cape
  • ปี 2017–18 ทั้งกองเหลือ 2,036 วัน หรือแค่ 61% ของเป้า (ปีนี้รายงานไม่ได้แยกยอดของ Cape ไว้)
  • เรือหนึ่งลำจะพร้อมออกต้องมีลูกเรือ 18 คน ต่อรอบลาดตระเวน 28 วัน ซึ่งพอสำหรับชุดตรวจค้นสองชุด
  • ABF ประเมินว่าต้องมีลูกเรือราว 360 คน ลดเป้าเหลือ 342 แล้ว 332 เพราะงบ และพอถึง ส.ค. 2018 ของจริงยัง ต่ำกว่า 332
  • รายงานเขียนตรงๆ ว่า "patrols have been cancelled and days lost due to insufficient crew numbers"

เรือมีอยู่ในมือแท้ๆ แต่ลาดตระเวนส่วนหนึ่งถูกยกเลิกเพราะคนไม่พอ นี่คือหลักฐานว่า คนคือคอขวด แบบไม่ต้องตีความ

แล้วคนก็ไม่ได้เสกได้ในไตรมาสเดียว Officer of the Watch ต้องมีชั่วโมงทะเล 12 เดือน ซึ่งกว่าจะสะสมได้ก็ราวสองปี ส่วนผู้บังคับการเรือต้อง 36 เดือน หรือราว หกปี ข้อเสนอให้ทำ workforce strategy ที่ออกมาตั้งแต่ audit รอบปี 2014–15 ก็ยังไม่ได้ทำจนถึง ต.ค. 2018 ส่วนความเห็นของผู้เชี่ยวชาญใน ASPI Strategist ปี 2019 (อันนี้ความเห็นของเขานะ ไม่ใช่ตัวเลขทางการ) ก็ชี้ไปทางเดียวกัน ว่า MBC จัด C2 ได้ดีแล้ว จุดอ่อนอยู่ที่การหา ฝึก และรักษาลูกเรือ ขาดไปเท่าไหร่กองทัพก็ต้องมาเติม

ข้อ ที่อยู่ของคน ก็อยู่ในรายงานเล่มเดียวกัน เรือแต่ละลำต้องกลับมาจอดที่ Darwin ราว 48 วันต่อปีเพื่อเปลี่ยนลูกเรือและซ่อม ช่วงแรกไม่มีท่าเทียบที่แน่นอนด้วยซ้ำ ถึงขั้นที่ ต.ค. 2014 ต้องเปลี่ยนลูกเรือกลางทะเลขณะทอดสมอ ลองนึกภาพตัวเองกลับจากทะเลมาเกือบเดือน แล้วไม่มีท่าให้ขึ้นดูสิ

ส่วน เงิน รายงานบอกว่าค่าบำรุงรักษากับค่าลูกเรือรวมกันเป็น 81% ของค่าใช้จ่ายดำเนินงาน แปลว่าเงินที่ต้องจ่ายทุกปีเพื่อให้เรือออกทะเลได้ ส่วนใหญ่ไปอยู่ที่คนกับการดูแล ไม่ได้อยู่ที่ตัวเรือ

ตัวชี้วัดของเขาก็เปลี่ยนไปแล้วตามเวลา คำตอบต่อวุฒิสภาเมื่อ ต.ค. 2025 บอกว่าเป้าเปลี่ยนมาเป็น "85% operational availability" (ไม่นับเรือที่เข้าซ่อมตามแผน) และทำได้ในปี 2024–25 ใครจะเอาไปเทียบตรงๆ กับเป้า 3,320 วันของทั้งกองในปี 2017–18 อย่าเลยนะฮะ กองเรือกับนิยามเปลี่ยนไปหมดแล้ว

แล้ว เครื่องมือ ล่ะ ABF ก็ซื้อนะ แต่ดูวิธีเขียนประกาศสัญญาเฝ้าระวังทางอากาศรอบใหม่ที่จะเริ่ม 1 ม.ค. 2028 ของที่ซื้อคือ "11 fully crewed… aircraft… operating 24/7, year round" จุดขายที่เขียนไว้คือ "near real-time information sharing" กับ "strengthened national common operating picture" ซื้อของทั้งทียังต้องซื้อคนแถมมา แล้วยังวนกลับไปที่การแลกข้อมูลอีก ส่วนเรือ Austal ก็เพิ่งได้สัญญาต่อเรือ Evolved Cape-class ให้ ABF เพิ่มอีกสองลำเมื่อ พ.ค. 2026 รวมเป็นหกลำ ซึ่งทุกลำก็ต้องมีคนไปขับเหมือนเดิมแหละ

แผน SOP และการซ้อม — วันเกิดเหตุไม่ใช่วันเปิดคู่มือ ​

มีคนมีเรือแล้ว ข้อต่อมาคือใครทำอะไร ตอนไหน ตามลำดับไหน ซึ่งต้องเขียนไว้ก่อน ไม่ใช่มาคิดสดตอนตีสาม

ที่ออสเตรเลีย รายงาน ANAO ปี 2009–10 เล่าว่าหน่วยรุ่นก่อนของ MBC ใช้ "risk-based approach to the planning of its asset deployment" โดยลำดับความสำคัญมาจาก Statement of Intent รายไตรมาส กับ Operational Response Working Group รายเดือน ที่นั่งคุยกับหน่วยงานลูกค้า เชื่อมกับ CRAM ในตอนที่แล้วพอดี CRAM บอกว่าช่องไหนแดง ส่วนวงประชุมพวกนี้คือที่ที่ลำดับความสำคัญของการวางกำลังถูกตกลงกับหน่วยที่เป็นเจ้าของเรื่อง

ทางสิงคโปร์ ใต้ NMSS มีสองกลุ่มที่แบ่งงานกันชัด

  • NMSG ทำ sense-making ใช้ AI กับ analytics profile เรือที่ผ่านราว 1,000 ลำต่อวัน อันนี้คือฝั่ง Situational กับ Threat
  • NMOG ดูแลการฝึก protocol กลางที่ทุกหน่วยใช้ร่วมกัน การฝึก Exercise Highcrest และทบทวนกรอบ response "to close any operational gaps" อย่างการวางแผนป้องกันหลายชั้นให้งานวันชาติ (NDP) ปี 2016

ส่วนคนที่ออกไปทำงานจริงคือ MSTF (Maritime Security Task Force) ที่กองทัพสิงคโปร์ตั้งปี 2009 ใช้เรืออย่าง Littoral Mission Vessel ภายในมี Comprehensive Maritime Awareness Group ทำภาพสถานการณ์เพื่อ "deciding the allocation of MSTF assets in day-to-day maritime operations" และมี Operations Group ที่ "conducts daily patrols, boarding and escort operations in the Singapore Strait" พอเกิดเหตุ MSTF ทำงานโดยมี SMCC เป็นคนประสาน จับมือไปกับหน่วยงานทางทะเลอื่นๆ ของชาติ ปัจจุบันชื่อหน่วยตามข่าวของกองทัพเรือสิงคโปร์ใช้ว่า "MSTF / Maritime Security (MARSEC) Command"

ถ้าอ่านรอบเดียวแล้วจับลำดับได้จะเห็นว่า โมเดลสิงคโปร์วาง กรอบ สายบังคับบัญชา การฝึก และ protocol ไว้ก่อน ระบบ AI ที่ profile เรือพันลำต่อวันเป็นแค่ชิ้นหนึ่งในนั้น ไม่ได้เป็นจุดเริ่ม ตรงกับที่บ่นไว้ข้างบนไม่มีผิด

แล้วเครื่องมือ C2 เข้ามาตรงไหน มันเข้ามา รองรับแผน ไม่ได้มาแทนแผน ของที่เคยเล่าไว้ในบล็อกนี้ก็เอามาต่อกันเป็นภาพได้

  • ห้องคุยก่อนแผนที่ — IORIS ในตอนที่ 5 มีห้องแชทของเคส แผนที่ร่วม เครื่องมือ vessel intercept บนแผนที่ และฟอร์ม ซึ่งฟีเจอร์แรกของมันคือแชท ไม่ใช่แผนที่ COP เพราะตอนเกิดเหตุ ของที่ต้องใช้ก่อนคือช่องทางคุยกับคนถือข้อมูลอีกครึ่ง
  • ฟอร์มตรวจค้น — ในตอนเดียวกัน ผลตรวจที่กรอกกลับมาคือปลายทางของ Response และเป็น ground truth ให้ขาอื่น
  • ส่ง track ระหว่างเรือ — เรือที่วิ่งไปสกัดต้องเห็นเป้าชุดเดียวกับศูนย์ ซึ่งเป็นงานของ Tactical Data Link
  • ซ้อมแผนโดยไม่ต้องเผาน้ำมันจริง — ต่อ simulation เข้ากับ C2 ผ่าน HLA อย่างที่เล่าไว้ใน Kirov Reporting เอาไว้ทดสอบ SOP ก่อนวันจริง

SOP ที่ไม่เคยถูกซ้อมก็เหมือน backup ที่ไม่เคยลอง restore จนวันที่ต้องใช้จริงถึงได้รู้ว่ามันใช้ไม่ได้จริง หรือเก่าไปแล้ว

แลกข้อมูล แล้วขอให้เพื่อนช่วย — เพราะเส้นเขตในทะเลมีจริง ​

เรื่องแลกข้อมูลเล่ายาวไปแล้วในตอนที่ 6 รอบนี้ขอดูอีกมุม คือตอนที่ข้อมูลที่แลกกันกลายเป็น การลงมือ ของคนอื่น

IFC ที่สิงคโปร์ตั้งขึ้นมาเพื่อส่ง "actionable information to cue responses by regional and international navies, coast guards" มีสองเคสที่เห็นภาพชัดมาก

  • MV Hai Soon 12 (พ.ค. 2016) เรือบรรทุกน้ำมันถูกปล้น IFC ตามตัวเรือผ่าน GPS สำรองของเจ้าของสินค้า แล้วแชร์พิกัดให้ ILO (นายทหารติดต่อที่ประจำอยู่ในศูนย์) สุดท้าย "The Indonesian Navy was able to mobilise its assets and recover the vessel"
  • MV Sunrise Glory (7 ก.พ. 2018) IFC ตามเรือลำนี้อยู่สามเดือน ส่งข้อมูลผ่าน ILO ของอินโดนีเซีย แล้วกองทัพเรืออินโดนีเซียก็จับได้พร้อมยาไอซ์ราวหนึ่งตัน

ทั้งสองเคส คนที่เห็นกับคนที่ลงมือเป็นคนละประเทศ นี่คือ การขอรับการสนับสนุนนอกเขต ในชีวิตจริง เราเห็น แต่เรือเราเข้าไปตรงนั้นไม่ได้ ก็ส่งให้คนที่เข้าได้

อีกรูปแบบคือ Malacca Straits Patrol ของอินโดนีเซีย มาเลเซีย สิงคโปร์ และไทย ส่วนทางทะเลเริ่มปี 2004 เป็น "co-ordinated sea patrols" คือแต่ละชาติลาดตระเวนในน่านน้ำตัวเอง แต่แชร์ข้อมูลกัน ส่วนทางอากาศชื่อ Eyes-in-the-Sky บินร่วมกันโดยมี Combined Mission Patrol Team ที่ผู้บังคับภารกิจมาจากชาติเจ้าของน่านฟ้า ร่วมกับเจ้าหน้าที่ชาติอื่น แล้วข้อมูลวิ่งผ่าน MSP Information System ที่ IFC ดูแล ส่ง "to all Monitoring and Action Agencies… real-time" ToR กับ SOP ของมันลงนามกันตั้งแต่ 21 เม.ย. 2006 ปีเดียวกับที่ Lloyd's Joint War Committee ถอดช่องแคบออกจาก war-risk area ล่าสุดที่ประชุมเมื่อ ม.ค. 2026 ก็ย้ำว่า "timely information sharing… would be critical" และวางแผนฝึก "to validate processes and responses in early 2027" เห็นมั้ย ทำกันมาราวยี่สิบปีแล้วก็ยังต้องซ้อมอยู่ดี

ทำไมต้องขอเพื่อน ไม่ไล่ไปจับเองเลยล่ะ คำตอบอยู่ใน UNCLOS อนุสัญญากฎหมายทะเลที่วางกติกาไว้ว่าใครทำอะไรได้ตรงไหน ขอหยิบเฉพาะข้อที่คนทำระบบ Response ควรรู้

  • ข้อ 111 hot pursuit — ไล่ตามได้ถ้าเริ่มตอนเรืออยู่ในเขตของเรา และต้องไล่ ไม่ขาดตอน ต้องให้สัญญาณหยุดที่เห็นหรือได้ยินได้ก่อน คนไล่ต้องเป็นเรือรบ อากาศยานทหาร หรือเรือรัฐที่มีเครื่องหมายชัด และ สิ้นสุดทันทีที่เรือเป้าเข้าทะเลอาณาเขตของรัฐตัวเองหรือรัฐที่สาม
  • ข้อ 111(6)(b) — อากาศยานที่ไล่ต้องตามต่อไป "until a ship or another aircraft of the coastal State, summoned by the aircraft, arrives to take over" แปลว่าเห็นจากบนฟ้าเฉยๆ ยังจับไม่ได้ การส่งไม้จากเครื่องบินให้เรือจึงเป็นเรื่องของกฎหมาย ไม่ใช่แค่เรื่องความสะดวก
  • ข้อ 73 — ใน EEZ ขึ้นเรือ ตรวจ จับกุมเรื่องประมงได้ แต่ต้องปล่อยเรือและลูกเรือทันทีเมื่อวางประกันพอสมควร ห้ามจำคุก (เว้นแต่ตกลงกันไว้) และต้องแจ้งรัฐเจ้าของธงทันที
  • ข้อ 100–107 โจรสลัด — ทุกรัฐ "shall cooperate to the fullest possible extent" แต่นิยามต้องเกิดในทะเลหลวงหรือนอกเขตรัฐใด การปล้นในช่องแคบสิงคโปร์ทางกฎหมายจึงเป็น "armed robbery against ships" ไม่ใช่ piracy
  • ข้อ 108 และอนุสัญญาเวียนนา 1988 ข้อ 17 — เรื่องยาเสพติด รัฐเจ้าของธงขอความร่วมมือจากรัฐอื่นได้ และถ้าจะขึ้นเรือต่างชาติ ต้องขอรัฐเจ้าของธงยืนยันทะเบียนและอนุญาตก่อน แต่ละรัฐต้องตั้งหน่วยที่ตอบคำขอแบบ "expeditiously"
  • ข้อ 98 — รัฐชายฝั่งต้องมีบริการค้นหาและกู้ภัย (SAR) และร่วมมือกับเพื่อนบ้าน "by way of mutual regional arrangements"

ภาคีของอนุสัญญา SUA ฉบับ 2005 ไปไกลกว่านั้นอีกขั้น ข้อ 8bis ให้แจ้งล่วงหน้าได้ว่าถือว่าอนุญาตให้ขึ้นเรือ "if there is no response from the flag State within four hours" เห้ย นี่มัน SLA สี่ชั่วโมงที่เขียนลงสนธิสัญญา ชัดๆ คนทำระบบอ่านแล้วน่าจะขำแห้งๆ เหมือนเลา

ถ้าอยากเห็นว่าขีดความสามารถหยุดตรงเส้นเขตยังไง รายงานครึ่งปี 2026 ของ ReCAAP เล่าว่าตำรวจน้ำสิงคโปร์เฝ้า 24 ชั่วโมง และมี Emergency Response Team ขึ้นตรวจค้นเรือ "when they are within the port limits of Singapore" ประโยคสั้นๆ แต่บอกทุกอย่าง ต่อให้เรือเร็วแค่ไหน อำนาจก็หยุดอยู่ที่เส้น

มุมคนทำระบบ ทั้งหมดข้างบนแปลว่า เส้นเขตทางทะเลพร้อมสถานะทางกฎหมายของแต่ละพื้นที่ ต้องเป็น layer หนึ่งในระบบ C2 ไม่ใช่เส้นสวยๆ ไว้โชว์บนแผนที่ แล้วโค้ดสกัดเรือต้องถามมันทุกครั้งว่า จุดที่เราจะไปถึง เรามีสิทธิ์ทำอะไรตรงนั้นไหม

ขีดเข็ม intercept — ไปทางไหน ถึงกี่โมง ​

ได้เวลาเขียนโค้ดแล้ว คำถามพื้นฐานที่สุดของ Response คือ ถ้าเรือเราออกตอนนี้ ต้องถือเข็มทิศไหน แล้วจะไปเจอเป้าที่ไหน กี่โมง บนจอ C2 มันคือเส้นที่ลากจากเรือเราไปหาจุดนัดพบ อย่างที่ IORIS มีเครื่องมือ vessel intercept บนแผนที่นั่นแหละ

สมมติให้เป้าวิ่งตรงด้วยความเร็วคงที่ ตำแหน่งเป้าเทียบกับเรา P ความเร็วเป้า V และเรือเราวิ่งได้ v นอต เราอยากได้เวลา t ที่ระยะที่เราวิ่งไปได้ เท่ากับระยะไปถึงจุดที่เป้าจะอยู่พอดี

|P + V t| = v t

ยกกำลังสองทั้งสองข้าง จัดรูปใหม่ ได้สมการกำลังสองธรรมดาๆ

(|V|² − v²) t² + 2 (P·V) t + |P|² = 0

แก้หา t แล้วเอารากบวกที่น้อยที่สุด จุดสกัดคือ P + V t ส่วนหัวเรือก็คือทิศจากเราไปจุดนั้น คณิต ม.ปลายล้วนๆ easy mode

ในตัวอย่างใช้ระนาบแบนหน่วยไมล์ทะเล (nm) แกน x ชี้ตะวันออก แกน y ชี้เหนือ ระยะไม่กี่สิบ nm ใช้ได้สบาย ถ้าต้องแปลงจาก lat/lon ก็ใช้ท่าฉายพิกัดด้วย pyproj แบบในตอนที่แล้ว ส่วนค่าความเร็ว ระยะ และตำแหน่งทุกตัวในบทความนี้ เป็นค่าสมมติทั้งหมด

python
import math

def velocity(course, speed):
    """course องศาตามเข็มจากทิศเหนือ (แบบเข็มทิศ) -> (vx ตะวันออก, vy เหนือ) หน่วย kn"""
    c = math.radians(course)
    return speed * math.sin(c), speed * math.cos(c)

def intercept(target_xy, target_course, target_speed, own_speed):
    """ตำแหน่งเป้าเทียบกับเรือเรา (nm, x=ตะวันออก y=เหนือ) สมมติเป้าวิ่งตรงความเร็วคงที่
    คืน (t ชั่วโมง, จุดสกัด (x, y), course ที่ต้องถือ) หรือ None ถ้าไปไม่ทัน"""
    px, py = target_xy
    vx, vy = velocity(target_course, target_speed)
    # |P + V t| = v t  ->  (|V|² - v²) t² + 2 (P·V) t + |P|² = 0
    a = vx * vx + vy * vy - own_speed ** 2
    b = 2 * (px * vx + py * vy)
    c = px * px + py * py
    if abs(a) < 1e-9:                      # เร็วเท่ากันเป๊ะ สมการเหลือเส้นตรง
        roots = [-c / b] if b < 0 else []
    else:
        disc = b * b - 4 * a * c
        if disc < 0:
            return None                    # ไม่มีรากจริง = ไม่มีวันไปถึงจุดเดียวกันพร้อมกัน
        r = math.sqrt(disc)
        roots = [(-b - r) / (2 * a), (-b + r) / (2 * a)]
    roots = [t for t in roots if t > 0]
    if not roots:
        return None
    t = min(roots)                         # เอาเวลาที่เร็วที่สุด
    ix, iy = px + vx * t, py + vy * t
    course = math.degrees(math.atan2(ix, iy)) % 360
    return t, (ix, iy), course

# ค่าสมมติ: เป้าอยู่ทิศตะวันออก 20 nm วิ่งขึ้นเหนือ 12 kn เรือเราทำได้ 25 kn
t, (ix, iy), course = intercept((20, 0), target_course=0, target_speed=12, own_speed=25)
print(f"ถึงใน {t:.3f} ชม. (~{t * 60:.0f} นาที)")
print(f"ถือ course {course:05.1f}°  ระยะทาง {25 * t:.1f} nm")
print(f"จุดสกัด ตะวันออก {ix:.1f} nm เหนือ {iy:.1f} nm")
# ถึงใน 0.912 ชม. (~55 นาที)
# ถือ course 061.3°  ระยะทาง 22.8 nm
# จุดสกัด ตะวันออก 20.0 nm เหนือ 10.9 nm

ผลคือถือหัวเรือ 061° วิ่ง 22.8 nm ราว 55 นาทีเจอกัน สังเกตว่าเราไม่ได้หันหัวไปหาเป้าตรงๆ ที่ 090° แต่ ยิงนำ ไปดักข้างหน้า ถ้าหันไปหาตำแหน่งเป้าที่เห็นตอนนี้แล้วคอยปรับตามไปเรื่อยๆ เส้นทางจะโค้งเป็นหางหมา เสียทั้งเวลาทั้งน้ำมัน ลองจำลองในสถานการณ์เดียวกันนี้ดู หางหมาไปทันเป้าที่ราว 62 นาที 26.0 nm ขณะที่ยิงนำใช้แค่ 55 นาที 22.8 nm

แผนภาพหัวเรื่อง สกัดเรือ: ยิงนำไปดักข้างหน้า ไม่ใช่ไล่ตามหาง คำโปรยว่าค่าสมมติตามโค้ดในบทความ วาดตามสเกลจริง 1 ช่อง = 1 ไมล์ทะเล แผงซ้ายเป็นตารางทะเลสีฟ้าอ่อน มุมซ้ายล่างเป็นเรือเราสีน้ำเงิน 25 นอต ทางขวาห่างไป 20 ไมล์ทะเลเป็นเรือเป้าสีส้ม 12 นอตวิ่งขึ้นเหนือ เส้นประสีส้มของเป้ามีจุดบอกตำแหน่งที่ 15 30 และ 45 นาที เส้นทึบสีน้ำเงินยิงนำ course 061 องศา 22.8 ไมล์ทะเล มีจุดทุก 15 นาทีเช่นกัน ไปบรรจบเป้าที่ดาวสีแดงติดป้ายว่าจุดสกัด 55 นาที (20.0, 10.9) สองลำถึงพร้อมกัน เส้นโค้งสีเทาคือไล่ตามหางหมา (pure pursuit) หันหัวตามเป้าไปเรื่อยๆ ไปทันเป้าเลยจุดสกัดขึ้นไปทางเหนือ ติดป้ายว่าหางหมาไล่ทันตรงนี้ 62 นาที 26.0 ไมล์ทะเล เส้นประแนวนอนด้านล่างคือหันหัวไปหาเป้าตรงๆ 090 องศา มุมซ้ายบนมีกล่องเทียบ เรา 25 kn เป้า 12 kn ยิงนำ 55 นาที 22.8 nm กับไล่ตามหางหมา 62 นาที 26.0 nm และบอกว่าจุดกลมคือตำแหน่งทุก 15 นาที แผงขวาเป็นแผงสูงหัวข้อ ถ้าเราช้ากว่า: เรา 15 kn · เป้า 20 kn ตรงกลางเป็นวงกลมเส้นประสีเขียวติดป้ายว่าโซนที่เราไปถึงก่อนเป้า (วงกลม Apollonius) วงนี้ล้อมรอบเรือเราซึ่งอยู่ค่อนไปทางขอบบนของวง ขอบวงประคือจุดที่เรากับเป้าไปถึงพร้อมกันพอดี เป้าอยู่นอกวงด้านบน ถ้าวิ่งเข้าหาในโซนจะถูกดักทันที่ขอบวงพร้อมเครื่องหมายถูก ถ้าวิ่งหนีออกนอกโซนมีกากบาทแดงกับข้อความว่าหันหัวทางไหนก็สกัดไม่ได้ ด้านล่างแผงสรุปว่าสกัดได้เฉพาะเป้าที่วิ่งเข้าหาในโซนนี้ เรือช้าที่จอดถูกที่ มีค่ากว่าเรือเร็วที่จอดผิดที่

แล้วถ้าเรือเราช้ากว่าเป้าล่ะ สมการเดิมตอบได้เลย ถ้ารากไม่มีหรือติดลบหมด แปลว่าสกัดไม่ได้ ไม่ว่าจะหันหัวไปทางไหน

python
# ต่อจากก้อนที่แล้ว — เรือเรามีแค่ 15 kn แต่เป้าวิ่ง 20 kn (ค่าสมมติ)
cases = {
    "เป้าวิ่งหนี (ขึ้นเหนือ)":       ((10, 0), 0),
    "เป้าวิ่งเฉียงออก (ตะวันออก)":  ((10, 0), 90),
    "เป้าวิ่งตัดหน้า (ไปตะวันตก)":   ((20, 5), 270),
}
for name, (pos, crs) in cases.items():
    res = intercept(pos, target_course=crs, target_speed=20, own_speed=15)
    if res is None:
        print(f"{name} -> สกัดไม่ได้")
    else:
        t, (ix, iy), c = res
        print(f"{name} -> {t * 60:.0f} นาที course {c:05.1f}° ที่ ({ix:.1f}, {iy:.1f})")
# เป้าวิ่งหนี (ขึ้นเหนือ) -> สกัดไม่ได้
# เป้าวิ่งเฉียงออก (ตะวันออก) -> สกัดไม่ได้
# เป้าวิ่งตัดหน้า (ไปตะวันตก) -> 37 นาที course 057.1° ที่ (7.7, 5.0)

เรือช้ากว่าไม่ได้แปลว่าหมดสิทธิ์ ถ้าเป้าวิ่งตัดเข้ามาหา ช้ากว่ายังดักทันได้ ในทางเรขาคณิต จุดทั้งหมดที่เราไปถึงได้ไม่ช้ากว่าเป้าจะรวมกันเป็นวงกลม Apollonius ที่ล้อมเรือเราไว้ (เรือเราไม่ได้อยู่กลางวงเป๊ะ วงจะเยื้องหนีไปฝั่งตรงข้ามกับเป้า) ตัวเป้าอยู่นอกวง เราจะดักทันก็ต่อเมื่อเส้นทางวิ่งของมันตัดเข้ามาในวง ถ้าเส้นทางไม่ผ่านวงเลย หันหัวไปทางไหนก็สกัดไม่ได้ นี่เองคือเหตุผลที่คำว่า "วางกำลัง" มาเป็นข้อแรก เรือช้าที่จอดอยู่ถูกที่ มีค่ากว่าเรือเร็วที่จอดผิดที่

ลำที่ใกล้สุดไม่ใช่ลำที่ใช่ — เลือกเรือ เช็คเส้นเขต แล้วเผื่อเป้าเลี้ยว ​

ของจริงไม่ได้มีเรือลำเดียว และคำถามก็ไม่ใช่ "ลำไหนใกล้สุด" แต่เป็น "ลำไหน ไปได้จริง และถึงก่อน" ซึ่งต้องเอาทุกอย่างที่บ่นมาครึ่งบทความมาเป็นเงื่อนไข ลูกเรือพร้อมไหม ต้องรอออกกี่นาที น้ำมันพอกลับบ้านไหม แล้วจุดที่ไปถึงยังอยู่ในเขตที่เรามีอำนาจหรือเปล่า

ก้อนนี้ใช้ velocity() กับ intercept() จากก้อนแรก กองเรือกับเส้นเขตเป็นของสมมติทั้งหมด โดยเหนือเส้น y = 22 nm สมมติว่าเป็นทะเลอาณาเขตของเพื่อนบ้าน และเช็คว่าจุดอยู่ใน polygon ไหมด้วย ray casting แบบเขียนเอง ไม่ต้องลง library เพิ่ม (ของจริงใช้ shapely กับ layer เส้นเขตจริงได้เลย)

python
from dataclasses import dataclass

@dataclass
class Asset:
    name: str
    xy: tuple          # ตำแหน่งตอนนี้ (nm) เทียบฐาน
    speed: float       # ความเร็วที่วิ่งได้จริงวันนี้ (kn) ไม่ใช่ตัวเลขในโบรชัวร์
    fuel_nm: float     # ระยะที่น้ำมันเหลือพอวิ่ง (nm)
    crew_ready: bool   # ลูกเรือครบ พร้อมออก
    ready_in: float    # อีกกี่ชั่วโมงถึงจะออกได้ (เติมน้ำมัน เรียกคน ถอนสมอ)

HOME = (0.0, 0.0)      # ท่าที่ต้องวิ่งกลับไป
FUEL_RESERVE = 0.2     # กันน้ำมันไว้ 20% — ค่าสมมติ

# เขตที่เรามีอำนาจบังคับใช้กฎหมาย เหนือเส้น y = 22 คือทะเลอาณาเขตของเพื่อนบ้าน — ค่าสมมติทั้งหมด
OUR_ZONE = [(-5, -20), (45, -20), (45, 22), (-5, 22)]

def inside(pt, poly):
    """ray casting: ลากเส้นจากจุดไปทางขวา นับว่าตัดขอบ polygon กี่ครั้ง คี่ = อยู่ข้างใน"""
    x, y = pt
    hit = False
    for (x1, y1), (x2, y2) in zip(poly, poly[1:] + poly[:1]):
        if (y1 > y) != (y2 > y) and x < x1 + (y - y1) * (x2 - x1) / (y2 - y1):
            hit = not hit
    return hit

def plan(asset, tgt_xy, tgt_course, tgt_speed):
    """คืน (ok, เวลารวมชั่วโมง, จุดสกัด, course, เหตุผล)"""
    if not asset.crew_ready:
        return False, None, None, None, "ลูกเรือไม่ครบ ออกไม่ได้"
    vx, vy = velocity(tgt_course, tgt_speed)
    # ระหว่างรอออกเรือ เป้าไม่ได้รอเรา
    tx, ty = tgt_xy[0] + vx * asset.ready_in, tgt_xy[1] + vy * asset.ready_in
    res = intercept((tx - asset.xy[0], ty - asset.xy[1]), tgt_course, tgt_speed, asset.speed)
    if res is None:
        return False, None, None, None, "ช้ากว่า มุมไม่ได้ สกัดไม่ได้"
    t, (rx, ry), course = res
    point = (asset.xy[0] + rx, asset.xy[1] + ry)
    total = asset.ready_in + t
    need = asset.speed * t + math.dist(point, HOME)          # ขาไป + ขากลับท่า
    if need > asset.fuel_nm * (1 - FUEL_RESERVE):
        return False, total, point, course, f"น้ำมันไม่พอกลับ (ต้องใช้ {need:.0f} nm)"
    if not inside(point, OUR_ZONE):
        return False, total, point, course, "ไปถึงตอนเป้าออกนอกเขตเราแล้ว"
    return True, total, point, course, "ไปได้"

FLEET = [   # ค่าสมมติทั้งหมด
    Asset("ตรวจการณ์ 1 (เติมน้ำมันอยู่อีกฝั่งอ่าว)", (0, 0),   25, 300, True,  1.5),
    Asset("ตรวจการณ์ 2",                          (35, 5),   20,  40, True,  0.0),
    Asset("ตรวจการณ์ 3 (ลำเร็วสุด)",                (10, -12), 28, 200, False, 0.0),
    Asset("ตรวจการณ์ 4",                          (5, 5),    22, 150, True,  0.25),
]

target = dict(tgt_xy=(20, 0), tgt_course=0, tgt_speed=12)
results = [(a.name, *plan(a, **target)) for a in FLEET]
for name, ok, total, pt, crs, why in sorted(results, key=lambda r: (not r[1], r[2] or 99)):
    when = f"{total * 60:4.0f} นาที" if total else "   -    "
    where = f"({pt[0]:.1f}, {pt[1]:.1f}) course {crs:05.1f}°" if pt else ""
    print(f"{'OK ' if ok else 'NO '} {when}  {name}: {why} {where}")
# OK    60 นาที  ตรวจการณ์ 4: ไปได้ (20.0, 12.0) course 064.9°
# NO    47 นาที  ตรวจการณ์ 2: น้ำมันไม่พอกลับ (ต้องใช้ 38 nm) (20.0, 9.4) course 286.3°
# NO   195 นาที  ตรวจการณ์ 1 (เติมน้ำมันอยู่อีกฝั่งอ่าว): ไปถึงตอนเป้าออกนอกเขตเราแล้ว (20.0, 39.1) course 027.1°
# NO     -      ตรวจการณ์ 3 (ลำเร็วสุด): ลูกเรือไม่ครบ ออกไม่ได้

อ่านผลทีละบรรทัดแล้วจะเห็นทั้งบทความอยู่ในตารางเดียว

  • ตรวจการณ์ 3 เร็วสุดในกอง 28 นอต แต่ลูกเรือไม่ครบ ออกไม่ได้ตั้งแต่บรรทัดแรก — Cape Class ในรูปโค้ด
  • ตรวจการณ์ 2 ไปถึงเร็วที่สุดจริง 47 นาที แต่น้ำมันไม่พอกลับบ้าน ส่งไปก็ได้เรือลอยลำอีกหนึ่งลำให้ต้องไปช่วย
  • ตรวจการณ์ 1 คือลำที่เติมน้ำมันอยู่อีกฝั่งอ่าวจากตอนที่แล้ว เรือดี คนครบ น้ำมันเต็ม แต่กว่าจะออกได้ก็ชั่วโมงครึ่ง ไปถึงตอนเป้าข้ามเส้นเข้าเขตเพื่อนบ้านไปแล้ว ตามข้อ 111 ก็ต้องหยุด ของแบบนี้ต้องเปลี่ยนไปใช้ช่องทางขอให้เพื่อนช่วยแทน
  • ตรวจการณ์ 4 ไม่ได้เร็วสุด ไม่ได้ใกล้สุด แต่เป็นลำเดียวที่ไปได้จริง

แผนภาพหัวเรื่อง ลำที่ใกล้สุด ไม่ใช่ลำที่ใช่ คำโปรยว่าเช็คสี่ข้อก่อนส่งเรือ ค่าสมมติตาม plan() ในบทความ แผนที่วาดตามสเกล ด้านซ้ายเป็นแผนที่ทะเลสมมติมุมมองจากบน กรอบเส้นสีน้ำเงินติดป้ายว่าเขตที่เรามีอำนาจ มุมขวาล่างมีสเกล 10 nm ด้านบนเหนือเส้นประสีแดงแนวนอนติดป้ายเส้นเขต y = 22 nm เป็นพื้นที่แรเงาสีเทาติดป้ายว่าทะเลอาณาเขตเพื่อนบ้าน ข้อ 111 ไล่ต่อไม่ได้ ตรงกลางมีเรือเป้าสีส้มติดป้ายว่าเป้า 12 kn ขึ้นเหนือ เส้นประส้มของเป้ามีจุดบอกเวลา 90 นาที: ลำ 1 เพิ่งออกจากท่า และ 110 นาที: เป้าข้ามเส้นเขต ลำ 1 จอดที่ท่า HOME (0, 0) มุมซ้ายล่าง มีไอคอนสมอ หัวจ่ายน้ำมันกับนาฬิกาทรายพร้อมข้อความว่าลำ 1 เติมน้ำมัน 1.5 ชม. เส้นประเทาจากลำ 1 ยาวไปถึงกากบาทแดงเหนือเส้นเขต ติดป้ายว่าลำ 1 ถึง 195 นาที จุดสกัดอยู่นอกเขตแล้ว ลำ 2 อยู่ด้านขวาใกล้เป้าที่สุด มีเกจน้ำมันเข็มเกือบถึง E ติดป้ายว่าน้ำมันไม่พอกลับ ถึง 47 นาที ไม่ผ่าน ลำ 3 อยู่ด้านล่างข้างไอคอนเก้าอี้ว่างกับกากบาท ติดป้ายว่าลูกเรือไม่ครบ ออกไม่ได้ ลำ 4 มีเส้นทึบสีเขียวลากไปยังดาวสีเขียวภายในเขตเรา ติดป้ายว่าลำ 4 ถึง 60 นาที พร้อมเครื่องหมายถูก ด้านขวาเป็นตารางหัวข้อเช็คลิสต์สี่ข้อ ก่อนสั่งออกเรือ สี่แถวสำหรับสี่ลำ คอลัมน์คือลูกเรือพร้อม เวลารอออก น้ำมันพอกลับ จุดสกัดอยู่ในเขต และผล ลำ 1 25 kn อยู่ที่ท่า รอออก 1.5 ชม. จุดสกัดนอกเขต ผล 195 นาทีไม่ผ่าน ลำ 2 20 kn ใกล้เป้าที่สุด น้ำมันใช้ 38 แต่มี 32 nm ผล 47 นาทีไม่ผ่าน ลำ 3 28 kn เร็วสุดในกอง ลูกเรือไม่ครบ ออกไม่ได้ ลำ 4 22 kn ผ่านครบทุกข้อในแถวไฮไลต์สีเขียว ผล 60 นาที ส่งลำนี้ หมายเหตุใต้ตารางว่าขาไปบวกขากลับท่าต้องไม่เกินน้ำมันที่เหลือหลังกันสำรอง 20% ด้านล่างเป็นคำอธิบายสัญลักษณ์ เส้นเขียวคือลำที่ผ่านครบสี่ข้อ เส้นประเทาคือเส้นทางสกัดของลำที่ไม่ผ่านเช็ค เส้นประส้มคือเป้าวิ่งขึ้นเหนือ 12 kn โดยจุดคือเวลาที่ผ่าน และสรุปว่าลำ 4 ไม่ได้เร็วสุด ไม่ได้ใกล้สุด แต่เป็นลำเดียวที่ไปได้จริง ระบบคำนวณให้เห็นทางเลือก คนตัดสินว่าจะส่งใคร

ถัดมาคือปัญหาคลาสสิกที่สุดของการสกัด เป้าไม่ได้วิ่งตรงตามที่เราสมมติ สมมติว่าเราถือเข็ม 061° ตามก้อนแรกไปได้ 20 นาที แล้วเป้าเลี้ยวจาก 000° ไป 045° ถ้าเรายังถือเข็มเดิมต่อไปจะเป็นยังไง ตรงนี้ใช้ CPA/TCPA (Closest Point of Approach กับเวลาที่จะถึงจุดนั้น) ตัวเดียวกับที่เรดาร์เรือใช้เตือนเรือชน มาถามว่า "ถ้าต่างคนต่างวิ่งแบบนี้ต่อไป จะเฉียดกันใกล้สุดแค่ไหน"

python
def cpa(own_xy, own_vel, tgt_xy, tgt_vel):
    """TCPA/DCPA แบบสมมติทั้งสองลำถือ course และความเร็วคงที่
    คืน (TCPA ชั่วโมง, DCPA nm) — TCPA ติดลบ = จุดใกล้สุดผ่านไปแล้ว"""
    X, Y = tgt_xy[0] - own_xy[0], tgt_xy[1] - own_xy[1]       # ตำแหน่งสัมพัทธ์
    vrx, vry = tgt_vel[0] - own_vel[0], tgt_vel[1] - own_vel[1] # ความเร็วสัมพัทธ์
    vr2 = vrx * vrx + vry * vry
    if vr2 < 1e-12:
        return float("inf"), math.hypot(X, Y)                   # วิ่งขนานกันไปตลอด
    tcpa = -(X * vrx + Y * vry) / vr2
    dcpa = abs(X * vry - Y * vrx) / math.sqrt(vr2)
    return tcpa, dcpa

# ต่อจากก้อนแรก: เราถือ course 061.3° ที่ 25 kn ผ่านไป 20 นาที เป้าเลี้ยวจาก 000° ไป 045° (ค่าสมมติ)
t0 = 20 / 60
own_vel = velocity(course, 25)
own_now = (own_vel[0] * t0, own_vel[1] * t0)
tgt_now = (20, 12 * t0)
tgt_vel = velocity(45, 12)

tcpa, dcpa = cpa(own_now, own_vel, tgt_now, tgt_vel)
print(f"ถ้าถือเข็มเดิม: ใกล้สุดอีก {tcpa * 60:.0f} นาที ห่าง {dcpa:.1f} nm")

rel = (tgt_now[0] - own_now[0], tgt_now[1] - own_now[1])
t, _, new_course = intercept(rel, 45, 12, 25)
print(f"คำนวณใหม่: หันไป {new_course:05.1f}° อีก {t * 60:.0f} นาทีถึง (รวม {(t0 + t) * 60:.0f} นาที)")
# ถ้าถือเข็มเดิม: ใกล้สุดอีก 53 นาที ห่าง 3.2 nm
# คำนวณใหม่: หันไป 070.2° อีก 51 นาทีถึง (รวม 71 นาที)

เป้าเลี้ยวแค่ 45 องศา ถ้าเรายังดื้อถือเข็มเดิม จะวิ่งผ่านห่างเป้า 3.2 nm แบบมองเห็นกันแต่ไม่ได้เจอกัน คำนวณใหม่แล้วต้องหันไป 070° เวลารวมยืดจาก 55 เป็น 71 นาที นี่คือเหตุผลที่เครื่องมือ intercept บนจอ C2 ต้อง คำนวณใหม่ทุกครั้งที่ track อัปเดต ไม่ใช่ขีดเส้นครั้งเดียวแล้วจบ

แล้วก็ต้องสารภาพข้อจำกัดของโค้ดชุดนี้ไว้ตรงๆ

  • เป้าเปลี่ยนทิศ ระบบรู้ช้ากว่าที่คิด — มาตรฐานเรดาร์ของ IMO (MSC.192(79)) กำหนดให้ tracker ตามต่อเนื่องราว 1 นาทีเพื่อได้แนวโน้ม และราว 3 นาทีกว่าจะได้ predicted motion และความแม่นยำลดลงมากช่วงที่เป้าหรือเราเองกำลังเลี้ยว ตัวเลข course ใหม่ของเป้าจึงไม่ได้มาทันทีที่มันหักหัว
  • รัศมีเลี้ยว — โค้ดสมมติว่าเรือหันหัวได้ทันทีและวิ่งเต็มความเร็วตั้งแต่วินาทีแรก เรือจริงต้องใช้ทั้งระยะและเวลาเลี้ยว
  • กระแสน้ำและลม — ความเร็วจาก AIS หรือ GPS เป็นความเร็วเทียบพื้น ส่วนความเร็วที่เครื่องเรือทำได้เป็นความเร็วเทียบน้ำ เอาสองอย่างมาปนกันเมื่อไหร่ จุดสกัดคลาดทันที
  • เชื้อเพลิงกับระยะปฏิบัติการ — ในโค้ดใช้เส้นตรงกับ reserve ตายตัว ของจริงอัตรากินน้ำมันขึ้นกับความเร็ว ยิ่งเร่งยิ่งกินหนัก
  • กฎหมาย — คณิตบอกว่าทันไม่ได้แปลว่าไปได้ ถ้าจุดสกัดข้ามเข้าทะเลอาณาเขตรัฐอื่น ข้อ 111(3) ก็บอกให้หยุด
  • ลูกเรือ — crew_ready ในโค้ดเป็นแค่ boolean ตัวเดียว แต่ข้างหลังมันคือทั้งหัวข้อเรื่องคนข้างบน

ใครอยากต่อยอดก็ทำได้อีกเยอะนะ เช่น ให้ plan() คืนจุดสกัดที่เร็วที่สุด ภายในเขต แทนการตัดทิ้ง หรือเพิ่มเงื่อนไขว่าเครื่องบินไล่ได้แต่จับไม่ได้ตามข้อ 111(6)(b) ต้องมีเรือรับไม้เสมอ แต่หลักการเดิมทั้งหมด ระบบคำนวณให้เห็นทางเลือก คนตัดสินว่าจะส่งใคร

Response ไม่ใช่ปลายทาง — วนกลับไป Situational Awareness ​

ส่งเรือไปแล้ว ตรวจค้นแล้ว จบไหม ยังอ่ะ Response คือขั้นสุดท้ายของ MDA ก่อนจะวน กลับไปเริ่ม Situational Awareness ใหม่ มันคือวงจร ไม่ใช่เส้นตรง

ฝั่งทหารเขียนวงแบบนี้ไว้ในหลักนิยามของกองทัพอากาศสหรัฐฯ ชื่อ F2T2EA คือ find, fix, track, target, engage, assess ซึ่งเอกสารเดียวกันบอกว่าใช้กับงานที่ไม่ใช้อาวุธได้ และมีแบบ "dynamic rescue" ที่ใช้กระบวนการเดียวกันกับการช่วยเหลือเร่งด่วนด้วย ถ้าทาบกับสามขาของเรา find fix track คือ Situational, target คือ Threat, engage คือ Response แล้วตัวที่คนชอบลืมที่สุดคือ assess ตัวสุดท้าย ที่ต้องวนผลกลับไปป้อนตัวแรก

ของที่ไหลกลับมีอย่างน้อยสามทาง

  • ผลตรวจกลับไปแก้ rule — feedback() ใน AlertRouter ของตอนที่แล้วกับฟอร์มตรวจค้นในตอนที่ 5 คือท่อเดียวกัน rule ที่ยกมือบ่อยแต่ส่งเรือไปแล้วไม่เคยเจออะไร ต้องกลับไปให้คนนั่งดูใหม่
  • ผลรวมกลับไปแก้พื้นที่กับเวลาที่โฟกัส — ReCAAP รายงานครึ่งแรกของปี 2026 ว่าเหตุในเอเชียเหลือ 35 ครั้ง ลดลง 64% จาก 96 ครั้ง ช่องแคบมะละกาและสิงคโปร์เหลือ 21 ครั้ง ลดลง 74% จาก 80 ครั้ง แต่ 20 ใน 21 ครั้งยังกระจุกอยู่ในช่องเดินเรือฝั่งที่มุ่งไปทางตะวันออก (eastbound lane) ของแนวแบ่งช่องจราจรในช่องแคบสิงคโปร์ และราวสามในสี่เกิดช่วง 21:00–05:59 ตัวเลขชุดนี้คือของที่ต้องกลับไปกรอกในตาราง zones กับ months ของ funnel ในตอนที่แล้วได้ทันที ส่วนฝั่งการท่าเรือสิงคโปร์ก็เพิ่มความถี่ประกาศเตือนใน VTIS sector ที่เกิดเหตุ ซึ่งก็คือ Response อีกแบบที่ไม่ต้องใช้เรือสักลำ
  • ตัวชี้วัดกลับไปแก้ตัวเอง — รายงาน ANAO ปี 2009–10 เล่าว่าการจับเรือประมงต่างชาติลดจาก 367 ลำ (2005–06) เหลือ 27 ลำ (2008–09) ทั้งที่รัฐบาลตั้งไว้ว่าจะเพิ่มเป็นเท่าตัว สุดท้ายตัวชี้วัดตัวเดียวแบบนั้น "became redundant" บทเรียนคือถ้าวัด Response ด้วยการนับกิจกรรม เช่นนับจำนวนที่จับ พอทำงานได้ผลจนภัยลดลง ตัวเลขจะฟ้องว่าเราทำงานแย่ลง ต้องวัดที่ผลลัพธ์

ที่ ReCAAP ให้เครดิตการลดลงรอบนี้ ก็ไม่ได้ยกให้ของชิ้นไหน ผอ. ศูนย์พูดถึง "effective preventive measures by the shipping industry and firm operational response by the law enforcement agencies" คือคนหลายฝ่ายทำงานประสานกัน ตรงกับทั้งห้าข้อข้างบนครบ

แผนภาพหัวเรื่อง MDA เป็นวงจร ไม่ใช่เส้นตรง คำโปรยว่า Response จบ ผลต้องไหลกลับไปป้อนรอบถัดไป ตรงกลางเป็นวงกลมใหญ่แบ่งเป็นสามช่วงโค้งต่อกันตามเข็มนาฬิกา ช่วงบนสีฟ้าติดป้าย Situational Awareness ช่วงขวาสีส้มติดป้าย Threat Awareness ช่วงซ้ายสีเขียวติดป้าย Response Awareness ป้ายเล็กของ F2T2EA วางอยู่บนวงตามช่วง find fix track อยู่บนช่วง Situational target อยู่บนช่วง Threat engage อยู่บนช่วง Response และ assess อยู่บนวงตรงรอยต่อจาก Response กลับเข้า Situational นอกวงมีการ์ดไอคอนวางข้างแต่ละช่วง การ์ด Situational มุมซ้ายบนเขียนว่าเห็นว่าใครอยู่ตรงไหน มีไอคอนเรดาร์ ดาวเทียม และแผนที่ การ์ด Threat มุมขวาล่างเขียนว่าภัยไหนน่าห่วง เรือลำไหนน่าสงสัย มีไอคอนกรวยกรองกับแถบคะแนนความเสี่ยง การ์ด Response มุมซ้ายล่างเขียนว่าส่งอะไรไปได้ ไปทันไหม มีไอคอนเรือตรวจการณ์ เส้นเข็มสกัด และแฟ้ม SOP ในวงมีลูกศรเส้นประสีเขียวจาก Response สามเส้น เส้นแรกติดป้ายผลตรวจค้น → กลับไปแก้ rule ชี้ไปที่ Threat เส้นที่สองติดป้ายสถิติเหตุ → กลับไปแก้พื้นที่และเวลาที่โฟกัส ชี้ไปที่ Threat เส้นที่สามเป็นลูกศรวนกลับเข้า Response เอง ติดป้ายว่าตัวชี้วัดกลับไปแก้ตัวเอง: วัดผลลัพธ์ ไม่ใช่นับกิจกรรม มุมขวาบนมีกล่อง F2T2EA เขียนว่า find fix track target engage assess วงจากหลักนิยามกองทัพอากาศสหรัฐฯ ใช้กับงานที่ไม่ใช้อาวุธได้ ตัวที่คนลืมคือ assess แถบสีเข้มด้านล่างสุดเขียนว่าวงนี้ไม่มีวันจบ

หัวข้อสุดท้ายของ MDA แต่ไม่ใช่ท้ายสุด ​

เก็บตกทั้งเรื่องแบบรวบรัด

  • Response ไม่ใช่การซื้อของ ซื้อของคือบรรทัดสุดท้าย ก่อนนั้นต้องมีการวางกำลัง แบ่งเขต ตีกรอบ จัดสรรทรัพยากร แผนกับ SOP การแลกข้อมูล และช่องทางขอให้เพื่อนช่วยนอกเขต
  • ในการจัดสรรทรัพยากร คนมาก่อน ที่อยู่ของคนตามมา แล้วค่อยเงิน เครื่องมือมาทีหลังสุด เรือ Cape Class ที่ต้องยกเลิกลาดตระเวนเพราะคนไม่พอคือหลักฐานที่ชัดที่สุด
  • สิงคโปร์วางกรอบ สายบังคับบัญชา การฝึก และ protocol ไว้ก่อน AI เป็นแค่ชิ้นหนึ่งในนั้น
  • เส้นเขตทางทะเลต้องเป็น layer ในระบบ เพราะ UNCLOS บอกว่าอำนาจหยุดตรงไหน และเมื่อไหร่ต้องส่งไม้ให้คนอื่น
  • ขีดเข็ม intercept เป็นคณิตง่ายๆ แต่ลำที่ใช่ต้องผ่านทั้งเรื่องคน น้ำมัน และกฎหมาย แล้วต้องคำนวณใหม่ทุกครั้งที่เป้าขยับ
  • Response ไม่ได้จบในตัว ผลของมันต้องวนกลับไปป้อน Situational กับ Threat รอบถัดไป

ทั้งหมดยังอยู่ใต้กฎเดิมตั้งแต่ตอนแรกของซีรีส์ ระบบยกมือ คนตัดสิน รอบนี้เพิ่มอีกท่อนว่า และคนต้องมีพอให้ไปลงมือด้วย

ถึงตอนนี้จะมาถึงขาสุดท้ายของ MDA แล้ว แต่บอกเลยว่ายังไม่ใช่ท้ายสุด เพราะมีอะไรให้เขียนอีกเยอะ แต่ละเรื่องที่แตะไว้ในสามขานี้ยังแตกออกไปได้อีกเป็นกอง แล้วโลกของมันก็มีอัพเดตตลอดเวลา แต่ก็ไม่ได้ถึงขั้นตามติดชีวิตสัตว์โลกขนาดการรายงานข่าวขนาดนั้นหรอก มีอะไรใหม่ที่น่าเล่าก็จะแวะมาเล่าต่อเรื่อยๆ

เรื่องแรกที่จะแวะมาก็คือ Maritime Response Awareness ตอน 2 ว่าด้วย UxV หรือระบบไร้คนขับ ทั้งเรือ อากาศยาน และใต้น้ำ ในบทบาทตอบสนองต่อภัยคุกคามและเหตุการณ์ต่างๆ รวมถึงการค้นหาและกู้ภัย (SAR) ขอสปอยล์ไว้ก่อนว่า UxV ไม่ได้มาแทนคนทั้งหมด คนยังต้องฝึก แล้วทำงานร่วมกับระบบแบบ Human Machine Cooperation

ก่อนไป ถามคนทำงานสายนี้หน่อย ตอนวางแผน Response เคยเจอเครื่องมือที่ซื้อมาก่อนคนพร้อมไหม หรือเคยเห็นเครื่องมือ intercept บนจอที่ขีดเส้นสวยมาก แต่ไม่มีใครรู้ว่าเรือลำนั้นลูกเรือครบหรือเปล่า มาเล่าสู่กันฟังหน่อยนะ เจอกันเรื่องหน้าฮะ