OldComp.cz
http://oldcomp.cz/

Hrátky s vlakem
http://oldcomp.cz/viewtopic.php?f=113&t=6339
Stránka 11

Autor:  berk [ 22.05.2018, 22:29 ]
Předmět příspěvku:  Hrátky s vlakem

Trochu jsem se nudil a vyrobil jsem 51. scénu do hry VLAK (heslo: ocomp).

Příloha:
ocomp.png
ocomp.png [ 9.33 KiB | Zobrazeno 9263 krát ]


Pokud by měl někdo chuť si vyrobit nějakou svou vybroušenou scénu, tak je to vcelku jednoduchá záležitost:

1) zdroják je tady: https://github.com/oldcompcz/vlak
2) na konci souboru SCENY.ASM se vytvoří nová scéna - jak na to je snadno pochopitelné z předchozích příkladů :-)
3) v souboru VLAK.ASM je třeba
a) na řádku 6 upravit číslo počtu scén
b) ke konci soubrou - řádek 1733 - přidat heslo pro novou scénu

*) soubor VLAK.ASM je vhodné editovat v DOSu (windowsové editory zmrší některé speciální znaky v soubrou)
**) kompilaci (viz README v projektu) je třeba provést v MS DOSu (v DOSBOXu nefunguje dobře cpoy /b a nepřipojí tak správně data k výsledné binárce)

Pokud by se sešlo více scén, tak bychom mohli udělat malou soutěž o nejlepší scénu :-)

Přílohy:
VLAK.zip [12.03 KiB]
559 krát

Autor:  Busy [ 23.05.2018, 10:46 ]
Předmět příspěvku:  Re: Hrátky s vlakem

berk píše:
je třeba provést v MS DOSu (v DOSBOXu nefunguje dobře cpoy /b a nepřipojí tak správně data k výsledné binárce)
Len poznamka na okraj:
copy /b file1 + file2 na zlepenie dvoch binariek mi vzdy fungovalo dobre, skusane v msdos, win98, winXP, win7.
Nevidim dovod preco by v dosboxe neslo, skor si myslim ze to bude nejaky omyl ktoreho pricina lezi niekde inde.

Autor:  baktra [ 23.05.2018, 16:27 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Busy píše:
berk píše:
je třeba provést v MS DOSu (v DOSBOXu nefunguje dobře cpoy /b a nepřipojí tak správně data k výsledné binárce)
Len poznamka na okraj:
copy /b file1 + file2 na zlepenie dvoch binariek mi vzdy fungovalo dobre, skusane v msdos, win98, winXP, win7.
Nevidim dovod preco by v dosboxe neslo, skor si myslim ze to bude nejaky omyl ktoreho pricina lezi niekde inde.


Třeba autoři FreeDOSu zrovna udělali chybu v jejich implementaci příkazu COPY. To nelze vyloučit. Odpověď by přineslo porovnání výstupů z Windows a FreeDOSu.
A jestli shromáždíte dost nových obrazovek, vytvoříme z nich třeba speciální edici hry TRAIN pro 8bitové počítače Atari :-)

Autor:  faraon [ 23.05.2018, 16:32 ]
Předmět příspěvku:  Re: Hrátky s vlakem

V DOSBoxu/FreeDOSu některé věci fungují trošku jinak. Například rouru trochu nedotáhli do konce, a nejde udělat tohle:
Kód:
echo "print sqr(3^2+4^2)" | gwbasic


Jinak v DOSBoxu doporučuji frameskip=1 a cycles=max.

Autor:  berk [ 23.05.2018, 17:19 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Busy píše:
berk píše:
je třeba provést v MS DOSu (v DOSBOXu nefunguje dobře cpoy /b a nepřipojí tak správně data k výsledné binárce)
Len poznamka na okraj:
copy /b file1 + file2 na zlepenie dvoch binariek mi vzdy fungovalo dobre, skusane v msdos, win98, winXP, win7.
Nevidim dovod preco by v dosboxe neslo, skor si myslim ze to bude nejaky omyl ktoreho pricina lezi niekde inde.


Moc jsem to před tím nezkoumal, ale vyprovokoval si mě k akci :-) Jsou tam 2 problémy:

1) DosBox narozdíl od MSDOSU neakceptuje filename<space>+<space>filename. Bylo nutné mezery smazat
2) DosBox v následujícím případě na druhém řádku file result nejprve vyprázdní a pak připojí file02 k prázdnému result

copy /b file01 result
copy /b result+file02 result

Buildící baťáky jsem opravil a už to buildí i pod DosBoxem :-)

Pro info:
https://github.com/oldcompcz/vlak/commi ... e53d5d2d14

Autor:  Panda38 [ 19.06.2018, 16:41 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Teoretická úvaha: Ve svém archivu jsem narazil na program, kterým jsem kdysi zkoušel nalézt řešení scén Vlaku přes brutal force (tj. zkouší kroky ve všech možných směrech). S nadějí že by třeba některé scény mohly mít jednodušší či zajímavější řešení. Tehdy jsem to vzdal, protože program dokázal vyřešit jen jednodušší scény, ale u složitějších řešení uvázl na přílišné složitosti, nebyly vyřešitelné v reálném čase. Ani teď jsem nedokázal program vylepšit. Tak nevím jestli se nemýlím, vážně to už spadá do oblastí neřešitelných v reálném čase? Myslel jsem že mnoho variant cest vypadne neprůchodností, ale jak je vidět, zůstává stále příliš mnoho variant možných cest. A nedají se využít zjednodušení jako nalezení nejkratší cesty či řešení jen části problému nebo metoda Monte Carlo, vždy by se tím zjednodušením mohlo přijít o možné řešení.

Autor:  berk [ 19.06.2018, 18:45 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Člověk to dokáže vyřešit relativně snadno.
Je otázka zda hledat přesný algoritmus, nebo zda by bylo lepší zkusit natrénovat nějakou neuronovou síť.

Autor:  creep73 [ 19.06.2018, 18:48 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Ad téma. Google trénuje svoji AI na Montezuma Revenge. http://www.digitaljournal.com/tech-and- ... cle/524278

Autor:  Panda38 [ 19.06.2018, 20:01 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Mám obavu, že tady neuronová síť asi nepomůže. Nestačilo by ji učit procházet menší oblasti, protože není jednoznačný výsledek který se očekává - ty oblasti je potřeba projet různě, někdy sbírat vozíky, jindy je objet. Větší šance by byla, kdyby se mohla učit celou plochu jako celek - ale na to by muselo být k dispozici velká kvanta scén spolu s jejich řešením, což je nereálné. V tomto případě se neuronová síť nemůže učit sama od sebe, protože je nereálně náročné generovat úkoly a jejich řešení.

Tak asi nic. Stejně to byla jen úvaha. Nebylo by rozumné se tím zabývat v praxi, protože i kdyby se vytvořil automatický generátor scén (jejichž průchodnost by bylo nutné automaticky testovat), tak takto generované scény by stejně byly pro hráče nezajímavé.

Ale přece jen to s tou neuronovou sítí stojí ještě za úvahu, zda by se tam nedala nějak napasovat, dobrý podnět k zamyšlení.

Autor:  baktra [ 19.06.2018, 21:50 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Jestli jsem to dobře pochopil, tak ten algoritmus je vlastně prostý backtracking.
Zkusil bych se zamyslet, zda by se nedal zjistit stav "úroveň už jistě nelze dokončit" ještě dříve než dojde k nárazu do zdi nebo do vagonků. Tím by se mohla eliminovat určitá část stavového prostoru.
A je v algoritmu nějaká ochrana proti nekonečnému ježdění dokola?

Hezké je, že na webu jsou informace o různých Snake solverech (na Vlak samozřejmě nelze použít).

Tak kdo opatří Train pro Atari nějakým "Train robotem?"

Autor:  Panda38 [ 19.06.2018, 22:22 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Je to nejjednodušší zkoušení všech možných směrů, simulace možného pohybu vlaku v přímém směru. Nekonečné opakování je ošetřené jednak omezením max. počtu kroků a jednak tím, že každé políčko smí projet jen v omezeném počtu.

Asi by se to dalo řešit trochu inteligentněji tak, že se plocha rozdělí na oblasti s co nejmenším počtem okrajových průchozích políček a pak se zmapuje vztah mezi průchozími políčky - pro každou možnou cestu se stanoví vstupní políčko, výstupní políčko, povolená délka vlaku a o kolik vzroste délka vlaku. Při výskytu více cest se stejnými parametry se použije kratší cesta. A pak už jen zkombinovat seznamy cest tak aby vycházely, na to by možná metoda síly už mohla stačit. .. ale také asi nic moc řešení, po každém změně oblasti by se musely aktualizovat seznamy cest.

Mimochodem nevím jestli je známé, že ve Windows verzi Vlaku jsou makra pro řešení scény - když se stiskne F1 tak program přehraje řešení scény. Nebo v úvodní obrazovce přehraje řešení náhodně zvolené scény.

Autor:  Panda38 [ 20.06.2018, 08:00 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Podle metod používaných u Snake solverů se zdá že by i tady mohlo stát za pokus použít konvoluční neuronovou síť s genetickým učením.

Na neuronových sítích je jedna velká nepříjemnost - zpravidla se používá Python, což je jednak šíleně nemožný a nepraktický jazyk (fakt dodnes nechápu, proč to ti šílenci používají) a jednak ty knihovny jsou stylem "knihovna X používá knihovnu Y a ta používá knihovnu Z...", takže je až nemožný úkol to všechno zprovoznit např. pod Windows. Existují sice i knihovny pro C++, ale buď se jedná o úplně nejzákladnější síť (často špatně napsanou) nebo je to zas naopak tak propletená obecná knihovna, že se ani nedá použít bez roku studia.

Pro základní síť jsem si vytvořil knihovny v C++ která by měla být snadno použitelná, ale u vyšších typů sítí mám zatím problém správně vyčíst z Pythonu funkčnost, abych to přepsal do C++. (resp. převést to navíc do praktičtějších způsobů použití)

Autor:  faraon [ 20.06.2018, 15:57 ]
Předmět příspěvku:  Re: Hrátky s vlakem

Python je BASIC dneška, proto ho lamy cpou všude. Prolog nebo Lisp už dneska málokdo pochopí ;-)

Ale bez nějaké heuristiky bude i neuronová síť pomalá, leda že bys do toho zapřáhnul Google nebo něco podobného. Tohle je příliš podobné problému obchodního cestujícího, ještě s řadou komplikací navíc, protože Vlak je mnohem komplexnější svět než těch pár silnic a měst.

Stránka 11 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/