HEMA és a fogalmi modellezés

írta Sándor Zsolt

A korábbi cikkekben sokat foglalkoztunk fogalmi modellezéssel, ennek ábrázolásával, és megnéztük egy rendszert, mely példákat állít elő az általunk megadott szabályok alapján.

A mai cikkem rendhagyó lesz: a hagyományos informatikai témáktól elszakadva egy teljesen más világba utazunk, ez pedig az 1850-es évek Franciaországa, ahol is egy botvívás rendszer működését fogjuk analizálni a korábban tanult fogalmi modellezés segítségével.

HEMA és botvívás

A HEMA (Historical European Martial Arts, történelmi európai harcművészetek kutatásával foglalkozó csoport) mozgalom keretén belül több mint 10 éve foglalkozom vívás rekonstrukcióval; a fő kutatási területem az 1800-1900-as évek európai küzdésmódszerei, amelyről több cikket is publikáltam, amelyek elérhetőek a kardeskalap.hu oldalon.

Franciaországban nagy népszerűségnek örvendett a bottal (sétapálcával) történő vívás, olyan mértékben, hogy még az akkori katonatiszti képzésért felelős Joinville-i katonai akadémia tananyagának is részévé vált. 

Francia botvívó diploma az 1800-as évekből, forrás: Craig Gemeiner

A témában több könyvet is megjelentettek, az egyik legismertebb az 1853-as Théorie pour apprendre à tirer la canne en vingt-cinq leçons par Leboucher, de Rouren , magyarra fordítva Elmélet a sétapálca vívás tanulásáról 25 leckében a Rouren-ből származó Leboucher-től.

A könyv angol fordításának előlapja

Egy rekonstrukciós próbálkozást itt lehet megtekinteni:

Egy rövid összefoglaló cikk pedig a következő címen olvasható a rendszerről:

A könyv a XIX. századnak megfelelő, önvédelmi szemléletű támadás, védés, visszatámadás formájában írja le a technikákat. Ez önmagában jó, viszont felmerült bennem a kérdés: ugyanezt az anyagot nem-e lehetne jobban, hatékonyabban átadni?

Támadás, védés, visszatámadás sorozat a könyvből


Az ötlet a következő: mi lenne, ha az unalmas egyik támad, másik véd majd visszatámad gyakorlatok helyett olyan páros gyakorlatokat adnánk, melyeket a gyakorló felek folyamatosan, megszakítás nélkül tudnának végrehajtani.
Ezek a gyakorlatok állhatnának több mint három lépésből, de nyilvánvalóan valamilyen szinten korlátozni kell a lépések számát, mert ha túl sok, akkor senki nem tudja megjegyezni.
Cél továbbá az is, hogy a rekonstrukció a lehető legpontosabb legyen: a technikák a forrásanyagban szereplő módon jöjjenek egymás után.

Röviden összefoglalva: a végeredményt megpróbáljuk annyira közelíteni az eredeti rendszerhez, amennyire csak lehetséges.

A vívókönyv fogalmi modellezése

Mint minden feladat esetében, itt is a fogalmi modellezéssel kezdünk. Nézzük, hogy a könyv milyen fogalmakkal dolgozik. A könyv átnézése után három kategóriát tudunk megkülönböztetni, ezek:

  • Támadás: az eszközzel végrehajtott ütés vagy szúrás
  • Védés: egy támadás ellen végrehajtott akció mely megakasztja a támadó eszközt ezáltal védve a vívót
  • Visszatámadás: a visszatámadás egy támadás, melyet egy védés után hajtunk végre

Nézzünk egy példát egy gyakorlatsorra:

A támadó függőleges ütés fejre (head blow) technikát hajt végre, melyet a védekező fej védés (head parry) technikával hárít, majd egy belső arc ütés (inside face blow) technikával válaszol. 

A korábban fogalmi modellezésben tanultakat alkalmazva láthatjuk, hogy itt a fenti fogalmaknak egy-egy példányával dolgozunk. Az első példányunk a támadás fogalomból jön létre (függőleges ütés fejre), a második példányunk a védekezés fogalomból (fej védés), a harmadik példány pedig a visszatámadás fogalomból (“inside face blow”).

Felmerül a kérdés, hogy a modellünk szempontjából van-e értelme külön fogalomként kezelni a támadást és a visszatámadást. 

Támadás, védés, és visszatámadás


Ahhoz, hogy a fenti kérdésre választ kapjunk, elemezni kell a forrás anyagunkat, és két kérdésre kell választ találnunk.

Az első kérdésünk az, hogy van-e végrehajtásbeli különbség a között, hogy egy ugyanolyan néven hivatkozott technikát támadásként, vagy pedig visszatámadásként hajtunk végre.

Példaként ha egy függőleges ütés fejre technikáról beszélünk, akkor van-e különbség a között, hogy az ellenfelünket simán csak fejbekólintjuk, vagy előtte védünk, és utána csapjuk fejbe. Ha nincs, az azt jelenti, hogy ezek a technika végrehajtások (példányok) valójában azonosak, ezért őket egy közös fogalmi kategóriába lehet csoportosítani. 

A válasz az első kérdésre a forrásanyag elemzése után az, hogy nincs végrehajtásbeli különbség a között, hogy egy technikát támadásként, vagy pedig visszatámadásként hajtunk végre.

A második kérdésünk az, hogy a támadások és visszatámadások halmaza megegyezik-e? Ha nem, az azt jelenti, hogy vagy létezik olyan támadás, amely nem értelmezhető visszatámadásként, vagy pedig létezik olyan visszatámadás, mely nem értelmezhető támadásként.

Ehhez írjuk fel az összes könyvben szereplő akciót (ezt a táblázatot rakjuk is el, mert hamarosan fel is fogjuk használni), és vizsgáljuk meg a támadások és a visszatámadások halmazát.

A könnyebb érthetőség kedvéért egy táblázatban foglalnám össze az alap mozdulatokat képekkel és fordítással együtt, majd pedig a könyvben szereplő támadás, védés, visszatámadásokat mutatnám be.

Alaptechnikák és fordításuk

Támadások

Angol elnevezésMagyar elnevezésKép
Head blowFejre mért függőleges ütés
Inside face blowBelső arc ütés
Outside face blowKülső arc ütés
Kidney blowVesére mért ütés
Flank blowOldalra mért ütés
Outside leg blowKülső lábszárra mért ütés
Inside leg blowBelső lábszárra mért ütés
Rising blowEmelkedő ütés könyökre
Inside thrustSzúrás belső vonalon testre
Outside thrustSzúrás külső vonalon testre
Thrust to the faceSzúrás arcra

Védések

Angol elnevezésMagyar elnevezésKép
Head parryFejvédés
Quarte parryVédés belső vonalon
Tierce parryVédés külső vonalon
Prime parryMagas védés
Kidney parryVesetámadás védése
Flank parryOldal védés
Outside leg parryKülső láb védés
Inside leg parryBelső láb védés
Rising parryEmelkedő támadás védése

Támadások, védések, és visszatámadások

TámadásVédésVisszatámadás
Head blowHead parryHead blow
Head parryInside face blow
Head parryInside leg blow
Inside face blowQuarte parryKidney blow
Quarte parryRising blow
Quarte parryOutside leg blow
Outside face blowTierce parryHead blow
Tierce parryInside face blow
Tierce parryInside leg blow
Inside face blowPrime parryHead blow
Prime parryInside leg blow
Prime parryInside face blow
Kidney blowKidney parryHead blow
Kidney parryInside face blow
Kidney parryInside leg blow
Kidney parryFlank blow
Flank blowFlank parryFlank blow
Flank parryHead blow
Flank parryInside face blow
Outside leg blow
Outside leg parryHead blow
Outside leg parryInside face blow
Inside leg blowInside leg parryOutside face blow
Rising blowRising parryThrust to the face
Inside thrustQuarte parryOutside face blow
Outside thrustTierce parryInside face blow
Tierce parryInside leg blow

Ha a fenti táblázatból kivesszük a védéseket és kiszűrjük a duplikátumokat, akkor a következő táblázatot kapjuk:

TámadásVisszatámadás
Flank blowFlank blow
Head blowHead blow
Inside face blowInside face blow
Inside leg blowInside leg blow
Kidney blowKidney blow
Outside face blowOutside face blow
Outside leg blowOutside leg blow
Rising blowRising blow
Outside thrustThrust to the face
Inside thrust

Látható, hogy szinte mindegyik támadást megtaláljuk a visszatámadások között, egyedül a szúrásokkal van egy kis problémánk: támadásként szúrhatunk belülre illetve kívülre (ez azt jelenti, hogy az ellenfél fegyverének síkjához képest a törzshöz, vagy a karhoz közelebbi területre), visszatámadásként azonban csak fejre. 

Több lehetőségünk is van modellezési szempontból: vagy azt mondjuk hogy a támadást és a visszatámadást, legalábbis szúrás tekintetében külön kezeljük, vagy kibővítjük a modell-t úgy, hogy felvesszük a támadások közé a Thrust to the face (szúrás arcra) akciót és a visszatámadások közé az inside és az outside thrust (belső és külső szúrás) akciókat. Ezt a domain tudásunk alapján megtehetjük, mert a szúrás védése tierce vagy quarte mozdulattal egy teljesen szabályos vívóakció, illetve egy rising parry után nem csak fejre, hanem testre is szúrhatunk.

Nézzük mivel bővült az eredeti táblázatunk:

TámadásVédésVisszatámadás
Rising blow Rising parryInside thrust
Rising parryOutside thrust
Thrust to the faceQuarte parryOutside face blow
Tierce parryInside face blow
Tierce parryInside leg blow

Gyakorlatok gráfosítva

Gráfelméletben jártasak már sejthetik, hogy mire is megy ki a játék: megpróbáljuk a problémát visszavezetni egy irányított gráfra, majd pedig a gráfelméletben használt algoritmusokkal elemezni azt.

Hogyan is néz ki egy irányított gráf? Egy irányított gráf csúcsokból és irányított élekből áll, ahol egy él két csúcsot köt össze, és van egy irányultsága: egyikből mutat a másikba.

Hogyan lehetne felírni egy példát a mi esetünkre? Tekintsük az összes támadást, védést, illetve visszatámadást egy-egy csúcsnak. Akkor húzzunk élet támadásból védésbe, illetve védésből visszatámadásba, ha a forrásban szerepel ilyen akció.

A gráfunk ábrázolására használhatjuk a graphviz nevű alkalmazást, mely az akciók betáplálása után a következő eredményt adja (oválissal jelöljük a támadást, szögletes dobozzal a védést).

Ha ránézünk a generált gráfra, láthatjuk, hogy alapvetően szépen teljesíti az elvárást: tudunk olyan sorozatokat találni amelyek “sosem fejeződnek be”, viszont vannak akciók, melyeket maximum egyszer tudunk végrehajtani (ezeket pirossal jelöltem a gráfban).

Ezeket az akciókat azért lehet csak egyszer végrehajtani, mert belőlük csak kiindulni tudunk, hozzájuk vissza többet nem jutunk (ilyen pl. az inside thrust, outside thrust), vagy pedig része lehetnek egy sorozatnak, viszont maga a sorozat befejeződik (ilyen a rising blow, rising parry, thrust to the face), és nem tud ismétlődni.

Nézzük meg tehát hogyan is nézne ki a gráfunk ha a fent említett bővítést végrehajtanánk.

Láthatjuk, hogy a felvett akciókkal a fent említett problémákat megszüntettük. 

Gráf elemzés

A problémát egy irányított (páros) gráffal modelleztük, ahol az egyes csúcsok a támadások illetve védekezések, és irányított él akkor megy egy csúcsból a másikba, ha az adott vívóakciók egymásutánja szerepel a forrásban. Ha jobban belegondolunk, ez egyébként egy páros gráf, mert a csúcsokat két kategóriába (támadás és védés) sorolhatjuk, és él csak támadás és védés között mehet, támadásból támadásba, illetve védésből védésbe nem. 

Vívástechnikailag ez egyébként azt jelenti, hogy a közbetámadás vívóakció (amikor egy támadásra támadással felelünk) ebben a rendszerben nem értelmezett. E mögött az a gondolat állhat, hogy a közbetámadás akció nem rizikós akció, sokkal biztonságosabb, ha a gyakorló (aki alapvetően egy gyorstalpaló kurzuson vesz részt) először mindig védeni próbálja magát, és csak utána visszatámadni.

Páros gyakorlatok generálása

Nézzük meg, hogy hogyan tudunk páros gyakorlatokat generálni az így elkészített gráfunkból.

Mi a páros gyakorlat? A páros gyakorlat egy két fél (A,B) által végrehajtott technikák sorozata. A jelen esetben olyan páros gyakorlatokat akarunk létrehozni, melyekben egy támadást egy védés és visszatámadás követ. 

Nézzünk erre egy példát egy négy lépésből álló páros gyakorlat esetén:

ABBA
támadvédtámadvéd

A támad (1. lépés), B ezt védi (2. lépés), majd B (vissza)támad (3. lépés), amit A véd (4. lépés), majd pedig A újra támad (1.lépés). Egy ilyen sorozat általánosan akkor megfelelő, ha a gráfban találunk egy olyan csúcs-él sorozatot (a gráfelméletben a csúcs-él sorozatot útnak nevezik) amelyre igaz hogy 1 → 2 → 3 → 4 → 1. Mivel az úton az első elem megegyezik az utolsóval, körbeérünk, ennek a szakszerű elnevezése meglepő módon a kör. Tehát a célunk az, hogy a gráfban köröket keressünk. Figyeljük meg, hogy 4 lépés esetén mindig ugyanaz a fél kezdi a sorozatot, tehát egy idő után szükség lesz szerepcserére.

Egy ilyen sorozat például az Inside face blow → Prime Parry → Head blow → Head parry → Inside face blow.

Színezzük ki ezt a kört a gráfban:

Tudunk ennél hosszabb köröket találni a gráfban? Természetesen. Hat hosszúságú esetben a sorozatunk általánosan így nézne ki:

ABBAAB
támadvédtámadvédtámadvéd

A támad (1. lépés), B ezt védi (2. lépés), majd B (vissza)támad (3. lépés), amit A véd (4. lépés), majd pedig A visszatámad (5.lépés), amit B véd, majd pedig szerepet cserélnek, és B fogja végrehajtani az 1. támadást. Figyeljük meg, hogy itt automatikusan, a drill részeként történik egy szerepcsere, tehát nem kell külön felhívni a figyelmet erre, mint a négy lépéses esetben.

Egy ilyen sorozat például az Inside face blow → Quart Parry → Kidney blow → Kidney parry → Head blow → Head parry. 

Páros gyakorlatok vizsgálata

Most már látjuk, hogy mit is szeretnénk: egy olyan algoritmusra lenne szükségünk, amelyik visszaadja nekünk egy adott gráfban létező összes kört, majd ezek után kérdéseket szeretnénk feltenni. A kérdéseink a következőek:

  • Ha vesszük az összes kört, és rávetítjük a gráfunkra, akkor marad-e olyan csúcs vagy él, amely nem kerül lefedésre? Ha nem, akkor örülünk, hiszen ez azt jelenti, hogy ha az összes gyakorlatsort végrehajtjuk, akkor végiggyakoroltuk az egész rendszert. Ha marad, akkor a páros gyakorlatokon kívül ezeket még külön be kell gyakorolni. 
  • Van-e lehetőségünk arra, hogy csökkentsük a körök számát, ezáltal a begyakorlandó páros gyakorlatok számát úgy, hogy a duplikátumokat kiszűrjük? Az átlagember 6-8 mozdulatot tud megjegyezni, tehát ezzel a korlátozással kellene élnünk (maximum 6 vagy 8 hosszúságú köröket engedünk).
  • Mennyire “jó” az algoritmusunk?

Az összes kör megtalálása

A feladat alapvetően egy gráfelméleti probléma: találjuk meg egy irányított gráfban az összes lehetséges kört. A problémát különböző algoritmusokkal meg lehet oldani, ezek egyike az un Johnson algoritmus.

Az algoritmust lefuttatva 144 kört találunk, amely túl sok. Nézzük, hogy hogyan tudnánk optimalizálni.

A körök számának csökkentése

Miután megkaptuk az összes kört, meg kell vizsgálnunk, hogy a körök mely halmaza az, amely lefedi a teljes gráfot. Erre különféle algoritmusokat találhatunk ki, a naiv algoritmus a következő: rendezzük a köröket méret szerint sorba. Kezdetben egy üres listánk van, mely nem tartalmaz kört. Vegyük a legrövidebb még nem kiválasztott kört (ha több azonos méretű van akkor véletlenszerűen egyet) és adjuk hozzá a listánkhoz. Nézzük meg, hogy a listánkban lévő körök lefedik-e az egész gráfot. Ha igen, akkor készen vagyunk. Ha nem, akkor folytassuk.

Ezzel az algoritmussal 21-re tudjuk csökkenteni a körök számát.

Tudjuk optimalizálni az algoritmus? Igen, egy mohó algoritmussal. Eddig a rövidebb köröktől haladtunk az egyre hosszabbak felé, most fordítsuk meg az irányt. Adjunk meg egy maximális kör hosszúságot (pl. 8) kezdjünk ezekkel a körökkel dolgozni. Nézzük meg, hogy az adott méretű körök közül melyik az, amelyik legjobban csökkenti az élek számát. Ezt a kört vegyük be a listánkba. Ha lefedjük a gráfot, végeztünk. Ha nem, akkor vegyük a következő, az adott hosszúságnak megfelelő gráfot. Ha már nincs, akkor csökkentsük a hosszúságot (pl. 6-ra), és folytassuk ezekkel a körökkel.

Ezen algoritmussal 18-ra tudjuk csökkenteni a körök, tehát a páros gyakorlatok számát.

Nézzük meg, hogy mik lettek a gyakorlatok (mert végül is ezért dolgoztunk idáig):

Két lépésből álló gyakorlatok:

  1. headBlow, headParry
  2. insideFaceBlow, primeParry
  3. flankBlow, flankParry

Négy lépésből álló gyakorlatok:

  1. risingBlow, risingParry, insideThrust, quarteParry
  2. kidneyBlow, kidneyParry, insideFaceBlow, quarteParry
  3. risingBlow, risingParry, faceThrust, quarteParry
  4. outsideLegBlow, outsideLegParry, insideFaceBlow, quarteParry
  5. outsideFaceBlow, tierceParry, insideFaceBlow, quarteParry
  6. insideLegBlow, insideLegParry, outsideFaceBlow, tierceParry

Hat lépésből álló gyakorlatok:

  1. outsideLegBlow, outsideLegParry, flankBlow, flankParry, insideFaceBlow, quarteParry
  2. risingBlow, risingParry, outsideThrust, tierceParry, insideFaceBlow, quarteParry
  3. insideFaceBlow, quarteParry, kidneyBlow, kidneyParry, headBlow, headParry
  4. insideFaceBlow, quarteParry, outsideLegBlow, outsideLegParry, headBlow, headParry
  5. insideFaceBlow, primeParry, insideLegBlow, insideLegParry, outsideFaceBlow, tierceParry

Nyolc lépésből álló gyakorlatok:

  1. insideFaceBlow, quarteParry, kidneyBlow, kidneyParry, flankBlow, flankParry, headBlow, headParry
  2. insideLegBlow, insideLegParry, outsideFaceBlow, tierceParry, insideFaceBlow, primeParry, headBlow, headParry
  3. insideFaceBlow, quarteParry, risingBlow, risingParry, faceThrust, tierceParry, headBlow, headParry
  4. kidneyBlow, kidneyParry, insideLegBlow, insideLegParry, outsideFaceBlow, tierceParry, insideFaceBlow, quarteParry

Az algoritmus jósága

Láthatjuk, hogy a megfelelő páros gyakorlatokkal az unalmas támadás, védés, visszatámadás gyakorlatokat izgalmas páros gyakorlatokká tudtuk alakítani. A kérdés, hogy ennek mi az ára. Kell-e, és ha igen mennyivel többet gyakorolni mint a kiindulási pont, mi a hatékonyság és a szórakozás aránya?

Az algoritmus jóságának vizsgálatára a következő arányszámot használtuk: a kiválasztott körök hányszor tartalmaznak több élt, mint az eredeti gráf. 

A jelenlegi nem túl szofisztikált algoritmus esetében 2.3-szor több élt tartalmaz a gráf (40 helyett 92 él), tehát ennyivel fogunk több munkát végezni. 

Összefoglalás

A régi korokban készített vívókönyvek feldolgozása nem egyszerű, de azt gondolom, sikeresen vettük a feladatot. Feldolgoztunk egy 1850-es évekbeli botvívó könyvet, létrehoztuk a könyvben használt fogalmi modell-t, meghatároztuk a fogalmi modell példányait, majd áttranszformáltuk a feladatot egy gráfelméleti problémára, amit sikeresen megoldottunk.

Láthatjuk, hogy az általam propagált modellezési módszertan és gondolkodásmódot nem csak informatikai témákban, hanem az élet egészen más területein is sikeresen használhatjuk.

Végül de nem utolsó sorban szeretnék köszönetet mondani Törcsvári Attilának az algoritmusokban való segítségnyújtásért és Bakos Bencének a lektorálásért.

Páros gyakorlat generátor

A fent említett algoritmusok javascript nyelvű implementáció elérhető a következő oldalról:

https://github.com/sz332/cerri

Az implementáció a következő funkciókkal rendelkezik:

  • Gyakorlatok olvasása JSON fájlból
  • PDF generálása a létrehozott gyakorlatsorokból
  • Webes nézet
  • Lehetőség az páros gyakorlat algoritmus cseréjére
  • Generált páros gyakorlatok megjelenítése
  • Jósági adatok megjelenítése

Példa a generált PDF-re

Webes nézet

Kapcsolódó anyagok

A könyv angol nyelvű fordítása elérhető itt:

https://sirwilliamhope.org/Library/DDLR/crawley/theory_for_learning_the_cane_in_25_lessons.pdf

Az eredeti, francia nyelvű forrás elérhető itt:

https://gallica.bnf.fr/ark:/12148/bpt6k55442697

Related Posts