Archive for the 'Programmering' Category

Funderingar om AI

April 14th, 2008 by mind

Jag har klurat länge på AI i olika former.

Min nuvarande tankekedja började med chatbottar i stil med MegaHAL. MegaHAL är alltså ett program som man kan chatta med, ungefär som man pratar på IRC. Man skriver in text och när man skrivit svarar MegaHAL. MegaHAL lär sig av vad man skrivit och utvecklas, i början kan inte MegaHAL svara nåt annat än det inbyggda hårdkodade svaret för när den inte har lärt sig nog mycket än. Efter ett tag börjar dock programmet spotta ur sig svar, i början ganska trevande saker som är i princip samma sak som man skrev in till att börja med. Om man är ihärdig och fortsätter prata med MegaHAL så kommer den svara med allt mänskligare svar och efter ett tag kan det bli svårt att förstå att detta inte är en person. Dock blir MegaHAL lätt psykotisk efter ett tag, och jag använder “lätt” här i ordets vidaste bemärkelse. MegaHAL har även en tendens att lyckas förolämpa personer som pratar med den grovt. Förutsatt att de inte förstår att det är ett program förstås. Förolämpningar riktade mot MegaHAL vänds snabbt till extremt passande motförolämpningar.

Ett exempel på vad MegaHAL kan säga:

“Cows fly like clouds but they are never completely succesful.”

Underbart filosofiskt. Men i slutändan är det bara ett program, MegaHAL förstår inte ett dugg av vad den säger och den mesta betydelsen och innebörden av det den säger är vår mänskliga förmåga att personifiera svaren, vår förmåga att sätta mänskliga egenskaper på det som inte är mänskligt och vår förmåga att se mönster där inte finns några. MegaHAL spottar ofta ur sig totalt nonsens också men det är dock underhållande tack vare de guldkorn den spottar ur sig ibland i form av klockrena visdomar med en gnutta humor.

MegaHAL bygger på en ganska enkel princip, kommer ni ihåg de där listorna man gjorde i skolan med en mängd olika ord på olika papper? Man satte alla ord av samma ordklass på ett papper, andra ord av en annan ordklass på ett annat papper, osv. Sen kunde man lappa ihop galna meningar genom att välja slumpmässiga ord från varje papper. MegaHAL fungerar ungefär efter samma princip, den lär sig statistiskt sett vilka ord som brukar komma efter varandra när man skriver saker till den, sedan slumpar den fram meningar med hjälp av detta, flera hundratals meningar faktiskt, sedan väljer den en mening som har nyckelord med mest information och den mening som är mest överraskande (se MegaHAL-länken för mer information och en matematisk modell som beskriver detta). Det spelar ingen roll vilket språk man använder till MegaHAL (såvida den använder vårt alfabet alltså, jag vet inte hur det fungerar med kinesiska eller japanska) den “lär” sig alla.

Denna tanke ledde mig vidare till Neurala nätverk. Min ursprungliga tanke var att hitta ett sätt att träna neurala nätverk att göra något liknande, att få ett något mer naturligt “tal” från en chatbot. Jag har vänt och vridit detta på alla sätt jag kan och min slutsats är att det inte går att göra såvida inte programmet faktiskt förstår vad den pratar om. Inte nog med det, den måste kunna det på ett plastiskt sätt, alltså, ingen kunskap den har får vara huggen i sten, den måste kunna utöka sina begrepp, vidga dem, inskränka dem. Den måste lära sig koncept. Den måste lära sig att luft kan man andas, att saker som färdas genom luften flyger, såvida de inte faller, men båda färdas dock genom luften, att det finns saker som tar upp plats, har massa, eller inte, som t.ex tankar. Att tankar också är ett verb, att man tankar bilen. Som ni ser, det blir mycket komplext att göra en sådan sak som vi tar för givet. Men hur ska man lära ett program koncept?

Kan man hårdkoda in dem? Dvs i förväg lära ett program att det finns luft, en planet, yttre rymden, atomer, tankar, osv och sedan låta den gruppera in framtida koncept den lär sig i relation till dessa? Ja, kanske men tänk efter hur mycket det finns att lära den, det blir ett omöjligt jobb. Ta bara en sådan sak som generaliseringar, saker vi tar för givet, saker vi bara har lärt oss genom erfarenhet. “Common sense”. Ok, så man måste alltså låta programmet få erfarenhet genom att lära sig, träna. För att förstå vårt sätt att tänka måste den förstå våra erfarenheter och därmed rimligen växa upp som oss, någorlunda i alla fall.

AI-illustration
(Credit: University of Wisconsin)

Så, för att få ett program som kan prata som oss måste den förstå vad den säger, för att förstå vad den säger måste den vara intelligent på riktigt och lära sig av erfarenheter som oss. Man måste alltså bygga en robot åt programmet som den får “leva” i. En kropp åt själen så att säga.

Nåja, att bygga en robot är ingen liten uppgift. Ta bara uppgiften att bygga en hand som fungerar lika bra som våra händer. Denna hand kommer inte ens i närheten, men den är en början:

Robothand
(Credit: Shadow Robot)

Ja, det är ingen liten uppgift, att bygga en robot. Det är så man baxnar. Men det finns en annan möjlighet. Simulera en värld med en simulerad robot i, låt programmet tro att den är i en riktig värld. Men frågan är förstås, vad är svårast, simulera en värld eller bygga en robot?

Jag har i alla fall vissa ideér om hur man kan börja lära neurala nätverk koncept och problemlösning på ett sätt som kan få dem att faktiskt lösa nya problem och nya frågeställningar, kanske en dag till och med forska. Men det krävs fortfarande mycket att bena ut och väldigt mycket mer finslipande innan jag kan göra något som ens liknar någonting i praktiken. Kanske kan jag få till något enkelt för exempelvis dataspel, “smarta” datorspelare i en rollspelsvärld som lär sig, utvecklas och har intriger inom den värld de är definierade. För att inte tala om att det krävs en kraftfull dator. En MYCKET kraftfull dator.

Syverne till sist får man fråga sig hur mänsklig man vill göra detta program och hur höga krav man har. Själv ser jag hela tiden saker som kan förbättras med allting, även om jag är nöjd med dem. Kanske ska man nöja sig med nästan mänskliga program, dock kan dessa bli kusliga och/eller farliga beroende på hur mycket kontroll man ger dem. Man kanske måste ge upp tanken på att ens ha dem mänskliga, kanske kan man få dem intelligenta men omänskliga. Just nu verkar både att bygga en robot eller att simulera en värld som ganska oöverstigliga hinder. :)

Gömma data i bilder

January 25th, 2008 by mind

Jag har gjort ett program som kan gömma data i bilder. Det manipulerar färgerna i bilden på ett smart sätt så det inte syns för blotta ögat och kan på det viset spara undan en massa data där. Ju större bild desto mer data ryms det.Jag är inte helt säker på hur watermarking fungerar men jag misstänker att det är något liknande jag har gjort fast kanske inte riktigt med samma syfte. Jag tänkte att i dessa avlyssningstider kan det vara bra med ett sätt att gömma data “in plain sight” så att säga. Kanske kan det hjälpa nån stackare i Kina som vill skicka hemliga meddelanden. Just nu är algoritmen ganska rak på sak men jag planerar att förfina den så att den dels förvanskar bilden mindre, dels rymmer mer data, samt krypterar den.

Såhär ser en modifierad bild ut:
Här finns det hemlig data
Kan du hitta den gömda datan i den?

[Edit:]

Ok, det var faktiskt nån som försökte hitta datan i den, jag trodde inte nån på allvar skulle göra det =), det var bara slumpmässig data. Men denna gång har jag lagt in riktig data i form av text. Så, om någon känner sig manad denna gång så går det faktiskt att få ut den :P

Windows är så sugigt så det finns inte

December 2nd, 2007 by mind

Jag sitter och debuggar lite threading här och vad hittar jag:

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q173/2/60.ASP&NoWebContent=1

Jo, att threading är buggigt under windows om man debuggar. Doh! det gör det ju verkligen lätt att hitta de verkliga buggarna om själva debuggningen gör att det buggar ur under Windows. Alltså miiiiiiiicrosooooooooooooft!!!!!!!!!!

Programmering

December 2nd, 2007 by mind

Buggar är bokstavligt talat problem man har skapat åt sig själv, ändå är de så svåra att undvika.

Det har med entropi att göra.
Den oändliga striden mellan ordning och kaos. Livet existerar på gränsen. Livet skulle dö i perfekt ordning, det skulle dö i totalt kaos.

Då så ska jag fortsätta debugga detta program som använder threads =)

3D Tilemap 2

June 4th, 2006 by mind

Japp, så var det dags för nästa version, har fixat ambient på texturerna samt fixat mipmapping så nu ser det rejält mycket snyggare ut (åtminstone när det rör sig, vet inte hur mycket rättvisa screenshotet gör)

Men såhär ser det ut nu iaf:

Tilemap2

3d Tilemap

May 29th, 2006 by mind

Programmeringen på 3D-Tilemapen går vidare. Har nu lyckats fixa så den ritar ut en texturemappad tilemap med lighting. Kan skala den och rotera den godtyckligt samt bestämma hur många tiles den ska rita osv osv. Trevligt värre alltså. Så här ser den ut med några slumpmässiga av mina provisoriska tiles jag gjort:

Tilemap

Nu återstår att lista ut om de ljusa partierna på marken nära väggen beror på en bug i koden eller en bug i modellerandet. Jag lutar mot det senare faktiskt. Ska ta och kolla så jag inte typ ställt in nåt dumt på den texturen.

Om någon tycker det ser sykt ut så beror det på att baksidan av textures klipps bort och blir genomskinliga. Med andra ord, de konstiga tomma partierna och svarta partierna mitt i smeten kommer inte bli så när man är klar, då kommer det vara andra tiles där som täcker upp, det blir så nu för att jag bara kastar ut slumpmässiga tiles för att testa. Brusigheten överlag beror nog på att texturerna inte är de bästa samt att jag nog har lite mer olika sorters filtering att klura igenom för att få det snyggt förutom bara funktionellt.

[Edit]

De ljusare partierna var att jag råkat sätta högre ambientvärde på marktexturen på de tiles som har väggar i sig, modelleringsfel som jag misstänkte. Fixat nu =)

Spel

March 11th, 2006 by mind

Johanna har gjort ett spel, mycket imponerande faktiskt måste jag säga. Det är som en grafisk version av Nethack fast med lite släng från Burgertime (Det finns med bagare som släpper bröd omkring sig). Såhär ser det ut:

Kommunicera

March 1st, 2006 by mind

Nej jag pratar inte om den totalt värdelösa ISPn baserad i Umeå.

Jag talar om ett AMX plugin till counterstrike som jag suttit och kodat på. Jag har just lyckats få ett AMX plugin att kommunicera med ett C++ program över internet samt strukturerat och lagrat den data som skickas i en fil, hyfsat kompakt format för att vara okomprimerat. Det klurigaste var att få till en wrappande buffer och få sändpositionen att leka följa John med logpositionen. 10 sekunders buffer verkar rätt lagom, laggar man ur mer än 10 sekunder så bryter den connection eller slänger data, har inte riktigt bestämt hur jag ska göra. Exakt vad det här pluginet gör tänker jag inte berätta dock =), hemlis. Kan inte slutföra det dock förrän AMX version 1.65 kommer beroende på nuvarande versions helt värdelösa hantering av värdet 0 i sändsträngen (den parsar den sträng som ska sändas och avbryter om det är 0), går visserligen att komma runt detta med en jäkla massa bök, problemet är bara att scriptspråket för pluginen inte är världens vassaste så man blir begränsad av hastighet, samt att servern ska serva en massa spelare samtidigt som inte vill ha nåt lagg, plus att språket i sig är ganska begränsat, inga pekare, nästan typeless osv osv. Men men, det är inte så länge kvar till v1.65 kommer så det kan nog vänta.

Det går framåt

September 9th, 2005 by mind

Jag har lyckats göra texturemappade objekt i Milkshape (suttit och ritat ut vertex för vertex för hand, sedan kopplat ihop dessa till polygoner, också för hand) och laddat in de i ett program, ritat ut dem med OpenGL. Ska bara strukturera upp detta bra så kommer det bli nice. Om jag får till en lite mer allmän struktur på det hela, tilemap baserad värld fast i 3d så kommer man (jag) kunna göra t.ex en Dungeon Keeper 2 klon på nolltid, eller Dungeon Siege, eller LaserSquadNemesis klon.. eller… ja, möjligheterna är stora =)

(Nej, jag vill inte göra ännu ett FPS-lir, det finns redan 2000% för många sådana)

Skepp i Milkshape

Torus the hands of fate!

April 30th, 2005 by mind

Det går framåt riktigt fint detta.
Först fick jag till detta:

Torus2

Mycket bättre än förra, men vem vill ha det så där kantigt?
Nej, nog är det mycket bättre om det ser ut såhär:

Torus3

Nu börjar jag bli nöjd =)

Då saknas det bara… tja, textures och specialeffekter (bumpmapping osv osv)