Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_mindstormsdesign:labirynt [2008/05/26 20:10]
miw
pl:miw:miw08_mindstormsdesign:labirynt [2019/06/27 15:50] (aktualna)
Linia 95: Linia 95:
  
 current_messure(number). current_messure(number).
- +%---------------------- 
- +% dokonywanie pomiarów 
- +%---------------------- 
-start :-+start :-               ​
       current_node(X,​_),​       current_node(X,​_),​
       node(X,​Y,​_,​_),​       node(X,​Y,​_,​_),​
Linia 134: Linia 134:
       assert(node(X,​8,​0,​Value8)       assert(node(X,​8,​0,​Value8)
       assert(messured_nodes(X)).       assert(messured_nodes(X)).
 +
 +
 +%---------------------------
 +% szukanie najlepszej drogi
 +%---------------------------
  
 start :- start :-
Linia 140: Linia 145:
       messured_nodes(X),​       messured_nodes(X),​
       Next = 0,       Next = 0,
-      U <= number, ​     // ​wartość progowa, ponad którą dokonywane jest przeszukiwanie+      U <= number, ​             ​% ​wartość progowa, ponad którą dokonywane jest przeszukiwanie
       retract(node(X,​Y,​_,​_)),​       retract(node(X,​Y,​_,​_)),​
-      assert(node(X,​Y,​1000,​U),​+      assert(node(X,​Y,​1000,​U), ​ % blokowanie połączenia
       current_messure(A),​       current_messure(A),​
       B is A + 1,       B is A + 1,
Linia 153: Linia 158:
       messured_nodes(X),​       messured_nodes(X),​
       Next = 0,       Next = 0,
-      U > number, ​     // ​wartość progowa, ponad którą dokonywane jest przeszukiwanie+      U > number, ​              % wartość progowa, ponad którą dokonywane jest przeszukiwanie
       retract(node(X,​Y,​_,​_)),​       retract(node(X,​Y,​_,​_)),​
       nxt_ultrasonic_sensor(port,​Value),​       nxt_ultrasonic_sensor(port,​Value),​
       assert(node(X,​Y,​X+1,​Value),​       assert(node(X,​Y,​X+1,​Value),​
       abs(M-Y,N),       abs(M-Y,N),
-      nxt_turn(speed,​45*N),​+      nxt_turn(speed,​45*N), ​    % przemieszczenie do nowego punktu
       nxt_go(1),       nxt_go(1),
       retractall(current_node(X,​_)),​       retractall(current_node(X,​_)),​
Linia 170: Linia 175:
       messured_nodes(X),​       messured_nodes(X),​
       Next > 0,       Next > 0,
-      U > number, ​     // ​wartość progowa, ponad którą dokonywane jest przeszukiwanie +      U > number, ​              % wartość progowa, ponad którą dokonywane jest przeszukiwanie 
-      current_messure(D),​ +      current_messure(D), ​    ​ 
-      D <= 8, +      D <= 8,                   % pominięcie punktuzwiększenie licznika o 1
-      retract(node(X,Y,_,_)), +
-      nxt_ultrasonic_sensor(port,​Value),​ +
-      assert(node(X,​Y,​X+1,Value), +
-      abs(M-Y,​N),​ +
-      nxt_turn(speed,​45*N),​ +
-      nxt_go(1),​ +
-      retractall(current_node(X,​_)),​ +
-      W is X + 1, +
-      assert(current_node(W,​1)),​+
       B is A + 1,       B is A + 1,
       retractall(current_messure(_)),​       retractall(current_messure(_)),​
       assert(current_messure(B)).       assert(current_messure(B)).
- 
  
 start :- start :-
Linia 192: Linia 187:
       messured_nodes(X),​       messured_nodes(X),​
       Next > 0,       Next > 0,
-      U > number, ​     // ​wartość progowa, ponad którą dokonywane jest przeszukiwanie+      U > number, ​              % wartość progowa, ponad którą dokonywane jest przeszukiwanie
       current_messure(D),​       current_messure(D),​
       D > 8,       D > 8,
       abs(M-Y,N),       abs(M-Y,N),
-      nxt_turn(speed,​45*N),​+      nxt_turn(speed,​45*N), ​    % przejscie do punktu, który już był wcześniej badany
       nxt_go(1),       nxt_go(1),
       node(Next,​P,​X,​U2),​       node(Next,​P,​X,​U2),​
Linia 202: Linia 197:
       assert(current_node(Next,​P)),​       assert(current_node(Next,​P)),​
       retractall(node(Next,​P,​_,​_)),​       retractall(node(Next,​P,​_,​_)),​
-      assert(node(Next,​P,​1000,​U2)). +      assert(node(Next,​P,​1000,​U2)). ​  % zablokowanie powrotu do poprzedniego punktu
- +
-start :- +
-      current_node(X,​M),​ +
-      node(X,​Y,​Next,​U),​ +
-      messured_nodes(X),​ +
-      Next = 0, +
-      U > number, ​     // wartość progowa, ponad którą dokonywane jest przeszukiwanie +
-      retract(node(X,​Y,​_,​_)),​ +
-      nxt_ultrasonic_sensor(port,​Value),​ +
-      assert(node(X,​Y,​X+1,​Value),​ +
-      abs(M-Y,​N),​ +
-      nxt_turn(speed,​45*N),​ +
-      nxt_go(1),​ +
-      retractall(current_node(X,​_)),​ +
-      W is X + 1, +
-      assert(current_node(W,​1)). +
  
 start :- start :-
       go(0).       go(0).
 </​code>​ </​code>​
 +
 +
  
  
 ==== XTT ==== ==== XTT ====
-{{:​pl:​miw:​miw08_mindstormsdesign:​alg11.png|XTT}} +{{:​pl:​miw:​miw08_mindstormsdesign:​labirynt222.png|XTT}}
  
 +FIXME
 +  * przy większych algorytmach pojawia się problem z zapętlaniem
 +  * podział na atrybuty, nie jest taki oczywisty, zwłaszcza w przypadku, gdy argumentami jest tablica argumentów
 +  * ponadto, nie jest oczywiste jak odczytywać argumenty. W tym algorytmie założyłem,​ że wszystkie atrybuty są odwzorowaniem jednego rekordu z tablicy atrybutów. Atrybuty zmieniają się w przypadku zwiększenia atrybutu current_node
 +  * nie jest jasne wykorzystanie akcji assert i retract. I pobieranie z nich wartości.
pl/miw/miw08_mindstormsdesign/labirynt.1211825412.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0