Henter trip_stats...

GROTTE — Matchede Sejladser

Fanølinjen · Før/efter ombygning · Automatisk matching på vind, vandstand og retning

Parametre

Datoen ombygningen blev afsluttet
Maks antal efter-sejladser vi prøver at matche
Indexer producerer typisk kun ROUND
Tærskel: ±5 cm over sejladsen
Sejladser uden vinddata udgår når et kategorifilter er aktivt
Bruger underway-kolonnerne; falder tilbage til fulde tal hvis de mangler

Vægtning & tolerance

Tolerance = hvor stor afvigelse der "koster" 1 score-point. Vægt = hvor vigtig parameteren er i den samlede score. Lavere total-score = bedre match.
Vindstyrke ± 2.0 m/s vægt
Vindretning ± 45° vægt
Vandstand ± 30 cm vægt
Propel-RPM ± 20 RPM vægt
RPM-variation ± 15 RPM vægt
Distance ± 0.30 nm vægt
Max score ≤ 2.0 par over denne tærskel forkastes
Tryk "Find matches" for at køre analysen.

Hvordan virker matchingen?

Hvorfor matche overhovedet?

Hvis du sammenligner gennemsnitligt energiforbrug før vs efter ombygningen direkte, måler du langt mere end skroget. Du måler også at efteråret havde mere modvind, at vandstanden har ændret sig sæsonbestemt, at en anden skibsfører kørte blødere i en periode, eller at tidevandsfasen falder forskelligt på forskellige datoer.

Skroget kan kun isoleres ved at sammenligne sejladser der ellers var meget ens. For hver sejlads efter ombygningen finder algoritmen den sejlads før ombygningen med mest sammenlignelige forhold, og parrer dem. Når mange par alle viser samme tendens, kan du være rimelig sikker på det skyldes skroget — ikke vejret.

Score-formlen

For hvert par (efter ↔ før) beregnes for hver parameter:

bidrag = |a − b| / tolerance × vægt

Den samlede match-score er summen af alle bidrag:

score = Σ bidrag

Lavere score = bedre match. En score på 0 ville være to identiske sejladser. En gennemsnitsscore omkring 0.2 betyder at parrene typisk afviger mindre end en fjerdedel af tolerancegrænserne — ret strenge matches.

Tolerance vs. vægt — to forskellige skruer

Tolerance er prisen for uenighed i parameterets egne enheder. Den siger "hvor meget afvigelse koster 1 score-point". Hvis vindstyrke-tolerancen er 2.0 m/s:

  • 0 m/s forskel → 0.00 point
  • 1 m/s forskel → 0.50 point
  • 2 m/s forskel → 1.00 point
  • 4 m/s forskel → 2.00 point

Tolerance kalibrerer altså hvad der er en betydelig forskel for den enkelte parameter.

Vægt er den relative vigtighed. Den ganges på efter normaliseringen. Vægt 0 betyder "ignorer parameteret helt". Vægt 2 betyder "tæller dobbelt så meget som de andre".

To bidrag der begge ender på 0.5:

  • 0.5 m/s afvigelse, vægt 2.0 → 0.5/2 × 2 = 0.5
  • 1.0 m/s afvigelse, vægt 1.0 → 1.0/2 × 1 = 0.5
Huskeregel: juster tolerancen for at definere hvad der overhovedet er en betydelig forskel; juster vægten for at vægte parametre mod hinanden.

De fem parametre — hvad de fanger

Parameter Hvad det måler
Vindstyrke Den primære fysiske modstand. Højere vind → mere energi.
Vindretning Medvind / modvind / sidevind. Behandles cirkulært (350° og 10° er kun 20° fra hinanden, ikke 340°).
Vandstand Vanddybden i sejlrenden, og friktion mod bunden ved lavvande. Vigtig på Fanølinjen.
Propel-RPM Proxy for skibsførerens kørestil. To sejladser med samme vind men forskellig RPM betyder forskellig påvirkning.
RPM-variation Spredningen (std-afvigelsen) af propel-RPM over hele sejladsen. To ture kan have samme gennemsnits-RPM men vidt forskellig profil: en jævn marchtur har lav variation, mens en tur med trafik, opbremsninger og genopstart har høj. Variationen er domineret af trafik og manøvrering — altså den støj du vil kontrollere for — og er derfor en renere matching-variabel end snit-RPM, som også påvirkes af skroget selv.
Distance Den faktisk tilbagelagte distance. På en fast rute bør den være næsten konstant — afviger den meget, har sejladsen haft ekstra manøvrering eller en omvej, og energien er ikke direkte sammenlignelig.

Vindkategorier — samme inddeling som dashboardet

Nogle gange vil du ikke se den gennemsnitlige effekt over alle forhold, men specifikt hvad ombygningen betyder i hårdt vejr — eller omvendt isolere de rolige dage hvor skroget er den dominerende faktor. Vindkategori-filteret bruger de samme grænser og farver som dashboardet:

SkalaKategorierBruges på dashboardet af
Grov < 10 · 10–15 · > 15 m/s Dagligt Energiforbrug (bjælkefarverne) og vind-badges på turlisterne
Fin 0–5 · 5–10 · 10–15 · 15–20 · 20+ m/s Vindfordeling-histogrammet

Vælgeren har tre slags valg:

  • Alle vindstyrker — kategorien ignoreres helt (default, uændret opførsel i forhold til før).
  • Kun <kategori> — hårdt filter. Sejladser uden for kategorien fjernes fra begge puljer inden matchingen, præcis som retnings- og trendfiltrene. Statuslinjen viser hvor mange der blev sorteret fra.
  • Kræv samme kategori i par — puljerne røres ikke, men en efter-sejlads kan kun matches med en før-sejlads i samme kategori. Nyttigt hvis du vil have alle par med, men nægte at parre en kuling med en let brise selv om score-formlen ellers ville tillade det.
Hvilken vind kategoriseres der på? Gennemsnitsvinden — samme felt som resten af siden bruger: score-formlen, tolerancen "Vindstyrke", tabelkolonnen "Vind m/s" og scatter-plottet "Energi vs. vindstyrke". Det betyder at et vindtal i tabellen altid har den farve der svarer til den kategori sejladsen er filtreret på.

Bemærk at dashboardet kategoriserer på max-vinden. Grænserne og farverne er de samme begge steder, men fordi grundlaget er forskelligt kan en sejlads godt lande i en lavere kategori her end på dashboardet — snittet er altid mindre end eller lig maks. Vil du have nøjagtig samme inddeling som dashboardet, så ret WIND_CAT_FIELD øverst i scriptet til max_wind_speed.

Sejladser hvor vindværdien mangler, udgår når et kategorifilter er aktivt — samme strenghed som ved manglende trend.

I resultattabellen er vindtallene farvet efter kategori, og par-detaljen viser kategorien for begge sejladser som badge — også når filteret er slået fra.

De hårde filtre — retning, trend og vindkategori

Tre ting kører udenom score-formlen som binære filtre:

  • Sejladsretning (E2F / F2E / ROUND): en E2F-sejlads kan aldrig matches med en F2E-sejlads. De er fysisk forskellige ture.
  • Vandstandstrend: hvis du vælger "Kræv samme trend i par", matches flod kun med flod og ebbe kun med ebbe. En sejlads under stigende vand er fysisk forskellig fra én under faldende — selv om gennemsnitlig vandstand skulle være ens.
  • Vindkategori: som beskrevet ovenfor — enten et hårdt filter på en enkelt kategori, eller et krav om samme kategori i begge ender af parret.

Alle tre filtre afgør hvilke par der overhovedet er kandidater. De påvirker ikke score-tallet.

Manglende data og vægt-0-tricket

Hvis en parameter har vægt > 0, men værdien er null på enten før- eller efter-siden, returnerer algoritmen Infinity for hele parret — det udgår.

Det er bevidst strengt. Hvis vandstand mangler på den ene side, vil "diff = 0" se kunstigt godt ud. Bedre at smide parret ud. Hvis du derimod bevidst vil ignorere en parameter, så sæt vægten til 0. Det er den korrekte måde at fortælle algoritmen "denne parameter eksisterer ikke for denne analyse".

Max-score — afvisningstærsklen

Selv den bedste tilgængelige før-sejlads kan stadig være et dårligt match. Hvis du har en stormfuld dag efter ombygningen og overhovedet ingen stormfulde dage før, vil den "bedste" før-sejlads stadig være en lummerlille sommerdag — og det er et katastrofalt match.

Max-score er sikkerhedsventilen. Et par hvor bedste score > maxScore bliver afvist, selv om der ikke fandtes noget bedre. Med en max-score på 2.0 og gennemsnitsscore omkring 0.2 har du masser af headroom — du kan eventuelt stramme den ned mod 1.0 for at få endnu mere troværdige par (på bekostning af færre par).

Hvorfor greedy?

Algoritmen sorterer efter-sejladserne (nyeste først), og for hver enkelt finder den den bedste endnu ledige før-sejlads. Når en før-sejlads er brugt, kan den ikke matches igen.

Det er ikke matematisk optimalt — en Hungarian-algoritme ville minimere den samlede score over alle par. Men forskellen er typisk lille når puljen er meget større end antallet af par, og greedy er O(n²) der kører på millisekunder. Med ekskluderings-knappen kan du manuelt overstyre dårlige matches.

Et konkret eksempel

Tag fx et par hvor begge sejladser var rundture under ret ens forhold:

Parameter Før Efter |Δ| Tolerance Vægt Bidrag
Vindstyrke5.1 m/s5.2 m/s0.1±2.01.00.05
Vindretning239°244°±451.00.11
Vandstand−76.2 cm−79.5 cm3.3±301.00.11
Propel-RPM2532530±201.00.00
Distance2.18 nm2.18 nm0.00±0.301.00.00
Total match-score0.27

Vinden var næsten identisk i styrke (0.1 m/s forskel) og fra meget tæt på samme retning (5°). Vandstanden afveg lidt mere (3.3 cm), men begge sejladser var under lavvande. Propellen kørte identisk. Score 0.27 er solid — det er to sejladser der reelt foregik under sammenlignelige forhold.

Tuning-opskrift

  • Start neutralt. Alle vægte = 1.0, max-score = 2.0. Kør og se hvad du får.
  • Tjek gennemsnitsscoren. Under 0.5 = meget strenge; 0.5–1.0 = fornuftige; over 1.0 = noget løse matches.
  • Klik en række med høj score og se på score-nedbrydningen i detaljemodal'en. Hvilken parameter dominerer bidraget? Det fortæller dig hvor du skal skrue.
  • For få par tilbage? Hæv max-score eller udvid tolerancerne — i den rækkefølge. Max-score er den mindst ødelæggende knap.
  • Matchene ser fysisk forkerte ud? (Fx en frisk vinterdag matchet med en lummer sommerdag.) Stram tolerancerne.
Forslag til Fanølinjen: vægt vandstand og propel-RPM lidt højere (1.5) end vind (1.0) og vindretning (0.5), fordi sejlrenden er smal og dybde-effekter er markante. RPM-variation starter med vægt 0 — slå den til (fx 0.5–1.0) hvis du vil have par der havde samme trafik-/manøvre-profil, ikke bare samme gennemsnit.

Forløbssammenligning — se forskellen undervejs

Klikker du en række og ruller ned i par-detaljen, ligger sektionen Forløbssammenligning. Den henter de rå sekund-data for begge sejladser fra logfilerne (samme kilde som stability-dashboard) og lægger de to forløb oven på hinanden. Det er her du kan se hvor i sejladsen forskellen opstår — ikke bare at totalen blev mindre.

Fordi de to sejladser sjældent varer lige længe, skal de projiceres på en fælles akse før de kan trækkes fra hinanden. Vælg:

  • Andel af sejlads (%) — begge ture strækkes til 0–100 %. Robust når varighederne afviger; brug den som standard.
  • Forløbet tid (min) — fysisk sammenlignelig, men den korteste tur stopper bare tidligere, og Δ-kurven ender dér.

Kumuleret energi og kumuleret forskel er de to vigtigste. Afstanden mellem de to kurver er den akkumulerede forskel; ender Δ-kurven under nullinjen, brugte efter-sejladsen mindre. Er den samlede forskel opstået i ét enkelt spring (fx en opbremsning for trafik), skyldes den ikke skroget — så er parret reelt dårligt, uanset hvad match-scoren siger.

Effekt vs. fart er den reneste skrogtest i værktøjet: middel-effekt pr. halve knob. Et bedre skrog flytter hele kurven nedad. Rorindsats er summen af thruster-vinkelafvigelser og fanger hvor meget der blev arbejdet på at holde kursen — den kan forklare et merforbrug der intet har med skroget at gøre.

Data hentes først når du trykker Hent forløb (logfilerne er store), og gemmes i browseren resten af sessionen. Sæt Auto til hvis du vil have det hentet automatisk hver gang du åbner en par-detalje.

Begrænsninger man skal være opmærksom på

  • Det er stadig korrelation, ikke kausation. Hvis du skiftede skibsfører kort efter ombygningen, vil "matchede" sejladser stadig vise en effekt der er en blanding af skrog og fører. Matchingen kan kun fjerne forskelle i de parametre du måler på.
  • Gennemsnit skjuler dynamik. To sejladser med samme gennemsnits-vind kan stadig være helt forskellige — én med stabile 5 m/s, én der svinger mellem 1 og 10.
  • Tidevand er kompliceret. Trend (stigende/faldende/stabil) fanger noget, men ikke alt. To "stigende vand"-sejladser kan være på forskellige punkter i cyklussen, hvor strømmen er meget forskellig.
  • Sample size betyder noget. 10 par viser en tendens, men ikke statistisk signifikans hvis effekten er lille (fx 4%). 30+ par eller en t-test på Δ%-fordelingen giver mere troværdige tal.

Opsummering

Energi pr. matchet par (kWh)

Procent-ændring pr. par

Energi vs. vindstyrke

Energi vs. vandstand

Matchede par (sortéret efter match-score) — klik på en række for detaljer
# Retning FØR dato EFTER dato Vind m/s (f → e) Retning° (f → e) Vandstand cm (f → e) Trend (f → e) Propel RPM (f → e) Distance nm (f → e) FØR kWh EFTER kWh Δ% Score