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/20 16:32]
miw
pl:miw:miw08_mindstormsdesign:labirynt [2019/06/27 15:50] (aktualna)
Linia 90: Linia 90:
 ==== Implementacja w Prologu ==== ==== Implementacja w Prologu ====
 <code prolog> <code prolog>
 +messured_nodes(node_no).
 +node(node_no,​messure_no,​next_node,​ultrasonic_val,​messured).
 +current_node(node_no,​messure_no).
 +
 +current_messure(number).
 +%----------------------
 +% dokonywanie pomiarów
 +%----------------------
 +start :-               
 +      current_node(X,​_),​
 +      node(X,​Y,​_,​_),​
 +      messured_nodes(Q),​
 +      X \= Q,
 +      nxt_ultrasonic_sensor(port,​Value1),​
 +      assert(node(X,​1,​0,​Value1),​
 +      ​
 +      nxt_turn(speed,​45),​
 +      nxt_ultrasonic_sensor(port,​Value2),​
 +      assert(node(X,​2,​0,​Value2),​
 +      ​
 +      nxt_turn(speed,​45),​
 +      nxt_ultrasonic_sensor(port,​Value3),​
 +      assert(node(X,​3,​0,​Value3),​
 +
 +      nxt_turn(speed,​45),​
 +      nxt_ultrasonic_sensor(port,​Value4),​
 +      assert(node(X,​4,​0,​Value4),​
 +
 +      nxt_turn(speed,​45),​
 +      nxt_ultrasonic_sensor(port,​Value5),​
 +      assert(node(X,​5,​0,​Value5),​
 +
 +      nxt_turn(speed,​45),​
 +      nxt_ultrasonic_sensor(port,​Value6),​
 +      assert(node(X,​6,​0,​Value6),​
 +
 +      nxt_turn(speed,​45),​
 +      nxt_ultrasonic_sensor(port,​Value7),​
 +      assert(node(X,​7,​0,​Value7),​
 +
 +      nxt_turn(speed,​45),​
 +      nxt_ultrasonic_sensor(port,​Value8),​
 +      assert(node(X,​8,​0,​Value8)
 +      assert(messured_nodes(X)).
 +
 +
 +%---------------------------
 +% szukanie najlepszej drogi
 +%---------------------------
 +
 start :- start :-
-      ​ultrasonic_sensor(Value), +      ​current_node(X,M), 
-      ​Value > number+      ​node(X,​Y,​Next,​U)
-      ​go(0,speed,force).+      ​messured_nodes(X), 
 +      Next = 0, 
 +      U <= number, ​             % wartość progowa, ponad którą dokonywane jest przeszukiwanie 
 +      retract(node(X,​Y,​_,_)), 
 +      assert(node(X,​Y,​1000,​U), ​ % blokowanie połączenia 
 +      current_messure(A),​ 
 +      B is A + 1, 
 +      retractall(current_messure(_)),​ 
 +      assert(current_messure(B)). 
 start :- start :-
-      ​ultrasonic_sensor(Value), +      ​current_node(X,M), 
-      ​Value =number, +      ​node(X,​Y,​Next,​U),​ 
-      ​turn(90,speed).+      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), ​    % przemieszczenie do nowego punktu 
 +      nxt_go(1),​ 
 +      retractall(current_node(X,​_)),​ 
 +      W is X + 1, 
 +      assert(current_node(W,​1)),​ 
 +      assert(current_messure(1)). 
 start :- start :-
-      ​go(0,0,0).+      ​current_node(X,M), 
 +      node(X,​Y,​Next,​U),​ 
 +      messured_nodes(X),​ 
 +      Next > 0, 
 +      U > number, ​              % wartość progowa, ponad którą dokonywane jest przeszukiwanie 
 +      current_messure(D), ​     
 +      D <= 8,                   % pominięcie punktu, zwiększenie licznika o 1 
 +      B is A + 1, 
 +      retractall(current_messure(_)),​ 
 +      assert(current_messure(B)). 
 + 
 +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 
 +      current_messure(D),​ 
 +      D > 8, 
 +      abs(M-Y,​N),​ 
 +      nxt_turn(speed,​45*N), ​    % przejscie do punktu, który już był wcześniej badany 
 +      nxt_go(1),​ 
 +      node(Next,​P,​X,​U2),​ 
 +      retractall(current_node(X,​_)),​ 
 +      assert(current_node(Next,​P)),​ 
 +      retractall(node(Next,​P,​_,​_)),​ 
 +      assert(node(Next,​P,​1000,​U2)). ​  % zablokowanie powrotu do poprzedniego punktu 
 + 
 +start :- 
 +      go(0).
 </​code>​ </​code>​
  
  
-==== XTT ==== 
-{{:​pl:​miw:​miw08_mindstormsdesign:​alg11.png|XTT}} 
  
  
 +==== 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.1211293964.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