q
Ambitny: Mariusz
implementowałeś grę Go?
https://pl.wikipedia.org/wiki/Zasady_go
Mam problem z napisaniem algorytmu, który sprawdzi czy przeciwnik
otoczył jakąś grupę kamyków gracza.
Np. mam tablicę intów 9x9 (plansza 81 pól) : gracz A stawia kamyki '1', gracz B stawia kamyki
'2'.
Chcę parsować całą tablicę dwuwymiarową i wykrywać czy któryś z graczy otoczył jakąś grupę np.
'2' grupą '1', lub na odwrót.
Jakiś pomysł na realizację tego w Javie?
25 lis 00:51
Ambitny: znalazłem chyba sposób, ale nie będzie to chyba optymalne
25 lis 01:35
Mac Donald: Mariusz to zwykły klepacz kodu, lol
25 lis 01:35
Ambitny: Mariusz to ktoś kto zna się na algorytmach i programowaniu, i właśnie o to chodzi
25 lis 01:36
Mariusz:
O sata tym razem nazwał się Mac Donald
Domyśliłem się że piszesz jakąś grę po tym jak pytałeś o ten algorytm
co sprawia ze nie jest aż tak łatwo wygrać w tę grę z komputerem
Pamiętasz spis tematów który wysłałem w jednej z twoich wiadomości ?
Pisałem kod wybranych stamtąd tematów ale to było ok 13 lat temu
Do tego dochodzą jakieś programiki matematyczne jak
operacje na macierzach , rozwiązywanie równań liniowych , całkowanie numeryczne
Kiedyś miałem propozycję aby napisać grę kulki na lekcje informatyki ale jakoś nie skorzystałem
Trochę czytałem o silniku graficznym Crystal Space
Wprawdzie wpisy tego Pytającego pokazują że wie więcej niż taki sata vel Mac Donald
https://matematykaszkolna.pl/forum/353651.html
to powyższy wątek wskazuje że często nie chce mu się nawet czytać kodu
więc nauczycielem byłby kiepskim
(Nie chce mu się czytać kodu więc ci go nie poprawi ani nawet nie wskaże błędu
poza tym często wysyła odnośniki zamiast wytłumaczyć temat
Jednak wpisy tego Pytającego to coś więcej niż spam sata bo widziałem także wpisy
które coś wnoszą do tematu)
Może Dziadek będzie wiedział coś więcej
Ogólnie na forach internetowych niewiele się dowiesz
zwłaszcza jeśli chcesz nauczyć się czegoś nowego albo
przypomnieć sobie to co miałeś wykładane w szkole
25 lis 11:01
25 lis 13:37
Ambitny: Dzięki Mariusz, algorytm już prawie napisałem. Gra Go + MCTS. Implementacja toporna, raczej
zdecyduje się na przepisanie całości do języka c++.
25 lis 14:08
Ambitny: Mariusz, napisanie takiej gry ,to jest pewne wywanie ale również bardzo interesujące. Obecnie
biorę udział w wykładach intela, są omawiane zagadnienia dot. AI − sieci neuronowych.
Niestety ubolewam, że większość kodu jest w Pythonie, a ten przedmiot u mnie dopiero się
zacznie od nastepnego semestru. I tak mam napięty grafik, bo obecnie uczymy sie kilku języków
progr. równolegle i dorzucenie kolejnek jest krótko mówiąc niemożliwe
25 lis 14:21
Ambitny: Co do stron które mi podałeś. Część pozycji i www już przerobilem, bo po prostu musiałem ze
względu na przedmiot. Co prawda pobieżnie, ale sprawa jest rozwojowa. Obecnie mam grafy
skierowane i nieskierowane, algorytm DFS. W miarę przystępne zagadnienia
25 lis 14:24
jc: Wyobrażam sobie, że trochę pracy przy tym jest (szczegóły z związane z konkretną grą).
Czy od razu chcesz pisać MCTS, czy najpierw zwykłe przeszukiwanie?
Skąd wybór GO? Nie grałem, choć coś tam słyszałem.
25 lis 14:34
Mariusz:
Wyciągnąłeś coś o tym Pythonie z Metisa ?
Tzn spawdziłeś czy to co pisał to tylko przechwałki ?
Mnie w Pythonie mogą przeszkadzać dziwne pętle,
wcięcia zamiast bloków , to że jest to język interpretowany
no i jestem przeciwnikiem garbage collectora
Jeśli chcesz policzyć ile dni zostało ci do urodzin to wpisz sobie
from math import floor
def julian(y,m,d,s=1):
if(m < 3):
y−=1
m+=12
a=floor(y/100)
if(s==0):
b=0
else:
b=2−a+floor(a/4)
return floor(365.25*(y+4716))+floor(30.6001*(m+1))+d+b−1524.5
Teraz wystarczy wpisać różnicę między datą urodzin a dzisiejszą datą
U mnie zwróci 19
Ostatnio próbowałem też bawić się klasami w Pythonie na przykładzie własnej listy
Na Windowsie musisz sobie ściągnąć tego Pythona jeśli chcesz się nim bawić
Na Linuksie masz dostęp od razu do czterech języków programowania
Pascal (Free Pascal)
C/C++ (gcc)
Java
Python
25 lis 14:44
Ambitny: @jc
Zwykłe przeszukiwanie można zeralizować za pomocą chociażby algorytmu minimax. A co jeśli
drzewo gry jest zbyt duże i zbyt skomplikowane?
Algorytm minimax służy do znalezienia dokładnych wartości dla pozycji tablicy. Zakładamy, że
każdy gracz zawsze gra na swojej najlepszej pozycji. Przy takim założeniu, dwie obserwacje
prowadzą do algorytmu minimax: mamy dokładną analizę liści, a wartość węzła można dokładnie
określić na podstawie jego wartości. Wartość dla liści jest łatwa do ustalenia, ponieważ na
tych pozycjach kończy się gra.
Powyższy algorytm stosuje się gdy jesteśmy w stanie napisać funkcję oceniającą daną pozycję na
planszy, poprzez wygenerowania całego poziomu drzewa.
Programy , które grają w GO opierają się głównie na MCTS i jego modyfikacjach. Różnią się
miedzy sobą realizowaniem obliczeń równoległych (optymalizacją czasową dostępu do pamięci,
wykrywaniem wzorców oraz funkcją oceny).
We wspomnianej wyżej grze brakuje funkcji oceny. Kluczowym elementem jest symulacja i wybór
węzłów.
Dlaczego GO? Uważam to za ciekawe wyzwanie, gra często jest wybierana do eksperymentów nad AI.
Ogólnie gra ma proste zasady, kryje jednak dużą złożoność i rozpiętość możliwości.
25 lis 18:00
Ambitny: @Mariusz
dzięki , na Pythona przyjdzie czas (od kolejnego sem.), mam strasznie napięty grafik zadań do
wykonania i muszę realizować wszystko wg priorytetów, bo się nie wyrobie.
25 lis 18:02
jc: Ambitny, dla dwóch prostych gier napisałem program, oczywiście
z obcinaniem gałęzi, ale bez wcześniejszych prób (reversi, kartofle).
Dzięki Tobie dowiedziałem się o MCTS. Po prostu, napisanie programu
często wymaga niemałej pracy i stąd pytanie o wybór.
25 lis 18:07
sata: Niestety Mariuszku to nie byłem ja i łatwo to sprawdzić ale tego nie zrobisz bo nie umiesz nie
wiesz co i gdzie skopiować
25 lis 19:03