własny projekt

Zaczęty przez mariotti, 25 Maj 2012, 23:40

mariotti

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

Troll81

zobacz na nasz projektradioactive. Ludziska musza dopłacić do czujnika i czekac na niego a i tak pchaja się drzwiami i oknami....

krzyszp

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).

Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka

Martin Fox

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.

xelexin

Czytając ogólnie idea ciekawa :)

Jeżeli potrzebujesz pomocy uderzaj do mnie! :)
 


mariotti

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





mariotti

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


krzyszp

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ą...

Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka

Troll81

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ą.....

mariotti

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


Cyfron

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.

Troll81

chess960. zajmował sie konkretna odmianą szachów....

mariotti

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

mariotti

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

PoznanskaPyra

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.
WIZYTÓWKA
Kompy:
AMD Ryzen 9-3900X + GTX980Ti
Intel i5 4570 + HD7970

mariotti

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

PoznanskaPyra

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.
WIZYTÓWKA
Kompy:
AMD Ryzen 9-3900X + GTX980Ti
Intel i5 4570 + HD7970

mariotti

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.

goofyx

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.

mariotti

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

PoznanskaPyra

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.
WIZYTÓWKA
Kompy:
AMD Ryzen 9-3900X + GTX980Ti
Intel i5 4570 + HD7970

mariotti

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




krzyszp

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.

Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka

PoznanskaPyra

WIZYTÓWKA
Kompy:
AMD Ryzen 9-3900X + GTX980Ti
Intel i5 4570 + HD7970

mariotti

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







goofyx

@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?

Rysiu

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ł.

mariotti

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

Cyfron

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?

goofyx

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ć.

Rysiu

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.

goofyx

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

Martin Fox

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?

krzyszp

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...


Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka

lukaszja

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.

goofyx

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?

lukaszja

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. 

goofyx

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

krzyszp

Tak, ale przecież my rozmawiamy o programowaniu aplikacji do trenowania systemu, a nie samej gry, prawda?

Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka

lukaszja

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 ;)