1e Tussentijds Verslag, 5-12-'94
Structuur v/ computerprogramma's
Dennis
De artificieel levende robot,
in een gesimuleerde wereld.
Werner Van Belle
2e Kandidatuur
Computerwetenschappen
e-mail : we47091@vub.ac.be
Wel er werd een
tussentijds verslag gevraagd. Hier heb je er een. Persoonlijk vind ik
het een
moeilijk project, in die zin dat ik me de algoritmes niet onmiddellijk
kan
inbeelden. Vandaar dat ik denk dat deze tussentijdse evaluatie wel
degelijk
nuttig zal zijn. Onderstaande tekst is gewoon geschreven alsof ik de
wijsheid
in pacht heb. Dit is om lange tussenwerpselen zoals 'ik denk...',
'volgens
mij'... te vermijden.
Het programma
bestaat uit een aantal lagen.
User-interface
: De user-interface zal zorgen dat het testen van het programma op
een
eenvoudige en doeltreffende wijze kan gebeuren. In feite is dit het
meest
eenvoudige aan dit programma. De userinterface beheert de robotten en
de wereld
waarin deze bewegen. Nochthans kan hij deze niet onmiddelijk
veranderen, daarvoor
zal hij alles moeten laten gebeuren door een 'programma'. (imperatief
&
functioneel geprogrammeerd)
Programma
: Het ADT programma is diegene die de robotten zegt wat ze moeten
doen. Het
programma moet STAP per STAP kunnen uitgevoerd worden. (Zo heeft de
user-interface toch nog wat in de pap te brokken). Een programma
verandert
niets rechtstreeks aan de wereld, noch aan de robotten.
(message-passing) (samen
met de user-interface : 5 uur)
Een error-message is een
string die de 'error-text' bevat.
function(parameters)->result
is de algemne vorm van de interface
self is de dispatch die
wordt weergegeven
?? indien ik het zelf nog
niet goed weet
Create-program()->self
Maakt een
leeg programma.
Execute-step(robot)->errormessage
Voert de volgende stap uit op robot
<robot>
Load(fromport)->self
Laad een
programma van input-file
Save(outport)->self
Saved
een programma naar outport
Print(printfunc)->self
Print het
programma in een leesbare vorm
User-input(??)->self
Laat de
gebruiker een programma invoeren
Robot
: Een robot kent al zijn interne componenten. De robot, Dennis
genaamd,
zorgt dat de commando's die hem gegeven worden naar de juiste component
worden
doorgestuurd. (door hem een naam te geven denk je gemakkelijker
'message-passing-gericht). Dennis zal ook zorgen dat interne &
externe
conflicten niet kunnen voorkomen. Dit kan hij doen door aan de juiste
component
te vragen welk 'bewegingspad' dat component zou willen volgen. Dan
controleert
hij of dit bewegingspad iets anders kruist en besluit hij eventueel dit
commando niet uit te voeren. (message-passing). De robot wordt
bijgehouden als
een tree, die als knopen componenten heeft. (5 uur)
Create-robot(unieke-name)->self
Creëert een robot
Draw()->self
Tekent de robot
door de componenten te tekenen
User-input(??)->self
Laat de
gebruiker een robot invoeren
Command(bericht)->error-message
De robot probeert commando
<bericht> uit te voeren
Load, save & print
Componenten
: Componenten zorgen ervoor dat de beperkingen die een component zijn
opgelegd
zonder meer worden uitgevoerd. Door het object-gericht te programmeren
worden
al de verschillen (die irritant zijn voor Dennis) in één klap opgelost.
Elke
component moet op zijn specifieke commando's kunnen reageren. Als
resultaat
wordt dan weergegeven of het commando MAG uitgevoerd worden.
(Bijvoorbeeld :
een scharnier mag geen hoek <10° toelaten). Als het commando mag
uitgevoerd
worden, wordt als resultaat het bewegingspad weergegeven. (zodat de
Dennis kan
controleren of er interne of externe snijdingen plaatsgrijpen). Om de
component
vlot te laten werken zal hij kennis bezitten over wie zijn vader is en
wie hij
als kind heeft. Voor de rest moet hij zichzelf kunnen tekenen op het
scherm
(door gebruik te maken van de nuggets).(20
uur)
Create-component(name, parent)->self
Maakt een component met als vader
<parent>
Draw()->self
Tekent de
component op het scherm.
Command(bericht)->graph-set
Probeert de component te
bewegen
Load, save & print
De
nuggets : dit zijn de grafische basis-routines waarover het systeem
beschikt. Bij deze valt of staat heel het systeem (lopen zal het wel
nooit). Deze
worden functioneel geprogrammeerd zodat er geen 'acces'-problemen zijn.
De term
'grafische routines' is misschien ietwat misleidend. Zij zullen niet
enkel
gebruikt worden om iets af te drukken op het scherm, maar ook om lijnen
te
snijden. Om een circle met een lijn te snijden. Om te controleren of
een punt
in een gesloten verzameling valt enz... (30
uur)
Legende
og
open of
gesloten?
go
grafisch
object
Points
constructor Make-point
fields
X,
Y
methods
Draw-point, Point?, Save-point, Load-point
intersect
Intersect-p-p
Lines
constructor Make-line
fields
From, To, X1,
X2, Y1, Y2, fromc, toc, from-og, to-og
methods
Save-line, load-line,
Draw-Line, Line?
intersect
Intersect-p-l,
intersect-l-l
Circles
constructor
Make-circle
fields
from-angle, to-angle, from-of, to-og, radius,
center
methods
Circle?, Draw-circle, Save-Circle, Load-circle
intersect
Intersect-p-c, intersect-l-c, intersect-c-c
Graph-set
constructor
Make-graph-set,
methods
foreach, delete, add, draw-set, save, load, print
intersect
intersect-p-s, intersect-l-s, intersect-c-s,
intersect-s-s, go-in-set?
Algemene ongetypeerde
procs
Draw, Save, Load, Print, Intersect
World
: De bedoeling van deze is bij te houden wat waar staat. Welke
robots er in
de wereld leven. Dit is voornamelijk bedoelt om rap op te zoeken of een
beweginspad snijd met iets. Indien het snijdt moet ik als resultaat
iets
krijgen dat mij zegt welke robot en welke component.
Rationale
getallen : Om exact te werken voer ik ze opnieuw eens in. De
interne
representatie zorgt dat de exactheid perfect is en dat er met oneindig
gewerkt
kan worden. (3 uur)
Even een run van
het programma schetsen (nee het is geen filmscenario):
- User-interface
zorgt dat de gebruiker 2 programma's laadt.
- De
user-interface werkt deze twee programma's stap per stap af.
- Het Programma
zorgt dat bij elke stap de robot wordt verplaatst, indien mogelijk.
- De robot
probeert zichzelf te verplaatsen door aan de juiste component het
juiste
bericht te sturen
- De component
geeft een bewegins-pad weer. (zie figuur)
- De robot
controleert nu of dit sleeppad nergens tegenaan botst.
- Indien dit het
geval is wordt er gewoon niets verplaatst. Indien dit niet het geval is
wordt de
robot verplaatst en wordt de wereld aangepast.
- Hop, controle
weer naar de user-interface.