Mrówka Langtona

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Nevendar
Posty: 7
Rejestracja: 30 lip 2012 19:20
Wersja środowiska: LabVIEW 8.5

Mrówka Langtona

Post autor: Nevendar »

Witam,
mam problem, chciałem stworzyć mrówkę Langtona, lecz po ukończeniu nie działa poprawnie, punkt (mrówka) zamiast poruszać się wg ustalonych zasad miga w miejscu. Nie wiem co się dzieje, mam wrażenie, że problemem jest case po prawej stronie siedzący w długim case True/False, lecz starałem się na 3 sposoby to rozwiązać i zawsze był ten sam efekt migotania.

Zasady działania tego automatu komórkowego są proste, można je przeczytać na wiki: http://pl.wikipedia.org/wiki/Mr%C3%B3wka_Langtona.

Program jest w załączniku.
Może wyjaśnię krótko co tu się dzieje.
Te 2 wartości 10 i 10 określają w którym miejscu ma być mrówka początkowo, natomiast dwójka jest znacznikiem ułożenia mrówki, malutki case obraca ją w lewo lub w prawo, a wspomniany domniemany problematyczny case zmienia położenie mrówki.

Bardzo proszę o pomoc bo już na prawdę nie wiem w czym rzecz.
I z góry dziękuję
Załączniki
Ant_final.vi
(35.26 KiB) Pobrany 338 razy
Garreth
Posty: 74
Rejestracja: 28 gru 2011 14:13
Wersja środowiska: LabVIEW 2011

Re: Mrówka Langtona

Post autor: Garreth »

Proszę:) Problemem było to, iż w wewnętrznym FOR co prawda zmieniałeś położenie i kierunek mrówki, ale tylko w danej iteracji tego FOR. Następna iteracja przywracała poprzednie wartości kierunku i położenia. Problem rozwiązałem używając w prosty sposób zmiennych lokalnych, dodatkowo zwiększyłem planszę i położenie początkowe by było widać ten charakterystyczny regularny wzór (i widać;) ), aczkolwiek przeszukiwanie całej macierzy dwoma pętlami FOR nie jest zbyt optymalnym rozwiązaniem.

Powodzenia w projekcie!

EDIT:

Dobra, stwierdziłem, że nie mogę zostawić tej wersji tak nieoptymalnej, więc dorzucam do postu plik Ant_final (2).vi :) Dotarcie do regularnego wzoru trwa w drugiej wersji 40 sekund, w Twojej to około 90 sekund, więc różnica znaczna - zwłaszcza, że moja wersja ma czas prawdopodobnie niezależny od rozmiaru macierzy. Oczywiście miliseconds to wait ustawiłem na 0, aby program wykorzystywał 100% rdzenia i liczył tak szybko jak potrafi - do debuggingu wpisz sobie tam te 1000 ms lub wiecej. Tylko dorzuć do programu warunki jego zatrzymania po dotarciu mrówki do krawędzi, żeby nie liczył bez sensu w nieskończoność:)
Załączniki
Ant_final (2).vi
Wersja bardziej optymalna
(19.7 KiB) Pobrany 354 razy
Ant_final (1).vi
Wersja nieoptymalna
(24.12 KiB) Pobrany 306 razy
Nevendar
Posty: 7
Rejestracja: 30 lip 2012 19:20
Wersja środowiska: LabVIEW 8.5

Re: Mrówka Langtona

Post autor: Nevendar »

Na prawdę bardzo, bardzo dziękuje za pomoc.
Niestety mam problem, bo ja dysponuje LabView w wersji 8.5 a Ty chyba w 11. z tego co pamiętam jest opcja by zapisywać z konwersją do jakiejś poprzedniej wersji. Bardzo bym był wdzięczny jeśli mógłbyś to zrobić. :)

Mam jeszcze pytanie czy może orientujesz się czy w Intensity Graph da się zmieniać kolorystykę pól?
Garreth
Posty: 74
Rejestracja: 28 gru 2011 14:13
Wersja środowiska: LabVIEW 2011

Re: Mrówka Langtona

Post autor: Garreth »

Ach, przepraszam, byłem przekonany, że jak edytuję Twoją wersję pliku to LV automatycznie zapisze w takiej samej wersji a nie w nowszej... Oba pliki wrzucam tutaj jeszcze raz, mam nadzieję, że będzie okej.

Kolorki można ustawić w taki sposób: http://digital.ni.com/public.nsf/allkb/ ... 6F007C7B58
Załączniki
Ant_final (2).vi
Zoptymalizowana, 8.5
(26 KiB) Pobrany 286 razy
Ant_final (1).vi
Niezoptymalizowana, 8.5
(30.33 KiB) Pobrany 303 razy
Nevendar
Posty: 7
Rejestracja: 30 lip 2012 19:20
Wersja środowiska: LabVIEW 8.5

Mrówka Langtona

Post autor: Nevendar »

Jeszcze raz bardzo dziękuję za pomoc. :)
ODPOWIEDZ