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) |
| |
current_messure(number). | current_messure(number). |
| %---------------------- |
| % dokonywanie pomiarów |
| %---------------------- |
start :- | start :- |
current_node(X,_), | current_node(X,_), |
node(X,Y,_,_), | node(X,Y,_,_), |
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 :- |
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, |
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,_)), |
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 punktu, zwię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 :- |
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), |
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. |