Hallo en welkom bij deze tutorial in de vorige we hebben de kaart geïnitialiseerd en nu tijd voor de spannende dingen,
we maken de auto en we doen dat met een klas.
Natuurlijk zul je zien dat de klasse erg praktisch is om dingen te creëren die veel eigenschappen hebben, omdat, zoals
je kunt zien, niet alleen enkele variabelen voor mijn auto definieer, maar ook enkele functies, wat natuurlijk de
functie die ervoor zorgt dat de auto naar links, naar rechts of rechtdoor gaat.
We hebben dus een aantal variabelen die belangrijk zijn om de omgeving te beschrijven.
We hebben bijvoorbeeld de hoek, dat is de hoek tussen de x-as en de as van de richting van de
auto.
Dan hebben we de rotatie, wat de laatste rotatie is, die onthouden is ofwel nul graden, 20 graden
of min 20 graden.
Dan hebben we de snelheid, de X-coördinaat van de snelheidsvector en de Y-coördinaat van de snelheidsvector
en dan de vector van coördinaten, snelheid X en snelheid Y.
Dan hebben we de sensoren en de signalen, en dat is heel belangrijk, de oproep die we
doen zal drie sensoren hebben, sensor één, sensor twee en sensor drie.
Sensor één zal detecteren of er een geur voor de auto is, dan is sensor twee de sensor die zal detecteren of
er een geur aan de linkerkant van de auto is.
En sensor drie is de sensor die detecteert of er een geur is aan de rechterkant van de auto.
En dan krijgen we de signalen van deze drie sensoren.
Dat zijn de signalen die door elk van de sensoren worden ontvangen.
Dus signaal één is het signaal dat wordt ontvangen door sensor één.
Signaal twee is het signaal dat wordt ontvangen door sensor twee en signaal drie is het signaal dat wordt ontvangen door sensoren.
En hoe werkt het dan?
Signaal één is de dichtheid van het verzenden rond sensor één.
Signaal twee is de dichtheid van rondzenden aangezien de twee en signaal drie de dichtheid van rondzenden van sensor drie
is.
En hoe berekenen we deze geurdichtheid?
Nou, dat is heel eenvoudig.
We nemen enkele grote vierkanten rond elk van de sensoren.
Dit zijn eigenlijk vierkanten van tweehonderd bij tweehonderd en vier elk van de vierkanten.
We delen het aantal enen in het vierkant door het totale aantal cellen in het vierkant.
Dat is twintig keer twintig is vierhonderd.
En dat geeft ons de dichtheid van cellen omdat die overeenkomen met de geur.
We doen dit voor elke sensor en dat geeft ons de geurdichtheid rond elke sensor.
Dat zijn de signalen.
Oke.
Dus nu hebben we alles om de geur te detecteren en dan hebben we de bewegingsfunctie.
En natuurlijk zorgt de bewegingsfunctie ervoor dat de auto naar links kan gaan, rechtdoor of naar
rechts.
Dus laten we het snel doornemen.
We hebben hier de update van de positie van de auto met zijn laatste positie, die zelf de pas
hier en de snelheidsvector is.
Dus dankzij de snelheidsvector wordt de positie bijgewerkt in de richting van de snelheidsvector.
Dan krijgen we de rotatie, die we verderop in de code hier zullen krijgen.
Rotatie is hier gelijk aan actie tot rotatieactie.
We zullen de actie selecteren en vervolgens de rotatie krijgen.
En dus is deze zelfrotatie gelijk aan rotatie.
Hier is deze rotatie die we leren kennen hoe we de auto moeten draaien die naar links of naar rechts
gaat.
Dan werken we de hoek bij, wat ik eraan herinner is de hoek tussen de x-as en de as van de richting van
de auto.
En als de auto eenmaal is bewogen, moeten we de sensoren en het signaal bijwerken, want natuurlijk, als
de auto net heeft gedraaid, nou ja, de sensoren zijn ook gedraaid.
En daarom moeten we ze roteren met behulp van de roteerfunctie en waaraan we de nieuwe positie toevoegen.
En waarom hebben we deze vector van drie nul?
Dat komt simpelweg omdat dertig de afstand is tussen de auto en de sensor.
Weet je, het is de afstand tussen de auto en wat de auto detecteert.
En als de sensoren eenmaal zijn bijgewerkt, wel, dan is het tijd om de signalen bij te werken.
Dus hier doen we precies wat ik uitleg om de signalen te berekenen, we krijgen X-coördinaten van onze sensor.
Dan nemen we alle cellen van min 10 tot plus 10.
Dan doen we hetzelfde voor de Y-coördinaat, waarbij we alle cellen nemen van min tien tot plus 10.
Dus daarom krijgen we het vierkant van 20 bij 20 pixels rond de sensor en binnen het vierkant met
enkele oudere.
Dus eigenlijk hebben we wat oudere cellen omdat de cellen een nul of een bevatten, en aangezien in een vierkant van 20
bij 20 20 keer 20 gelijk is aan 400 cellen.
Wel, we delen het door 400 om de dichtheid van degenen binnen het vierkant te krijgen.
En zo krijgen we het signaal van de dichtheid van cellen rond de sensor.
En we doen hetzelfde voor de tweede sensor en de derde sensor om het tweede signaal en het derde signaal te
krijgen.
Oké, dus dat is om de geur te detecteren.
En dan zijn de drie regels code hier erg belangrijk.
Het is weer een slechte beloning die we aan onze auto willen geven wanneer deze een van de randen van de kaart
bereikt.
Weet je, we willen niet dat de auto tegen een muur botst en daarom willen we hem straffen, hem straffen
als hij te dicht bij een muur komt.
En daarom doen we dat hier.
Als de eerste sensor groter is dan langer, min 10, dan is dat groter dan hier omdat deze afstand hier langer
is.
Dus langer, min 10 is hier.
Dus als sensor één groter is dan langer, minus 10 betreft, alle punten die hier zijn, dat wil zeggen
als de auto dichter bij de rechterrand van de kaart komt of als zelfsensor één X lager is dan 10 stappen hier, als de
auto komt dichter bij de linkerrand van de kaart, of als sensor Y groter is dan groter, min
10, is dat de bovenrand van de kaart.
En of als zelfsensor Y lager is dan 10, dan is dat de onderkant van de kaart.
En dus als de sensor een van deze vier randen bereikt, nou, dan zullen we het signaal van het
sensorsignaal plaatsen.
Een daarvan is de signaalsensor.
Eén, we zullen het instellen op één.
En wat betekend dat?
Dat betekent volledige verzending als een volledige geurdichtheid.
Het is het ergste wat je kunt krijgen.
Er is zoveel gevoel dat het je auto gaat stoppen.
Signaal zal dus één zijn en daarom zal de auto een verschrikkelijk slechte beloning krijgen.
Oke.
En dan doen we hetzelfde voor signaal twee en signaal drie van sensor naar intensief drie.
Oké, en dan maken we de gameklasse, dus dat is eigenlijk de klasse om de game te maken, want tot
nu toe hebben we alleen de auto gemaakt en nu moeten we natuurlijk de kaart maken.
We moeten het spel zelf maken, dus we zullen het spel niet spelen.
Het is onze A. L. dat zal het spel spelen.
En het spel is eigenlijk om de obstakels te ontwijken en van het vliegveld naar het centrum te gaan en vice versa.
Dus in deze spelklasse moeten we een aantal objecten maken, zoals de auto.
Dan moeten we de update-functie definiëren.
Dat is het belangrijkste.
En eigenlijk zullen we ons daar nu op concentreren, want dat is in deze update-functie die de
actie selecteert die de auto op elk moment moet doen om zijn doel te bereiken.
En deze sectie is precies de output van ons neurale netwerk, het neurale netwerk dat de kern zal
vormen van onze kunstmatige intelligentie.
En dus wordt deze actie geretourneerd door het brein van de auto, waarvan ik eraan herinner dat het het object is van onze DEJUAN-klasse die
in onze A. L. het dossier.
En dit object heeft een methode die update wordt genoemd, en het heeft als invoer de laatste beloning en het laatste
signaal.
Dus de laatste beloning is natuurlijk de laatste beloning die de auto heeft behaald.
En het laatste signaal is natuurlijk het laatste signaal van de drie sensoren signaal één van sensor één,
signaal twee van sensor tot signaal drie van sensor drie.
Maar dan voeg ik nog twee andere inputs toe, namelijk de oriëntatie van de auto ten opzichte van het doel.
Dus als de auto bijvoorbeeld richting het doel rijdt, is de oriëntatie gelijk aan nul.
Als het iets naar rechts gaat, zal de oriëntatie bijna vijfenveertig graden zijn.
En als het iets naar links gaat, zal de oriëntatie dicht bij min vijfenveertig graden zijn.
Dus dat is de vierde invoer van onze invoerstatus.
En dan is er nog de minder input die min oriëntatie is.
Dus meestal zijn de ingangen van een neuraal netwerk onafhankelijk.
Er is geen lineariteit met meerdere auto's, maar het maakt niet echt uit of we dit hadden, want het neurale netwerk lost
dat gewoon op met de gewichten.
Maar toch merkte ik dat door deze min-oriëntatie toe te voegen, de auto, de training van
de auto, de verkenning kan stabiliseren.
Weet je, we doen dit zodat de A. L. verkent niet altijd in dezelfde richting door deze
minusoriëntatie toe te voegen.
We zorgen ervoor dat het in beide richtingen verkent, rechts of links.
En dus zijn dit de drie signalen, plus de oriëntatie en min oriëntatie de vijf ingangen van onze
gecodeerde vector, die in het netwerk gaan.
Dat is onze invoervector die in het netwerk gaat.
En nadat het in het netwerk is gegaan, nou, het netwerk retourneert de uitgangen, wat de actie is die elke
keer moet worden gespeeld.
En de output wordt geretourneerd door deze updatefunctie die het netwerk zelf en de outputs van het netwerk
bevat.
En daarom moeten we het laatste signaal invoeren.
Dat is de invoerstatus en ook de mindere beloning, omdat de te spelen actie ook afhangt van het laatste woord.
Oké, en dan werken we de gemiddelde score van de prijzen bij, we werken de rotatie bij, we gebruiken
de verplaatsingsfunctie om de auto te draaien volgens de geselecteerde actie.
We werken de afstand van de auto tot het doel bij en we krijgen de posities van de sensoren.
Bal één, kom twee en drie komen overeen met de ballen die de sensoren op de kaart vertegenwoordigen.
Dat zie je heel snel.
En dan hier, dat deel is erg belangrijk, want daar bestraffen we de auto als hij
naar een bepaald centrum gaat, want zoals je kunt zien, betekent dit dat als de auto op wat zand staat, hij zal worden afgeremd.
Dus daar verminderen we de snelheid.
De snelheid is meestal zes, zoals je hier kunt zien.
En als het overgaat in wat zand, zal het er een zijn.
Dus het zal worden vertraagd tot één.
Je zult zien hoe de auto wordt afgeremd zodra hij op wat zand gaat.
Het gaat dus langzamer.
En bovendien krijgt het een slechte beloning.
Het krijgt een min één beloning.
En dat is eigenlijk de slechtste beloning die je kunt krijgen.
De beste beloning is er één.
De slechtste beloning is min één, en de beloning ligt tussen min één en plus één en anders.
En de auto staat niet op het zand terwijl hij zijn gebruikelijke snelheid van zes aanhoudt.
En dan voegen we nog iets toe.
Als het dichter bij het doel komt, krijgt het een licht positieve beloning.
En als het verder van het doel af komt, tja, dan krijgt het een licht negatieve beloning, minus open voor.
En dan de laatste voorwaarden die te maken hebben met de beloning.
Dat is als de auto te dicht bij een van de randen komt, zoals we eerder zeiden.
Weet je nog toen we het over full zeiden, nou, als de auto te dicht bij de linkerrand van
de kaart komt, krijgt hij min één beloning.
Als het te dicht bij de rechterrand van de kaart komt, krijgt het een beloning min één.
En als het te dicht bij de onderkant van de kaart komt, krijgt het een beloning min één.
En als het te dicht bij de linkerbovenhoek van de kaart komt, krijgt het een beloning min één.
Dus dat is een vreselijke straf.
En zo zul je zien hoe het snel zal gaan om je niet op iets anders te haasten.
Oke.
En dan is dit om het doel bij te werken wanneer het doel is bereikt.
Dus, weet je, wanneer de auto het vliegveld bereikt, wat het eerste doel is, dat is
de linkerbovenhoek van de kaart, terwijl het doel verandert in de rechterbenedenhoek van de kaart, dat is het centrum.
En dat is precies wat we hier doen.
We werken de coördinaten van het doel en de Y-coördinaten van het doel bij, en vervolgens werken we de afstand van de auto
tot het doel bij.
Oke.
En dan is dat minder belangrijk.
Dat is gewoon een klasse die de tekengereedschappen zal toevoegen zodat we sommige wegen of obstakels op de kaart kunnen
schilderen.
Dat heeft meer met grot te maken.
U kunt een kijkje nemen als u wilt.
Ik zal de beginversie van deze code geven en ik zal wat referentie geven als je dieper wilt gaan en hoe
je dat met cavey kunt doen.
Maar we komen verder van kunstmatige intelligentie, dus ik ga niet in op de details ervan.
En dat is hetzelfde voor de laatste codesectie hier met de huidige klasse.
Dat is gewoon om de API-knoppen toe te voegen, te wissen, op te slaan en te laden.
Dus dat is wat we hier doen.
Duidelijk canvas veilig.
En dat is eigenlijk heel belangrijk.
Dat is voor ons om de A te kunnen redden. L. , weet je, om het brein te redden zodat je
het later opnieuw kunt gebruiken door de laadfunctie te gebruiken, wat een ander hulpmiddel is dat we op de kaart toevoegen om het brein van de
auto te laden, dat wil zeggen om het geheugen van de auto te laden, hoe navigeren in de kaart.
En dan tot slot hebben we de laatste van de laatste codesectie, die het hele ding bestuurt, dat wil zeggen dat de kaart
en de A. L. zelf.
En eigenlijk gaan we dat nu doen.
Laten we eens kijken naar alles wat we maken in deze code.
Dus nu de A. L. wordt niet uitgevoerd.
De auto zal dus een zeer willekeurige beweging hebben.
Het zal er echt uitzien als een insect.
Maar maak je geen zorgen, dat lossen we op.
We zullen hem niet alleen trainen om te bewegen als een echte auto en hem ook trainen om bepaalde wegen te volgen en
obstakels te vermijden.
Dus laten we dit doen.
Ik ga alles selecteren en uitvoeren.
En hier is de kaart en hier is de auto.
Oke.
Dus dat is een klein ding dat je ziet dat eruitziet alsof een insect onze auto is.
Dus zoals ik je al zei, de acties zijn volledig willekeurig.
Dus bij elke actie kiest de auto willekeurig of hij recht naar links of naar rechts gaat.
Dus daarom maakt het wat onzinnige bewegingen en daarom ziet het eruit als een insect.
Dus dat lossen we natuurlijk wel op.
En natuurlijk, aangezien de A. L. is geactiveerd, nou, het gaat niet
naar het doel, dat is de luchthaven hier of naar het centrum rechtsonder op de kaart.
En we zullen dit allemaal oplossen door het ijs te maken.
We zullen de EHI in deze auto of dit insect implementeren, zodat je de drie ballen hier kunt zien, de gele, de
rode en de witte.
Dat zijn onze drie sensoren.
Dus dat is wat zal detecteren dat er wat geur omheen zit.
En over geur gesproken, laten we er een paar gooien.
Dus om dit te doen, moet ik hier snel naar links gaan en.
Je weet wel, wat zand tekenen door nog steeds links te klikken.
Dus op dit moment voeg ik wat zand toe, we kunnen wat meer toevoegen, dus elke keer dat je zand toevoegt en je
kunt zien dat als je er zand in doet, dat de zandreeks is.
Dat zijn de nul nul coördinaten van de oorsprong.
En hier zijn er veel.
En zoals je kunt zien, nou, dat is goed om te zien.
De auto ging gewoon het zand in en remde af.
Dus zoals je nu kunt zien, gaat het echt langzamer omdat het het zand in gaat en nu probeert
het te ontsnappen.
En dus, weet je, wat we zullen doen, is dat we wat wegen tekenen en, uh, we zullen wegen tekenen van het vliegveld
naar het centrum en we zullen de auto trainen om op de weg te blijven en de obstakels te vermijden.
Oke.
En zoals je kunt zien, is er de duidelijke knop om het zand te verwijderen.
Er is de save-knop om het brein van de auto te redden.
En eigenlijk is er deze kerncurve waar we het over hadden, die veiligheid die je model redt, eigenlijk het brein
van je auto.
En dan kun je weten, wanneer je je code achterlaat of je computer uitzet en je wilt er weer naar
terug, je kunt de laadknop gebruiken om je model te laden, dat wil zeggen om de hersenen te laden en dat zal
de treinen krijgen .
Ik heb je auto.
Oke.
Dus nu kan ik niet wachten om te beginnen met het maken van de I, dit wordt heel leuk.
Zal ons neurale netwerk maken en we zullen de auto straffen zodra hij niet doet wat we willen.
Dus laten we dat doen vanaf de volgende tutorial.
En tot die tijd, geniet van I.