Re: Pratande självlärande datorer?
"Nånå, det är enklare sagt än gjort - de ska klara av att fatta varandras syntax och filhantering och format och kommandon och fanåhansmoster, och ändå evolvera just sånt på samma gång. Kräver antingen ett ständigt konfererande och jämförande med varandra (och what if två stycken har börjat utveckla inkompatibla Bra Idéer på samma område?) eller ett ständigt växande krav på konverteringskapacitet och bakåtkompatibilitet. [snippeti]
Jo, men hur många datorer är inblandade? Med evolverande apparater spridda över en hel Federation får man sjuttioelva miljoner kockar på samma soppa, vilket borde skapa en rätt grandios mängd systemkommunikation om de vill fortsätta prata samma språk på sikt."
Till att börja med är hela evolutionen ett jätteexempel på sjuttioelva miljoner kockar på samma soppa (för närvarande är det väl sex miljarder människor som kokar på soppan "människa", till exempel). Tanken med genetisk programmering är just att man ska ha en stor population program, korsa och mutera kod och plocka ut de mutationer som är fördelaktiga. Detta förfarande
bör till och med ske på fler datorer än en för att kunna utvecklas så att den tar hänsyn till alla möjliga systemkonfigurationer.
Dessutom, så fort en dator talar "fel språk" så kommer den inte längre att kunna kommunicera med sin omgivning. Det leder till att den generationen muteras tills den kan förstå omgivningen eller att koden dödas, återgår till en tidigare generation som korsbefruktas eller ersätts med fungerande kod från andra datorer. Återkopplingen är nödvändig för självlärande program, och att inte kunna kommunicera ger negativ återkoppling, vilket tvingar fram en förändring/anpassning av systemet.
Som ett exempel kan vi ta ett litet experiment som utfördes i början av nittitalet, då en logikkrets med 100 celler fick lite slumpvist vald kod och uppgiften "skilj på en 10kHz-signal och en 1kHz-signal". Kodsnuttar som inte fungerade sållades bort, kodsnuttar som visade tecken på att kunna fungera modifierades eller korsbefruktades och provades igen. Efter ca 6000 generationer kunde programmet lösa sin uppgift, alla småbuggar var ute ur systemet, och kretsen använde 33 celler av 100. Som jämförelse behövdes ett hårdoptimerat människodesignat system ca 50 celler bara för pulsgeneratorn som användes för jämförelse (pulsgeneratorn behövdes inte alls i den genetiskt framväxta kretsen - den fungerade i alla fall på något mystiskt sätt med återkoppling och gud vet vad).
Mannen bakom experimentet har fortfarande ingen aning om hur den resulterande kretsen fungerar.
Visionen är ett program som rättar fel av sig själv och anpassar sig efter systemets resurser och användarens behov. Ta Pyttemjuks berömda uttalande: "Två miljoner rader kod bara måste innehålla fel." Varje fel kommer att leda till negativ återkoppling som förändrar koden. Den nya koden utvärderas och de som verkar leda åt rätt håll används för en ny generation, helt automatiskt. Detta skulle kunna ske tyst i bakgrunden utan att användaren märkte något. När felet försvinner så kan man införliva den nya koden i systemet och sedan låta det vara, eller tvinga utveckling i hopp om att koden optimeras ytterligare.
Negativ återkoppling kan även genereras av ineffektivt användande av resurser (till exempel använda Excel som databas - något som jag vet att de flesta företag gör idag i viss utsträckning), eller om en ny resurs tillförs (till exempel ett nätverkskort, eller en ny hårddisk). I båda fallen kommer det leda till en ny evolutionsprocess som tar fram den kod som behövs för att lösa uppgiften och lösa den effektivare än tidigare.
Jag har faktiskt en känsla att allt eftersom komplexiteten hos ett kommunikationssystem ökar så ökar också behovet av en självlärande återkopplingsmekanism, det vill säga genetisk programmering. Jag känner folk som bygger nya genetiska programmeringsspråk, där man inte formulerar hur ett problem ska lösas, utan vilket resultat man vill ha. Kan man formulera resultatet rätt så kommer programmet att skriva sig själv tills resultatet uppnås. Skulle detta sedan inte stämma blir nästa steg att modifiera resultatspecifikationen tills man har beskrivit vad man vill ha rätt, och därmed förr eller senare få rätt resultat.
Denna metodologi i programmering är så radikalt skild från tidigare funktions- och objektorienterad programmering att det i högsta grad rör sig om ett paradigmskifte. Det ska bli kul att se vart det leder.
- Krille
<A HREF="
http://www.foxtail.nu" target="_new">
http://www.foxtail.nu</A>