Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 Polski Portal COLOBOTa - COLOBOT Polish Portal
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
Eksperyment - Dziwne wyniki
Autor Wiadomość
sajmon313 
Jedi Master


Wiek: 28
Dołączył: 16 Gru 2009
Posty: 42
Skąd: /dev/uarndom
Wysłany: 24-12-2009, 16:46   Eksperyment - Dziwne wyniki

Zrobiłem dziś eksperyment dot. szybkości różnych obiektów. Oto wyniki:
wszystkie prędkości podaję w m/s, zakres błędu: +- 0,2 m/s
wszystkie obiekty poruszające się po ziemi korzystały z 1 programu, a wszystkie latające z 2 programu, więc nie ma ryzyka błędu spowodowanego różnicom w programach

1) Na płaskim terenie
Kod:
WheeledGrabber               4,91
TrackedGrabber               3,59
LeggedGrabber                3,71
WingedGrabber (po ziemi)     4,71
WingedGrabber (w powietrzu) 11,01
Tech (po ziemi)              3,17
Tech (w powietrzu)           7,56
AlienAnt                     2,9
AlienSpider                  2,9
AlienWasp                   11,01
AlienWorm                    0,74
AlienQueen                   1,93

Wniosek jest jeden: lepiej latać.
Powyższe wyniki są w miarę normalne, ale dalej jest już conajmniej dziwnie.

2) pod górkę, Pitch= 21,8 (Z oznacza że utrzymuje pozycje - nie zsuwa sie po zatrzymaniu). Latające nie brały udziału
Kod:
WheeledGrabber               1,78
TrackedGrabber               3,07
LeggedGrabber                3,70 Z
WingedGrabber (po ziemi)     0,99
Tech (po ziemi)              2,01
AlienAnt                     3,03 Z
AlienSpider                  2,93 Z
AlienWorm                    0,80 (b.d.)
AlienQueen                   1,33

Można zauważyć, że mrówka, pająk i robal poruszają się szybciej pod górkę niż na płaskim terenie! Ale już LeggedGrabber nie.

3) pod górkę, Pitch= 38 (Z jak poprzednio, N - nie może podejść)
Kod:
WheeledGrabber               N
TrackedGrabber               1,29
LeggedGrabber                3,15
WingedGrabber (po ziemi)     N
Tech (po ziemi)              0,19
AlienAnt                     3,26 Z !
AlienSpider                  2,97 Z
AlienWorm                    0,95 (b.d.)
AlienQueen                   N

Obcy jeszcze bardziej przyspieszają! Ale roboty zachowują się normalnie (na razie). WheeledGrabber i WingedGrabber nie mogą podjechać pod tą górkę.

4) pod górkę, Pitch= ~60 (Z, N jak poprzednio)
Kod:
WheeledGrabber               1,16 !!!
TrackedGrabber               N
LeggedGrabber                1,37
WingedGrabber (po ziemi)     0,42 !!!
Tech (po ziemi)              N
AlienAnt                     3,04
AlienSpider                  2,45
AlienWorm                    1,4 (b.d.) !!!
AlienQueen                   N

Pająk i Mrówka wreszcie zaczęły zwalniać, Robal bardzo przyspieszył, ale najważniejsze:
WheeledGrabber i WingedGrabber mogą podjechać pod górkę pitch=60, a pod pitch=38 nie mogą !?
Bardzo dziwne.

W testach wykorzystałem relief21 dostępny standardowo w colobocie.
_________________
Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10
 
 
     
C ruels! 
Neokid


Twoja ulubiona misja: user levels,swobodna gra i KO
Wiek: 22
Dołączył: 08 Paź 2009
Posty: 185
Skąd: Devil MachineXD
Wysłany: 24-12-2009, 17:35   

Na każdej mapie/reliefie wyniki będą nieco inne.Chyba wziąłeś to pod uwagę?
_________________
http://doladujse.pl/7415 -doładowania na koma
http://www.minecraftaccounts.com?join=34132 - darmowe konta do gry Minecraft
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 24-12-2009, 17:50   

Moge sie zapytac, w jaki sposob mierzyles predkosc? Kiedys mierzylem i wynik zalezal od tego jaka jednostke czasu wzialem.

Tech? WTF is that?
_________________
 
 
     
FE4R 


Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy
Wiek: 24
Dołączył: 21 Paź 2009
Posty: 144
Wysłany: 24-12-2009, 17:55   

A co, na każdej mapie pitch równy tyle samo znaczy coś innego? :roll:

Jest taki bug w grze; jest również w temacie Ciekawostki - robot na kołach potrafi podjechać pod pionową ścianę, nawet robot na nogach tak nie potrafi. Dziwne, nieprawdaż?

To samo zauważyłem, gdy chciałem WingedGrabberem zabrać PowerCell ze ściany o nachyleniu większym niż 45 stopni.

Aha, i jeszcze jedno - czy mógłbyś mi na PW przesłać program, który wykorzystałeś do testowania prędkości?

EDIT:

Berserker napisał/a:
Moge sie zapytac, w jaki sposob mierzyles predkosc? Kiedys mierzylem i wynik zalezal od tego jaka jednostke czasu wzialem.

Tech? WTF is that?

Wyobraź sobie, że dystans przebyty w 0.1 sekundy będzie 10 mniejszy niż przebyty przez 1 sekundę... Jeśli chcesz mieć w m/s trzeba przemnożyć dystans przez 10.
A Tech to inżynier - widoczny w środku Centrum Kontroli Misji w Houston oraz na końcu Kampanii.
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 24-12-2009, 18:24   

Cytat:
Wyobraź sobie, że dystans przebyty w 0.1 sekundy będzie 10 mniejszy niż przebyty przez 1 sekundę... Jeśli chcesz mieć w m/s trzeba przemnożyć dystans przez 10.

Ja nie licze dystansu, tylko predkosc przy maksymalnej mocy obu silnikow. teoretycznie ona powinna byc taka sama niezaleznie od kroku czasowego. Ale przy kroku czasowym wynoszacym 0.01 sekundy predkosc osy wychodzila mi 50-80 m/s
_________________
 
 
     
sajmon313 
Jedi Master


Wiek: 28
Dołączył: 16 Gru 2009
Posty: 42
Skąd: /dev/uarndom
Wysłany: 24-12-2009, 19:36   

FE4R napisał/a:
Aha, i jeszcze jedno - czy mógłbyś mi na PW przesłać program, który wykorzystałeś do testowania prędkości?

Generalnie wykorzystywałem ten program:
Kod:
extern void object::wyscig()
{
 point c1,c2;
 motor(1,1);
 c1=position;
 wait(10);
 c2=position;
 message(category+" "+distance(c1,c2)/10+" m/s");
 motor(0,0);
if(c1.z<=c2.z) send(strleft("S"+category,7),distance(c1,c2)/10,200);
}

ale na płaskiej powierzchni było bez if (co nic nie zmienia, ale później musiałem dodać)

natomiast dla latających:
Kod:
extern void object::wysciglat()
{
 point c1,c2;
 jet(1);
 wait(2);
 jet(0);
 motor(1,1);
 c1=position;
 wait(10);
 c2=position;
 message(category+" "+distance(c1,c2)/10+" m/s");
 motor(0,0);
send(strleft("L"+category,7),distance(c1,c2)/10,200);
 jet(-1);
}


to L albo S przed category po to, żeby było wiadomo czy lata czy nie.

Wynik distance jest w (metrach colobotowych)*10 bo 10s, więc
Kod:
distance(c1,c2)/10

jest w metrach na sekundę.

Berserker napisał/a:
teoretycznie ona powinna byc taka sama niezaleznie od kroku czasowego. Ale przy kroku czasowym wynoszacym 0.01 sekundy predkosc osy wychodzila mi 50-80 m/s

Czym dłuższy czas pomiaru tym większa dokładność.
Mój eksperyment powtarzałem kilka razy i czasami wychodziły troszkę inne wyniki (stąd na początku pierwszego posta napisałem +-0,02 bo w takich granicach się zmieniało).
_________________
Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10
 
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 24-12-2009, 22:27   

A, znalazlem jeden blad! :D
Roboty, zwlaszcza latajace, troche sie rozpedzaja. Ty zaczynasz pomiar predkosci odrazu bez rozpedzania sie. Moze to w niewielkim stopniu wplynac na pomiar. Niby sie czepiam, ale takie drobnostki moga byc zrodlem anomalii zwiazanymi z lazeniem mrowek.
_________________
 
 
     
sajmon313 
Jedi Master


Wiek: 28
Dołączył: 16 Gru 2009
Posty: 42
Skąd: /dev/uarndom
Wysłany: 24-12-2009, 22:48   

Berserker napisał/a:
A, znalazlem jeden blad! :D
Roboty, zwlaszcza latajace, troche sie rozpedzaja. Ty zaczynasz pomiar predkosci odrazu bez rozpedzania sie. Moze to w niewielkim stopniu wplynac na pomiar. Niby sie czepiam, ale takie drobnostki moga byc zrodlem anomalii zwiazanymi z lazeniem mrowek.

Słuszna uwaga.
Do końca roku powtórze wszystkie testy, ale dodam wait(5) przed pomiarem pierwszej pozycji.

btw. mrówki nie są latające ;)
_________________
Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10
 
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 24-12-2009, 23:22   

Dlatego napisalem 'lazeniem' :)
Chodzilo mi o fakt, ze mrowki szybciej chodza po powierzchniach pochylych :P
_________________
 
 
     
FE4R 


Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy
Wiek: 24
Dołączył: 21 Paź 2009
Posty: 144
Wysłany: 25-12-2009, 13:48   

sajmon313 napisał/a:
Czym dłuższy czas pomiaru tym większa dokładność.Mój eksperyment powtarzałem kilka razy i czasami wychodziły troszkę inne wyniki (stąd na początku pierwszego posta napisałem +-0,02 bo w takich granicach się zmieniało).

Masz na myśli czas eksperymentu czy wartość, którą wstawiasz w wait();?
Bo jeśli to drugie - to nie. Im mniejszą wartość dasz, tym dokładniej wychodzi.

Berserker napisał/a:
Ja nie licze dystansu, tylko predkosc przy maksymalnej mocy obu silnikow. teoretycznie ona powinna byc taka sama niezaleznie od kroku czasowego. Ale przy kroku czasowym wynoszacym 0.01 sekundy predkosc osy wychodzila mi 50-80 m/s

A jak liczysz prędkość bez liczenia jaki dystans przebył robot?
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 25-12-2009, 14:19   

Cytat:
A jak liczysz prędkość bez liczenia jaki dystans przebył robot?


Zdecyduj sie czego sie czepiasz. Najpierw probujesz mnie przekonac, ze ja otrzymalem dystans przebyty przez robota (jakbym nie umial predkosci liczyc).
Teraz sie mnie czepiasz, ze licze predkosc bez dystansu. Dystansu nie licze, dystans mam podany

Cytat:
Masz na myśli czas eksperymentu czy wartość, którą wstawiasz w wait();?
Bo jeśli to drugie - to nie. Im mniejszą wartość dasz, tym dokładniej wychodzi.

Podstawowa definicja ruchu jednostajnego: predkosc jest jednakowa w kazdym momencie ruchu. Niewazne, czy dasz 0.01s czy 100s, przebyta droga w tym czasie po podzieleniu przez ten czas da nam zawsze jednakowa predkosc.

A teraz ciekawostka:
Predkosc osy liczona przy kroku czasowym wynoszacym 2s:
Za pomoca wait() wynosi ~12.5m/s
Za pomoca abstime() wynosi ~9.5m/s
Niby mala roznica. A teraz przy kroku czasowym wynoszacym 0.01s:
Za pomoca wait() ~40m/s - O_O
Za pomoca abstime() ~0.45m/s - Q__Q

Wychodzi na to, ze nie da sie porzadnie zmierzyc predkosci chwilowej.
_________________
 
 
     
sajmon313 
Jedi Master


Wiek: 28
Dołączył: 16 Gru 2009
Posty: 42
Skąd: /dev/uarndom
Wysłany: 25-12-2009, 14:47   

Berserker napisał/a:

Za pomoca abstime() wynosi ~9.5m/s

ale jak w ten sposób zmierzyłeś dokładnie prędkość?
Sam napisałeś wcześniej że roboty latające chwilę się rozpędzają...

[ Dodano: 25-12-2009, 16:41 ]
No więc wziąłem poprawkę na rozpędzanie się, ale obcy nadal są szybsi pod górkę.
I dodatkowo przetestowałem więcej robotów.

Prędkości: PhazerShooter, Shielder, Recycler i Thumper są dokładnie takie same, więc będę pisał tylko dla PhazerShooter.

Subber ma prędkość taką samą jak TrackedGrabber.

Zawsze myślałem że Me = Tech (poza czapką z daszkiem), ale okazało sie że nie:

1) Płaski teren
Kod:
WheeledGrabber               5,02
TrackedGrabber               3,76
LeggedGrabber                3,76
WingedGrabber (po ziemi)     4,18
WingedGrabber (w powietrzu) 12,52
PhazerShooter                2,51
Tech (po ziemi)              3,34
Tech (w powietrzu)          10,01
Me (po ziemi)                4,19
Me (w powietrzu)            12,52
AlienAnt                     3,01
AlienSpider                  3,01
AlienWasp                   12,52
AlienWorm                    0,75
AlienQueen                   2,01


2) Pitch = 21 (Z - nie zsuwa się po zatzrymaniu)
Kod:
WheeledGrabber               1,75
TrackedGrabber               3,2
LeggedGrabber                3,75 Z
WingedGrabber (po ziemi)     0,92
PhazerShooter                1,95
Tech (po ziemi)              2,09
Me (po ziemi)                1,84
AlienAnt                     3,13 Z
AlienSpider                  3,03 Z
AlienWorm                    0,81 Z
AlienQueen                   1,24


3) Pitch = 38 (N - nie może podejść)
Kod:
WheeledGrabber               N
TrackedGrabber               1,4
LeggedGrabber                3,21
WingedGrabber (po ziemi)     N
PhazerShooter                0,16
Tech (po ziemi)              0,04
Me (po ziemi)                N
AlienAnt                     3,37 Z
AlienSpider                  3,07 Z
AlienWorm                    0,96 Z
AlienQueen                   N

Me jest szybszy na płaskim, ale gdzie Me nie może, tam Tech podejdzie :)

4) Pitch = 60
Tu jak zwykle wyszły dziwne rzeczy:
Kod:
WheeledGrabber               1,25
TrackedGrabber               N
LeggedGrabber                1,4
WingedGrabber (po ziemi)     0,42
PhazerShooter                N
Tech (po ziemi)              N
Me (po ziemi)                0,79
AlienAnt                     3,14
AlienSpider                  2,25
AlienWorm                    1,42 Z
AlienQueen                   N

Do klubu dziwnie zachowujących się obiektów dołączył Me.

I nadal zostaje przy twierdzeniu, że czym dłuższy czas pomiaru tym dokładniejszy wynik, Poniżej uzasadnienie:

Przypuśćmy, że chcemy zmierzyć prędkość dla bardzo małego odcinka czasu. (np. 0.01s)
W colobocie pozycja podawana jest z dokładnością do 2 miejsc po przecinku.
Więc robot musi poruszać się w ten sposób:
Kod:
Zmień pozycję o 0.01
Czekaj ileśtam

Oczywiście można zmienić żeby przesuwał się z większą dokładnością, ale nigdy nie będzie to płynne przesunięcie.
Więc jeżeli zmierzysz tą prędkość akurat w czasie gdy zmienia położenie, to wyjdzie ogromna prędkość, a jak zmierzysz w czasie czekania to wyjdzie bardzo mała.
Przez dłuższy czas pomiaru uśredniamy wynik: dla moich 10 sekund pomiaru wahania wynosiły 0,02m/s, przy 100 sekundach byłyby 10 razy mniejsze
_________________
Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10
 
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 25-12-2009, 16:58   

@up
Ja za pomoca petli robie tak, ze otrzymuje co jakis czas pomiar i po prostu licze srednia.
Kod:
float time, dist;
point start;
jet(1);
motor(0,0);
wait(2);
while(true)
{
jet(1);
motor(1, 1);
start = position;
time = abstime();
wait(0.01);
dist = distance(position, start);
message((dist/(abstime()-time))+"m/s; "+(dist/0.01)+"m/s", DisplayInfo);
wait(0.2);

}
_________________
 
 
     
sajmon313 
Jedi Master


Wiek: 28
Dołączył: 16 Gru 2009
Posty: 42
Skąd: /dev/uarndom
Wysłany: 25-12-2009, 17:30   

Berserker napisał/a:
@up
Ja za pomoca petli robie tak, ze otrzymuje co jakis czas pomiar i po prostu licze srednia.
Kod:
float time, dist;
point start;
jet(1);
motor(0,0);
wait(2);
while(true)
{
jet(1);
motor(1, 1);
start = position;
time = abstime();
wait(0.01);
dist = distance(position, start);
message((dist/(abstime()-time))+"m/s; "+(dist/0.01)+"m/s", DisplayInfo);
wait(0.2);

}

Błędy:
jet(1) w pętli - dlaczego lecisz w górę? jak już tak chcesz to zastosuj distance2d.
po co wait w dwóch miejscach?

Dowiesz się, dlaczego robisz to źle, jak zmienisz message na:
Kod:
message((abstime()-time)+"s; "+(dist/0.01)+"m/s", DisplayInfo);

U mnie pokazuje: 4-6 s!
a jak usunąłem jet(1) z pętli i tylko dałem żeby an początku przez 2 sekundy zwiększał wysokość, to 2-3s

Wniosek:
wykonanie instrukcji która nie porusza robotem też zabiera trochę czasu.
_________________
Validator CBot - Prace Trwają
Ostatnia Aktualizacja: 02.01.10
 
 
     
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 25-12-2009, 18:57   

Jak dokładnie policzyć?
Kod:

motor(1,1);
wait(4); //rozpedzamy sie
point s_p = this.position;
float s_t = this.lifetime;
wait(5); //mierzymy
point e_p = this.position;
float e_t = this.lifetime;

float v = (e_p-s_p)/(e_t-s_t);
message("Predkosc: "+v);

Można też zrobić kilka pomiarów (np. co sekundę) i średnią wyliczyć...

A tak w ogóle to abstime() ssie bo jak się przerwie grę przez wyjście do menu to on NADAL LICZY (WTF?).
_________________
1Tbps Project && Telecomix Network

 
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012