Cześć
Jakie warunki trzeba spełnić, aby w sieci obliczeń rozproszonych
uruchomić własny projekt? Czy to jest możliwe tylko dla dużych
instytucji, czy każdy może napisać i potem zainstalować?
Pozdrawiam
taaa... zwłaszcza, że u nas na forum stworzone zostały 2-3 projekty i jeden chodzi w ogóle na jakimś ledwo żywym kompie (Enigma) i obsługuje to osoba prywatna :)
Więc może zrobić sobie to jedna osoba pod warunkiem że sobie to ogarnie wszystko.
Z naszej strony będzie wsparcie merytoryczne i pomoc w rozwiązywaniu jakiś problemów, ale zrobić musisz sobie to sam, albo znaleźć sobie do tego ludzi.
Napisz jaki to miałby być projekt,
na pewno coś doradzimy..
Dziękuję za szybkie odpowiedzi, nie spodziewałem się
tak szybkiej reakcji. Już odpowiadam na wszystko.
Z samym napisaniem programu/programów raczej nie będę
miał problemów, programuję zawodowo od kilkunastu lat.
Natomiast mogę mieć różne problemy ze zrozumieniem protokołów,
komunikacji, instalacji, może coś mi się wydawać niejasne w
dokumentacji - z takiej pomocy z pewnością chętnie skorzystam.
O jakim projekcie myślę? Osobiście interesuję się uczeniem
maszynowym i grami. Dwa lata temu kupiłem specjalny
komputer i testuję na nim różne metody uczenia maszynowego w
zastosowaniu do szachów. Innymi słowy staram się napisać
taki program, aby sam nauczył się dobrze grać w szachy.
Starsza wersja mojego programu grała w międzynarodowym
turnieju:
http://wbec-ridderkerk.nl/html/BayesianElo_ed14.htm
i sklasyfikowała się na 173 miejscu - myślę że nieźle
jak na program który wszystkie parametry dobrał sobie
sam w wyniku procesu samouczenia. Najnowsza wersja
jest silniejsza, ale jeszcze wyników nie ma i nie pochwalę
się - organizatorom turniejów też brakuje mocy obliczeniowej i
trzeba czekać miesiącami na wyniki :)
Jakby ktoś chciał sam pograć, to można ściągnąć ze strony:
http://brodacz100.republika.pl
Niestety zabawa w samouczenie programu szachowego wymaga koszmarnej
mocy obliczeniowej. Kiedyś wykonałem symulację na znacznie prostszej grze, aby
oszacować ile trzeba rozegrać gier w trakcie uczenia. Wyniki
są zastraszające. Np. aby uzyskać systematyczny postęp
przy pomocy algorytmu genetycznego trzeba rozegrać wiele
turniejów a w każdym turnieju musi być przynajmniej 50mln gier.
Gdyby gra trwała choćby 30 sekund, potrzeba 50 lat obliczeń
na jeden turniej :)
Oczywiście są metody szybsze niż genetyczna, gdy mam
wolny czas to właśnie zajmuję się testowaniem tych metod.
Najszybsza metoda jaką testowałem wymaga tez kilku lat
ciągłych obliczeń. Oczywiście metodę trzeba uruchamiać
wiele razy z różnymi parametrami, analizować wyniki, nanosić
poprawki i próbować od nowa...
Gry i uczenie maszynowe to nie jedyne moje zainteresowanie.
Jeśli macie propozycje na jakieś inne projekty które by miały
lepsze wzięcie i jeśli od strony teoretycznej bym podołał, to...
nie obiecuję na pewno, ale może bym zrobił :)
Pozdrawiam!
moim zdaniem jest to świetny materiał na projekt :)
popieram, widzę zarys projektu mającego szanse zaistnieć na świecie... Jeśli tylko będę jakoś mógł się przydać, to chętnie pomogę.
NeuroChess@home ?? :whistle:
zajefajny pomysł. Na pewno znajdziesz u nas wsparcie :D projekt idealny na potrzeby BOINC :D
Za sprawą waszych wypowiedzi jestem wstępnie napalony.
Musiałbym więc zapoznać się z jakimś regulaminem i potem z
dokumentacją. Jakie dokumenty polecacie dla początkującego?
Bez zrozumienia na jakiej zasadzie to działa trudno snuć
dalsze spekulacje...
Może na rozgrzewkę warto napisać coś prostszego... może jakiś
hello world szachowy... może tzw test PERFT. Test ten polega
na policzeniu ile liści ma drzewo gry po przeszukaniu na zadaną
głębokość. Może policzymy na głębokość 14 ruchów :D
http://www.talkchess.com/forum/viewtopic.php?start=0&t=38862&topic_view=flat&sid=cb1572b39cc54505d74c2ec5044a572a
Pozdrawiam
Witamy na forum. Bardzo interesujące pomysły. :ahoy:
Cytat: mariotti w 26 Maj 2012, 01:56
Za sprawą waszych wypowiedzi jestem wstępnie napalony.
Musiałbym więc zapoznać się z jakimś regulaminem i potem z
dokumentacją. Jakie dokumenty polecacie dla początkującego?
Bez zrozumienia na jakiej zasadzie to działa trudno snuć
dalsze spekulacje...
Może na rozgrzewkę warto napisać coś prostszego... może jakiś
hello world szachowy... może tzw test PERFT. Test ten polega
na policzeniu ile liści ma drzewo gry po przeszukaniu na zadaną
głębokość. Może policzymy na głębokość 14 ruchów :D
http://www.talkchess.com/forum/viewtopic.php?start=0&t=38862&topic_view=flat&sid=cb1572b39cc54505d74c2ec5044a572a
Pozdrawiam
Witam na forum
Wg mnie konieczne by było napisanie aplikacji na CUDA NV lub ATI STREAM. Mogę się też postarać wykonać jakieś odznaki :)
Cytat: PoznanskaPyra w 26 Maj 2012, 02:28
Wg mnie konieczne by było napisanie aplikacji na CUDA NV lub ATI STREAM. Mogę się też postarać wykonać jakieś odznaki :)
Witam :)
Ale konieczne do czego? Do szachów się nie nadają, bo nie mają stosu.
Pozdrawiam
raczej do chwalenia się. Najpierw musisz mieć aplikację którą da się podzielić na zadania.
np przy szukaniu liczb pierwszych każdy dostaje algorytm jako aplikację liczącą a zakres liczb jako jednostkę pracy. W zadanym zakresie przy użyciu algorytmu szuka liczb pierwszych a jak zakończy to odsyła wyniki na serwer. W ten sposób to działa. Nie pamiętam zbyt wiele z algorytmów uczących ale można by ten sam algorytm przeprowadzić na kilku maszynach na tym samym zestawie danych a potem sprawdzić które wyniki są lepsze.
BTW jaka jest całkowita ilość rozegrań w szachy? bo widzę tu pewna możliwość :D mieć rozegrane wszystkie partie i podczas gry sprawdzać sytuację na szachownicy. wyszukiwać w bazie danego układu a potem patrzeć która sekwencja ruchów w przód zagwarantuje nam zwycięstwo....
Witam na forum :)
Pomysł masz doskonały, do tego idealnie wpasowuje się w zasady liczenia na platformie BOINC (przetwarzanie równoległe na wielu maszynach).
Do uruchomienia systemu w zasadzie wystarczy dowolny w miarę wydajny komputer, natomiast może być konieczne wyposażenie w dużą przestrzeń dyskową na przechowywanie wyników tych obliczeń (choć nie koniecznie).
Generalnie w kwestii samego uruchomienia serwera BOINC najlepiej chyba pytać TJM'a - ma w tym niezłą praktykę i opiekuje się już dwoma takimi projektami (Enigma@Home oraz Radioactive@Home).
Oczywiście, wszelką pomoc uzyskasz także na naszym forum :)
Cytat: mariotti w 26 Maj 2012, 03:33
Cytat: PoznanskaPyra w 26 Maj 2012, 02:28
Wg mnie konieczne by było napisanie aplikacji na CUDA NV lub ATI STREAM. Mogę się też postarać wykonać jakieś odznaki :)
Witam :)
Ale konieczne do czego? Do szachów się nie nadają, bo nie mają stosu.
Pozdrawiam
Na programowaniu się nie znam. Ale widząc wyniki obliczeń wydawało mi się, że karta graficzna jest tu zdecydowanie lepsza od procka i co to jest ten stos? Dowiem się czegoś chociaż. Btw. jak Ci się coś sypnie hardware-owo to uderzaj do mnie. :)
Cytat: PoznanskaPyra w 26 Maj 2012, 11:56Na programowaniu się nie znam. Ale widząc wyniki obliczeń wydawało mi się, że karta graficzna jest tu zdecydowanie lepsza od procka i co to jest ten stos? Dowiem się czegoś chociaż. Btw. jak Ci się coś sypnie hardware-owo to uderzaj do mnie. :)
Nie wchodząc w szczegóły to to karta graficzna nie nadaje się do programów z dużą ilością skoków :P Z tego co zrozumiałem to mariotti chce zaimplementować sprawdzanie drzewa rekurencyjnie do czego się po prostu karta graficzna nie nadaje. :whistle:
trudno, będzie projekt cpu only
Wpadłem na pomysł odznak, żeby zrobić szachownice i białe pola zastąpić kolorem odznaczenia.
Może też być dobrze rozpoznawalna ikonka w stylu konika szachowego w kolorze odpowiadającym poziomowi odznaki.
Mogę powiedzieć tylko jedno - jako osoba kiedyś związana "zawodowo" z szachami - będę zdecydowanie kibicował!
O albo im więcej punktów tym starsza figura.
[smg id=9596 type=full align=center caption="odznaka"]
chyba wybiegacie z tymi badgami za daleko w przyszlosc....
serwera projektu jeszcze nie ma, aplikacji tez...
Najpierw aplikacja :D potem serwer projektu a badge to pieśń przyszłości. Choć mi się podoba pomysł ze starszeństwem figur....
Te odznaki powyżej są na licencji CC więc można je wykorzystać.
Dziękuję za wszystkie odpowiedzi.
Moja decyzja jest taka: najpierw napiszę jakiś baaardzo prosty
projekt zgodny z BOINC, żeby nie rzucać się od razu na głęboką
wodę. Chcę zobaczyć jak się programuje aplikacje zgodne z
BOINC i jak to wszystko działa. Jeśli się uda z prostym projektem,
to potem sztuczna inteligencja w zastosowaniu do szachów.
Macie może jakieś propozycje bardzo prostej aplikacji? Mnie tak
na zawołanie przychodzi np. metoda brut-force do sprawdzania
czy liczba 64 bitowa jest liczbą pierwszą.
Moja pierwsza prośba o pomoc jest nasŧępująca: jak się zabrać za pisanie
aplikacji zgodnej z BOINC? Co powinienem przeczytać najpierw?
Dacie linki do materiałów? Na obliczeniach rozproszonych powiedzmy że
się znam, ale jak to jest zorganizowane w BOINC to kompletnie nie wiem.
Pozdrawiam
Generalnie, chyba najwięcej informacji znajdziesz tutaj (http://boinc.berkeley.edu/trac/wiki/SoftwareDevelopment).
Budowanie aplikacji jako takiej pod BOINC raczej się nie różni zbytnio od innych systemów przetwarzania rozproszonego, w skrócie:
1. W kodzie aplikacji podajesz informacje o jej starcie (w C o ile pamiętam jest to BOINC_START();).
2. Ciało aplikacji, zapisanie wyników.
3. Informacja o wyjściu/zakończeniu.
Później możesz rozbudowywać np. poprzez dodanie informacji o postępie, wygaszacza, itd.
Myślę, że dobrym startem by było przejrzenie źródeł jakiegokolwiek projektu, np. Radioactive@Home ma stosunkowo prostą budowę (źródła dostępne na stronie projektu).
Ok, dziękuję za namiary.
Jakby jeszcze ktoś jeszcze podrzucił jakieś materiały (może po polsku) to
będę wdzięczny. Zacząłem czytać wiki, zobaczymy czy się połapię w
tym wszystkim :) Wkrótce dam znać co się dzieje.
Pozdrawiam
Czekamy na wieści ;D :parrrty:
Czekamy i powodzenia! :attack:
może przy okazii poprowadzisz bloga o tworzeniu projektu? ewentualnie udokumentujesz swe poczynania w formie artykułu?? byłby to świetny materiał dla idacych w twe ślady.....
Cytat: Troll81 w 28 Maj 2012, 06:16
może przy okazii poprowadzisz bloga o tworzeniu projektu? ewentualnie udokumentujesz swe poczynania w formie artykułu?? byłby to świetny materiał dla idacych w twe ślady.....
Obecnie sam takiego bloga potrzebuję.
Pozdrawiam
no więc własnie proponuje jego utworzenie :D
Cytat: Troll81 w 28 Maj 2012, 08:30
no więc własnie proponuje jego utworzenie :D
Jeśli się nie znam na tym to jak mam go utworzyć?
Pozdrawiam
no właśnie tak, że jak coś wyczytasz i osiągniesz sukces, to wstaw to na bloga.
Nie musi być to blog dla ludzi - rób go dla siebie - nie ma być ładny, tylko zawierać potrzebne Tobie informacje - łatwiej będzie wrócić później do bloga a nie szukać na nowo w necie informacji o tym, jak to zrobiłeś. (sam myślę założyć sobie takiego bloga z różnymi informacjami potrzebnymi do mojej pracy, bo nie chce mi się szukać po kilka razy tego samego :) )
dokładnie jak pisze Cyfron. Rób sobie dokumentację to łatwiej będzie ci po miesiącu np wrócić do tego dlaczego np cos ci nie dizała....
Cytat: Troll81 w 28 Maj 2012, 09:44
dokładnie jak pisze Cyfron. Rób sobie dokumentację to łatwiej będzie ci po miesiącu np wrócić do tego dlaczego np cos ci nie dizała....
Nie wydaje mi się aby to był dobry pomysł. Jeśli czegoś się nauczę to z
materiałów które gdzieś znajdę. Więc co będę mógł zrobić? Powielić
to co znalazłem i ewentualnie dodać swoje pomyłki? ;-) Nie zrobię tego
lepiej niż autorzy. Jeśli nie ma dobrych materiałów i naprawdę trzeba je
wykonać to ja po prostu tego się nie nauczę bo nie będę miał skąd.
Natomiast mogę was zapewnić że jeśli wpadnie mi w ręce jakiś dobry
papier to się podzielę.
Pozdrawiam
chodzi raczej o kwestie dokumentowania. Możesz to spisywać choćby i w rodzie. Załózmy że spotakasz dwa sposoby roziazania jakiegos problemu. Wykorzystasz jeden z nich i niby problem zniknął. Ale za miesiąc okaże się że rozwiązanie nie do końca działa a ty juz nie pamietasz które wybrałeśi jak sie je robiło. A tak wrócisz do bloga i sobie sprawdzisz. ponadto dokumentacja bywa przestarzała i np cos tam sie zmieniło. Np w nowszej wersji PHP juz czegoś tam nie trzeba robić... tego jest mnóstwo. Zresztą jako programista powinienes wiedziec jak wazne jest dokumentowanie tego co robisz. Nie zakładaj też że zawsze tylko ty będziesz cos robił przy projekcie. Czasem ktos cie będzie musiał zastąpic i dobrze by było by wiedział co i jak albo wiedział gdzie tego szukac.....
Cytat: Troll81 w 28 Maj 2012, 10:57
chodzi raczej o kwestie dokumentowania. Możesz to spisywać choćby i w rodzie. Załózmy że spotakasz dwa sposoby roziazania jakiegos problemu. Wykorzystasz jeden z nich i niby problem zniknął. Ale za miesiąc okaże się że rozwiązanie nie do końca działa a ty juz nie pamietasz które wybrałeśi jak sie je robiło. A tak wrócisz do bloga i sobie sprawdzisz. ponadto dokumentacja bywa przestarzała i np cos tam sie zmieniło. Np w nowszej wersji PHP juz czegoś tam nie trzeba robić... tego jest mnóstwo. Zresztą jako programista powinienes wiedziec jak wazne jest dokumentowanie tego co robisz. Nie zakładaj też że zawsze tylko ty będziesz cos robił przy projekcie. Czasem ktos cie będzie musiał zastąpic i dobrze by było by wiedział co i jak albo wiedział gdzie tego szukac.....
To jest oczywiste że swoje prace warto dokumentować. Myślałem
że chodzi o "moje ślady" w sieci obliczeń rozproszonych...
Jeśli chodzi o udokumentowanie moich prac z zakresu uczenia maszynowego w
szachach to oczywiście gromadzę doświadczenia, wiedzę, wyniki eksperymentów,
przemyślenia i co tam jeszcze. Przy pomyślnych wiatrach za kilka lat powstanie z
tego monografia.
Pozdrawiam
mi chodzi o taką dokumentację procesu stawiania projektu BIONC.
Czyli o tym jak będziesz pisał palkację. stawiał serwer, robił strone, potem zamknięe testy. potem otwarte testy. A potem wiek niemowlęcy projektu itp....
Będę próbował wpinać się w BIONC dokładnie ze wskazówkami jakie znajdę w
dokumentacji. Nic nowego/odmiennego nie wymyślę w tej dziedzinie.
i tak warto zapisac :D
Cytat: Troll81 w 29 Maj 2012, 07:08
i tak warto zapisac :D
Hmmm w pewnym sensie masz rację.
Jeśli przybędzie tysiąc procesorów do obliczeń to wszystko warto :>
A tak poważnie i realnie to na jaką moc obliczeniową jest szansa?
Pozdrawiam
zobacz na nasz projektradioactive. Ludziska musza dopłacić do czujnika i czekac na niego a i tak pchaja się drzwiami i oknami....
Cytat: mariotti w 29 Maj 2012, 07:43
A tak poważnie i realnie to na jaką moc obliczeniową jest szansa?
W temacie sztucznej inteligencji?
Możesz IMHO spokojnie myśleć w o liczbach cztero (a może pięcio) cyfrowych... (np. Chess960@Home - 7,501 użytkowników, Mersenne@Home ok 2k) :)
Wszystko zależy od tego, jak ciekawy jest problem oraz czy będziesz publikował wyniki (ludziska lubią otwarte projekty).
Cytat: mariotti w 29 Maj 2012, 07:43
Cytat: Troll81 w 29 Maj 2012, 07:08
i tak warto zapisac :D
Hmmm w pewnym sensie masz rację.
W każdym sensie ma rację, na swoim blogu trzymam informacje które wykorzystywałem w swojej firmie, niby nic nowego, wszystko jest już w necie, ale u mnie są one w jednym miejscu. I mam komentarze z podziękowaniami za to - bo łatwiej jest znaleźć kiedy coś jest w jednym miejscu, niż gdy ludzie mają tego szukać wśród tysiąca stron.
Czytając ogólnie idea ciekawa :)
Jeżeli potrzebujesz pomocy uderzaj do mnie! :)
Cytat: krzyszp w 29 Maj 2012, 08:33
W temacie sztucznej inteligencji?
Możesz IMHO spokojnie myśleć w o liczbach cztero (a może pięcio) cyfrowych... (np. Chess960@Home - 7,501 użytkowników, Mersenne@Home ok 2k) :)
Wszystko zależy od tego, jak ciekawy jest problem oraz czy będziesz publikował wyniki (ludziska lubią otwarte projekty).
7.5tys użytkowników to bardzo dużo, nie myślałem że takie ilości są realne...
Do tej pory testowałem około 4-5 metod uczenia maszynowego:
1) Metody bazujące na aproksymacji funkcji
a) liniowych
b) nieliniowych
2) Odmianę algorytmu rojowego (nazywam ją metodą magnetyczną)
3) Algorytmy genetyczne/ewolucyjne.
4) Metody ręczne.
Ad 1) Ogólnie metody te są bardzo szybkie. Osiągałem przy ich pomocy ciekawe
wyniki już po około 30-60 godzinach obliczeń. Niestety metody te mają
dwie wady. Po pierwsze są ograniczone do funkcji ciągłych, a może nawet
do różniczkowalnych. Po drugie wymagają reprezentatywnych danych, a to
bardzo trudno zapewnić. Nawet trudno jest zdefiniować czym są reprezentatywne
dane. Zwykle dane są w jakiś sposób statystycznie obciążone. Metoda dochodzi
do pewnego poziomu (często bardzo przyzwoitego) ale potem efekt jest odwrotny
do zamierzonego: program w miarę uczenia gra coraz gorzej. Obserwowałem takie
zjawisko przez ostatnie pół roku chyba ze 30 razy. Jak na razie nie rozumiem co
dokładnie jest przyczyną załamania, podejrzewam że są nią niezbyt dobre dane uczące.
Więc raczej ta metoda nie będzie się nadawała do obliczeń rozproszonych.
Ad 2) Algorytmy rojowe mają mniej ograniczeń, można nimi optymalizować funkcje
nieciągłe i nieróżniczkowalne. Okupione jest to oczywiście czasem uczenia. Gdy
badałem skuteczność algorytmów rojowych to zwykle miałem dobre rezultaty po
około 12-120 tygodniach ciągłych obliczeń. Nie obserwowałem nigdy aby dochodziło
do procesu załamania w trakcie uczenia, raczej był stabilny postęp. Metoda dość dobrze
się zrównolegla, praktycznie przy zastosowaniu 100 procesorów zrównoleglenie jest
liniowe. Myślę że ta metoda jest najbardziej rozsądnym kandydatem na BOINC.
Ad 3) Algorytmy ewolucyjne bądź genetyczne mają największy potencjał, ale wymagają
koszmarnej mocy obliczeniowej. Po trzech latach ciągłych obliczeń nie zaobserwowałem
nawet najmniejszego postępu. Z symulacji na prostszych grach wynika że trzeba
zastosować minimum 1tys komputerów przez wiele lat. Oszacowanie 1tys jest absolutnie
minimalne, być może musi być ich aż 10tys. Nie wiem czy jest sens rzucania się na tak
trudne zadanie nawet w sieci BOINC.
Ad 4) Metody ręczne wymagają współpracy z dobrymi szachistami. Szachista obserwuje
grę programu i następnie sugeruje programiście co mogło być przyczyną przegranej.
Potem programista próbuje uwagi szachisty zaimplementować na setki różnych
sposobów (coś jak algorytm genetyczny, ale sterowany ludzkim umysłem). Ostatecznie
wykonuje się ogromny turniej w którym grają wszystkie wersje w celu weryfikacji. Myślę
że ta metoda też by się nadawała na BOINC.
Do tego wszystkiego dochodzą metody wyspecjalizowane np. do samych debiutów
szachowych, albo końcówek. Na razie nie wyobrażam sobie aby one nadawały się
do obliczeń rozproszonych. Chociaż może...
Najbardziej kuszący jest punkt trzeci, ale niesie z sobą takie ryzyko, że po 50latach
obliczeń u tysięcy użytkowników nie będzie żadnego efektu :)
Pozdrawiam
Cytat: xelexin w 29 Maj 2012, 08:59
Czytając ogólnie idea ciekawa :)
Jeżeli potrzebujesz pomocy uderzaj do mnie! :)
Dziękuję za ofertę pomocy, skorzystam na pewno. Ale wszystko powoli i
dokładnie, bo dość trudne i wymagające zagadnienia :)
Pozdrawiam
Myślę, że przy odrobinie wysiłku osiągnięcie 10k liczących (a to oznacza użytkowników, a nie ilość komputerów/procesorów/rdzeni - tych może być np 5 x tyle) algorytm 3 wydaje się wręcz oczywisty :)
Jest także coś ciekawego do zaimplementowania, co zgromadziło by może nawet dziesiątki tysięcy ludzi...
Istnieje możliwość, że stworzyłbyś stronę internetową do gry w szachy z komputerem (serwerem), gdzie po stronie maszyny grałby program nauczony grać za pomocą BOINC? Coś takiego, nawet przy oczywistych ograniczeniach (np. max. 5 graczy jednocześnie ze względu na potrzebną moc obliczeniową) było by ewenementem na skalę światową...
ja bym uderzał w punkt 2 i zobaczył jaka jest liczba chętnych. Pamiętaj że projekt może mieć więcej niż jedną aplikacje licząca. Np WCG skupia kilka projektów jednocześnie.
jesli liczby będa obiecujące to zrobisz aplikacje do punktu 3 a przestaniesz wysyłac próbki do starej aplikacji :D
Krzysiek ma wspaniały pomysł :D poza tym musza być szachy? Go Warcaby Chinczyk czekają.....
Cytat: krzyszp w 29 Maj 2012, 11:19
Myślę, że przy odrobinie wysiłku osiągnięcie 10k liczących (a to oznacza użytkowników, a nie ilość komputerów/procesorów/rdzeni - tych może być np 5 x tyle) algorytm 3 wydaje się wręcz oczywisty :)
Jest także coś ciekawego do zaimplementowania, co zgromadziło by może nawet dziesiątki tysięcy ludzi...
Istnieje możliwość, że stworzyłbyś stronę internetową do gry w szachy z komputerem (serwerem), gdzie po stronie maszyny grałby program nauczony grać za pomocą BOINC? Coś takiego, nawet przy oczywistych ograniczeniach (np. max. 5 graczy jednocześnie ze względu na potrzebną moc obliczeniową) było by ewenementem na skalę światową...
Hmmmm zastanawiające to wszystko :)
Na pewno zrobienie strony internetowej do gry z programem w szachy jest w tym
wszystkim najprostszym zadaniem. Dużo dłubania byłoby z interfejsem w JavaScript, a
po stronie serwera to tylko kilka komend dla programu. To da się łatwo zawsze zrobić...
Dużo gorzej z dopracowywaniem "algorytmów szachowych", to może trwać całe
miesiące, albo lata.
Pozdrawiam
1. Proponuję zmienić nazwę wątku na jakiś bardziej sprecyzowany :)
2. Był (jest?) projekt chess@home (czy jakoś tak) - co on robił? bo się okaże, że może lepiej byłoby się podpiąć/przejąć/wspomóc projekt, niż rzeźbić coś od zera.
chess960. zajmował sie konkretna odmianą szachów....
Cytat: Troll81 w 29 Maj 2012, 13:04
chess960. zajmował sie konkretna odmianą szachów....
To taka odmiana która pozwala na pewną losowość w układzie startowym. O ile
dobrze zdążyłem się zorientować to próbowali zbudować taką książkę debiutową
aby był w niej bogaty zestaw ruchów dla każdego układu startowego. Nie natknąłem
się tam na opis metody uczenia, jedyne co się rzuca w oczy to fakt, że program
grał gry na bardzo długi czas. Wyniki z takich gier można analizować na
wiele sposobów.
Pozdrawiam
Cytat: krzyszp w 29 Maj 2012, 11:19
Myślę, że przy odrobinie wysiłku osiągnięcie 10k liczących (a to oznacza użytkowników, a nie ilość komputerów/procesorów/rdzeni - tych może być np 5 x tyle) algorytm 3 wydaje się wręcz oczywisty :)
Algorytm 3 jest najbardziej intrygujący, ale nie wiem czy jest choć trochę realny :D
Żeby ocenić siłę gry programu trzeba rozegrać chociaż 60tys gier. Jeśli gra trwa
chociaż 60s to jedna ocena zajmuje 1000 godzin, czyli około 40 dni. Jakby mieć
10tys komputerów na 10 lat to można zrobić takich ocen około 800tys. Wydaje się
że 800tys to jest śmiesznie mało dla tak trudnego zadania.
Chyba nawet jakby było 10tys komputerów i bardzo dużo czasu to trzeba
zaprojektować jakąś szybszą metodę.
Pozdrawiam
Bierzesz pod uwagę zmienną, czyli prędkość obliczeń komputerów, ciągłe przyrastanie ilości rdzeni w procesorze? Za 10lat, obecne komputery będą przestarzałymi złomami.
Cytat: PoznanskaPyra w 30 Maj 2012, 18:18
Bierzesz pod uwagę zmienną, czyli prędkość obliczeń komputerów, ciągłe przyrastanie ilości rdzeni w procesorze? Za 10lat, obecne komputery będą przestarzałymi złomami.
Niestety w szachach to zbyt dużo nie zmienia, ponieważ rozgrywka
jest na czas. Im szybszy komputer, tym rozgrywka w tym samym
czasie pochłania więcej mocy obliczeniowej.
Zwykle rozgrywka trwa od 30-120 minut. Aby uzyskać najlepszy program w
tak długiej rozgrywce, to w trakcie uczenia również należałoby prowadzić
rozgrywki na czas 30-120mnut. Oczywiście rzadko kto ma dostęp do
tak dużej mocy obliczeniowej, więc w trakcie uczenia rozgrywki skraca
się np. do 10-60 sekund. Potem można mieć nadzieję, że jeśli program
dobrze gra na 10 sekund to również będzie dobrze grał na 120 minut. Na
ogół jest to prawda, ale nie zawsze. Lepiej jest gdy rozgrywki są przeprowadzane na
możliwie długi czas bez względu na aktualną szybkość komputerów.
Chyba trzeba zapomnieć o algorytmach genetycznych nawet jeśli ma
się 10tys komputerów. Bardziej realne wydają się algorytmy rojowe.
Dla genetycznych to może od miliona...
Do algorytmów rojowych 1000 komputerów to aż za dużo. Przy pełnym
zrównolegleniu jedna iteracja ucząca trwa około 30-60 sekund. Na jedną
dobę można uzyskać powiedzmy 2tys iteracji. Często ciekawe rezultaty
miałem już po 1tys iteracji.
Pozdrawiam
Jeżeli teraz i7 robi 12 wątków na raz to za 10 lat, to pewnie ze 30 wątków na raz nie będzie niczym wyjątkowym. Wtedy jeden procesor może robić na raz kilka gier.
Cytat: PoznanskaPyra w 30 Maj 2012, 18:52
Jeżeli teraz i7 robi 12 wątków na raz to za 10 lat, to pewnie ze 30 wątków na raz nie będzie niczym wyjątkowym. Wtedy jeden procesor może robić na raz kilka gier.
No właśnie nie jest tak kolorowo. Jeśli będą komputery z 30ma procesorami to docelowo
program będzie używał właśnie 30 procesorów. Więc idealnie byłoby jakby był uczony też
na takiej maszynie. Jakkolwiek wzrośnie szybkość komputer to tak samo wzrośnie
zapotrzebowanie w trakcie uczenia.
Cytat: mariotti w 30 Maj 2012, 19:25
Cytat: PoznanskaPyra w 30 Maj 2012, 18:52
Jeżeli teraz i7 robi 12 wątków na raz to za 10 lat, to pewnie ze 30 wątków na raz nie będzie niczym wyjątkowym. Wtedy jeden procesor może robić na raz kilka gier.
No właśnie nie jest tak kolorowo. Jeśli będą komputery z 30ma procesorami to docelowo
program będzie używał właśnie 30 procesorów. Więc idealnie byłoby jakby był uczony też
na takiej maszynie. Jakkolwiek wzrośnie szybkość komputer to tak samo wzrośnie
zapotrzebowanie w trakcie uczenia.
zgadza się.
Kiedyś grze wystarczył jeden wątek bo procesory miały 1 rdzeń czyli 1 wątek <- teraz niektóre gry korzystają już z 2-3 wątków, a Wiedźmin 2 chyba nawet z 4. Programy graficzne potrafią obsłużyć tyle wątków na ile pozwoli im sprzęt np.: 3D max.
Dzięki coraz szybszym CPU i GPU gry i programy będą coraz "lepsze" a to oznacza zwiększający się popyt na zasoby. Podobnie było z RAM'em, kiedyś 32 mega ramu to był full wypas, a teraz Windows 7 zżera na dzień dobry chyba do 512MB Ram <- nie wspominając o np.: Modern Warfare 3, który siedzi na 1,5Gb ramu <- co nie jest największą wartością jaką widziałem.
Cytat: goofyx w 31 Maj 2012, 08:02
Cytat: mariotti w 30 Maj 2012, 19:25
Cytat: PoznanskaPyra w 30 Maj 2012, 18:52
Jeżeli teraz i7 robi 12 wątków na raz to za 10 lat, to pewnie ze 30 wątków na raz nie będzie niczym wyjątkowym. Wtedy jeden procesor może robić na raz kilka gier.
No właśnie nie jest tak kolorowo. Jeśli będą komputery z 30ma procesorami to docelowo
program będzie używał właśnie 30 procesorów. Więc idealnie byłoby jakby był uczony też
na takiej maszynie. Jakkolwiek wzrośnie szybkość komputer to tak samo wzrośnie
zapotrzebowanie w trakcie uczenia.
zgadza się.
Kiedyś grze wystarczył jeden wątek bo procesory miały 1 rdzeń czyli 1 wątek <- teraz niektóre gry korzystają już z 2-3 wątków, a Wiedźmin 2 chyba nawet z 4. Programy graficzne potrafią obsłużyć tyle wątków na ile pozwoli im sprzęt np.: 3D max.
Dzięki coraz szybszym CPU i GPU gry i programy będą coraz "lepsze" a to oznacza zwiększający się popyt na zasoby. Podobnie było z RAM'em, kiedyś 32 mega ramu to był full wypas, a teraz Windows 7 zżera na dzień dobry chyba do 512MB Ram <- nie wspominając o np.: Modern Warfare 3, który siedzi na 1,5Gb ramu <- co nie jest największą wartością jaką widziałem.
To jest prawda, ale piszesz o czymś innym.
Chodzi o to, że jak biegacz trenuje bieg na 100 metrów, to
najlepiej będzie biegał na 100 metrów. Na kilometr prawdopodobnie
też mu się poprawią osiągi, ale jednak najlepszy będzie na 100 metrów,
bo taki dystans biegał na treningach.
Podobnie jest z programem szachowym. Jeśli się go dostosuje do
gry na 30 sekund, to prawdopodobnie też będzie lepiej grał na godzinę,
ale najlepiej od razu go tuningować do gry na godzinę. Jeśli
moc komputerów wzrasta, to także trzeba na tuning przeznaczać
więcej obliczeń.
Pozdrawiam
Mi tu chodziło o co innego. Mamy 12 wątków, czyli 12 treningów na raz liczby te się podwajają. Najlepsze do tego celu są opetrony, niskie taktowanie( w tym wypadku nic to nie zmieni) ale za to 16 rdzeni na jednym procesorze.
Cytat: PoznanskaPyra w 31 Maj 2012, 11:22
Mi tu chodziło o co innego. Mamy 12 wątków, czyli 12 treningów na raz liczby te się podwajają. Najlepsze do tego celu są opetrony, niskie taktowanie( w tym wypadku nic to nie zmieni) ale za to 16 rdzeni na jednym procesorze.
Chyba coś nie tak z moją umiejętnością tłumaczenia :)
Jeśli staną się popularne procesory które mają 100 rdzeni to programy
szachowe będą je wykorzystywały. Użytkownik kupi sobie procesor ze
stoma rdzeniami i uruchomi na nim program szachowy na 100 wątkach.
Oznacza to, że w trakcie tuningu najlepiej też będzie używać wszystkich
stu rdzeni do jednej rozgrywki. Jeśli będziemy tuningować 100 programów
jednocześnie i każdy na innym rdzeniu to tuningujemy program do gry w
innych warunkach niż docelowe.
Już dziś można zrobić w trakcie tuningu rozgrywki z przeszukiwaniem
drzewa gry na 2 ruchy w głąb. Wtedy rozgrywka trwa ułamki sekund i
nawet na wolnej maszynie można zrobić miliony gier. Problem w tym że
program który zwycięża na dwa ruch w głąb, niekoniecznie będzie także
zwyciężał na 4 ruchy w głąb. To są trochę inne zadania.
Program na 100 rdzeniach będzie osiągał głębokość powiedzmy 16 ruchów, a
gdy do tuningu użyjemy tylko jednego rdzenia i krótkiego czasu to będzie
osiągał głębokość np. 12 ruchów.
Nie wiem do czego to jeszcze porównać... może to tak samo jakby
kierowca rajdowy trenował na samochodzie o kiepskich parametrach. A
do startu by dostał super nowoczesną maszynę. Może się okazać że
mu to nawet zaszkodzi, bo nie będzie dobrze znał nowego samochodu :)
Pozdrawiam
PoznanskaPyra miał chyba coś innego na myśli.
Otóż w BOINC, poszczególne projekty zwykle używają jednego rdzenia (wątku), bo tak jest prościej. Dzięki temu możesz jednocześnie uruchomić np. 6 aplikacji uczących się, każda na jednym rdzeniu.
Osobnym podejściem jest właśnie aplikacja wielowątkowa - w tym wypadku występuje zjawisko, o którym piszesz.
Niemniej, przy założeniu jednego wątku na jedną aplikację, możesz mieć "na raz" odpalone np. 20k programów uczących się na 5k maszyn. Za 2 lata może to być 50k programów na 5k maszyn, itd.
dokładnie
Cytat: krzyszp w 31 Maj 2012, 12:11
PoznanskaPyra miał chyba coś innego na myśli.
Otóż w BOINC, poszczególne projekty zwykle używają jednego rdzenia (wątku), bo tak jest prościej. Dzięki temu możesz jednocześnie uruchomić np. 6 aplikacji uczących się, każda na jednym rdzeniu.
Osobnym podejściem jest właśnie aplikacja wielowątkowa - w tym wypadku występuje zjawisko, o którym piszesz.
Niemniej, przy założeniu jednego wątku na jedną aplikację, możesz mieć "na raz" odpalone np. 20k programów uczących się na 5k maszyn. Za 2 lata może to być 50k programów na 5k maszyn, itd.
Ja to tak właśnie zrozumiałem, ale nie rozumiecie mnie. Chodzi o to że te 50k
programów za dwa lata niewiele zmieni.
Załóżmy że dzisiejszy standard to procesory 4-rdzeniowe i możliwość
przetwarzania 2mld instrukcji na sekundę. Więc dziś się pisze programy
szachowe które dobrze grają w czasie 30 minut na 4 rdzeniach, czyli
takie które wykorzystują 2mld * 30 * 60 * 4 instrukcji. Ok?
Za 10 lat będziemy mieli 40 rdzeni i szybkość 20mld instrukcji. Więc
będzie się pisało programy które zagrają optymalnie pod warunkiem
wykorzystania 20mld * 30 * 60 * 40 instrukcji. Ok?
A więc dysponując dziś 1tys dzisiejszych komputerów mamy te
same możliwości tuningu co za 10 lat dysponując 1tys szybszych
komputerów. Po prostu za 10 lat też zmienią się wymogi.
Zapotrzebowanie na szybkość i ilość procesorów zmieni się
proporcjonalnie.
Dopiero gdy komputery przyspieszą około 10^20 - 10^40 razy
nastąpi przełom, bo ktoś przeszuka szachy do końca i poda
optymalną strategię.
Pozdrawiam
@mariotti: wybacz ale kompletnie cie nie rozumiem :(
chcesz przygotować aplikację z obsługa np.: 4 wątków, zamiast aplikacji na 1 wątku, która mogła by być uruchomiona jako 4 różne procesy?
Właśnie chyba jedynie w kilku ostatnich zdaniach ująłeś najciekawszy sens projektu.
Nie ma co za bardzo przejmować się tym, że za dużo liczenia.
Jednak trzeba dodać, że taka zabawa to tylko na kartach graficznych może być ciekawa. Akceleratory faktycznie mogą mieć tutaj sporo ograniczeń ale są jednak silniki szachowe działające na GPU (patrz Zeta na OpenCL). Bez kart graficznych to chyba nie można na zbyt wiele liczyć. To teraz najbardziej topowe rozwiązania.
Cytat: goofyx w 31 Maj 2012, 14:20
@mariotti: wybacz ale kompletnie cie nie rozumiem :(
Ja podobnie :book: To chyba kwestia podejścia do problemu i liczenia "ile się uda" w określonym czasie przez CPU. Jeżeli będą szybsze procesory to de facto tylko dalej dojdą ale i tak tyle samo czasu im zejdzie.
Trochę utopijny pomysł.
Cytat: goofyx w 31 Maj 2012, 14:20
@mariotti: wybacz ale kompletnie cie nie rozumiem :(
chcesz przygotować aplikację z obsługa np.: 4 wątków, zamiast aplikacji na 1 wątku, która mogła by być uruchomiona jako 4 różne procesy?
Nie wiem w jaki sposób to jeszcze wytłumaczyć aby było jasne.
Czasami używa się określenia że niektóre cech programu
szachowego są depth sensitive a inne nie są.
Porównuję to do wyścigów samochodowych. Kierowca trenuje na
słabym samochodzie i w końcu osiąga perfekcje. Przed zawodami
otrzymuje jednak lepszy samochód. Czy to że otrzymał lepszy
samochód coś pomoże? Raczej zaszkodzi, bo nie będzie znał
możliwości samochodu. Z programem jest tak samo. Jeśli
będzie trenowany na jednym wątku i czas 10s, a potem
ktoś go weźmie do gry na 40 wątkach a czas ustawi na 1 godzinę,
to program nie będzie umiał w pełni ani wykorzystać tej godziny, ani
40 wątków, bo nie był uczony w takich warunkach.
Pozdrawiam
a możesz mi wytłumaczyć (bo po prostu nie rozumiem) mariotti - dlaczego czas grania jest taki ważny?
Bo ja tak sobie myślę, że ten algorytm, który ma potem grać, to trzeba nauczyć pewnych postępowań, myślenia o kolejnych ruchach - czy uczenie nie polega na przeprowadzeniu po prostu iluś partii (nie ważne jak szybko, tylko ważne ile)? i na podstawie symulacji on sobie będzie wiedział jaka opcja jest najbardziej korzystna jako kolejny ruch.
Ja mam wrażenie, że w szachach nie liczy się jak długo się gra (bo jeden ruch można wymyślać przez tydzień) tylko "ogranie" i wiedzenie co należy kiedy zrobić. więc jak dla mnie liczy się jednak prędkość i ilość wątków, a tutaj mówisz, że prędkość i ilość nie ma znaczenia, bo cały czas jest to samo, bo liczy się czas przeliczania - dlaczego?
Cytat: mariotti w 31 Maj 2012, 14:44
Cytat: goofyx w 31 Maj 2012, 14:20
@mariotti: wybacz ale kompletnie cie nie rozumiem :(
chcesz przygotować aplikację z obsługa np.: 4 wątków, zamiast aplikacji na 1 wątku, która mogła by być uruchomiona jako 4 różne procesy?
Nie wiem w jaki sposób to jeszcze wytłumaczyć aby było jasne.
Czasami używa się określenia że niektóre cech programu
szachowego są depth sensitive a inne nie są.
Porównuję to do wyścigów samochodowych. Kierowca trenuje na
słabym samochodzie i w końcu osiąga perfekcje. Przed zawodami
otrzymuje jednak lepszy samochód. Czy to że otrzymał lepszy
samochód coś pomoże? Raczej zaszkodzi, bo nie będzie znał
możliwości samochodu. Z programem jest tak samo. Jeśli
będzie trenowany na jednym wątku i czas 10s, a potem
ktoś go weźmie do gry na 40 wątkach a czas ustawi na 1 godzinę,
to program nie będzie umiał w pełni ani wykorzystać tej godziny, ani
40 wątków, bo nie był uczony w takich warunkach.
Pozdrawiam
dzisiaj mam chyba ciężki dzień.
porównanie do kierowcy i samochodu to kapuje, ale jaką ty aplikację chciałbyś zrobić?
tylko taką co działa na procesorach 4 wątkowych przez np.: 10 minut?
dla każdej ilości wątków inną aplikację chcesz zrobić <- naprawdę się pogubiłem.
Jak dla mnie to albo program jest jednowątkowy albo wielowątkowy <- tworzenie iluś tam aplikacji w zależności od ilości wątków jest chyba nie zbyt trafiona.
wytłumacz mi to jak 5-latkowi <- ja naprawdę chcę zrozumieć sens tego co chcesz mi przekazać.
Zakładamy co ma nasz program robić i najwyżej na jednym procesorze będzie się wykonywał 60 minut, a na innym 600 minut. Ot cała filozofia.
Jeden WU -> jeden rdzeń. Nie kombinujmy.
Cytat: Rysiu w 31 Maj 2012, 15:11
Zakładamy co ma nasz program robić i najwyżej na jednym procesorze będzie się wykonywał 60 minut, a na innym 600 minut. Ot cała filozofia.
Jeden WU -> jeden rdzeń. Nie kombinujmy.
ja też tak na początku myślałem że ma być :D
wszystkie projekty tak mają chociażby WCG <- obsługujesz 8 wątków to masz 8 aplikacji uruchomione i spokój
Cytat: mariotti w 31 Maj 2012, 14:12
Załóżmy że dzisiejszy standard to procesory 4-rdzeniowe i możliwość
przetwarzania 2mld instrukcji na sekundę. Więc dziś się pisze programy
szachowe które dobrze grają w czasie 30 minut na 4 rdzeniach, czyli
takie które wykorzystują 2mld * 30 * 60 * 4 instrukcji. Ok?
Za 10 lat będziemy mieli 40 rdzeni i szybkość 20mld instrukcji. Więc
będzie się pisało programy które zagrają optymalnie pod warunkiem
wykorzystania 20mld * 30 * 60 * 40 instrukcji. Ok?
A nie można napisać programu wykorzystującego jeden rdzeń robiący (przykładowo) 2mld * 30 * 60 instrukcji, i puścić cztery takie na czterech rdzeniach?
Ja to rozumiem inaczej.
Sensem aplikacji ma być nauka systemu prawidłowego planowania gry a nie napisanie programu szachowego. Przy takim założeniu ma powstać aplikacja BOINC i wtedy najlepiej napisać aplikację trenującą system - dobrze rozumiem?
Jeśli tak, mamy dwa założenia wzajemnie się wykluczające:
1. Aplikacja jednowątkowa - dostaje określone parametry, wykonuje funkcje trenujące, zwraca wyniki - program na serwerze dokonuje oceny wyników działania.
2. Aplikacja wielowątkowa - służy głównie do np. testowania algorytmów gry (z wyszczególnieniem wielowątkowości), może też być użyta do trenowania, ale w tym wypadku w zasadzie jest marnowaniem zasobów (IMHO).
Wszystko zależy od celu tworzenia aplikacji, jeśli ma służyć tylko jako "trener" właściwego systemu, to w zasadzie nie ma znaczenia, której opcji użyjesz, bo wtedy w całym systemie poszczególne taski (wysłane aplikacje) są właśnie takimi "wątkami" większego systemu.
Natomiast faktem jest, że w zasadzie nie masz innej możliwości (tak myślę) uzyskania takiej ilości mocy obliczeniowej do trenowania algorytmów szachowych w inny sposób...
Mariotti ma sporo "szachowej" racji.
Piszę jako ex-szachista.
Zupełnie inaczej podchodzi się do partii, na którą mam 5 minut (szachy błyskawiczne, tzw. blitz'e), inaczej do rozgrywki przewidzianej na 30 minut (active chess) a jeszcze inaczej do partii "klasycznej" - ot. 2 - 3 godziny na wszystkie posunięcia dla każdej z grających stron.
Przy tych wszystkich partiach, inaczej (głębiej lub płycej) liczymy, akcentujemy inne rozwiązania taktyczne itp.
Jeśli przyjmiemy założenie, że program ma grać dobrze na 5 minut/gra, to będzie prawdopodobnie słaby, przy rozgrywkach długich.
Sprint to nie maraton ;) Jak to ugryźć od strony oprogramowania - nie wiem.
Cytat: lukaszja w 31 Maj 2012, 15:39
Mariotti ma sporo "szachowej" racji.
Piszę jako ex-szachista.
Zupełnie inaczej podchodzi się do partii, na którą mam 5 minut (szachy błyskawiczne, tzw. blitz'e), inaczej do rozgrywki przewidzianej na 30 minut (active chess) a jeszcze inaczej do partii "klasycznej" - ot. 2 - 3 godziny na wszystkie posunięcia dla każdej z grających stron.
Przy tych wszystkich partiach, inaczej (głębiej lub płycej) liczymy, akcentujemy inne rozwiązania taktyczne itp.
Jeśli przyjmiemy założenie, że program ma grać dobrze na 5 minut/gra, to będzie prawdopodobnie słaby, przy rozgrywkach długich.
Sprint to nie maraton ;) Jak to ugryźć od strony oprogramowania - nie wiem.
Tylko co to ma do jedno i wielowątkowości?
Goofyx!
1. Nie jestem programistą.
2. Staram się zrozumieć stanowisko Mariotti'ego, pewnie bardziej jako osoba znająca same szachy (i to turniejową praktykę), niż zasady działania oprogramowania,
3. Ilość wątków i czasu przeznaczonego na 1 WU dla mnie przekłada się na poziom "mocy" - nie jestem pewien, czy 8 aplikacji na 1 rdzeniu dadzą to samo, to 1 aplikacja wykorzystująca 8 rdzeni - to pytanie do znawców tematu.
4. Sama "moc" przekłada się na założenia końcowe - szukamy szachowego Gralla, czy "tylko" podwyższamy poprzeczkę znajomości tej gry.
Cytat: lukaszja w 31 Maj 2012, 15:51
Goofyx!
1. Nie jestem programistą.
2. Staram się zrozumieć stanowisko Mariotti'ego, pewnie bardziej jako osoba znająca same szachy (i to turniejową praktykę), niż zasady działania oprogramowania,
3. Ilość wątków i czasu przeznaczonego na 1 WU dla mnie przekłada się na poziom "mocy" - nie jestem pewien, czy 8 aplikacji na 1 rdzeniu dadzą to samo, to 1 aplikacja wykorzystująca 8 rdzeni - to pytanie do znawców tematu.
4. Sama "moc" przekłada się na założenia końcowe - szukamy szachowego Gralla, czy "tylko" podwyższamy poprzeczkę znajomości tej gry.
1. ok
2. też znam trochę szachy
3. ale jak dobrze zrozumiałem @maritti to on chce przygotować aplikację strikte na procesory np.: 4-ro wątkowe. ale co w przypadku kiedy aplikacja jest przygotowana na np.: 4 rdzenie i user wyłączy 1-rdzeń z liczenia <- wydajność aplikacji drastycznie spadnie.
Po za tym różnica 8 aplikacji czy 8 wątków zależy od charakteru aplikacji.
4. ale co da ci duuża moc na jednym komputerze skoro chcesz zrobić aplikację boinc i pozyskać jak najwięcej userów <- tego nie rozumiem. no chyba że robisz aplikację dla siebie i wiesz że będzie ona chodzić na i7 z 8 wątkami
Tak, ale przecież my rozmawiamy o programowaniu aplikacji do trenowania systemu, a nie samej gry, prawda?
Cytat: krzyszp w 31 Maj 2012, 16:07
Tak, ale przecież my rozmawiamy o programowaniu aplikacji do trenowania systemu, a nie samej gry, prawda?
Prawda. Tylko jakie przyjmiemy założenia oraz co chcemy osiągnąć (a także przy pomocy jakich narzędzi informatycznych), to już inna bajka ;)
Cytat: lukaszja w 31 Maj 2012, 16:14
Cytat: krzyszp w 31 Maj 2012, 16:07
Tak, ale przecież my rozmawiamy o programowaniu aplikacji do trenowania systemu, a nie samej gry, prawda?
Prawda. Tylko jakie przyjmiemy założenia oraz co chcemy osiągnąć (a także przy pomocy jakich narzędzi informatycznych), to już inna bajka ;)
To również nie jest problemem, przecież ograniczenia czasowe dla aplikacji łatwo zaimplementować i właściwie z punktu widzenia projektu nie ma to znaczenia...
Cytat: Cyfron w 31 Maj 2012, 14:47
a możesz mi wytłumaczyć (bo po prostu nie rozumiem) mariotti - dlaczego czas grania jest taki ważny?
Mówiąc w uproszczeniu jest tak jak już pisałem. Program szachowy ma
wiele cech. Jedna część z tych cech jest wrażliwa na głębokość przeszukiwania,
a druga nie.
Załóżmy że mamy program który ma jakąś cechę X. Gramy tym
programem miliony partii, zmieniamy cechę X i sprawdzamy czy program
po zmianie gra lepiej czy gorzej. W końcu wybieramy taką wartość cechy po jakiej
program grał najlepiej. Następnie zmieniamy warunki testowania. Np. wcześniej
graliśmy partie na 5 minut, a po zmianie gramy na godzinę. I znowu zmieniamy
cechę X i wybieram taką z jaką program grał najlepiej. Jeśli to jest cecha
depth-sensitive to dla różnych czasów różne konfiguracje będą najlepsze.
Tak wiec jeśli zoptymalizujemy program do gry na 5minut to niekoniecznie
będzie optymalny na 60 minut.
Cytat: Cyfron w 31 Maj 2012, 14:47
Bo ja tak sobie myślę, że ten algorytm, który ma potem grać, to trzeba nauczyć pewnych postępowań, myślenia o kolejnych ruchach - czy uczenie nie polega na przeprowadzeniu po prostu iluś partii (nie ważne jak szybko, tylko ważne ile)? i na podstawie symulacji on sobie będzie wiedział jaka opcja jest najbardziej korzystna jako kolejny ruch.
Co nazywasz 'symulacjami'?
Cytat: Cyfron w 31 Maj 2012, 14:47
Ja mam wrażenie, że w szachach nie liczy się jak długo się gra (bo jeden ruch można wymyślać przez tydzień) tylko "ogranie" i wiedzenie co należy kiedy zrobić. więc jak dla mnie liczy się jednak prędkość i ilość wątków, a tutaj mówisz, że prędkość i ilość nie ma znaczenia, bo cały czas jest to samo, bo liczy się czas przeliczania - dlaczego?
W zupełnie innym kontekście pisałem że prędkość i ilość nie ma znaczenia. Byś musiał
przeczytać od kilku postów wcześniej.
Pozdrawiam
Cytat: goofyx w 31 Maj 2012, 14:51
dzisiaj mam chyba ciężki dzień.
porównanie do kierowcy i samochodu to kapuje, ale jaką ty aplikację chciałbyś zrobić?
tylko taką co działa na procesorach 4 wątkowych przez np.: 10 minut?
dla każdej ilości wątków inną aplikację chcesz zrobić <- naprawdę się pogubiłem.
Jak dla mnie to albo program jest jednowątkowy albo wielowątkowy <- tworzenie iluś tam aplikacji w zależności od ilości wątków jest chyba nie zbyt trafiona.
wytłumacz mi to jak 5-latkowi <- ja naprawdę chcę zrozumieć sens tego co chcesz mi przekazać.
Jedyne co ja chcę, to być autorem, albo współautorem bardzo mocnego
programu do gry w szachy :) Jeśli zrozumiałeś porównanie do kierowcy to
zrozumiałeś wszystko. Za 10 lat będziemy mieli szybsze komputery, ale
to oznacza że warunki w których będzie grał program się zmienią. Ta
zmiana pociąga za sobą konieczność użycia większej mocy obliczeniowej w
trakcie uczenia. A więc relatywnie szybsze komputery niewiele pomagają.
Pozdrawiam
Cytat: Martin Fox w 31 Maj 2012, 15:30
Cytat: mariotti w 31 Maj 2012, 14:12
Załóżmy że dzisiejszy standard to procesory 4-rdzeniowe i możliwość
przetwarzania 2mld instrukcji na sekundę. Więc dziś się pisze programy
szachowe które dobrze grają w czasie 30 minut na 4 rdzeniach, czyli
takie które wykorzystują 2mld * 30 * 60 * 4 instrukcji. Ok?
Za 10 lat będziemy mieli 40 rdzeni i szybkość 20mld instrukcji. Więc
będzie się pisało programy które zagrają optymalnie pod warunkiem
wykorzystania 20mld * 30 * 60 * 40 instrukcji. Ok?
A nie można napisać programu wykorzystującego jeden rdzeń robiący (przykładowo) 2mld * 30 * 60 instrukcji, i puścić cztery takie na czterech rdzeniach?
Można, nikt nie pisał że nie można.
Pozdrawiam
Cytat: lukaszja w 31 Maj 2012, 15:51
3. Ilość wątków i czasu przeznaczonego na 1 WU dla mnie przekłada się na poziom "mocy" - nie jestem pewien, czy 8 aplikacji na 1 rdzeniu dadzą to samo, to 1 aplikacja wykorzystująca 8 rdzeni - to pytanie do znawców tematu.
Zależy o jakiej mocy rozmawiamy. O mocy obliczeniowej? O mocy programu - czyli o
to jak dobrze gra? Czy o mocy algorytmu uczenia - czyli o to jak mocy wyprodukuje
program?
Jeśli chodzi o siłę gry to tam jest najlepsze znane mi opracowanie:
http://www.cis.uab.edu/hyatt/search.html
Jeśli chodzi o moc algorytmu uczącego to odmian algorytmów tego typu
jest bardzo dużo. Czasami z dodaniem nowego procesora/komputera ich
wydajność narasta liniowo, a czasami znacznie wolniej. Dużo zależy
od ilości komputerów, mylę że do około 300 - 1000 komputerów
wydajność w algorytmach rojowych narastałaby liniowo.
Cytat: lukaszja w 31 Maj 2012, 15:51
4. Sama "moc" przekłada się na założenia końcowe - szukamy szachowego Gralla, czy "tylko" podwyższamy poprzeczkę znajomości tej gry.
Mnie się marzy taki algorytm który co roku wygeneruje trochę mocniejszy
program do grania w szachy, ale to naprawdę bardzo trudne zadanie.
Pozdrawiam
Proszę nie pisać miliarda postów, a starać się wszystko mieścić w jednym (nie chce mi się teraz tego łączyć).
mysle ze sie wiele wyjasni jak bedzie testowa aplikacja
i jak troche pomozemy podpinajac sie do projektu :)
wtedy wyjdzie jaka moc obliczeniowa (ile hostow) przez jaki czas pomoze osiagnac cel.
Cytat: krzyszp w 31 Maj 2012, 15:36
Ja to rozumiem inaczej.
Sensem aplikacji ma być nauka systemu prawidłowego planowania gry a nie napisanie programu szachowego. Przy takim założeniu ma powstać aplikacja BOINC i wtedy najlepiej napisać aplikację trenującą system - dobrze rozumiem?
Dobrze zrozumiałeś, ale jest jedno ale. Otóż napisanie systemu który będzie uczył grać w szachy coś od zera jest
skazane na kompletną porażkę. Jeśli systemowi uczącemu powierzymy zadanie zbudowania programu szachowego
to nie będzie rezultatów bez względu jakiej mocy użyjemy. Może przesadzam... jakbyśmy mieli
10^(10^8) komputerów to powinno się udać ;-)
Więc systemowi trzeba jakoś pomóc. Jeśli wiadomo że system nie będzie w stanie czegoś wyuczyć to trzeba
zrobić to za niego. Więc zwyczajnie trzeba napisać program szachowy i to w dodatku mocny program w oparciu o
najnowszą wiedzę jaka jest dostępna na świecie - powiedzmy że taki program już mam, ale wymaga paru
udoskonaleń. Potem małe kawałeczki z tego programu się wyrzuca i system jako zadanie otrzymuje zbudowanie
tylko tych kawałeczków w sposób lepszy niż było w oryginale. O jakich kawałeczkach mowa? Powiedzmy że dzielą
się na cztery grupy:
1) parametry funkcji oceniającej
2) parametry przeszukiwania drzewa gry
3) książka otwarć
4) baza danych, albo baza wiedzy o grze w końcówkach - jeśli AI to raczej baza wiedzy :)
Cytat: krzyszp w 31 Maj 2012, 15:36
Jeśli tak, mamy dwa założenia wzajemnie się wykluczające:
1. Aplikacja jednowątkowa - dostaje określone parametry, wykonuje funkcje trenujące, zwraca wyniki - program na serwerze dokonuje oceny wyników działania.
2. Aplikacja wielowątkowa - służy głównie do np. testowania algorytmów gry (z wyszczególnieniem wielowątkowości), może też być użyta do trenowania, ale w tym wypadku w zasadzie jest marnowaniem zasobów (IMHO).
Wszystko zależy od celu tworzenia aplikacji, jeśli ma służyć tylko jako "trener" właściwego systemu, to w zasadzie nie ma znaczenia, której opcji użyjesz, bo wtedy w całym systemie poszczególne taski (wysłane aplikacje) są właśnie takimi "wątkami" większego systemu.
Hmmm
Jest to znacznie bardziej skomplikowane. Po pierwsze sam program do gry w szachy
powinien być wielowątkowy. Jeśli nie będzie wielowątkowy, to katastrofy nie będzie, ale
dobrze by było jakby był. Po drugie rożne z tych małych kawałeczków które wymieniłem
powyżej są w różnym stopniu podatne na różne metody uczenia. Czasami mogłoby być
właśnie tak jak napisałeś, np. scentralizowany algorytm wnioskowania, a w sieci
BOINC turnieje i testy.
Cytat: krzyszp w 31 Maj 2012, 15:36
Natomiast faktem jest, że w zasadzie nie masz innej możliwości (tak myślę) uzyskania takiej ilości mocy obliczeniowej do trenowania algorytmów szachowych w inny sposób...
No nie mam :)
Pozdrawiam
Cytat: goofyx w 31 Maj 2012, 15:59
4. ale co da ci duuża moc na jednym komputerze skoro chcesz zrobić aplikację boinc i pozyskać jak najwięcej userów <- tego nie rozumiem. no chyba że robisz aplikację dla siebie i wiesz że będzie ona chodzić na i7 z 8 wątkami
Nie pisałem że chcę dużą moc na jednym komputerze, ale że z upływem czasu
moc pojedynczego komputera rośnie. Więc rośnie moc komputerów na których
program docelowo będzie grał. Więc zapotrzebowanie na moc w trakcie uczenia
też rośnie (przykład z kierowcą wyścigowym). Więc z upływem czasu, pomimo
narastającej mocy obliczeniowej pojedynczego komputera, proces uczenia
nie będzie dużo szybciej przebiegał. :)
Pozdrawiam
Cytat: Rysiu w 31 Maj 2012, 20:25
Proszę nie pisać miliarda postów, a starać się wszystko mieścić w jednym (nie chce mi się teraz tego łączyć).
A po co łączyć posty? Jest pytanie i odpowiedź, czy może być bardziej czytelnie?
Pozdrawiam
Cytat: Tomasz R. Gwiazda w 31 Maj 2012, 20:25
mysle ze sie wiele wyjasni jak bedzie testowa aplikacja
i jak troche pomozemy podpinajac sie do projektu :)
wtedy wyjdzie jaka moc obliczeniowa (ile hostow) przez jaki czas pomoze osiagnac cel.
Chyba założę że będzie maksymalnie 100 komputerów i napiszę taki algorytm uczenia
który niemal na pewno będzie robił postępy na takiej mocy obliczeniowej.
Niestety nadal jestem kompletnie zielony jeśli chodzi o działanie samej sieci BOINC.
Gdy przebrnę etap rozgryzania BOINC to myślę że w około 3-6 tygodni mógłbym
jeden z moich projektów przenieść z wersji jedno komputerowej na rozproszoną.
Optymistycznie za 2-3 miesiące coś powinno ruszyć.
Pozdrawiam
Cytat: mariotti w 31 Maj 2012, 21:08
Cytat: Rysiu w 31 Maj 2012, 20:25
Proszę nie pisać miliarda postów, a starać się wszystko mieścić w jednym (nie chce mi się teraz tego łączyć).
A po co łączyć posty? Jest pytanie i odpowiedź, czy może być bardziej czytelnie?
Pozdrawiam
Tak. W jednym poście można zmieścić wszystkie odpowiedzi. Nikt na forum nie pisze tyle postów jeden pod drugim.
Cytat: Rysiu w 31 Maj 2012, 21:43
Cytat: mariotti w 31 Maj 2012, 21:08
Cytat: Rysiu w 31 Maj 2012, 20:25
Proszę nie pisać miliarda postów, a starać się wszystko mieścić w jednym (nie chce mi się teraz tego łączyć).
A po co łączyć posty? Jest pytanie i odpowiedź, czy może być bardziej czytelnie?
Pozdrawiam
Tak. W jednym poście można zmieścić wszystkie odpowiedzi. Nikt na forum nie pisze tyle postów jeden pod drugim.
To się zrobi bałagan, nie będzie wiadomo która wypowiedź tyczy się którego problemu. Już trudno
się połapać o czym rozmawiamy, a bez podziału na posty to w ogóle będzie mieszanka :)
Pozdrawiam
Można zamieszczać kilka cytatów w jednym poście ;)
Ale wracając do tematu...
Myślę, że właśnie droga wykorzystania BOINC jako "trenera" właściwego systemu ma najwięcej zalet:
1. Możesz utworzyć tysiące wątków i jednocześnie testować setki taktyk.
2. Stosunkowo łatwo regulować ramy czasowe, a także testować jednocześnie różne okresy testów (długość trwania poszczególnej rozgrywki) niezależnie od innych (poprzez preferencje).
3. Dowolna kombinacja powyższych.
4. Można także testować algorytmy dla określonych maszyn (w sensie ilości rdzeni, poprzez aplikacje wielowątkowe, uruchamiane tylko na komputerach o określonej ilości wolnych rdzeni).
5. Oddzielenie funkcji testujących strategie pozwala na oddzielne ładowanie i testowanie wyników (a to również można "zrównoleglić" i wysłać jako osobną aplikację bazującą na uzyskanych poprzednio wynikach).
W sumie jestem baaaardzo ciekawy tego projektu. Ciekawe może być sam... turniej pomiędzy komputerami wolontariuszy! :fright:
Cytat: krzyszp w 01 Czerwiec 2012, 01:35
Można zamieszczać kilka cytatów w jednym poście ;)
Proszę nie, gdy jeden post tnę na kilka cytatów to już się boję że pomieszam wszystko :)
Cytat: krzyszp w 01 Czerwiec 2012, 01:35
Ale wracając do tematu...
Myślę, że właśnie droga wykorzystania BOINC jako "trenera" właściwego systemu ma najwięcej zalet:
1. Możesz utworzyć tysiące wątków i jednocześnie testować setki taktyk.
To nie jest takie proste że więcej znaczy po prostu lepiej. W pewnej odmianie algorytmów
rojowych (którą osobiście nazywam metodą magnetyczną) bardzo ciekawe rezultaty miałem
gdy testowałem jednocześnie tylko 10 strategii. Metoda magnetyczna jest odporna na
niedokładne testowanie gdyż uśrednia wyniki z tysięcy turniejów. Z symulacji na
prostszych zadaniach niż szachy wychodziło mi że optymalna ilość w jednym turnieju
to 10 programów i 90 gier - każdy z każdym ze zmianą kolorów.
Z kolei w przypadku algorytmu genetycznego obawiam się że tysiące komputerów to
nadal za mało na szachy. Raczej potrzebne są miliony komputerów i całe dziesiątki lat
obliczeń.
Cytat: krzyszp w 01 Czerwiec 2012, 01:35
2. Stosunkowo łatwo regulować ramy czasowe, a także testować jednocześnie różne okresy testów (długość trwania poszczególnej rozgrywki) niezależnie od innych (poprzez preferencje).
3. Dowolna kombinacja powyższych.
4. Można także testować algorytmy dla określonych maszyn (w sensie ilości rdzeni, poprzez aplikacje wielowątkowe, uruchamiane tylko na komputerach o określonej ilości wolnych rdzeni).
5. Oddzielenie funkcji testujących strategie pozwala na oddzielne ładowanie i testowanie wyników (a to również można "zrównoleglić" i wysłać jako osobną aplikację bazującą na uzyskanych poprzednio wynikach).
Temat rzeka :) Zastanawiałem się nad problemami uczenia i programowania
szachów przez 10 lat, de facto z przerwami. Mógłbym pisać i pisać... większość
moich pomysłów jest niedopracowana a jeszcze większa większość nie sprawdzona - nigdy
ich nawet nie próbowałem zaimplementować, więc to mogą być tylko bzdury :)
Chcąc opisać tylko to co w miarę wartościowe i tak zmuszony jestem do pisania w
skrócie. Przede wszystkim są różne metody uczenia. Każda metoda wymaga czegoś
innego. Pierwszy z rękawa podział metod uczenia jest np. taki: z nauczycielem, bez
nauczyciela i ze wzmocnieniem. Przy czym nie ma większego problemu aby użyć
metody kombinowanej która łączy w sobie cechy powyższych.
Weźmy np. uczenie ze wzmocnieniem. Wtedy model o jakim mówisz pasuje jak ulał.
Mamy rozproszone środowisko testowe i mamy jakiś scentralizowany algorytm uczenia.
Program jest modyfikowany, trafia do środowiska, tam jest testowany, jeśli test
wypadł pomyślnie to następuje jakieś wzmocnienie cech, a jeśli negatywnie to jakiś
zanik. [Tak na marginesie: łatwo napisać takie zdanie, ale realizacja takich algorytmów
zwłaszcza do tak trudnego zadania jak szachy jest bardzo skomplikowana. Poza tym
testowanie, wzmocnienie/zanik cech i modyfikacje można zaimplementować na
bardzo wiele sposobów, a poszczególne sposoby znacznie różnią się efektywnością.
Bez problemu można zrobić tak że program nigdy się nie wyuczy, choć implementacja
algorytmu będzie poprawna.]
Naprzeciw metod ze wzmocnieniem stoją metody z nauczycielem. Problemem w metodach z
nauczycielem jest zebranie reprezentatywnego zbioru danych. Załóżmy jednak że
jakoś udało się ten zbiór pozyskać i możemy uczyć z nauczycielem. Jak takie uczenie
może wyglądać? Cóż, trzeba wziąć jakiś aproksymator albo klasyfikator i go po prostu uczyć. Np.
możemy wziąć lasy drzew regresyjnych, albo bazy reguł, albo sztuczne sieci neuronowe, albo...
Dane wysyłamy do komputerów wolontariuszy i na każdym komputerze następuje proces
uczenia z innym zarodkiem liczb losowych. Potem czekamy miesiąc czasu i najlepsze rozwiązanie
kopiujemy do programu szachowego. Z tym też się wiąże masa problemów, np. trzeba zupełnie inaczej
podejść do problemu gdy dane nie zmieszczą się w pamięci jednego komputera. Pozostaje także problem
zebrania reprezentatywnych danych.
Naprawdę to nie jest tak hop-siup :) Samo napisanie w miarę dobrego programu
do gry w szachy może zająć np. od jednego roku do nawet 10 lat. A tutaj jeszcze
trzeba zaimplementować algorytmy uczenia i dobrać je tak, aby miały chociaż
minimalne szanse na powodzenie. A gdzie uczenie książki debiutowej... a
gdzie uczenie gry w końcówce... :)
Cytat: krzyszp w 01 Czerwiec 2012, 01:35
W sumie jestem baaaardzo ciekawy tego projektu. Ciekawe może być sam... turniej pomiędzy komputerami wolontariuszy! :fright:
Ja tym bardziej :) W ogóle można zrobić duuuużo, jednak poprawna implementacja tych
algorytmów jest bardzo trudna. To nie jest tak że pogadamy sobie na forum, krzykniemy
hura, zrobimy, uruchomimy i będą super wyniki. To jest katorżnicza robota. Niektóre
techniki w programach szachowych powstały przez pomyłkę. Wszelka logika mówiła
że dany kod jest błędy i niekorzystnie wpłynie na siłę gry a jednak w testach program
grał lepiej.
Takich pomysłów jest dużo, ale trzeba spojrzeć realnie z punktu widzenia ich realizacji :)
Myślałem np. nad czymś takim aby wolontariusz mógł regulować ręcznie parametry.
Potem następuje ogromny turniej i mamy tą marchewkę: autor parametrów dostaje
jakąś nagrodę, albo chociaż jego nazwisko się pojawia na stronie. Jednak będzie problem z
czymś takim w praktyce. W przypadku algorytmu genetycznego trzeba zrobić setki
milionów gier aby wyłonić zwycięzcę. A w przypadku metody magnetycznej parametry się...
nie liczą! Następuje tylko uśrednianie wyników i tak naprawdę końcowy program to
ten który nie zagrał nawet ani jedne gry - a wiadomo że on jest najlepszy - paradoks? :)
Muszę napisać jakieś prostsze zadanie na rozgrzewkę aby nabrać obycia w BOINC.
Pozdrawiam
nikt nie mówi że zrobienie takiego projektu to hop siup. Najpierw sam musisz zdecydowac która droga pójdziesz ty i twój pies :D
Cytat: Troll81 w 01 Czerwiec 2012, 06:43
nikt nie mówi że zrobienie takiego projektu to hop siup. Najpierw sam musisz zdecydowac która droga pójdziesz ty i twój pies :D
Jedyna droga która wydaje mi się słuszna to droga kolejnych przybliżeń do celu.
Najpierw coś prościutkiego. Jeśli się uda to coś trudniejsze itd.
Na razie nie mogę przebrnąć przez instalacje i konfiguracje środowiska, bibliotek itd.
Pozdrawiam
no i najwazniejsza decyzja podjeta :D. jak masz pytania to mecz na forum :D
Cytat: Troll81 w 01 Czerwiec 2012, 07:39
no i najwazniejsza decyzja podjeta :D. jak masz pytania to mecz na forum :D
No mam pytanie. Gdzie jest tutorial i przykład jak zrobić najprostszą aplikację?
Pozdrawiam
źródła przykładowej aplikacji uppercase powinny byc dostępne wraz z serwerem. Jest to przy okazji aplikacja testujące czy poszczególne składowe serwera działają prawidłowo.
@mariotti (nawiązując do odpowiedzi nr.94)
piszesz różnych możliwościach do wyboru jeśli chodzi o algorytmy, o mocy jaka jest potrzebna i dziesiątkach lat obliczeń...
osobiście uważam, że boinc jest idealną platformą do czegoś takiego.
Jeśli masz "problem" z wyborem konkretnego algorytmu czy sposobu w jaki ma być rozwijana baza wiedzy programu to może utworzysz projekt z kilkoma aplikacjami używającymi każda innego algorytmu <- dzięki czemu sam będziesz wstanie określić po jakimś czasie, który algorytm jest najlepszy do nauki. Wiem, że to trudne <- ale może zamiast zastanawiać się co wybrać, można przetestować więcej niż jeden algorytm.
Po za tym to może być ciekawe doświadczenie także dla ciebie <- pisałeś, że z takimi algorytmami masz kontakt od 10 lat.
Projekt testujący różne rozwiązania + dający później możliwość zagrania z taką coraz "mądrzejszą" SI byłby baardzo atrakcyjny. No wiesz jednego dnia wygrywasz z SI, a drugiego po aktualizacji wiedzy wtapiasz ;) to zmusza cie do poprawy umiejętności :)
com napisał napisałem, mam nadzieję że na temat ;)
Cytat: goofyx w 01 Czerwiec 2012, 08:21
@mariotti (nawiązując do odpowiedzi nr.94)
piszesz różnych możliwościach do wyboru jeśli chodzi o algorytmy, o mocy jaka jest potrzebna i dziesiątkach lat obliczeń...
osobiście uważam, że boinc jest idealną platformą do czegoś takiego.
Zobaczymy. Jeśli podołam z tym API BOINC i jeśli będzie 20 wolontariuszy non-stop to super.
Cytat: goofyx w 01 Czerwiec 2012, 08:21
Jeśli masz "problem" z wyborem konkretnego algorytmu czy sposobu w jaki ma być rozwijana baza wiedzy programu to może utworzysz projekt z kilkoma aplikacjami używającymi każda innego algorytmu <- dzięki czemu sam będziesz wstanie określić po jakimś czasie, który algorytm jest najlepszy do nauki. Wiem, że to trudne <- ale może zamiast zastanawiać się co wybrać, można przetestować więcej niż jeden algorytm.
Myślę i myślę i czaszka mi już dymi... Muszę najpierw zrozumieć API BOINC, bo robię
plany a nie wiem czy dam radę napisać cokolwiek :)
Cytat: goofyx w 01 Czerwiec 2012, 08:21
Po za tym to może być ciekawe doświadczenie także dla ciebie <- pisałeś, że z takimi algorytmami masz kontakt od 10 lat.
Projekt testujący różne rozwiązania + dający później możliwość zagrania z taką coraz "mądrzejszą" SI byłby baardzo atrakcyjny.
No wiesz jednego dnia wygrywasz z SI, a drugiego po aktualizacji wiedzy wtapiasz ;) to zmusza cie do poprawy umiejętności :)
com napisał napisałem, mam nadzieję że na temat ;)
Komputery grają już za mocno w szachy żeby z nimi grać. Z moim programem nie wygrałem
jeszcze ani razu. Mam na swoim kompie obliczeniowym 60 programów napisanych przez
innych autorów. Programy te są bardzo różne zarówno pod względem siły jak i stylu gry.
W trakcie uczenia co jakiś czas mój program gra z tymi programami minimum 200 gier, no
widzę czy robi postępy.
W przypadku uczenia w BOINC będzie tak samo (o ile zrobię), np. co 3 doby uczenia jeden
turniej kontrolny i wyniki gdzieś na stronie www.
Co jakiś czas pojawiają się także wyniki na stronach z turniejami programów szachowych, np.
tam jest taka: http://wbec-ridderkerk.nl/html/BayesianElo_ed18.htm (http://wbec-ridderkerk.nl/html/BayesianElo_ed18.htm)
Będzie widać czy program robi postępy czy nie.
Pozdrawiam
Cytat: Troll81 w 01 Czerwiec 2012, 08:19
źródła przykładowej aplikacji uppercase powinny byc dostępne wraz z serwerem. Jest to przy okazji aplikacja testujące czy poszczególne składowe serwera działają prawidłowo.
Właśnie znalazłem to:
http://boinc.berkeley.edu/trac/wiki/BasicApi
Nie wydaje się straszne, oby tak dalej.
Pozdrawiam
Cytat: mariotti w 01 Czerwiec 2012, 08:44
Cytat: goofyx w 01 Czerwiec 2012, 08:21
@mariotti (nawiązując do odpowiedzi nr.94)
piszesz różnych możliwościach do wyboru jeśli chodzi o algorytmy, o mocy jaka jest potrzebna i dziesiątkach lat obliczeń...
osobiście uważam, że boinc jest idealną platformą do czegoś takiego.
Zobaczymy. Jeśli podołam z tym API BOINC i jeśli będzie 20 wolontariuszy non-stop to super.
na mnie możesz liczyć.
za 2-3 tygodnie skończę zdobywanie odznak w WCG i będę mógł przepiąć swoje hosty (jakoś 20 kompów) na inny projekt :)
Cytat: goofyx w 01 Czerwiec 2012, 09:05
na mnie możesz liczyć.
za 2-3 tygodnie skończę zdobywanie odznak w WCG i będę mógł przepiąć swoje hosty (jakoś 20 kompów) na inny projekt :)
Super fajnie, ale na razie to próbuję policzyć coś w ramach rosetta i... chyba nawet tego nie potrafię :)
Pozdrawiam
Jak coś, to z 10 -15 rdzeni będzie do dyspozycji :)
Myślę, że nie doceniasz popularności BOINC - ciekawy problem (a ten jest ciekawy) może łatwo przyciągnąć dziesiątki tysięcy ludzi (a przynajmniej komputerów) na stałe...
wystarczy odpowiednio dobrze ustawic system punktow za przeliczenie zadan. i chetnych bedzie bardzo duzo.
Kwestia techniczna , miec serwer ktory bedzie w stanie obsluzyc taki ruch.
I tu kolejna kwestia, raczej lepiej zeby zadania byly odpowiednio dlugie (4-6h) to zminiejszyloby ruch moze
albo nawet zadania o czasie 200h :D jak pokazuje przykład primegrid :D da się
Cytat: Troll81 w 01 Czerwiec 2012, 12:01
albo nawet zadania o czasie 200h :D jak pokazuje przykład primegrid :D da się
mnie zadania po 200h nie kręcą <- choć ClimatePrediction lub podobny liczył się chyba 1WU przez 30 dni :D
ja proponuje WU o czasach 1-3h
Cytat: krzyszp w 01 Czerwiec 2012, 11:36
Jak coś, to z 10 -15 rdzeni będzie do dyspozycji :)
Myślę, że nie doceniasz popularności BOINC - ciekawy problem (a ten jest ciekawy) może łatwo przyciągnąć dziesiątki tysięcy ludzi (a przynajmniej komputerów) na stałe...
ciekawy nieciekawy, każdy oceni we własnym zakresie, mnie zaciekawiło już od samego początku. Inna kwestia jest taka, że projektów matematycznych, białkowych, astronomicznych jest po kilka (naście) a szachowy w takim kształcie będzie jeden niepowtarzalny. Myślę że większym problemem będzie obsłużenie ruchu na serwerze i obróbka wyników/bieżące generowanie próbek niż brak chętnych.
Cytat: migawron w 01 Czerwiec 2012, 13:52
Cytat: krzyszp w 01 Czerwiec 2012, 11:36
Jak coś, to z 10 -15 rdzeni będzie do dyspozycji :)
Myślę, że nie doceniasz popularności BOINC - ciekawy problem (a ten jest ciekawy) może łatwo przyciągnąć dziesiątki tysięcy ludzi (a przynajmniej komputerów) na stałe...
ciekawy nieciekawy, każdy oceni we własnym zakresie, mnie zaciekawiło już od samego początku. Inna kwestia jest taka, że projektów matematycznych, białkowych, astronomicznych jest po kilka (naście) a szachowy w takim kształcie będzie jeden niepowtarzalny. Myślę że większym problemem będzie obsłużenie ruchu na serwerze i obróbka wyników/bieżące generowanie próbek niż brak chętnych.
jeśli projekt ruszy i będzie popularny to i na odpowiedni sprzęt znajdzie się kasa.
Cytat: goofyx w 01 Czerwiec 2012, 13:23
Cytat: Troll81 w 01 Czerwiec 2012, 12:01
albo nawet zadania o czasie 200h :D jak pokazuje przykład primegrid :D da się
mnie zadania po 200h nie kręcą <- choć ClimatePrediction lub podobny liczył się chyba 1WU przez 30 dni :D
ja proponuje WU o czasach 1-3h
Te ClimatePrediction (przynajmniej za starych czasów na starszych komputerach) mogły liczyć się po kilka miesięcy (może nawet do niecałego roku).
Cytat: Rysiu w 01 Czerwiec 2012, 14:10
Cytat: goofyx w 01 Czerwiec 2012, 13:23
Cytat: Troll81 w 01 Czerwiec 2012, 12:01
albo nawet zadania o czasie 200h :D jak pokazuje przykład primegrid :D da się
mnie zadania po 200h nie kręcą <- choć ClimatePrediction lub podobny liczył się chyba 1WU przez 30 dni :D
ja proponuje WU o czasach 1-3h
Te ClimatePrediction (przynajmniej za starych czasów na starszych komputerach) mogły liczyć się po kilka miesięcy (może nawet do niecałego roku).
mój rekord to pół roku ;)
ale potem straciłem cierpliwość i przeszedłem na WCG :D
Cytat
Jak coś, to z 10 -15 rdzeni będzie do dyspozycji :)
Myślę, że nie doceniasz popularności BOINC - ciekawy problem (a ten jest ciekawy) może łatwo przyciągnąć dziesiątki tysięcy ludzi (a przynajmniej komputerów) na stałe...
No jeśli tak to super fajnie. Taką aplikację rozproszoną bez pośrednictwa BOINC bym zrobił może w tydzień.
A tu minął tydzień i jedyne co osiągnąłem to pad systemu na obliczeniach rosetta.
Cytat
wystarczy odpowiednio dobrze ustawic system punktow za przeliczenie zadan. i chetnych bedzie bardzo duzo.
Na punktach na razie kompletnie się nie znam.
Cytat
Kwestia techniczna , miec serwer ktory bedzie w stanie obsluzyc taki ruch.
Czy komunikacja jest też za pośrednictwem API BOINC czy piszemy sobie własny serwer?
Cytat
I tu kolejna kwestia, raczej lepiej zeby zadania byly odpowiednio dlugie (4-6h) to zminiejszyloby ruch moze
Niestety pierwszy projekt z AI będzie miał jeden task na około 1-2 minuty. Transfery są małe, ale częste.
Nie wiem czy BOINC robi jakiś narzut na transfer.
Cytat
albo nawet zadania o czasie 200h :D jak pokazuje przykład primegrid :D da się
200h na jednym kompie jest niemożliwe. Uczenie to proces iteracyjny. Chodzi o
to aby iteracji było dużo, tysiące albo miliony. Dla metody magnetycznej idealnie
jest 100-1000 komputerów i na każdym 1 minuta obliczeń.
Cytat
Myślę że większym problemem będzie obsłużenie ruchu na serwerze i obróbka wyników/bieżące generowanie próbek niż brak chętnych.
Nie wiem jaki narzut na obsługę jest ze strony oprogramowania BOINC. W metodzie magnetycznej
klient będzie musiał odebrać dwie listy parametrów. Lista będzie mała, rzędu 50-2000 liczb w pliku
tekstowym. Program zmieniany będzie rzadko, po zmianie też będzie musiał go odebrać. Potem klient
liczy 1-2 minuty i wysyła wynik jako jeden wiersz tekstowy. I znowu pobór dwóch list i
tak w kółko. Obróbka danych jest łatwa. Trzeba wyłonić zwycięzce, zrobić krok iteracyjny,
wylosować trochę liczb i następna iteracja gotowa.
Cytat
jeśli projekt ruszy i będzie popularny to i na odpowiedni sprzęt znajdzie się kasa.
Ciekawy jestem co zrobić aby stał się popularny. Popularność dobrze nabijają
takie rzeczy jak algorytmy genetyczne. Jednak obawiam się że na AG
trzeba milionów komputerów. Nie wiem czy to będzie dobrze brzmiało: algorytmy
rojowe do szachów?
Pozdrawiam
W kwestii popularności, to chyba najlepiej systematycznie publikować wyniki, a pomysł z programem i turniejami też przysporzy wiele liczydłowych.
Kilkaset rdzeni do dyspozycji, to otrzymasz spokojnie z naszej drużyny, a w skali świata...
Generalnie dobry kontakt ze społecznością skupioną wokół BOINC jest chyba najlepszą opcją, najbardziej przyciąga chętnych gdyż ludzie zajmujący się tą technologią zwykle są ciekawi świata nauki :)
Cytat: krzyszp w 01 Czerwiec 2012, 17:10
W kwestii popularności, to chyba najlepiej systematycznie publikować wyniki, a pomysł z programem i turniejami też przysporzy wiele liczydłowych.
Kilkaset rdzeni do dyspozycji, to otrzymasz spokojnie z naszej drużyny, a w skali świata...
Generalnie dobry kontakt ze społecznością skupioną wokół BOINC jest chyba najlepszą opcją, najbardziej przyciąga chętnych gdyż ludzie zajmujący się tą technologią zwykle są ciekawi świata nauki :)
Dobre kontakty to moja słaba strona ;-) W pracy muszę mieć osobistego menadżera :)
A wracając do meritum...
Jak pobrać i skompilować ten przykładowy program? Motam się strasznie.
Mam kubuntu 64bity.
API niby przeczytałem, niby rozumiem:
http://boinc.berkeley.edu/trac/wiki/BasicApi#TheBOINCapplicationprogramminginterfaceAPI
Ale po pierwsze wydaje mi się podejrzanie mało tego, a
po drugie nadal nie wiem jak założyć projekt, jak to kompilować,
jak instalować, jak testować... To się kompiluje do jakiejś biblioteki?
Pozdrawiam
Z tego co pamiętam to program uppercase (czyli przykładowa apka) zamienia małe litery na duże. Jest prosty jak konstrukcja cepa bo ma tylko testować czy projekt wysyła aplikacje czy jest ona prawidłowo uruchamiana i zakańczana na komputerach i czy wyniki sa odsyłane i prawidłowo przyjmowane przez serwer....
Cytat: Troll81 w 01 Czerwiec 2012, 18:33
Z tego co pamiętam to program uppercase (czyli przykładowa apka) zamienia małe litery na duże. Jest prosty jak konstrukcja cepa bo ma tylko testować czy projekt wysyła aplikacje czy jest ona prawidłowo uruchamiana i zakańczana na komputerach i czy wyniki sa odsyłane i prawidłowo przyjmowane przez serwer....
Przeglądam poniższe instrukcje:
http://boinc.berkeley.edu/trac/wiki/SourceCode
http://boinc.berkeley.edu/trac/wiki/ExampleApps
http://boinc.berkeley.edu/trac/wiki/CompileApp
i próbuje cokolwiek uruchomić. Na początku wydaje się to zagmatwane, ale
mam nadzieję że przebrnę. Ma ktoś linuxa 64bit żeby pomóc w testowaniu
jakby mi się udało coś wyrzeźbić?
Pozdrawiam
mamy na forum tworcow trzech projektow BOINC - Enigma, Merssine, Radioactive
wiec na pewno ktos pomoze :)
Jeszcze Goldbach się gdzies zapodział w twej liście :D
Cytat: Tomasz R. Gwiazda w 01 Czerwiec 2012, 19:28
mamy na forum tworcow trzech projektow BOINC - Enigma, Merssine, Radioactive
wiec na pewno ktos pomoze :)
A tak BTW to można by takie zdanko umieścić gdzieś na głównej stronie, że członkowie B@P tworzą, bądź współtworzą kilka projektów BOINC, jak by nie było to jest się czym pochwalić. Co Wy na to?
Cytat: Troll81 w 01 Czerwiec 2012, 19:37
Jeszcze Goldbach się gdzies zapodział w twej liście :D
Aktualnie nieaktywny :(
ale wszak twórca jego serwer postawił i aplikację napisał...
Cytat: Troll81 w 01 Czerwiec 2012, 19:37
Jeszcze Goldbach się gdzies zapodział w twej liście :D
Pomału bo dostałem zadyszki :)
Co to jest ten Goldbach? :)
Pozdrawiam
Cytat: mariotti w 01 Czerwiec 2012, 19:55
Co to jest ten Goldbach? :)
Projekt BOINC, który jest nieosiągalny :deadman:
Goldbach Conjencture - testuje a raczej testował hipotezę Goldbacha.
No dobra...
Pościągałem z svna co kazali na stronie.
Wszedłem do przykładów, znalazłem przykład o nazwie example_app.
Na dzień dobry błąd kompilacji, nie widzi pliku config.h. Wszedłem do
źródła, zakomentowałem #include "config.h" w wiersuz 43.
Po zakomentowaniu kopilacja się powiodła. Kompilator zrobił
plik o nazwie libstdc++.a. No i dalej leżę, nie wiem co z tym plikiem
zrobić :)
Pozdrawiam
Cytat: mariotti w 01 Czerwiec 2012, 17:01
Cytat
I tu kolejna kwestia, raczej lepiej zeby zadania byly odpowiednio dlugie (4-6h) to zminiejszyloby ruch moze
Niestety pierwszy projekt z AI będzie miał jeden task na około 1-2 minuty. Transfery są małe, ale częste.
Nie wiem czy BOINC robi jakiś narzut na transfer.
Cytat
albo nawet zadania o czasie 200h :D jak pokazuje przykład primegrid :D da się
200h na jednym kompie jest niemożliwe. Uczenie to proces iteracyjny. Chodzi o
to aby iteracji było dużo, tysiące albo miliony. Dla metody magnetycznej idealnie
jest 100-1000 komputerów i na każdym 1 minuta obliczeń.
Cytat
Myślę że większym problemem będzie obsłużenie ruchu na serwerze i obróbka wyników/bieżące generowanie próbek niż brak chętnych.
Nie wiem jaki narzut na obsługę jest ze strony oprogramowania BOINC. W metodzie magnetycznej
klient będzie musiał odebrać dwie listy parametrów. Lista będzie mała, rzędu 50-2000 liczb w pliku
tekstowym. Program zmieniany będzie rzadko, po zmianie też będzie musiał go odebrać. Potem klient
liczy 1-2 minuty i wysyła wynik jako jeden wiersz tekstowy. I znowu pobór dwóch list i
tak w kółko. Obróbka danych jest łatwa. Trzeba wyłonić zwycięzce, zrobić krok iteracyjny,
wylosować trochę liczb i następna iteracja gotowa.
1-2 minuty na jedno WU?
Kolego to ja i moje ok. 50 (na początek) wątków lubimy ten projekt :D
Cytat: goofyx w 01 Czerwiec 2012, 22:37
1-2 minuty na jedno WU?
Kolego to ja i moje ok. 50 (na początek) wątków lubimy ten projekt :D
Co to jest WU?
Jedna iteracja w metodzie magnetycznej trwa tak długo aż się zakończą wszystkie
gry, czyli aż się zakończy cały turniej. Jeśli użyjemy tyle komputerów ile jest
gier w turnieju to jedna iteracja trwa tyle ile trwa jedna gra. Jeśli gra będzie trwała
godzinę, to jedna iteracja trwa aż godzinę, jeśli minutę, to tylko minutę. Chodzi o to
aby maksymalizować ilość iteracji i nie zaniżać zbytnio czasu jednej gry. Do
tej pory ustawiałem od 40 do 60 sekund na jedną grę i działało.
Jeśli w turnieju startuje 10 wersji programu to mamy 10*9/2=45 par i 45*2=90
gier. Jeśli użyjemy 30 wersji to mamy 30*29=870 gier. Tak więc przy 10ciu
wersjach dodanie więcej niż 90 komputerów nie przyspiesza, a przy 30tu
dodanie więcej niż 870 komputerów nie przyspiesza. Jedyne co można zrobić
to skracać czas rozgrywki.
Owszem można użyć 30 wersji i zamiast 870 gier zrobić 8700. Da to
dokładniejszy wynik turnieju. Taki turniej trwa 10 razy dłużej ale uczenie
przebiega szybciej, czyli można uzyskać ten sam efekt w mniejszej
ilości iteracji. Nie wiem jak sprawa wygląda w szachach, nie mam mocy
obliczeniowej aby sprawdzić. Ale gdy testowałem metodę magnetyczną
na prostszych zadaniach to wynikało jednoznacznie że coś takiego się
nie opłaca. Np. czas turnieju wydłużał się 10 razy, a ilość iteracji malała
8 razy.
Niemniej w przypadku obliczeń rozproszonych sprawa będzie wyglądała
inaczej. Załóżmy że mamy 90 komputerów i turniej złożony z 90ciu gier.
Teoretycznie, jeśli ustawimy czas gry na 1 minutę, to możemy robić
jedną iterację co 1 minutę. Jednak gdy choć jeden komputer padnie, to
czekamy aby rozpoznać że padł i potem wysyłamy drugiemu aby policzył
to zadanie jeszcze raz. Czyli wszystko może się wydłużyć z tej jednej
minuty np. do 2-3 minut. Do tego iteracja ucząca też zajmuje trochę
czasu. Iterację uczącą wykonuje tylko serwer a komputery wolontariuszy
czekają bezczynnie. Tak więc wydaje się że lepiej będzie wysłać do
każdego komputera np. po 10 'losowych' gier. Można od razu wysłać
częściowo zdublowane gry, a jeśli któryś komputer padnie to po prostu
można zignorować ten fakt. Metoda magnetyczna jest odporna na
małe losowe zaburzenia, ale muszą być to naprawdę losowe(!) zaburzenia
niczym nie obciążone.
To takie luźne przemyślenia... dopracowanie szczegółów nie jest ani
proste ani oczywiste... będzie trzeba próbować, sprawdzać co jest
problemem i usuwać problemy aż do skutku.
Pocieszające jest to, że metodę testowałem u siebie na sześciu
rdzeniach. Uruchamiałem ją wielokrotnie dla zadań o różnej trudności.
Jeśli mnie pamięć nie myli, to 6 razy na 7 odnalazła wyraźnie lepsze
parametry niż wpisane przeze mnie na instynkt szachisty. Jeśli u mnie
działała to na obliczeniach rozproszonych też powinna działać, tyle
że szybciej. Wraz ze wzrostem ilości iteracji uczących można optymalizować
większą ilość parametrów. Do tej pory optymalizowałem od 7 do 30 parametrów.
Obecnie trwa optymalizacja ponad 50 parametrów. Po miesiącu optymalizacji
zrobiłem pomiar siły i widzę wyraźny wzrost. Tak więc to powinno działać.
Z kolei smutne jest to że metoda magnetyczna nie nadaje się do
wszystkich zadań. Np. metoda magnetyczna nie zbuduje architektury
sieci neuronowej. Może jedynie znaleźć wartości wag w pobliżu
optymalnych.
Pozdrawiam
WU - work unit, pojedyncza próbka danych przesyłana z serwera projektu do komputera z zainstalowanym klientem boinc.
Cytat: migawron w 02 Czerwiec 2012, 00:11
WU - work unit, pojedyncza próbka danych przesyłana z serwera projektu do komputera z zainstalowanym klientem boinc.
A no tak, powinienem już to wiedzieć.
Po wstępnych przemyśleniach, jakby było za dużo komputerów to optymalny WU na 2 minuty.
Jeśli za dużo nie będzie, to optymalna w granicach 5-20 minut, aby minimalizować ilość
transferów. A może po prostu jeden transfer na 5-20 WU, można tak?
Pozdrawiam
Generalnie Ty ustawiasz na serwerze dzienny limit próbek (WU) jakie może otrzymać komputer wolontariusza, a dodatkowo jest to zależne jeszcze od jego przydzielonych zasobów dla Twojego projektu oraz ustawionego przez niego czasu, na jaki ma pobrać zapas próbek. Im wolontariusz ma ten czas ustawiony dłuższy i limity większe, tym stara się pobrać więcej próbek. Ja na przykład mam teraz w systemie z którego piszę kilkadziesiąt próbek z POEM, ale tylko jedną Radioactive (bo R@H daje tylko jedną próbkę na raz).
Cytat: krzyszp w 02 Czerwiec 2012, 05:59
Generalnie Ty ustawiasz na serwerze dzienny limit próbek (WU) jakie może otrzymać komputer wolontariusza, a dodatkowo jest to zależne jeszcze od jego przydzielonych zasobów dla Twojego projektu oraz ustawionego przez niego czasu, na jaki ma pobrać zapas próbek. Im wolontariusz ma ten czas ustawiony dłuższy i limity większe, tym stara się pobrać więcej próbek. Ja na przykład mam teraz w systemie z którego piszę kilkadziesiąt próbek z POEM, ale tylko jedną Radioactive (bo R@H daje tylko jedną próbkę na raz).
Ok, fajnie że jest konfiguracja. A jak jest zdefiniowana próbka?
Chodzi mi o to, aby optymalizować transfer. Będzie na pewno kilka 'rodzajów' pobierania.
1) Największy na początku - program wraz z bibliotekami.
2) Dość duży po zmianie w programie, np. po usunięciu błędu.
3) Mały na starcie iteracji - wystarczy nowa baza parametrów dla wszystkich wersji.
4) Maleńki przed samym zadaniem - wystarczą dwie małe liczby całkowite wskazujące która para ma zagrać partię.
Jeśli za każdym razem trzeba pobrać wszystko to czarno widzę gry na 1 minutę :)
Pozdrawiam
Nie, nie trzeba pobierać wszystkiego za każdym razem. Raz (do następnej zmiany wersji pliku) pobiera się aplikację liczącą, na bieżąco pobiera się właśnie tzw. próbki (czyli właśnie WU - Work Unit), oraz ewentualnie pliki konfiguracyjne, właśnie to wszystko definiujesz na serwerze. Natomiast generalnie odsyłać można min. jeden plik - wynik obliczeń, często też odsyła się raport błędów lub dane debuggera (jeśli występuje).
Użytkownik ma także możliwość (jeśli administrator serwera to przewidział) zmiany części konfiguracji (np. wybór długości próbek, pod-projektu, itd) - ale to już zależy od Ciebie jako administratora.
Generalnie najwięcej na ten temat z naszego grona wie chyba TJM - ma bardzo dużą wprawę i praktykę w stawianiu i administrowaniu serwerem, a także w budowaniu aplikakacji pod BOINC, spróbuj na naszym kanale IRC - on prawie zawsze tam jest :)
Cytat: krzyszp w 02 Czerwiec 2012, 10:15
Nie, nie trzeba pobierać wszystkiego za każdym razem. Raz (do następnej zmiany wersji pliku) pobiera się aplikację liczącą, na bieżąco pobiera się właśnie tzw. próbki (czyli właśnie WU - Work Unit), oraz ewentualnie pliki konfiguracyjne, właśnie to wszystko definiujesz na serwerze. Natomiast generalnie odsyłać można min. jeden plik - wynik obliczeń, często też odsyła się raport błędów lub dane debuggera (jeśli występuje).
Użytkownik ma także możliwość (jeśli administrator serwera to przewidział) zmiany części konfiguracji (np. wybór długości próbek, pod-projektu, itd) - ale to już zależy od Ciebie jako administratora.
Generalnie najwięcej na ten temat z naszego grona wie chyba TJM - ma bardzo dużą wprawę i praktykę w stawianiu i administrowaniu serwerem, a także w budowaniu aplikakacji pod BOINC, spróbuj na naszym kanale IRC - on prawie zawsze tam jest :)
Super, to skorzystam w najbliższej przyszłości :)
Teraz muszę rozgryźć co z tym skomplikowanym libem się robi :)
Pozdrawiam
Jak tam kolego idą prace, dłubiesz coś? Bo (bez nacisku oczywiście :whip: : XD) czekamy na jakieś newsy.
Cytat: migawron w 12 Czerwiec 2012, 17:53
Jak tam kolego idą prace, dłubiesz coś? Bo (bez nacisku oczywiście :whip: : XD) czekamy na jakieś newsy.
Dłubię, testuję i nieustannie myślę ;-) Od ostatniego czasu testowałem dwie
"nowe" metody samouczenia (oczywiście na szachach). Niestety nie mam jednoznacznych
rezultatów, raz uczenie działa, potem minimalnie zmienię warunki uczenia i już
nie działa. Nie wiem co od czego zależy... strasznie trudna sprawa.
Poza tym czytałem intensywne źródła najlepszych programów na świecie i
zastanawiam się dlaczego one są takie mocne a mój przy nich taki kiepski.
W kodzie nie widzę dużych różnic pomiędzy moim programem a tymi najlepszymi,
wszystko co najważniejsze wygląda bardzo podobnie, albo wręcz tak samo.
Czyżby drobne szczegóły decydowały o ogromnej różnicy w sile gry? Może
czegoś ważnego nie zauważam, nie wiem. W turnieju mój z tymi programami
wygrywa jedną grę na 30, a czasami tylko jedną grę na 1000.
Chcę przygotować coś co będzie miało duże szanse na sukces. Byłoby
mi dziwnie jakby po tysiącu lat obliczeń nie było żadnych wyraźnych postępów, a
niestety w przypadku tak trudnego problemu jest to całkiem realne zagrożenie.
Jeśli metoda uczenia ma być kiepska, albo będzie wymagała gigantycznych
mocy obliczeniowych to lepiej niech wolontariusze liczą leki - więcej pożytku.
Nie wiem czy kogoś na tym forum zaciekawi sama metodyka jaką testuję.
To jest forum o obliczeniach rozproszonych, uczenie maszynowe w zastosowaniu
do szachów to "trochę" inny temat, ale spróbuję kilka zdań na zaczepkę.
Może ktoś konstruktywnie skrytykuje to i owo, zamiast zwyczajnie opieprzyć ;-)
Najgorszy problem z jakim się zmagam to dostosowanie do szczególnych cech
programów. Przykładowo mam 3 programy, nazwijmy je A, B i C. Programy
A i B mogą być dowolnymi programami. Mogą być jakimiś wersjami napisanymi
przeze mnie, albo przez innych autorów. Program C jest napisany przeze mnie i
będzie poddawany uczeniu. Program C uczy się grając z programem A, po
czym z programem B jest wykonywane coś w rodzaju walidacji krzyżowej.
Na początku program C gra z programem A wiele gier, potem tak samo z
programem B. Załóżmy że w dużym turnieju program C z programem A
zdobył 40% punktów, a z programem B 45%. Potem program C się uczy jakąś
metodą. Z samym uczeniem zwykle nie mam większych problemów, uczenie z
reguły przebiega szybko i skutecznie. Więc po uczeniu program C z programem A
może zdobywać znacznie więcej niż początkowe 40%, powiedzmy 75%. Następnie
robię turniej kontrolny z programem B, który nie brał udziału w uczeniu. No i
efekt jest taki, że z reguły z programem B gra gorzej niż na początku, np.
spada z początkowych 45% do 30%.
Kiedyś ciekawiło mnie czy można ten problem rozwiązać przez zastąpienie
programu A i B całymi zbiorami programów. Napisałem kiedyś prostą grę
opartą po prostu na tabeli wypłat. Potem zwiększałem ilość programów w
grupie uczącej i testowej (testowa to da do walidacji krzyżowej). Wyszło mi że w grupie
uczącej musi być minimum 5tys programów i trzeba zrobić dwie rundy
gier każdy z każdym, czyli razem około 50mln gier. Dopiero przy 50mln
gier uzyskiwałem potwierdzenie na zbiorze testowym.
Jakby jedna gra trwała minutę, to 50mln gier wymaga 95lat obliczeń :)
50mln to oczywiście jedna iteracja, potem trzeba robić kolejne.
Pomimo wykonania tak dużej ilości gier w jednej iteracji uczącej, nadal
nie wiadomo co zrobić z wynikami, aby uzyskać największą efektywność.
Nie wiadomo czy mutować tylko zwycięzce, czy może kilka najlepszych
programów, czy może zrobić krzyżowanie (tak jak w algorytmie
genetycznym) pewnej ilości najlepszych programów. Błąd na tym etapie
może znacznie zwiększyć ilość iteracji uczących. Poza tym 50mln gier
to wynik jaki uzyskałem dla znacznie prostszej gry niż szachy, w
szachach być może potrzeba więcej. Słyszałem z
niepotwierdzonego źródła że w szachach trzeba wykonać setki milionów
gier.
Opracowanie lepszego algorytmu uczącego wydaje się konieczne, nawet
gdy ma się do dyspozycji sieć BOINC.
Na razie widziałem w praktyce dwa algorytmy które cechowały się dość
dużą skutecznością, co niestety było okupione ich ograniczeniami.
Pierwszy z tych algorytmów to metoda bazująca na aproksymacji funkcji.
Dobrze sprawowały mi się proste funkcje, np. liniowa albo sigmoidalna,
czyli tak jakby sztuczna sieć neuronowa z jednym liniowym albo sigmoidalnym
neuronem. Bardziej skomplikowane funkcje nie działały mi, niestety
też nie jestem pewien dlaczego. Ogólnie metoda polega na tym, że
ręcznie opracowujemy zestaw cech. Np. piszemy procedury które liczą
ilość poszczególnych bierek, liczą ilość pionków osłaniających króla itd.
Potem rozgrywamy pewną ilość gier, raczej małą, 20 wystarczy w zupełności.
Z gier budujemy wektory uczące. Wektory opisują powyższe cechy jakie
pojawiały się w rozgrywkach, a na wyjściu mają {+1,0,-1} w zależności
od tego czy wygrały białe, czy był remis, czy czarne. Ostatecznie na
tak spreparowanych danych robimy metodę najmniejszych kwadratów i
proces zapętlamy. W jednej rozgrywce jest dość dużo ruchów,
każdy ruch daje wektor uczący, więc ilość danych uczących szybko narasta.
Już po wykonaniu 20 iteracji po 20 gier w każdej, algorytm uzyskuje
zbieżność do jakiegoś punktu. Niestety punkt ten nie jest to ani
globalny optimum, ani nawet lokalnym w sensie dobrej gry w szachy.
Po prostu jest to jakiś punkt przyciągania do którego zmierza ten algorytm.
Zdaje się że nigdy nie zaobserwowałem żeby ta metoda kompletnie się nie
sprawdziła, nigdy nie zdarzyło mi się aby parametry były kompletnie
beznadziejne, zawsze z zupełnie losowych parametrów metoda osiągała w
miarę sensowny poziom gry - to pewna zaleta.
Zastanawiam się jakie są możliwości adaptacji powyższej metody do
obliczeń rozproszonych. Co można zrobić, jeśli ta metoda już po
kilku godzinach obliczeń na jednym komputerze osiąga swój punkt
przyciągania? Oczywiście dobrze byłoby też odpowiedzieć na pytanie
dlaczego bardziej skomplikowane funkcje nie działały. W tej chwili
mam kilka przemyśleń.
Można wygenerować setki milionów początkowych układów i z każdego
rozegrać kilka partii. Wydaje się, że duża różnorodność układów
początkowych zapewni dużą różnorodność rozgrywek. W dodatku gdy
rozgrywki będą przeprowadzone różnymi wersjami programu i na różny
czas, to jeszcze bardziej zróżnicuje dane uczące. Dzięki sieci
BOINC można taką ogromną ilość gier przeprowadzić. Metoda doboru
parametrów liniowych jest jednoprzebiegowa, danych nawet nie
trzeba trzymać w pamięci ram. Można danymi zapchać cały twardy
dysk, a potem czas obliczeń trwa mniej/więcej tyle, ile czas
odczytu z dysku. Tak więc pod względem możliwości obliczeniowych metoda
bazująca na aproksymacji parametrów liniowych wydaje się realna.
Niestety nie jestem pozbawiony obaw jeśli chodzi o skuteczność.
Jeśli dane uczące nie są w żaden sposób obciążone, a model
jest dość dobry, to metody bazujące na najmniejszych kwadratach szybko
dochodzą do rozwiązań. Zwykle nie wymagają aż takiej ogromnej ilości
danych. Natomiast jeśli dane są obciążone to zwiększanie ilości danych w
niczym nie pomoże. Można jakoś odpowiedzieć na pytanie czy tak spreparowane
dane będą obciążone?
1) danych będzie dużo, to jest jakiś argument za tym że nie będą obciążone
2) dane będą z gier które zaczynają się z losowych otwarć - to też
sugeruje że dane nie będą obciążone
3) program będzie grał sam ze sobą - to z kolei mocno sugeruje że
dane będą obciążone.
Dwa argumenty za, jeden przeciw - nie wiem co myśleć. Do tej pory
różnorodność zapewniałem przez dodawanie losowych wartości
do parametrów przed rozgrywką. Np. gdy algorytm wyliczył wartość
skoczka równą 300, to program dodawał +/- 30 i grał kolejną grę.
Ponadto te losowe układy początkowe z których będą się rozpoczynały
rozgrywki nie mogą być w pełni losowe. Duża większość układów w
żadnej rozsądnej rozgrywce nie pojawi się. Konieczny byłby jakiś
dobry sposób opracowania zestawów początkowych.
Rozwiązanie tego problemu jakie obecnie przychodzi mi do głowy jest
mniej/więcej takie:
1) bierzemy szachownicę z układem początkowym
2) wykonujemy od 8 do 30 losowych ruchów, dochodzimy do jakiegoś układu
3) bierzemy dwa programy, jeden bardzo silny, a drugi słaby (ale nie beznadziejny)
4) rozgrywamy dwie gry, raz zaczyna program słaby, drugi raz silny
5) jeśli słaby nie wygrał ani razu, to układ klasyfikujemy jako rozsądny.
Metoda zawsze będzie miała dwie istotne wady. Po pierwsze nie nadaje się
do doboru(uczenia) parametrów przeszukiwania drzewa gry. Można
nią tylko dobierać parametry funkcji oceniającej. Po drugie metoda sama
nigdy nie dobierze sobie optymalnego zestawu cech. Cechy musi wybrać
programista. Jeśli programista nie wybierze wszystkich istotnych cech, to
nawet nieobciążone dane uczące nic nie pomogą.
To tak w skrócie moje rozterki dotyczące tej metody. Pomimo kilu zalet
są też wady. Nie mam pewności czy warto z taką metodą eksperymentować
na skalę globalną.
Druga z metod o których pisałem że przyzwoicie mi się sprawowały to
pewna odmiana algorytmu rojowego (metoda magnetyczna). Metoda
magnetyczna dawała mi zwykle dużo dokładniejsze rozwiązania niż metody
bazujące na aproksymacji funkcji. Też nie przypominam sobie aby metoda
magnetyczna wyprodukowała zupełnie bezsensowne wyniki - to chyba jest
ważne że na wiele prób w wielu różnych warunkach metoda dawała poprawę.
Z reguły ten sam program wyuczony metodą magnetyczną wygrywał około 60%-40%
z programem wyuczonym metodą bazującą na aproksymacji funkcji.
Czym się różni metoda magnetyczna od metody bazującej na aproksymacji?
1) Metoda nadaje się także do uczenia parametrów przeszukiwania drzewa
gry - zaleta na korzyść metody magnetycznej.
2) Trwa dłużej - wada. Uczenie metodą wykorzystującą aproksymację trwało
u mnie np. od 1-12 godzin, a metodą magnetyczną całe tygodnie. Im
więcej parametrów tym większa różnica w czasie pomiędzy metodami.
3) Z symulacji na prostych zadaniach wynika, że metoda magnetyczna
ma duże problemy z dotarciem do optimum. Zastępowałem rozgrywkę
szachową jakąś wypukłą funkcją i sprawdzałem w jakiej odległości
od optimum się zatrzymuje. Wyniki pokazują, że metoda stosunkowo
łatwo znajduje rozsądne wartość, ale nawet w prostych zadaniach
nie dociera do optimum. Myślę że metody bazujące na aproksymacji
mają podobny problem, ale pewności nie mam.
4) Metoda słabo się zrównolegla. Z symulacji na prostych zadaniach
wynika, że liniowe przyspieszenie uzyskuje się do około 50 komputerów.
Metodę bazującą na aproksymacji można zrównoleglać prawie bez ograniczeń.
5) Ta sama wada co w przypadku metod bazujących na aproksymacji - metoda
sama nie dobierze sobie zestawu parametrów. Jeśli programista źle
ustali taki zestaw to efekty będą gorsze niż gdyby ustalił dobrze.
Metoda sama nie odkrywa zależności, jedynie dobiera wartości parametrów i
to nie optymalne, a jedynie rozsądne.
Tak więc rozterek kupa, a pewności nic :) Nie wiem czy jest sens zaprzęgania
sieci BOINC po to, aby po tysiącach lat obliczeń komputerowych uzyskać
przeciętny program - wydaje się to trochę dziwne.
Bym musiał mieć lepszą metodę uczenia... taką żeby po pierwsze działała
szybko, a po drugie dawała tym większy wzrost siły gry im dłuższe uczenie.
Albo bym musiał zrozumieć co jest źródłem siły tych najlepszych programów
na świecie. Wtedy bym mógł zrobić analogiczny program (oczywiście bez kopiowania
oryginału i łamania praw autorskich), a następnie jego fragmenty poddać uczeniu w
BOINC.
Tak czy inaczej nie umarłem, ani nie wycofałem się. Walczę z problemem, ale
nie ukrywam że walka idzie w krwi i pocie :)
Pozdrawiam
Chyba najdłuższy post w historii tego forum :D Co do projektu niezła zagwostka.
Zastosuj metodę siłową - po prostu uwzględnij wszystkie trzy opcje, tworząc trzy aplikacji uczące. Po jakimś czasie wystaw je przeciwko sobie, to da Ci już jakiś pogląd na możliwości algorytmów.
BTW pamiętaj, że Twoje problemy z bardziej skomplikowanymi algorytmami mogą wynikać nie z ich słabości, ale z błędów implementacji.
W ramach ciekawostki (o ile już tego nie wiesz) zapoznaj się z typem FLOAT w bazach danych - drobiazg, przez który autorzy programów księgowych dorabiali się siwych włosów...
Cytat: krzyszp w 22 Czerwiec 2012, 02:41
Zastosuj metodę siłową - po prostu uwzględnij wszystkie trzy opcje, tworząc trzy aplikacji uczące. Po jakimś czasie wystaw je przeciwko sobie, to da Ci już jakiś pogląd na możliwości algorytmów.
Właśnie tak robię. Tyle tylko że tych metod jest więcej niż trzy i każdą można
sparametryzować na pierdylion sposobów. Właśnie z testów mniej/więcej wiem
jaka jest skuteczność niektórych z nich, ile trwa uczenie i jakich ograniczeń
można się spodziewać.
Cytat: krzyszp w 22 Czerwiec 2012, 02:41
BTW pamiętaj, że Twoje problemy z bardziej skomplikowanymi algorytmami mogą wynikać nie z ich słabości, ale z błędów implementacji.
W ramach ciekawostki (o ile już tego nie wiesz) zapoznaj się z typem FLOAT w bazach danych - drobiazg, przez który autorzy programów księgowych dorabiali się siwych włosów...
Nie sądzę aby chodziło o błąd. Bym musiał napisać 10 razy tyle co poprzednio aby opisać
sposoby w jakie sprawdzałem poprawność :) W kodzie mam czasami drobne błędy, a
po ich usunięciu program gra... gorzej. Gdy czytam komentarze w źródłach innych
autorów, to widzę że mają podobne problemy. Piszą że wszelka logika wskazuje że
tutaj jest błąd, ale po poprawieniu program gra gorzej :)
W sieci można znaleźć źródła dwóch podstawowych programów szachowych. Jeden
nazywa się TSCP, a drugi Gerbil. Znam te źródła niemal na pamięć. Mój program gdy
miał zaimplementowaną podobną (lub nawet nieco mniejszą) funkcjonalność, to grał
trochę lepiej. Oznacza to że w innych programach z jakiś dziwnych powodów też
nie działa dobrze to co powinno działać i działa w tych programach najlepszych.
Coraz częściej myślę że chodzi o współpracę poszczególnych heurystyk. Po prostu w
słabszych programach poszczególne części nie współpracują z sobą tak dobrze
jak w silnych.
Natomiast metody uczenia są prościutkie, tam nie ma gdzie popełnić błędów. Poza tym
te metody bardziej skomplikowane gdzie trzeba aproksymować hesjan, albo odwrócić
macierz raczej mi działały. Mój problem nie polega na tym że nie działają, tylko na tym
że nie działają extra-rewelacyjnie ;-)
Co do typu FLOAT w bazach danych to nie wiem o co chodzi. Moje programy bazodanowe
które używają typu zmiennoprzecinkowego nie mają obserwowalnych problemów.
Pozdrawiam
Cytat: mariotti w 22 Czerwiec 2012, 03:56
Co do typu FLOAT w bazach danych to nie wiem o co chodzi. Moje programy bazodanowe
które używają typu zmiennoprzecinkowego nie mają obserwowalnych problemów.
W baaardzo wielkim skrócie i uproszczeniu, przy zapisie liczb w tym typie 4+4=3.999999999 ;)
Cytat: krzyszp w 22 Czerwiec 2012, 07:34
Cytat: mariotti w 22 Czerwiec 2012, 03:56
Co do typu FLOAT w bazach danych to nie wiem o co chodzi. Moje programy bazodanowe
które używają typu zmiennoprzecinkowego nie mają obserwowalnych problemów.
W baaardzo wielkim skrócie i uproszczeniu, przy zapisie liczb w tym typie 4+4=3.999999999 ;)
To ewidentnie błąd bazy danych. Nie spotkałem się nigdy z nim. Natomiast z powodu błędów
w kompilatorach owszem widziałem już kilka razy że 2+2=2. Chyba mam jeszcze gdzieś
screeny z debugera.
Pozdrawiam
Cytat: mariotti w 22 Czerwiec 2012, 07:51
To ewidentnie błąd bazy danych. Nie spotkałem się nigdy z nim.
To nie jest błąd:
CytatPowoduje to, że reprezentacja liczby rzeczywistej jest tylko przybliżona, a jedna liczba zmiennoprzecinkowa może reprezentować różne liczby rzeczywiste z pewnego zakresu.
http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa
Dokładniej ten problem przedstawiony jest w angielskojęzycznej wikipedii:
http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
Dlatego w systemach księgowych najczęściej do zapisywania kwot pieniężnych używa się po prostu liczb całkowitych mnożąc kwotę razy 100 (żeby wyeliminować wartość po przecinku) - oczywiście tylko w przypadku przechowywania wartości już wyliczonej wcześniej.
Cytat: krzyszp w 22 Czerwiec 2012, 08:12
Cytat: mariotti w 22 Czerwiec 2012, 07:51
To ewidentnie błąd bazy danych. Nie spotkałem się nigdy z nim.
To nie jest błąd:
CytatPowoduje to, że reprezentacja liczby rzeczywistej jest tylko przybliżona, a jedna liczba zmiennoprzecinkowa może reprezentować różne liczby rzeczywiste z pewnego zakresu.
http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa
Dokładniej ten problem przedstawiony jest w angielskojęzycznej wikipedii:
http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
Dlatego w systemach księgowych najczęściej do zapisywania kwot pieniężnych używa się po prostu liczb całkowitych mnożąc kwotę razy 100 (żeby wyeliminować wartość po przecinku) - oczywiście tylko w przypadku przechowywania wartości już wyliczonej wcześniej.
Na 100% jest to błąd bazy danych, za duża różnica jak na błąd powstały w
wyniku reprezentacji przybliżonej. Typy zmiennoprzecinkowe w każdym środowisku
(nie tylko w bazach danych) są związane z obliczeniami przybliżonymi. Przybliżenia
mają różny charakter. Jeśli to jest ważne, to trzeba się jakoś asekurować.
Mam jeden program w którym akurat mogę zignorować dokładność na którymś
miejscu po przecinku i dokonuję porównań na typie double w c++ instrukcją
if( a < b ). Na każdym procesorze ten program daje zupełnie inne wyniki i
w tym przypadku to jest normalne. Ale 4+4 nie może być równe prawie
cztery. Na 100% błąd bazy danych.
Pozdrawiam
Ja nie napisałem, że 4+4 daje prawie 4, tylko że 2+2 = 3.999999999...
I uwierz mi - to nie jest błąd i to "zjawisko" występuje w każdym silniku bazodanowym w pewnych warunkach.
Zgadzam się, że to najdłuższy post na forum ;)
Nie wiem czy rozumiem to co chciałeś nam przekazać czyli to, że istnieje wiele algorytmów uczących się gry w szachy, każdy może mieć różne parametry i wykorzystywać różne metody uczenia <- tak?
A nie możesz przykładowo uruchomić projektu boinc w którym będzie wiele aplikacji uczących się przez jakiś okres lub przez pewną liczbę gier. Wtedy możesz porównywać wyniki poszczególnych algorytmów po np.: 1000 gier co przy np.: 1000 hostów/wątków rozegra się w ciągu doby i wybrać do dalszej nauki te które dają jakieś najlepsze wyniki.
Cytat: krzyszp w 22 Czerwiec 2012, 08:41
Ja nie napisałem, że 4+4 daje prawie 4, tylko że 2+2 = 3.999999999...
I uwierz mi - to nie jest błąd i to "zjawisko" występuje w każdym silniku bazodanowym w pewnych warunkach.
2+2=3.9(9) to co innego niż 4+4=3.9(9)
W każdym środowisku specyfika błędów zaokrągleń ma inny charakter.
Myślę że baza danych powierza obliczenia procesorowi, czyli problemy
bazy danych są analogiczne jak problemy procesora - ale pewności nie mam.
Są tak jakby dwa rodzaje problemów obliczeń przybliżonych. Pierwszy polega
na tym, że jedna liczba ma skończone rozwinięcie w systemie w którym
wklepujemy kod, a w systemie na którym operuje procesor już nie. Np.
2.0 + 2.0 powinno dawać dokładnie 4, gdyż zarówno w systemach dziesiątkowych
jak i w dwójkowych da się tą liczbę przechowywać dokładnie.
Zobacz taki programik:
#include <cstdio>
#include <cstdlib>
int main(int argc, char *argv[]) {
double x,y,z;
printf("podaj x:");
scanf("%lf",&x);
printf("podaj y:");
scanf("%lf",&y);
z = x + y;
printf("x + y = %25.20lf\n",z);
return 0;
}
I efekty jego działania:
podaj x:0.5
podaj y:0.5
x + y = 1.00000000000000000000
podaj x:0.3
podaj y:0.3
x + y = 0.59999999999999997780
Dla 0.5, choć to są też liczby ułamkowe, działa dokładnie. Dla 0.3 już nie. Problem wynika
właśnie dlatego, że 0.3 w systemie dwójkowym nie ma skończonego rozwinięcia. Problem
zachodzi także w drugą stronę, czasami w systemie dwójkowym jest skończone rozwinięcie, a
w dziesiątkowym już nie ma - tak więc w procesorze może być dokładny wynik, a podczas
wyświetlania już widzimy niedokładny - no chyba że wyświetlimy sobie dwójkowo :)
Drugi rodzaj problemu to utrata dokładność przy długotrwałych obliczeniach.
Małe błędy przy niektórych obliczeniach szybko się nawarstwiają, dodatni
współczynnik lapunowa itd.
Pozdrawiam
Generalnie, potwierdziłeś to, o czym pisałem - to nie jest błąd, to jest specyfika implementacji. Dodatkowo, dokładność rośnie wraz z możliwościami i architekturą komputerów (32-64-128 bitów). Niemniej, zboczyliśmy z tematu, ale... to może się przydać.
Z tego, co kojarzę, pewien współczynnik losowości (a takim w tym wypadku jest zaokrąglenie danych FLOAT), może mieć duży wpływ na twoje algorytmy... Oczywiście nie przy pierwszym powtórzeniu, nie przy dziesiątym, ale przy 10000 już tak - brałeś już to pod uwagę?
Cytat: goofyx w 22 Czerwiec 2012, 08:50
Zgadzam się, że to najdłuższy post na forum ;)
Nie wiem czy rozumiem to co chciałeś nam przekazać czyli to, że istnieje wiele algorytmów uczących się gry w szachy, każdy może mieć różne parametry i wykorzystywać różne metody uczenia <- tak?
Tak, to chciałem powiedzieć. Przetestowałem wiele algorytmów nie tylko na szachach i
różnice w skuteczności są ogromne. Wszelkie znaki na niebie i ziemi pokazują że do
algorytmu genetycznego będzie potrzeba milionów komputerów i to mnie martwi. Tylko
algorytm genetyczny (albo coś podobnego do A.G.) może budować "fragmenty programu",
albo coś o równoważnych możliwościach jak fragmenty programu. Budowanie
fragmentów programu wydaje się być jedynym sposobem na to aby uzyskać nieograniczony
wzrost siły gry. Pozostałe metody są dużo szybsze, ale mają ograniczenia. Stosując
metodę magnetyczną program uzyska co najwyżej taką siłę gry jaka będzie wynikała z
jego architektury i potem uczenie nic nie daje, choćby się uczył milion lat.
Cytat: goofyx w 22 Czerwiec 2012, 08:50
A nie możesz przykładowo uruchomić projektu boinc w którym będzie wiele aplikacji uczących się przez jakiś okres lub przez pewną liczbę gier. Wtedy możesz porównywać wyniki poszczególnych algorytmów po np.: 1000 gier co przy np.: 1000 hostów/wątków rozegra się w ciągu doby i wybrać do dalszej nauki te które dają jakieś najlepsze wyniki.
Jestem prawie pewny jakie wymagania mają poszczególne metody i jakie mogą
dać wyniki. Nie ma czego sprawdzać. Jeśli mam zawracać gitarę wolontariuszom
to potem z tego powinny być dobre wyniki.
Co do rezultatów mam pewne obawy. Na chwilę obecną mogę przygotować dla
BOINC jedną z trzech metod:
1) metodę magnetyczną
2) metodę opartą na aproksymacji funkcji
3) metodę 'turniejową' - czyli ręcznie przygotowane programy do sprawdzenia jak grają.
Algorytm genetyczny nie przejdzie, by musiała cała polska liczyć 24h na dobę :)
Myślę żeby jeszcze popracować nad dwoma sprawami:
1) skuteczniejszy algorytm niż genetyczny ale o podobnych możliwościach
2) lepszy program bazowy, jakiś wzorowany na najlepszych programach na świecie.
Boję się że będzie wstyd jeśli po 5 latach uczenia program zagra gorzej niż przed
uczeniem, a z moich testów wynika że to jest realne zagrożenie.
Pozdrawiam
Zapominasz, że my pomagamy, bo chcemy - a czasem brak rezultatów jest tak samo ważny, jak te rezultaty...
W końcu, wyeliminowanie jakiś metod, to skrócenie drogi do lepszych rezultatów :)
Cytat: krzyszp w 22 Czerwiec 2012, 18:07
Generalnie, potwierdziłeś to, o czym pisałem - to nie jest błąd, to jest specyfika implementacji. Dodatkowo, dokładność rośnie wraz z możliwościami i architekturą komputerów (32-64-128 bitów). Niemniej, zboczyliśmy z tematu, ale... to może się przydać.
Z tego, co kojarzę, pewien współczynnik losowości (a takim w tym wypadku jest zaokrąglenie danych FLOAT), może mieć duży wpływ na twoje algorytmy... Oczywiście nie przy pierwszym powtórzeniu, nie przy dziesiątym, ale przy 10000 już tak - brałeś już to pod uwagę?
Tego typu błędy, nawet jeśli je mam, w moim przypadku nie mają znaczenia.
I tak i tak używam liczb losowych. Niedokładności obliczeń na typie FLOAT
u mnie są traktowane jako dodatkowe źródło losowości. Uczenie szachów
to inne zagadnienie niż np. symulowanie ruchu planet układu słonecznego.
W przypadku ruchu planet gdy obliczymy trochę niedokładnie położenie np.
Jowisza, to w następnej iteracji jako punkt wyjścia używam złej pozycji
początkowej. W następnej znowu mamy niedokładność obliczeń + błąd
z poprzedniej iteracji. Gdy używamy prostego schematu np. Eulera to
dokładność typu DOUBLE wyczerpuje się bardzo szybko, nie wiem czy
schematem Eulera da się układ słoneczny symulować chociaż na
tydzień w przód.
Tak czy inaczej powyższe problemy nie dotyczą uczenia szachów. Nie
dotyczą żadnej z metod które stosowałem.
Gdy używamy metody bazującej na aproksymacji funkcji nieliniowej, a
jako metodę uczenia weźmiemy jakąś odmianę algorytmu zmiennej
metryki, to owszem taki problem występuje. W hesjanie nawarstwiają
się błędy w analogiczny sposób jak w przypadku symulowania układu
słonecznego. Problem te jednak rozwiązuje się bardzo prosto - metodę
resetuje się co pewną ilość iteracji. I tak i tak trzeba ją zresetować z
innych powodów.
Problemy związane z uczeniem programu szachowego są takie same
jak problemy z symulacjami MC. Ilość symulacji rośnie wykładniczo
względem uzyskiwanej dokładności.
Zobacz taki programik:
int main(int argc, char *argv[]) {
double moneta[] = {0,0};
srand(234);
for( int i=0 ; i<10000 ; i++ )
moneta[rand()%2]++;
printf("szansa na reszkę = %lf\n",moneta[0]/(moneta[0]+moneta[1]));
return 0;
}
Program ma robić symulację rzutu uczciwą monetą. Wykonuje
10tys rzutów i sprawdza czy wyszło pół na pół. Na kompilatorze
którego w tej chwili używam wychodzi że szansa na reszkę
wynosi 50.1%.
Z programem szachowym jest tak samo jak z monetą (plus kilka
dodatkowych problemów). Choć są dwa programy które grają
z taką samą siłą i choć rozegrano 10tys gier to wychodzi że
jeden z nich wygrał, bo np. zdobył 50.1% punktów. Choć w
celu testu przeprowadzono aż 10tys gier to wynik nie jest
dokładny. W trakcie uczenia od czasu do czasu się zdarza że
program słabszy wygrywa z silniejszym dlatego że ten
słabszy miał więcej szczęścia. Jedyne co można zrobić aby
temu problemowi zapobiegać to rozgrywać setki milionów gier.
Powyższy program dla 100mln symulacji daje wynik:
50.003764%, więc znacznie dokładniejszy niż 50.1%.
Dla miliarda symulacji mam 50.001306%. Czas symulacji
wydłużył się z 10tys do 1mld (100tys razy) a dokładność
przesunęła się tylko o dwa miejsca po przecinku.
Powyżej pisałem że jedyne co można zrobić to zwiększać
ilość symulacji albo gier. Nie jest to w 100% prawdą. Jak
się okazuje można jeszcze zastosować metodę uczenia
odporną na chwilowe błędy. Wszystko wskazuje na to że
metoda magnetyczna ma taki potencjał. W metodzie
magnetycznej wystarczy że lepszy program wygrywa z
pewnym prawdopodobieństwem i już obserwuje się postęp.
Za to metoda magnetyczna sprawia inne problemy...
Ponad to z szachami są dodatkowe problemy względem
symulacji monety. Chodzi o to że relacja "jest lepszy"
często nie jest przechodnia. Czyli program A wygrywa
z programem B, program B wygrywa z programem C, a
program C (o dziwo) wygrywa z programem A. Czyli jeśli w
uczeniu program będzie grał sam ze sobą, to jest duże
ryzyko że dostosuje się do gry z samym sobą. Wielokrotnie
obserwowałem jak mój program uczył się grać z niby
reprezentatywnym zestawem przeciwników, bo brałem
do turniejów aż 30 programów różnych autorów. Potem te
30 wymieniałem na 30 jeszcze innych i grał gorzej niż
przed uczeniem. Raczej nie chodzi o błąd, po prostu nauczył
się grać dobrze tylko z określonymi przeciwnikami.
Mój eksperyment z wczoraj:
Wziąłem jedną wersję programu. Wywaliłem z niej pewną cechę i
przepisałem od nowa. Zrobiłem turniej i takie wyniki:
bearded46_old 240 62.29%
bearded64 240 37.71%
240 gier, stara wersja zdobyła 62% punktów, nowa 37. Jak widać
nowa wersja jest gorsza. Ale wniosków nie można wyciągać
pochopnie, więc parametry nowej cechy poddaję uczeniu.
Uczenie polega na tym, że 100 razy dodaję małe losowe wartości
do parametrów i robię turniej. Wygrany program przechodzi dalej i
znowu do wygranego małe losowe wartości, znowu turniej itd. W sumie
wykonałem 100 iteracji. Po stu iteracjach znowu kontrolny turniej ze
starą wersją:
bearded46_old 240 66.88%
bearded64 240 33.12%
No i mamy niespodziankę, po uczeniu program spadł z 37% do 33%.
Znowu myślę że nie ma co pochopnie wyciągać wniosków i daję
jeszcze 100 iteracji uczących:
bearded46_old 240 66.25%
bearded64 240 33.75%
Widać że minimalnie się polepszył, wiec jeszcze 100 iteracji uczących:
bearded46_old 240 67.08%
bearded64 240 32.92%
Tym razem spadł.. no ale to nic, jeszcze raz 100 iteracji uczących i jeszcze,
w sumie w turnieju kontrolnym wyglądało to tak:
37.71%
33.12%
33.75%
32.92%
33.33%
32.50%
32.71%
31.25%
30.21%
28.96%
31.25%
30.83%
Nie widać postępu. Program nigdy nie przekroczył początkowego 37.71%. Prawdopodobnie
jest jak mówiłem. Po pierwsze jest za mało gier aby wyłonić silniejszy program, a po drugie
wyłania się ten który dostosował się do specyficznych warunków.
Po tym zrobiłem dwie dwie tury po 100 iteracji metodą magnetyczną. Wyniki takie:
32.71%
31.46%
Czyli po pierwszej turze się odbił od poprzednich 30.83% i wskoczył na niecałe 33% - ładnie.
Ale po drugiej znowu spadł do 31.46%. Trzecia tura (z innymi parametrami) właśnie trwa...
Pozdrawiam
Cytat: krzyszp w 22 Czerwiec 2012, 18:54
Zapominasz, że my pomagamy, bo chcemy - a czasem brak rezultatów jest tak samo ważny, jak te rezultaty...
W końcu, wyeliminowanie jakiś metod, to skrócenie drogi do lepszych rezultatów :)
Ja to wiem ;-) Ale gdy np zawarłem w swojej pracy mgr rozdział "algorytm genetyczny
nie jest efektywny" to musiałem go wrzucić że niby piszę bzdury ;-)
A tak poważnie to jednak chcę uruchomić coś co będzie miało jednocześnie duży
potencjał i szansę na zrobienie postępu jeszcze w tym wieku :)
Pozdrawiam
Cytat: mariotti w 22 Czerwiec 2012, 19:25
Nie widać postępu. Program nigdy nie przekroczył początkowego 37.71%. Prawdopodobnie
jest jak mówiłem. Po pierwsze jest za mało gier aby wyłonić silniejszy program, a po drugie
wyłania się ten który dostosował się do specyficznych warunków.
Może program/metoda jest dobry, ale dałeś mu złe warunki do rozwoju?
W toku ewolucji gatunek musi również konkurować ze swoimi krewniakami, może każda nowa wersja powinna również grać turniej ze starymi wersjami? Daje to o wiele dłuższą metodę selekcji, ale być może bardziej skuteczną.
Cytat: kotfryc w 22 Czerwiec 2012, 20:22
Cytat: mariotti w 22 Czerwiec 2012, 19:25
Nie widać postępu. Program nigdy nie przekroczył początkowego 37.71%. Prawdopodobnie
jest jak mówiłem. Po pierwsze jest za mało gier aby wyłonić silniejszy program, a po drugie
wyłania się ten który dostosował się do specyficznych warunków.
Może program/metoda jest dobry, ale dałeś mu złe warunki do rozwoju?
W toku ewolucji gatunek musi również konkurować ze swoimi krewniakami, może każda nowa wersja powinna również grać turniej ze starymi wersjami? Daje to o wiele dłuższą metodę selekcji, ale być może bardziej skuteczną.
Zgadzam się całkowicie, właściwie to o tym samym pisałem. Problem w tym, że na dużo
prostej grze niż szachy wyszło mi że owych konkurentów (obojętnie jaka jest ich analogia
do tych z ewolucji naturalnej) musi być minimum 5tys. Nie da rady tego policzyć
nawet cała sieć BOINC :)
Pozdrawiam
Cytat: mariotti w 22 Czerwiec 2012, 18:21
Cytat: goofyx w 22 Czerwiec 2012, 08:50
A nie możesz przykładowo uruchomić projektu boinc w którym będzie wiele aplikacji uczących się przez jakiś okres lub przez pewną liczbę gier. Wtedy możesz porównywać wyniki poszczególnych algorytmów po np.: 1000 gier co przy np.: 1000 hostów/wątków rozegra się w ciągu doby i wybrać do dalszej nauki te które dają jakieś najlepsze wyniki.
Jestem prawie pewny jakie wymagania mają poszczególne metody i jakie mogą
dać wyniki. Nie ma czego sprawdzać. Jeśli mam zawracać gitarę wolontariuszom
to potem z tego powinny być dobre wyniki.
1. skoro to wiesz to po co chcesz projekt boinc? <- bez urazy
2. pozwól aby to wolontariusze zdecydowali czy podoba im się twój projekt czy nie
3. ja osobiście z chęcią liczyłbym projekt taki jak twój, ale a możliwością porównania poszczególnych algorytmów <- ale to twoja decyzja
4. co znaczy: "dobre wyniki"? jeśli chodzi ci o algorytm który będzie grał najlepiej to ok <- ale to też możesz wrzucić do gry kilka algorytmów i na podstawie porównania określić, że dany algorytm jest najlepszy. Ludziom się to spodoba, że widzą różnice między algorytmem A i B <- może nawet ktoś się tym zainteresuje i znajdzie jakieś nowe rozwiązanie tego problemu. W przeciwnym wypadku twój projekt będzie kolejnym, w którym będzie się walczyć o dobrą pozycję :(
Cytat: goofyx w 23 Czerwiec 2012, 17:05
1. skoro to wiesz to po co chcesz projekt boinc? <- bez urazy
Wiem w odniesieniu do kilku metod które testowałem. Nie oznacza to że
znam wszystkie i że nie istnieje lepsza metoda (nie oznacza to też że się
nie mylę w jakimś momencie).
Zobacz poniższy fragment kodu:
https://github.com/mcostalba/Stockfish/blob/master/src/search.cpp (https://github.com/mcostalba/Stockfish/blob/master/src/search.cpp)
Wiersze od 1324 do 1362. Tamta procedura sprawdza czy szach jest
niebezpieczny, czy może da się łatwo i bez strat uciec królem. Zastanawiam
się jakiej użyć metody uczenia aby po latach obliczeń miała chociaż szanse
wygenerować coś równoważnego z takim kodem. Co do tych metod które
znam obawiam się że sobie nie poradzą.
Cytat: goofyx w 23 Czerwiec 2012, 17:05
2. pozwól aby to wolontariusze zdecydowali czy podoba im się twój projekt czy nie
Zrobię raz byle co, sparzą się i potem gdy zrobię coś lepszego nie będą już chcieli?
Cytat: goofyx w 23 Czerwiec 2012, 17:05
3. ja osobiście z chęcią liczyłbym projekt taki jak twój, ale a możliwością porównania poszczególnych algorytmów <- ale to twoja decyzja
Właśnie jakbym użył algorytmów które teraz znam i o których wiem że dają jakiś
postęp to by tak ładnie nie wyglądało. Nie mam nawet pomysłu jak efektownie
zaprezentować wyniki. To by było mniej/więcej tak, że zmieniam kilka drobiazgów w
programie, potem około 1 tyg obliczeń na 50-100 komputerach i program gra albo o
0.2% lepiej, albo o 1-2% gorzej. Potem znowu jakaś zmiana, test i tak w kółko.
Program nie byłby "sztucznie inteligentny", tylko sieć obliczeń by pomagała
zweryfikować pomysły programisty, albo by testowała kilka rozwiązań w pobliżu
owych pomysłów.
Fajnie by było wrzucić coś do sieci co by zupełne samo się rozwijało i powiedzmy po
milionie lat obliczeń grałoby jak inne dobre programy.
Cytat: goofyx w 23 Czerwiec 2012, 17:05
4. co znaczy: "dobre wyniki"? jeśli chodzi ci o algorytm który będzie grał najlepiej to ok <- ale to też możesz wrzucić do gry kilka algorytmów i na podstawie porównania określić, że dany algorytm jest najlepszy.
Oj oj... to jest tak jak z tą monetą. Algorytm może dać dobry wynik dlatego
że miał szczęście. Każdy algorytm trzeba uruchomić z różnymi parametrami chociaż
10tys razy aby wyrobić sobie pogląd. Zobacz w jaki sposób dobierałem parametry
metody magnetycznej
http://pastebin.com/LL9iJi1n (http://pastebin.com/LL9iJi1n)
Ten program był uruchamiany całe dnie z różnymi parametrami dla różnych zarodków
liczb losowych. Po tym miałem mniej/więcej wyrobiony pogląd jaka konfiguracja
jest dobra i używałem takiej samej do szachów.
Cytat: goofyx w 23 Czerwiec 2012, 17:05
Ludziom się to spodoba, że widzą różnice między algorytmem A i B <- może nawet ktoś się tym zainteresuje i znajdzie jakieś nowe rozwiązanie tego problemu. W przeciwnym wypadku twój projekt będzie kolejnym, w którym będzie się walczyć o dobrą pozycję :(
Trzeba się dobrze zastanowić.
Pozdrawiam
To teraz całkowicie nie wiem:
1. o co ci chodzi?
2. co chcesz osiągnąć?
3. jaki masz cel?
Według mnie strasznie to komplikujesz, albo ja jestem za głupi żeby zrozumieć <- z posta na post coraz mniej kapuje co do tego co chciałbyś uzyskać w tym projekcie.
Piszesz, że zmiana parametru w algorytmie i trzeba tydzień obliczeń <- czy to źle?? To byłoby właśnie świetne. Uruchomić X algorytmów dla Y gier z Z ilością różnych parametrów <- a potem zrobić porównania, że X1 przy Y1 najlepiej uczył się dla Z1.
A po za tym co znaczy dla ciebie tydzień obliczeń? Czy to jest 7 dni pracy procesora? Jeśli tak to ja przerabiam na swoich maszynach średnio 15-20 dni pracy CPU w ciągu 24h. Więc twój tydzień obliczeń łykam w kilka godzin. A to tylko ja.
Jeśli będziesz miał w projekcie 1000 komputerów (co na spokojnie jest do osiągnięcia) to będziesz przerabiał ok.600h czasu CPU w ciągu doby <- więc twój tydzień możesz mieć przeliczony w 5-10 minut.
Mógłbyś jasno i zrozumiale (jak dla mnie) napisać w kilku słowach do czego i jak chcesz wykorzystać platformę boinc?
Ja naprawdę nie jestem złośliwy <- ale tak jak pisałem im dłużej czytam ten wątek tym mniej sensu w twoim projekcie boinc widzę.
sory za drugi post
ps.: ja osobiście chciałbym i myślę nad projektem boinc w którym ten sam problem będę mógł obliczać za pomocą kilku algorytmów (kilku pod projektów) aby w rezultacie mieć porównanie co i w jakich warunkach sprawdza się lepiej lub gorzej.
Cytat
Uczenie polega na tym, że 100 razy dodaję małe losowe wartości
do parametrów i robię turniej.
37.71%
33.12%
33.75%
32.92%
33.33%
32.50%
32.71%
31.25%
30.21%
28.96%
31.25%
30.83%
Nie widać postępu. Program nigdy nie przekroczył początkowego 37.71%. Prawdopodobnie
jest jak mówiłem. Po pierwsze jest za mało gier aby wyłonić silniejszy program, a po drugie
wyłania się ten który dostosował się do specyficznych warunków.
jednego nie kumam jeśli za każdym razem wartości są losowe to jak można sprawdzić czy program się uczy, jeśli zagramy 100 razy a potem raz jeszcze 100 te same partie i kolejny raz 100 tych samych partii to stwierdzimy że program się uczy lub nie jednoznacznie. Przy milionach możliwych rozgrywek za każdym razem innych losowych chyba trudno to stwierdzić.
Cytat: goofyx w 23 Czerwiec 2012, 22:59
To teraz całkowicie nie wiem:
1. o co ci chodzi?
2. co chcesz osiągnąć?
3. jaki masz cel?
Według mnie strasznie to komplikujesz, albo ja jestem za głupi żeby zrozumieć <- z posta na post coraz mniej kapuje co do tego co chciałbyś uzyskać w tym projekcie.
Piszesz, że zmiana parametru w algorytmie i trzeba tydzień obliczeń <- czy to źle?? To byłoby właśnie świetne. Uruchomić X algorytmów dla Y gier z Z ilością różnych parametrów <- a potem zrobić porównania, że X1 przy Y1 najlepiej uczył się dla Z1.
A po za tym co znaczy dla ciebie tydzień obliczeń? Czy to jest 7 dni pracy procesora? Jeśli tak to ja przerabiam na swoich maszynach średnio 15-20 dni pracy CPU w ciągu 24h. Więc twój tydzień obliczeń łykam w kilka godzin. A to tylko ja.
Jeśli będziesz miał w projekcie 1000 komputerów (co na spokojnie jest do osiągnięcia) to będziesz przerabiał ok.600h czasu CPU w ciągu doby <- więc twój tydzień możesz mieć przeliczony w 5-10 minut.
Mógłbyś jasno i zrozumiale (jak dla mnie) napisać w kilku słowach do czego i jak chcesz wykorzystać platformę boinc?
Ja naprawdę nie jestem złośliwy <- ale tak jak pisałem im dłużej czytam ten wątek tym mniej sensu w twoim projekcie boinc widzę.
To wróćmy do podstaw :) Mój cel ma bardzo prosto sformułowany:
1) chcę zrobić mocny program do gry w szachy
2) najlepiej jakby ten program był samouczący.
Cel jest prosto sformułowany, ale strasznie trudny w realizacji.
Trudność ma swoje dwa źródła:
1) po pierwsze trudno jest zaimplementować coś takiego, implementacja
wymaga czasu, spokoju, opracowania testów czy nie ma błędów, w
końcu przeportowania na wiele platform - każdy wolontariusz ma inny system i
procesor.
2) nawet jak w implementację włożę masę pracy, wysiłku, nie popełnię
żadnych błędów, a wolontariusze będą liczyli przez całe lata to nie
ma gwarancji na sukcesy.
Jakby program był w pełni samouczący, to moim zdaniem byłaby super
marchewka dla wolontariuszy. Program byłby jak dziecko. Na początku
kompletnie nie umie grać. Potem uczy się i uczy, gra coraz lepiej, aż
w końcu pokonuje wszystkie najlepsze programy na świecie. Można
do tego celu użyć algorytmu genetycznego. Problem w tym że jak
oszacowuję ilość gier potrzebnych do takiego zadania to wychodzi mi
liczba która ma całe
miliony cyfr. Bez względu na to co chcę, nie
damy rady czegoś takiego policzyć, nawet jakbyśmy całą galaktykę
przerobili na procesory - chociaż nie wiem co jest w czarnych dziurach ;-)
Są dwie inne możliwości. Pierwsza taka aby zastanowić się nad
lepszym algorytmem niż genetyczny, takim żeby wymagał mniej
gier, a miał podobny potencjał. Druga możliwość jest taka aby
użyć szybszego algorytmu, ale o znacznych ograniczeniach. Obecnie
pracuję/myślę nad jedną i drugą możliwością.
Przykładowo mam taki pomysł na zmniejszenie ilości gier.
1) Bierzemy jakiś program.
2) Mutujemy go tak jak w algorytmie genetycznym, więc mamy już dwa programy.
3) Z programów całkowicie usuwamy czynnik losowy, czyli choćby zagrały
milion gier to każda będzie wyglądała tak samo.
4) Bierzemy np. 100 'losowych' układów i gramy 200 gier, tak że z tego
samego układu gramy dwie gry, raz zaczyna jeden program, drugi raz
drugi.
Pomysł wydaje się genialny, ma same zalety:
1) Dzięki temu że usunęliśmy losowość z programów, nie mamy problemu z dokładnym
pomiarem siły gry. Nie ma zaburzeń losowych, więc niby nie trzeba rozgrywać milionów gier
w celu uzyskania dokładnego wyniku.
2) Dzięki temu że programy grają dwa razy z tego samego układu, to przed każdym
stoi zadanie na identycznym poziomie trudności, nie ma niczego co by sztucznie
wpływało na korzyść jednego z programu
3) Dzięki temu że użyliśmy 100 'losowych' układów unikamy dostosowania programu
do gry w jakiś specyficznych warunkach, program gra różnorodne gry, tak jakby
był czynnik losowy.
Gdy to obmyśliłem to przeżyłem wręcz uniesienie :) Ale niestety praktyka pokazuje co
innego. Teoretycznie wydaje się że wszystko zostało dopracowane, ale w praktyce po
takim uczeniu program wcale nie robi postępów. Zastanawiam co jest powodem problemów,
niby pomysł jest dobry, a jednak nie działa. Prawdopodobnie program nauczył się grać tylko w
jakiś konkretnych warunkach, a ogólnie gra nawet gorzej.
Nie chcę takich niedopracowanych pomysłów wrzucać do sieci, to jest i problem dla mnie i
dla wolontariuszy. Dla mnie to wymaga kilkadziesiąt albo kilkaset godzin pracy nad
implementacją, a dla wolontariuszy poświęcenia komputerów. Trzeba zrobić coś co będzie
dawało sensowne wyniki.
Pozdrawiam
Cytat: legis w 23 Czerwiec 2012, 23:23
jednego nie kumam jeśli za każdym razem wartości są losowe to jak można sprawdzić czy program się uczy,
Sprawdzić najlepiej można przez rozegranie wielu gier na różnorodny czas, z różnorodnymi
przeciwnikami, z różnorodnym czynnikiem losowym, z różnorodną książką debiutową...
Cytat: legis w 23 Czerwiec 2012, 23:23
jeśli zagramy 100 razy a potem raz jeszcze 100 te same partie i kolejny raz 100 tych samych partii to stwierdzimy że program się uczy lub nie jednoznacznie.
Zależy. Jeśli wyeliminujemy czynnik losowy i gramy zawsze w takich samych warunkach to
owszem można stwierdzić jednoznacznie czy się uczy (chociaż gry są za każdym razem inne,
zmieniają się z powodu uczenia). Natomiast gdy testujemy w warunkach innych niż było
uczenie, to często okazuje się że innych warunkach gra gorzej.
Cytat: legis w 23 Czerwiec 2012, 23:23
Przy milionach możliwych rozgrywek za każdym razem innych losowych chyba trudno to stwierdzić.
Jeśli rzucisz trzy razy monetą i trzy razy wypadnie orzeł to nie można wnioskować że orzeł
wypada zawsze. Dlaczego nie można? Dlatego że było za mało rzutów. Dopiero jakbyś rzucił
nią miliony razy i zawsze by wypadł orzeł (albo chociaż częściej) to byś mógł podejrzewać
jakąś prawidłowość. Rozgrywając miliony gier szuka się prawidłowości pt "gra lepiej".
Pozdrawiam
Może jest już za późno dla mnie na logiczne myślenie, ale nie w twoim poście nie wyczytałem odpowiedzi na moje pytania.
1. hmm, czyli wolontariusze mają liczyć genialny algorytm uczący który sobie wybierzesz i przygotujesz? Piszesz, że przetestowałeś dziesiątki algorytmów, proponujesz kolejne dziesiątki <- to na czym w tej chwili stoisz? Chodzi mi o etap projektu <- projektujesz na papierze, piszesz program czy uruchamiasz projekt boinc?
2. ilość gier ma milion cyfr? <- a ile taka jedna gra według ciebie może trwać 5 minut, 5 godzin, 5 dni, a może miesięcy czy lat? Może w ten sposób mi napisz żebym miał pojęcie o czasie pracy jaki jest potrzebny dla np.: jednego procesora z jednym wątkiem. Czy taki procesor potrzebuje np.: 100 lat żeby ci pomóc?
Cytat: goofyx w 24 Czerwiec 2012, 01:39
Może jest już za późno dla mnie na logiczne myślenie, ale nie w twoim poście nie wyczytałem odpowiedzi na moje pytania.
1. hmm, czyli wolontariusze mają liczyć genialny algorytm uczący który sobie wybierzesz i przygotujesz? Piszesz, że przetestowałeś dziesiątki algorytmów, proponujesz kolejne dziesiątki <- to na czym w tej chwili stoisz? Chodzi mi o etap projektu <- projektujesz na papierze, piszesz program czy uruchamiasz projekt boinc?
2. ilość gier ma milion cyfr? <- a ile taka jedna gra według ciebie może trwać 5 minut, 5 godzin, 5 dni, a może miesięcy czy lat? Może w ten sposób mi napisz żebym miał pojęcie o czasie pracy jaki jest potrzebny dla np.: jednego procesora z jednym wątkiem. Czy taki procesor potrzebuje np.: 100 lat żeby ci pomóc?
Hmmmm
1. Piszę programy i testuję na komputerach które mam w domu.
2. Gdy rozmyślam nad algorytmami to także używam kartki i ołówka. Ale nie wiem
dlaczego chcesz to wiedzieć.
3. Stoję na tym o czym pisałem, czyli myślę co uruchomić w BOINC. Idę w
tamtych dwóch kierunkach o których pisałem:
a) ogólny algorytm (np. genetyczny )
b) algorytm specjalistyczny
ad 3.a) Wszystko co wiem na ten temat, wskazuje na to że nawet jakby użyć miliona
procesorów i każdy by liczył milion lat to tego zadania nawet by nie rozpoczęły.
Ale to nie znaczy że jutro nie będę miał na ten temat innego zdania i nie będę
wiedział czegoś nowego - jak pisałem, pracuję nad tym.
ad 3.b) mam zaimplementowane i sprawdzone na domowych komputerach dwie
metody które przynosiły (w swoich ograniczeniach) dobre wyniki. Jedna
metoda to magnetyczna, druga to aproksymacja funkcji. Ponadto przez
ostatnie 2-3 tygodnie sprawdzałem 2 kolejne metody, też zaimplementowałem i
uruchamiam na domowych komputerach. Te dwie metody przynoszą dziwne
rezultaty, jeszcze nie wiem co o nich myśleć.
4. Dla BOINC nic gotowego nie mam, dotarłem gdzieś do początkowego etapu
konfigurowania serwera i kompilacji przykładowych programów. Czyli mam kilka wersji
programu szachowego, kilkanaście programów do ich uczenia i uruchamiam to na
domowych komputerach.
Pytasz o czas potrzebny do obliczeń. Każda metoda ma inne wymagania.
Pracuję głównie nad tym, aby w rozsądnym czasie zapewnić lepsze
rezultaty. Rozsądny czas to dla mnie to sto lat ciągłych obliczeń na 10tys
rdzeni.
Algorytm genetyczny wymaga koszmarnego czasu, nawet wszystkie komputery
z sieci BOINC nie dadzą rady. Jedna iteracja ucząca trwa powiedzmy 50-200 lat
obliczeń na jednym rdzeniu. Iteracji trzeba zrobić milion aby
ledwo rozpocząć. Mowa
tutaj o
naiwnym algorytmie genetycznym. Jedną z rzeczy nad jaką pracuję
to właśnie uzdatnienie naiwnego algorytmu genetycznego. Jak na razie nie mam
konkretnych (tych uzdatnionych) pomysłów, a tym bardziej implementacji.
Metoda magnetyczna na jednym komputerze (sześć rdzeni) dawała mi ładne wyniki
np. po kilku miesiącach obliczeń. Niestety metoda magnetyczna ma pewne ograniczenia i
ich nawet teoretycznie nie może przeskoczyć. Uzyskamy dzięki niej przeciętny
program, nie wiem czy warto się w to angażować. Ponad to metoda magnetyczna
ciężko się zrównolegla. Użycie więcej niż 50 komputerów dużo nie daje.
Metody bazujące na aproksymacji funkcji dawały mi ciekawe wyniki już po kilku godzinach
obliczeń, niestety mają jeszcze większe ograniczenia niż metoda magnetyczna i są
mniej dokładne od niej. Kilka postów wcześniej pisałem o tym jak można tą metodę
dostosować do obliczeń rozproszonych, jednak cały czas nie przeskakując ograniczeń.
Czyli tak w dwóch słowach, mam kilka takich rzeczy które działają szybko, ale dają
słabe wynik. Boję się ich wrzucać do boinc dlatego właśnie że dają słabe wyniki.
Mam też coś co daje dobre wyniki, ale wymaga koszmarnej mocy obliczeniowej, tego
boję się wrzucać do BOINC właśnie dlatego że się nie doczekamy rezultatów.
Trzeba czegoś co działa szybko i skutecznie ;-)
Pozdrawiam
Cytat: goofyx w 24 Czerwiec 2012, 01:39
2. ilość gier ma milion cyfr? <- a ile taka jedna gra według ciebie może trwać 5 minut, 5 godzin, 5 dni, a może miesięcy czy lat? Może w ten sposób mi napisz żebym miał pojęcie o czasie pracy jaki jest potrzebny dla np.: jednego procesora z jednym wątkiem. Czy taki procesor potrzebuje np.: 100 lat żeby ci pomóc?
Nie 100 lat, nie 1 000 lat ani też 10 000 lat.
Bez względu na procesory (we współczesnym rozumieniu) potrzebuje więcej niż dotychczasowy czas życia wszechświata. Oczywiście dla osiągnięcia ideału.
ad <- 1
A może wrzucisz te programy jako pod projekty w swoim projekcie boinc <- możesz wtedy podać linka na forum i kilku ludzi na pewno ci pomoże w obliczeniach <- mam do dyspozycji tak jak pisałem ok.20 dni pracy CPU na dobę więc z chęcią dorzucę coś od siebie. Po co masz czekać 2-3 tygodnie na wyniki skoro można to przerobić w kilka godzin lub dni. Pierwsze możesz dopuścić do projektu np.: 20-25 osób i sam zobaczysz czy ich wkład coś dla ciebie daje i wtedy możesz wyznaczyć sobie kierunek dalszego rozwoju projektu. Przynajmniej ja bym tak zrobił gdybym miał gotowy pomysł na projekt boinc
ad <- 2
używanie kartki papieru jest jak najbardziej w porządku <- mnie bardziej chodziło na czym rzeczywiście stoisz
ad <- 3a
warto kiedyś w ogóle zacząć tzn.: wrzuć algorytm jako pod projekt i niech żyje własnym życiem i niech zbiera wyniki <- może dzięki temu po np.:2-3 miesiącach pozwolili ci to opracować coś lepszego. Gdyby każdy miał podejście, że projekt boinc potrzebuje XXXX lat na liczenie i się poddawał to nie byłoby żadnych projektów.
Przykładowo projekty szukania liczb pierwszych chyba nigdy się nie skończą cały czas szukają następnych liczb. Albo Seti, który ma nieograniczony czas działania bo oni raczej będą szukać sygnałów radiowych przez następne pokolenia.
Nie warto stać w miejscu skoro w łatwy sposób możesz wykorzystać potężny potencjał mocy obliczeniowej boinc.
ad <- 3b
to co wyżej, aż do znudzenia <- wrzuć jako pod projekty. Teraz masz dziwne wyniki, a jak przeliczy to 1000 procków to możesz dojść do innych rezultatów
ad <- 4
może się mylę, ale może teraz skup się nad uruchomieniem projektu i przerzuceniem tych różnych wersji programów i algorytmów właśnie do niego
ad <- 5
"sto lat ciągłych obliczeń na 10tyś rdzeni" <- ciężko to nazwać rozsądnym czasem ;) ale może warto kiedyś rozpocząć kiedyś tą walkę, a może się okazać że zakończysz obliczenia jeszcze za swojego życia
Cytat: Rysiu w 24 Czerwiec 2012, 02:56
Cytat: goofyx w 24 Czerwiec 2012, 01:39
2. ilość gier ma milion cyfr? <- a ile taka jedna gra według ciebie może trwać 5 minut, 5 godzin, 5 dni, a może miesięcy czy lat? Może w ten sposób mi napisz żebym miał pojęcie o czasie pracy jaki jest potrzebny dla np.: jednego procesora z jednym wątkiem. Czy taki procesor potrzebuje np.: 100 lat żeby ci pomóc?
Nie 100 lat, nie 1 000 lat ani też 10 000 lat.
Bez względu na procesory (we współczesnym rozumieniu) potrzebuje więcej niż dotychczasowy czas życia wszechświata. Oczywiście dla osiągnięcia ideału.
w porządku ja to naprawdę rozumiem, ale jeśli nie rozpoczniesz obliczeń to będziesz stał w miejscu <- może warto zrobić pierwszy krok na tej długiej drodze.
tak jak pisałem może dzięki wynikom za kilka miesięcy ktoś wpadnie na genialny pomysł, który skróci czas obliczeń (lub czas uczenia się) nawet o 50%.
Cytat: goofyx w 24 Czerwiec 2012, 03:03
ad <- 1
A może wrzucisz te programy jako pod projekty w swoim projekcie boinc <- możesz wtedy podać linka na forum i kilku ludzi na pewno ci pomoże w obliczeniach <- mam do dyspozycji tak jak pisałem ok.20 dni pracy CPU na dobę więc z chęcią dorzucę coś od siebie. Po co masz czekać 2-3 tygodnie na wyniki skoro można to przerobić w kilka godzin lub dni. Pierwsze możesz dopuścić do projektu np.: 20-25 osób i sam zobaczysz czy ich wkład coś dla ciebie daje i wtedy możesz wyznaczyć sobie kierunek dalszego rozwoju projektu. Przynajmniej ja bym tak zrobił gdybym miał gotowy pomysł na projekt boinc
Niby mogę jakiś projekt wrzucić, ale jeden, bo na wszystkie to bym potrzebował ze 3 lata :)
Można sieć BOINC potraktować jako źródło danych uczących, a żeby było w tym trochę tego
całego kolorytu, to potem danymi można karmić sztuczną sieć neuronową. A masz Linuxa-64bit
do obliczeń? :D Nie wiem czy będzie mi się chciało portować przeciętny program na wszystkie
platformy. Na takim projekcie powinniśmy zaobserwować proces uczenia. Program zacznie
od zera, będzie wykonywał przypadkowe ruchy jak dziecko. Potem będzie grał lepiej, niestety
gdy robiłem wcześniej takie eksperymenty, to nigdy nie osiągał rewelacyjnego poziomu. Co
gorsza, w miarę uczenia spadała umiejętność gry. Swoje optimum osiągał gdzieś pomiędzy
początkiem a końcem, nigdy w tej metodzie nie zaobserwowałem stabilnego, ciągłego
wzrostu.
Cytat: goofyx w 24 Czerwiec 2012, 03:03
ad <- 3a
warto kiedyś w ogóle zacząć tzn.: wrzuć algorytm jako pod projekt i niech żyje własnym życiem i niech zbiera wyniki <- może dzięki temu po np.:2-3 miesiącach pozwolili ci to opracować coś lepszego. Gdyby każdy miał podejście, że projekt boinc potrzebuje XXXX lat na liczenie i się poddawał to nie byłoby żadnych projektów.
Przykładowo projekty szukania liczb pierwszych chyba nigdy się nie skończą cały czas szukają następnych liczb. Albo Seti, który ma nieograniczony czas działania bo oni raczej będą szukać sygnałów radiowych przez następne pokolenia.
Nie warto stać w miejscu skoro w łatwy sposób możesz wykorzystać potężny potencjał mocy obliczeniowej boinc.
Na pewno masz rację co do tego że inne projekty też są zaplanowane na ogromną ilość lat.
Cytat: goofyx w 24 Czerwiec 2012, 03:03
ad <- 3b
to co wyżej, aż do znudzenia <- wrzuć jako pod projekty. Teraz masz dziwne wyniki, a jak przeliczy to 1000 procków to możesz dojść do innych rezultatów
By musiał mieć dobre (reprezentatywne) dane uczące. Zwiększanie ilości danych nie
zawsze oznacza że będą bardziej reprezentatywne. Może zamiast tracić czas na
wrzucanie projektu do sieci, lepiej jednak się zastanowić jak pozyskać reprezentatywny
zbiór danych?
Cytat: goofyx w 24 Czerwiec 2012, 03:03
ad <- 4
może się mylę, ale może teraz skup się nad uruchomieniem projektu i przerzuceniem tych różnych wersji programów i algorytmów właśnie do niego
Niestety możesz się mylić. Wielkie rzeczy dzieją się dzięki przemyśleniom, a komputery
to tylko szybkie liczydła. Niemniej można coś wrzucić tak dla hecy ;-)
Cytat: goofyx w 24 Czerwiec 2012, 03:03
ad <- 5
"sto lat ciągłych obliczeń na 10tyś rdzeni" <- ciężko to nazwać rozsądnym czasem ;) ale może warto kiedyś rozpocząć kiedyś tą walkę, a może się okazać że zakończysz obliczenia jeszcze za swojego życia
To jest rozsądny czas, pierwsze wyniki byłby po roku. Potem program np.
co 3 lata wskakiwał by na kolejną pozycję w światowym rankingu - marzenia :)
Pozdrawiam
Linux 64-bity to nie problem ;)
1. Spora grupa tutaj obecnych ma masę sprzętu działającego na Lin64 - ja mam z 12 rdzeni :)
2. Z tego co pamiętam i rozumiem (ale mogę kompletnie się mylić) w algorytmach genetycznych progres nie postępuje liniowo wraz z przyrostem ilości obliczeń, ale po osiągnięciu pewnej "masy krytycznej" następuje jakby przejście na wyższy poziom - mylę się?
Cytat: krzyszp w 24 Czerwiec 2012, 12:11
1. Spora grupa tutaj obecnych ma masę sprzętu działającego na Lin64 - ja mam z 12 rdzeni :)
2. Z tego co pamiętam i rozumiem (ale mogę kompletnie się mylić) w algorytmach genetycznych progres nie postępuje liniowo wraz z przyrostem ilości obliczeń, ale po osiągnięciu pewnej "masy krytycznej" następuje jakby przejście na wyższy poziom - mylę się?
ad <- 1
dokładnie :) a nawet jak coś to postawienie Lin64 nawet dla takiego linuksowego beztalencia jak ja nie jest problemem ;) więc to nie jest argument przeciw uruchomieniu projektu do testów
ad <- 2
można to prosto i w miarę szybko sprawdzić właśnie dzięki projektowi boinc <- zaś nudzę ;) ale taka jest prawda
Na twoim miejscu odpalałbym projekt. Najwyżej twym wnioskiem będzie że ten a ten algorytm jest zbyt wymagający dla obliczeń rozproszonych. to też jakaś wiedza. ktos inny kto będzie chciał coś robić w tym temacie będzie wiedział która droga nie iść....
Cytat: Troll81 w 24 Czerwiec 2012, 13:12
Na twoim miejscu odpalałbym projekt. Najwyżej twym wnioskiem będzie że ten a ten algorytm jest zbyt wymagający dla obliczeń rozproszonych. to też jakaś wiedza. ktos inny kto będzie chciał coś robić w tym temacie będzie wiedział która droga nie iść....
no cóż <- nic dodać nic ująć :)
Cytat: krzyszp w 24 Czerwiec 2012, 12:11
1. Spora grupa tutaj obecnych ma masę sprzętu działającego na Lin64 - ja mam z 12 rdzeni :)
2. Z tego co pamiętam i rozumiem (ale mogę kompletnie się mylić) w algorytmach genetycznych progres nie postępuje liniowo wraz z przyrostem ilości obliczeń, ale po osiągnięciu pewnej "masy krytycznej" następuje jakby przejście na wyższy poziom - mylę się?
1) Fajnie że jest Linux64, mam nadzieję że niedługo będziemy testować.
2) Jest masa odmian algorytmów genetycznych/ewolucyjnych. Każdy ma inne właściwości. To o
czym wyżej pisałem że następuje regres po 'przeuczeniu' ma inną naturę. Problemy biorą
się prawdopodobnie z dwóch powodów: zły model i niereprezentatywne dane.
3) Co do stawiania serwera. Rano napisałem aplikacje obliczeniowe. Są gotowe, tylko trzeba
jakoś to wpiąć do BOINC.
Pobrałem na nowo całe źródła wszystkiego, serwerów, przykładów, itd Próbuję utworzyć projekt
zgodnie z tymi wytycznymi:
http://boinc.berkeley.edu/trac/wiki/QuickStart .
Niestety wywala mi błędy że coś nie tak z pythonem:
./make_project --url_base http://bearded_neural.localhost --test_app test
Traceback (most recent call last):
File "./make_project", line 7, in <module>
from Boinc.setup_project import *
File "/home/x/Dokumenty/c/boinc/boinc/py/Boinc/setup_project.py", line 9, in <module>
from Boinc import database, db_mid, configxml, tools
File "/home/x/Dokumenty/c/boinc/boinc/py/Boinc/database.py", line 33, in <module>
from db_base import *
File "/home/x/Dokumenty/c/boinc/boinc/py/Boinc/db_base.py", line 15, in <module>
import MySQLdb, MySQLdb.cursors
ImportError: No module named MySQLdb
Nie bardzo wiem co zrobić.
Pozdrawiam
Pyton zainstalowany? ;)
easy_install mysql-python (mix os)
pip install mysql-python (mix os)
apt-get install python-mysqldb (Linux Ubuntu, ...)
cd /usr/ports/databases/py-MySQLdb && make install clean (FreeBSD)
yum install mysql-python (Linux Fedora, ...)
Cytat: Szopler w 24 Czerwiec 2012, 20:00
Pyton zainstalowany? ;)
easy_install mysql-python (mix os)
pip install mysql-python (mix os)
apt-get install python-mysqldb (Linux Ubuntu, ...)
cd /usr/ports/databases/py-MySQLdb && make install clean (FreeBSD)
yum install mysql-python (Linux Fedora, ...)
Tak, python był, nie było modułu pythona do mysqla. To przebrnąłem, ale
teraz inny problem, tak jakby nie skompilował się program 'boinc/lib/crypt_prog'.
zerknąłem dziś na globalne statystyki WCG
oto wyniki:
Totals:
Members 596,780
Total Run Time 627,942 years!!!!!!!!!!!!!!!!!!!!!!!!!!
Yesterday:
Total Run Time (y:d:h:m:s) 420:175:00:57:50
To tak na zachętę.
P.S. Jak postępy?
Przeczytałam :(
Do autora: Facet ale Ty masz problemy.....
Nagadałeś się sporo ... ale nic nie działa. Nikt nie oczekuje że za pierwszym razem wyjdzie coś extra. Jak nawet nie wyjdzie ... np.
"Metoda magnetyczna na jednym komputerze (sześć rdzeni) dawała mi ładne wyniki
np. po kilku miesiącach obliczeń. Niestety metoda magnetyczna ma pewne ograniczenia i
ich nawet teoretycznie nie może przeskoczyć. Uzyskamy dzięki niej przeciętny
program, nie wiem czy warto się w to angażować. Ponad to metoda magnetyczna
ciężko się zrównolegla. Użycie więcej niż 50 komputerów dużo nie daje. "
To piszesz na stronie projektu że dzięki BOINC potwierdziłeś że powyżej 50 maszyn nie działa i ktoś już bedzie wiedział.
Dodatkowo jeśli stworzyłbyś POLSKI przepis na uruchomienie takiego serwera to być może więcej chętnych uruchomiłoby więcej polskich obliczeń być może robioących wspaniałe rzeczy.
A Ty myślisz że my co robimy. Liczymy za własne pieniądze jakieś rzeczy licząc że komuś to pomoże ... a może się okazać że nikomu ... a szczególnie z naszych najbliższych.
Weź się w garść i napisz w końcu ten serwer, uruchom go i daj GO NAM i INNYM ocenić.
Jak ktos pisał publikacja Twoich działań więcej może pomóc niż być może uzyskane dla Ciebie wyniki.
Przykładowo na Twoją stronę projektu zapląta się ktoś kto chciałby sprawdzić koleny lek na raka ale nie wie jak to potwierdzić. I napisze do Ciebie czy nie napisałbyś takiego programu który sprawdzi 1 000 000 000 000 000 kombinakcji i okaże się że w pierszej 100 000 000 osiągniecie sukces .....
Mam dalej pisać ....
Weź się do roboty :)
Cytat: Ania w 05 Październik 2012, 16:09
Przeczytałam :(
Do autora: Facet ale Ty masz problemy.....
Nagadałeś się sporo ... ale nic nie działa. Nikt nie oczekuje że za pierwszym razem wyjdzie coś extra. Jak nawet nie wyjdzie ... np.
[...]
Weź się do roboty :)
Aniu... aż mi poszło w pięty :)
Posłuchaj uważnie, to nie jest do końca tak, jak myślisz. Można znaleźć łatwo lek na raka, jeśli zbuduje się
komputery o łącznej masie przekraczającej masę znanego wszechświata :) Podobnie (proszę, ostrożnie
z tym słowem, bo to bardzo specyficzny rodzaj podobieństwa ) jest z programami szachowymi. Można łatwo
znaleźć najlepszy program do gry w szachy, ale trzeba zostawić włączony komputer na 9!! lat - to liczba która składa
się z około 2 milionów cyfr. Wiesz już do czego zmierzam? Żadna ilość komputerów (przynajmniej współczesnych)
nie zastąpi możliwości jakie kryją się w ludzkim mózgu. Ludzie przez 10tys lat zrobili więcej, niż mogłyby
zrobić komputery zbudowane z całej materii jaka jest w znanym kosmosie. Dlatego poza mocą obliczeniową
jaką oferują takie sieci jak BOINC, ważna jest jeszcze JAKOŚĆ algorytmów jakie się do niej wrzuca.
Między innymi dlatego pracuję nad czymś lepszym do szachów, bo jeśli się uda, to ktoś, może właśnie naukowiec
szukający leku na raka, podpatrzy jakich użyłem algorytmów i znajdzie lekarstwo nie po 9!! latach obliczeń,
ale po 10 latach :D
Pozdrawiam
a masz jakieś konkretne efekty tych prac poszukiwawczych?
z chęcią przetestujemy dla ciebie <- bo temat nie co umarł a miałeś uruchamiać ileś tam algorytmów do sprawdzenia na platformie boinc.
Cytat: goofyx w 06 Maj 2013, 07:51
a masz jakieś konkretne efekty tych prac poszukiwawczych?
z chęcią przetestujemy dla ciebie <- bo temat nie co umarł a miałeś uruchamiać ileś tam algorytmów do sprawdzenia na platformie boinc.
Pewnie że mam. Np. na tym turnieju:
http://wbec-ridderkerk.nl/html/BayesianElo_ed19.htm
program zajął 86 miejsce. Program wszystkie parametry
dobrał automatycznie.
Problem w tym, że algorytmy jakich używałem do uczenia, nie nadają się z
różnych powodów do BOINC.
Pozdrawiam
Cytat: mariotti w 06 Maj 2013, 08:31
Problem w tym, że algorytmy jakich używałem do uczenia, nie nadają się z
różnych powodów do BOINC.
pisałeś kiedyś że jeśli jest więcej niż X kompów to wyniki są przekłamane, zgadza się?
zawsze możesz ograniczyć ilość userów do rejestracji itp
zawsze jest jakieś rozwiązanie <- ale to już twoja decyzja.
dodatkowo jako fundacja też mamy możliwości pomocy tylko musi to być twoja wola i musi być informacja co potrzebujesz.
ja nikogo do niczego nie mam zamiaru zmuszać <- przedstawiam tylko możliwości.
Cytat: goofyx w 06 Maj 2013, 08:39
pisałeś kiedyś że jeśli jest więcej niż X kompów to wyniki są przekłamane, zgadza się?
Nie pamiętam, w jakim kontekście to było?
Cytat: goofyx w 06 Maj 2013, 08:39
dodatkowo jako fundacja też mamy możliwości pomocy tylko musi to być twoja wola i musi być informacja co potrzebujesz.
Super fajnie, dziękuję z góry. Problem w tym, że algorytmy które znam,
wymagają znacznie więcej komputerów niż jest na całej planecie.
Cytat: goofyx w 06 Maj 2013, 08:39
ja nikogo do niczego nie mam zamiaru zmuszać <- przedstawiam tylko możliwości.
Rozumiem, potrzebny jest jeszcze algorytm... taki co np. co rok obliczeń na 1tys
komputerów sam się nauczy trochę lepiej grać. Opracowanie i implementacja takiego
algorytmu stanowią bardzo trudne zadanie. Spróbuj zaproponować taki algorytm i
przedstaw przesłanki że to będzie w miarę działało - to zrozumiesz też mnie :)
Pozdrawiam
Cytat: mariotti w 06 Maj 2013, 09:25
Cytat: goofyx w 06 Maj 2013, 08:39
dodatkowo jako fundacja też mamy możliwości pomocy tylko musi to być twoja wola i musi być informacja co potrzebujesz.
Super fajnie, dziękuję z góry. Problem w tym, że algorytmy które znam,
wymagają znacznie więcej komputerów niż jest na całej planecie.
no tak, ale od czegoś chyba trzeba zacząć zamiast czekać aż pojawią się komputery kwantowe, które wystarczą na twoje potrzeby.
w przeciwnym wypadku nie byłoby projektów boincowych bo wszyscy czekaliby aż będzie wystarczająca moc komputerów
Cytat: goofyx w 06 Maj 2013, 09:43
no tak, ale od czegoś chyba trzeba zacząć zamiast
Ja bym najchętniej zaczął od tutoriala jak to skonfigurować i uruchomić. Gdy czytałem
dokumentację do API i przykładowe programy, to nie miałem problemów. Natomiast
gdy chciałem zainstalować i skonfigurować to nie mogłem przebrnąć nawet
podstawowych rzeczy.
Cytat: goofyx w 06 Maj 2013, 09:43
czekać aż pojawią się komputery kwantowe, które wystarczą na twoje potrzeby.
w przeciwnym wypadku nie byłoby projektów boincowych bo wszyscy czekaliby aż będzie wystarczająca moc komputerów
To się nazwa koszt alternatywny. Gdy masz godzinę czasu i idziesz do kina, to
kosztem alternatywnym jest np. to, że w ciągu tej godziny nie możesz czytać
książki. Jeśli zajmę się uruchamianiem programów które z bardzo dużym prawd.
nie przyniosą spodziewanych rezultatów, to tracę czas, w którym mogę myśleć/pracować
nad lepszymi algorytmami. A lepsze algorytmy mogą przynieść rezultaty.
Do tego dochodzi jeszcze inna sprawa. Z konfiguracją BOINC miałem problemy i nie
dałem rady. A znam narzędzia w których bez problemu (ale kosztem dość dużego
nakładu pracy) bym zrobił dowolne środowisko do obliczeń rozproszonych.
Jednak największy problem jest z algorytmami. W statystyce siła tkwi w ilości
losowych próbek. Te algorytmy które badałem, z jakiś dziwnych powodów nie
działają w ten sposób. Szybko uzyskują swój najwyższy poziom, a potem następuje
spadek. Czyli zastosowane tutaj dużej ilości komputerów nie ma sensu, w zupełności
wystarczy 20-30 dni na jednym rdzeniu do takiego eksperymentu, może nawet
5 dni by wystarczyło.
Potrzebuję takiego algorytm, który jest zbieżny. Taki algorytm co na 2*N komputerach
robi szybsze postępy niż w tym samym czasie na N.
Pozdrawiam
ok, rozumiem.
nikt cie nie będzie zmuszał do wykorzystania boinc do testowania twoich algorytmów.
Cytat: goofyx w 06 Maj 2013, 21:50
ok, rozumiem.
nikt cie nie będzie zmuszał do wykorzystania boinc do testowania twoich algorytmów.
Miło że są chętni do pomocy, ale trzeba mieć coś, co się dobrze liczy na takiej
ilości komputerów jaką oferuje BOINC. Ja mam algorytmy które dobrze liczą
się na jednym komputerze, albo na bilionach. Nie mam niczego co idealnie
pasuje np. na 1000 komputerów bez przerwy przez wiele lat.
Pozdrawiam