home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1997 #3
/
amigamamagazinepolishissue03-1
/
ma_1995
/
06
/
ami028.txt
< prev
next >
Wrap
Text File
|
1997-04-07
|
12KB
|
253 lines
------------- 4 szoty, pierwsze dwa majâ iôê, drugie dwa to WZORY
dla obrazków do wykonania przez dziaî graficzny ------------------
STEROWANIE. PSIA KRZYWA
<lead>Rozwój wspóîczesnej elektroniki i cybernetyki nasuwa
pytanie: czy i w jakim stopniu komputer jest w stanie dorównaê
mózgowi czîowieka lub go przewyûszyê. Chociaû komputery liczâ
nieporównywalnie szybciej od nas, odpowiedú na to pytanie jest i
dîugo bëdzie negatywna.
<a>Bolesîaw Szczerba
<txt>Wyobraúmy sobie prostâ sytuacjë: rzut kamieniem w okno
sâsiada. Ile skomplikowanych obliczeï musiaîby wykonaê komputer,
aby okreôliê trajektorië lotu -- uwzglëdnienie ciëûaru kamienia,
odlegîoôci, siîy i kierunku wiatru, oporów powietrza czy wreszcie
grawitacji. A my po prostu podnosimy kamieï i rzucamy... Dlaczego
nie musimy sië troszczyê o odpowiednie obliczenia? Po prostu
kiedyô juû rzucaliômy kamieniem i NAUCZYLIÔMY SIË tego. Teraz
jedynie przywoîujemy do pamiëci wyuczony kiedyô program. Ale to
nie jest program na podobieïstwo programu komputerowego. Jest to
algorytm otwarty, umoûliwiajâcy podejmowanie decyzji na bieûâco,
uwzglëdnienie róûnych czynników czy wreszcie umoûliwiajâcy jego
modyfikacjë w trakcie jego przebiegu. To wîaônie powoduje, ûe
mózg czîowieka dîugo jeszcze bëdzie niedoôcignionym wzorem dla
komputerów i oprogramowania. To wîaônie w nim zachodzâ wszystkie
procesy podejmowania decyzji i uczenia sië na bîëdach. Nazywamy
je adaptacyjnymi procesami sterowania. Dziëki nim potrafimy
reagowaê na nieoczekiwane zdarzenia i podejmowaê optymalne
decyzje.
Oczywiôcie sposób, w jaki pracuje nasz mózg, od dawna stanowi
wyzwanie dla naukowców (któû nie sîyszaî o sztucznej
inteligencji), którzy próbujâ ludzkie myôlenie upchnâê w szablony
algorytmów postëpowania. Caîy czas prowadzone sâ próby stworzenia
algorytmów, które zastosowane w komputerach umoûliwiîyby uczenie
sië, podejmowanie decyzji oraz sterowanie róûnymi procesami.
Dziëki osiâgniëciom w tej dziedzinie staîy sië moûliwe np. loty w
kosmos. Tam czîowiek jest zbyt wolny, aby podejmowaê decyzje, od
których moûe zaleûeê ûycie zaîogi. To musi robiê komputer. Musi
on sterowaê wieloma procesami na raz i byê przygotowany do
natychmiastowej reakcji na OCZEKIWANE sytuacje. Niestety, na
razie tylko oczekiwane lub przynajmniej czëôciowo przewidywalne.
W nieoczekiwanych sytuacjach, na które program komputerowy nie
jest przygotowany, czîowiek musi decyzje podejmowaê sam. I to
(choê oczywiôcie nie tylko) stanowi o jego wyûszoôci.
Oczywiôcie nie tylko my, ludzie, jesteômy tak cudownie
wyposaûeni. Ewolucja wyposaûyîa teû zwierzëta w zdolnoôê
podejmowania decyzji. Podobnie jak my potrafiâ one oceniaê
sytuacjë, uczyê sië na bîëdach i podejmowaê decyzje w czasie
rzeczywistym, tzn. wielokrotnie podczas danego procesu
sterowania, nanoszâc poprawki do jego przebiegu. W wielu
sytuacjach radzâ sobie z tym nawet lepiej (o wiele lepiej) od
nas. Te niesamowite wrëcz czasem zdolnoôci okreôlamy jako
instynkt. Jako przykîad procesu sterowania moûna przytoczyê
nastëpujâcâ historyjkë. Jest sobie pies i zajâc. W pewnym
momencie pies dostrzega zajâca i rzuca sië za nim w poôcig. Zajâc
oczywiôcie nie jest gîupi i zaczyna uciekaê. Po jakim czasie
pies dogoni zajâca i po jakiej trajektorii musi sië poruszaê w
pogoni za celem, jeûeli znana jest prëdkoôê psa i zajâca i ich
poczâtkowe poîoûenie?
Problem ten jest oczywiôcie rozwiâzywany analitycznie, czyli za
pomocâ równaï matematycznych, z których moûna wyznaczyê dokîadnâ
trajektorië poôcigu, jak i czas jego ukoïczenia. Jednak sposób
otrzymania rozwiâzania, jak i samo równanie krzywej, jest
niedostëpny i nieatrakcyjny dla kogoô nie obeznanego z wyûszâ
matematykâ, i sâdzë, ûe raczej nie zainteresuje Czytelnika. Poza
tym naczelny surowo zakazaî mi wszelkich teoretycznych wywodów.
Poniewaû nasz znajomy pies ani trochë nie zna sië na równaniach,
a jednak bez problemu dogoni zajâca, spróbujmy zastanowiê sië nad
jego postëpowaniem podczas poôcigu. Zastanówmy sië, jakie
wielkoôci parametryzujâ nam caîy proces. Niewâtpliwie bëdâ to
prëdkoôci poôcigu i ucieczki. Na pewno znaczenie ma teû
poczâtkowe poîoûenie psa i zajâca. Ale jest jeszcze jedna waûna
wielkoôê: czas reakcji psa na zmianë poîoûenia zajâca, czyli
czas, po którym pies jest w stanie zauwaûyê znaczâcâ zmianë
poîoûenia celu, na tyle znaczâcâ, ûe podejmie decyzjë zmiany
kursu. Oznaczmy sobie ten czas przez >t0<.
Pies znajduje sië w punkcie >P0< w odlegîoôci >b< od myôliwego
>M< (rys. 1). Zajâc znajduje sië w punkcie >Z0< w odlegîoôci >a<
od myôliwego. Jak postâpi pies po ujrzeniu zajâca? Oczywiôcie
zacznie biec w jego kierunku. Zaîóûmy dla uproszczenia, ûe
prëdkoôci psa i zajâca sâ staîe i wynoszâ odpowiednio >vp< i
>vz<, zajâc zaô ucieka po linii prostej. Nasz pies biegnie tak
dîugo, aû stwierdzi, ûe zajâc oddaliî sië od poczâtkowego
poîoûenia na tyle, ûe trzeba zmieniê kurs. Ma to miejsce, gdy
pies jest juû w punkcie >P1<, a zajâc w punkcie >Z1<. Pies
przebyî wiëc odcinek >P0P1<, a zajâc odcinek >Z0Z1<. Poniewaû
odcinki te przebyte zostaîy w czasie równym czasowi reakcji psa,
ich dîugoôci wynoszâ odpowiednio >vp*t0< oraz >vz*t0<. Wtedy
dopiero pies bierze poprawkë na nowe poîoûenie zajâca i biegnie
dalej do punktu >P2<, przebywajâc takâ samâ drogë, jak
poprzednio. Tu znowu stwierdza, ûe zajâc jest trochë dalej --
bierze wiëc kolejnâ poprawkë. I tak w kóîko, aû osiâgnie cel.
Warto jeszcze zaznaczyê, ûe ostatni przebyty odcinek nie musi
mieê wcale dîugoôci >vp*t0<, tylko moûe mieê mniejszâ -- pies
moûe dopaôê zajâca w ostatniej fazie poôcigu w czasie krótszym od
swojego czasu reakcji.
Przypatrzmy sië dokîadnie rysunkowi. Tak na prawdë, to pies nie
biegnie po krzywej, tylko po ÎAMANEJ, o dîugoôci tworzâcego jâ
odcinka równej >vp*t0<. Albo inaczej: do czasu zauwaûenia zmiany
poîoûenia celu pies porusza sië po odcinku o dîugoôci wîaônie
>vp*t0<. Zajâc wyrywa przed siebie caîy czas, poruszajâc sië po
prostej i w czasie >t0< przebywajâc drogë równâ >vz*t0<.
Zastanówmy sië teraz, ile moûe wynosiê czas reakcji psa. Jeôli
czas ten wynosiîby np. 10 sekund, to wtedy trajektoria ruchu
autentycznie byîaby îamanâ, bo do czasu reakcji na nowe poîoûenie
celu pies przebiegîby kilkanaôcie metrów. Ale nasz znajomy nie
jest anemikiem -- ten czas to w rzeczywistoôci uîamek sekundy --
powiedzmy 0.1 sekundy lub mniej! W tym czasie pies nie
przebiegnie wiëcej niû póî metra i w ten sposób îamana skîada sië
z duûej liczby bardzo krótkich odcinków -- tym krótszych, im
szybciej pies reaguje na zmiany poîoûenia zajâca. Moûna wiëc
ômiaîo powiedzieê, ûe pies porusza sië po krzywej. Matematycy
nadali jej nazwë "psia krzywa", a problem doczekaî sië peînych
honorów zagadnienia matematycznego.
Jak juû wspomniaîem, rachunkowe rozwiâzanie problemu nie naleûy
do prostych, ale przedstawionâ sytuacjë moûna bez problemu
zasymulowaê na komputerze. Bëdzie to oczywiôcie Amiga, a uûytym
jëzykiem programowania bëdzie C. Przepraszam wszystkich fanów
AMOS-a, ale ja AMOS-a nie lubië (dlaczego, o tym moûe innym
razem). Osobiôcie preferujë C, gîównie ze wzglëdu na jego
prostotë i uniwersalnoôê. Poza tym, jeôli sië uwaûa, ûeby nie
wleúê bezpoôrednio w system, to kody úródîowe w tym jëzyku moûna
przenosiê bez problemów (ewentualnie z niewielkimi poprawkami)
miëdzy Amigâ i pecetem. Poza tym kompilator C jest dostëpny w
wersji dla Amigi i z jego zdobyciem nie ma ûadnych problemów
(moûe inaczej: nie sâ to problemy wiëksze niû w wypadku jego
niebieskiego odpowiednika...). Jest tego caîa kupa -- od
komercyjnych (SAS, Aztec) do shareware (DICE) i podobno public
domain.
Poniûej lub powyûej (zaleûy, gdzie wydrukujâ) przedstawiam
kompletny listing programu, symulujâcego omówiony proces
sterowania. Zakîadam, ûe:
1. Czytelnik ma dostëp do kompilatora C. Proponujë SAS/C co
najmniej w wersji 5.10, a najlepiej 6.5. Uûycie innych
kompilatorów jest oczywiôcie moûliwe, jednak nie przetestowane
przeze mnie. Mogâ sië wiëc pojawiê (niegroúne zazwyczaj)
ostrzeûenia. Wiâûe sië to najczëôciej nie tyle z samym programem,
ile z konwersjâ typów oraz ustawieniem ôrodowiska. Niech nikt
sië nie dziwi, ûe mu moje programy nie dziaîajâ, jak np. nie
ustawi MATH=STANDARD w preferencjach.
2. Czytelnik ma podstawowâ wiedzë dotyczâcâ programowania i wie,
co to sâ pëtle (choêby z BASIC-a FOR ... NEXT) czy instrukcje
warunkowe (IF).
3. Czytelnik ma pojëcie o C, wiëc nie bëdë tîumaczyî, co robiâ
nawiasy z dwoma ôrednikami przy 'for', albo po co dwa plusy koîo
siebie.
Poniûej podajë zawartoôê pliku SCOPTIONS dla kompilatora
SAS/C 6.5.
<l>MATH=STANDARD
ERRORREXX
OPTIMIZE
LINK
OPTIMIZERTIME
<txt>Jeûeli masz procesor, np. MC68020 (EC lub peîny), moûesz
wpisaê jeszcze dodatkowâ linië:
<l>CPU=68020
<txt>Podajesz oczywiôcie ten, który posiadasz (MC68010, 68020,
68030 lub 68040).
Schemat algorytmu w zasadzie omówiîem -- dla peînej kultury
przedstawiam go na rysunku 2.
Przejdúmy do samego programu. Jest on niesamowicie uproszczony,
wynika to jednak tylko z ograniczonego miejsca, jakim dysponujë.
Na uwagë zasîuguje przede wszystkim fakt, ûe przed postawieniem
punktu na ekranie trzeba odpowiednio przekonwertowaê wspóîrzëdne.
Ukîad wspóîrzëdnych ekranu róûni sië bowiem od ukîadu
kartezjaïskiego. Niezbëdnâ konwersjë przeprowadzajâ funkcje x()
oraz y(). Sama symulacja polega na rysowaniu odcinków o
odpowiedniej dîugoôci, ustawionych w odpowiednim kierunku.
Trzeba stworzyê funkcjë, która narysuje nam odcinek o zadanej
dîugoôci (równej vp*t0), o jednym koïcu w punkcie aktualnego
poîoûenia psa. Odcinek musi byê oczywiôcie skierowany w stronë
aktualnego poîoûenia zajâca. Wspóîrzëdne drugiego punktu trzeba
policzyê i poîâczyê odcinkiem z aktualnym poîoûeniem psa. Jak
policzyê wspóîrzëdne drugiego punktu? Twierdzenie Pitagorasa *
twierdzenie Talesa * rachunek wektorowy z I klasy liceum.
W ostatecznoôci popatrz na listing programu. Robi to funkcja
odcinekP(). Analogiczna funkcja dotyczâca zajâca to funkcja
odcinekZ(), z tym ûe jest ona o tyle prostsza, ûe rysowane
odcinki sâ caîy czas równolegîe. W wypadku stwierdzenia, ûe
dîugoôê odcinka (vp*t0, czyli dîugoôê tworzâcej îamanâ) jest
wiëksza niû odlegîoôê psa od zajâca, rysowany jest odcinek
krótszy, îâczâcy bezpoôrednio punkty ich poîoûeï. Serce algorytmu
to pëtla. Jest ona powtarzana tak dîugo, aû pies dogoni zajâca
lub wylezie za ekran. Warto równieû zaznaczyê, ûe nic nie stoi na
przeszkodzie, aby jeszcze zajâc goniî np. za ûabâ, ale byîaby
heca, pies goni zajâca, zajâc ûabë, a ûaba wyrywa przed siebie.
Funkcjë odcinekZ() trzeba by wówczas przerobiê na podobieïstowo
funkcji odcinekP() z tym, ûe trzeba celowaê w ûabë, która
przejmuje dotychczasowâ rolë zajâca. Dodatkowo trzeba stworzyê
funkcjë odcinekÛ(), przejmujâcâ dotychczasowâ rolë funkcji
odcinekZ(). Zajâc nie startuje, oczywiôcie, wtedy z osi X (tzn.
moûe, ale nie bëdzie zabawy, bo bëdzie goniî ûabë po prostej).
Modyfikacja programu to 3 minuty, z czego 2 na kompilacjë.
Na rysunkach 3. i 4. przedstawiam przykîadowe krzywe i parametry
wywoîania. Zwróê uwagë, ûe na rysunku 3. wyraúnie widaê, iû w
ostatniej fazie poôcigu pies wîaôciwie wlazî zajâcowi na ogon i
koïcówkë przebyî, goniâc go po prostej. Wyraúniej to widaê, gdy
prëdkoôê psa jest nieznacznie tylko wiëksza od prëdkoôci zajâca.
Na rysunku 4. pies dogoniî zajâca szybciej, gdyû zajâc byî bliûej
niû poprzednio.
A moûe znajdâ sië odwaûni, gotowi wziâê swojâ Amy i zaprezentowaê
program na lekcji matematyki czy informatyki w liceum? To nic nie
kosztuje, a moûna chyba w ten sposób urozmaiciê trochë wiejâce
nudâ lekcje matematyki czy zrobiê zajëcia z informatyki na
komputerze, a nie na Meritum czy pececie z herculesem, stawiajâc
na ekranie punkty o wielkoôci ziarna grochu. Napiszcie, co o tym
sâdzicie.
A teraz zadanie domowe, zwiâzane z treôciâ artykuîu. Wyobraúmy
sobie N-kât foremny o boku >a< (np. 5-kât foremny lub 100-kât
foremny). W kaûdym wierzchoîku umieszczona jest rakieta
samonaprowadzajâca wycelowana w sâsiada. Wystrzelamy wszystkie
rakiety jednoczeônie -- kaûda ma znanâ prëdkoôê >v<. W jakim
miejscu (he, he) i po jakim czasie (juû nie he, he) rakiety sië
zderzâ? Zadanie, wbrew pozorom, moûliwe do rozwiâzania na
poziomie liceum.
Tyle.
--------------czy to podajemy? tak.------
Bolesîaw Szczerba
e-mail: zfjmgr@usctoux1.cto.us.edu.pl