Hallo,

Ik programeer in Visual Basic 6 .
Ik zal wat vertellen over mijn programmeerhobby . Mijn interesse qua programmeren ligt op twee terreinen:
 [1] - Grafische effecten.
 [2] - Kunstmatige intelligentie.

Eerst wat over [1]- (grafische effecten) :
Mijn doel was/is computertekenfilms maken dmv zelfgeschreven programma's.
Dmv berekeningen maak een serie plaatjes die ik dan snel achter elkaar laat zien en dan op video zet. De term die ik voor deze hobby bedacht heb is: kalkugrafie.
Ik heb 2 voorbeelden van kalkugrafie bijgeleverd :
 - Bol.
 - Nepray.
Ik heb ooit een raytraceprogramma in elkaar gezet :
Mooie plaatjes maar zeer langzaam. 45 Minuten. over een plaatje van 640*480*24bits 
(computer = 800MHz) dat was me te langzaam. Dus bedacht ik een wereld die alleen gevuld kon zijn met bollen .
Vervolgers laat ik een plak door deze wereld lopen, kijk of zich iets bevind in deze plak en zo ja teken de doorsnede daarvan op het scherm .
Deze plak kan horizontaal en verticaal zijn:
 - Horizontaal: bol.
 - Verticaal : nepray.
Bol is sneller en nepray is perspectief . Een plaatje in bol duurt nu nog maar 6-30sec. dit hangt af van de complexiteit van de wereld. Het nadeel van deze methode is dat je alleen bollen , delen van bollen en vormen opgebouwd uit bollen in de wereld kan krijgen.

En nu wat over [2] (kunstmatige intelligentie):
Het doel van k..i. is (volgens mij) het maken van programma's die 'intelligent' gedragen of dat leren. Er zijn verschillende methoden om dat voor elkaar te krijgen:
 - boomzoeken: bordspellen .
 - neurale-netwerken .
 - genetisch algoritmen .
 - genetisch programmeren .
 - fuzzy logic .
Er zullen er ongetwijfeld meer zijn. Ik heb vier voorbeelden van genetisch programmeren gestuurd :
 - pi_vc  doel: vind een methode om pi te berekenen .
 - xor_vc  doel: vind met boleanse algebra de xor met alleen and , or en not.
 - functie_vc  doel: vind de functie van een gegeven grafiek. In dit geval: 
	f(temperatuur_van_water) = druk_waarbij_water_kookt .
 - lander_vc  doel: leer landen op planeet x. (de laatste werkt nog niet goed.)

Hiervoor schreef ik heet in LISP4vb. Waarom LISP?:
Bij LISP zijn programma's opgebouwd uit lists en atoms. Atoms zijn of een functie
of een terminal
list:
        <function>
         /             \
 <terminal>     <terminal>

voorbeeld:
   *
  / \    <=>    [ * 5 a ]
 5   a
[in basic : uit=5*a .]
Het voordeel van LISP is dat de functie altijd de eerste atom in een list is en dat je een terminal door een list kan vervangen (mutatie):
  *
 / \
5   +     <=>   [ * 5 [ + 3 a ] ]
   / \
  3   a
[in basic : uit=5*(3+a) .]
  +
 / \    <=> [ + 5 a ]
5   a
[in basic : uit=5+a .]
en
  *
 / \    <=> [ * 4 a ]
4   a
[in basic : uit=4*a .]
Er zijn ook mutaties. Dit kan ook een list uit een ander programma zijn (vermenging). door nu een aantal programma's:
 - eerst te laten 'leven'.
 - de kleinste fouten uit te sorteren.
 - de beste programma's ouders(parents) te laten zijn van vermengde en gemuteerde 
   nieuwe programma's.
 - door bovenstaande stappen maar lang genoeg te herhalen, krijg je steeds betere 
   programma's.
dwz: de fouten worden kleiner .

Het doel van LISP4vb was een tegenstander in spelletjes te kunnen stoppen die steeds 
slimmer wordt of een stel beestjes in een filmpje te laten evolueren. dit is mij (nog) niet gelukt . 
Misschien heeft een ander er meer geluk mee.

T.P.krijgsman
Alberda str 34
1505 WT Zaandam
