Gå til innhold

Programmere en "virtuell verden"?


Anbefalte innlegg

Skrev nettopp en bitteliten krigs-simulator i Java som på en måte berører det dere diskuterer her. Og ut i fra det jeg nettopp har gjort kan jeg med sikkerhet si at det blir uhorvelige mengder kjedelig rutinekoding :smile:

 

Tror heller ikke jeg ville prøvd meg på det der i et strukturert programmeringsspråk (VB/C f.eks.). Dette er et perfekt eksempel på hvorfor man har objektorienterte språk (C++/Java).

 

Høres egentlig ganske spennende ut, men man bør nok begynne i det små.

 

Hvis det blir noe særlig ut av den krigs-simulatoren min kan det hende jeg poster en link til den her senere. Planen er at den skal beregne hva som skjer med hver enkelt lille enhet i en krig. For å kunne ha 10.000vis av enheter distribuerer jeg den over flere maskiner vha RMI. Noe som også er noe å tenke på i et så stort prosjekt som dere snakker om.

 

 

--NOXiC

Lenke til kommentar
Videoannonse
Annonse
Tror heller ikke jeg ville prøvd meg på det der i et strukturert programmeringsspråk (VB/C f.eks.). Dette er et perfekt eksempel på hvorfor man har objektorienterte språk (C++/Java).

 

Hvor har du fått for deg at VB ikke er objektorientert. Det har vel hvert det siden v2.0 for DOS eller noe.

 

Driver dog med både c++/vb/java/vb.net og synes faktisk at vb.net er MANGE ganger bedre enn java da språkene har blitt mere lik siden vb6 og .net kode er ca. 10 ganger kjappere enn Java. (kansje ikke 10 men mange)

 

Må også si at rutinekoding var noe jeg gjorde de 2 første årene jeg drev med programmering, når jeg lærte meg språkene bedre ble alt veldig mye lettere å gjøre.

 

Hadde vært kult med et slik prog som bruker flere maskiner men synes ikke RMI passer. tcp/ip er bedre, da låser du deg ikke til java.

 

--

Morten

Lenke til kommentar

Er nok mulig. Synes imidlertid det bare er tull det der med å begynne på atom/kvarkenivå. Hva er livsgnisten som gir atomene liv da? Er det NOEN som vet det?

 

Uansett. Tror et språk som f.eks prolog er det beste å benytte som kjerne i et slikt program. Dette språket var jeg litt borti på dataing. studiet, og er visstnok veldig bra til AI. Langt mindre strukturert enn språk som har vært nevnt så langt. Var noen små oppgaver der (miniatyriske i forhold til det som snakkes om her), men nok til å gi en viss insikt i hvordan kunstig intellegens fungerer.

 

Det en må gjøre et å definere en database over hvordan verden fungerer, og la vesenets (som objekter) egenskaper avgjøre, basert på hvordan verden fungerer, om det overlever eller ikke. Så overlever evt deres egenskaper også...

 

Mener heller ikke at databasen bør begrense hvilke egenskaper et vesen skal oppnå. Tidligere ble det nevnt at en bør begrense slik at vi ikke fikk en 15m høy tullipan med maskingevært armer. Jeg mener at om et slikt vesen har stor sjans for å overleve, ja så bør den nettopp det. Blir et vesen for stort og kverker for mange av de den lever av dør den selv ut. Den ødelegger sitt eget livsgrunnlag.

 

Dette blir uansett et enormt prosjekt om alle lover og regler for hvordan verden fungerer skal programmeres inn. Mener det pågår et lignende prosjekt allerede, der en forsøker å legge inn mest mulig av verdens egenskaper inn i en database, men er desverre ikke sikker på hva dette het... En kan begynne med nokså elementere regler, som f.eks tyngdekraft, næring etc, og heller utvide denne databasen underveis.

(Spør også om ikke vesene bør ha instinkter, evt. fra forfedres erfaringer, slik at de f.eks. ikke spaserer rett utenfor et stup, eller stadig vekk spiser giftige planter)

Lenke til kommentar

Hei alle sammen!

 

Har skummet gjennom alle innleggene nå og mye interessant og gode tanker. Dessverre er det ikke så mange som skjønner hvor stort prosjekt dette er. Veldig få!!

 

For det første så virker det som mange tror det er ganske enkelt å lage en "levende verden". Jeg vil påstå at det er det vanskeligste emne innen informatikk/matematikk i dag. Det har vært forsket på i mange år (og det kommer seg stadig). Det krever uhyggelig avansert matematikk.

 

Bla annet så bruker man en teknikk som kaller neural network, som skal etterligne hvordan hjernen fungerer. Dvs man lager mange synapser (objekter om du vil) og disse kan motta og sende signaler. Jeg har aldri gjort noen neural programmering, så skal ikke si for mye. Noen nevnte Prolog blir brukt innen AI; LISP er et annet (kanskje mer kjent).

 

Det finnes to forskjellige måter å angrippe problemet på (å lage en levende verden):

 

1.Man kan enten la objektene lær ting selv (da har man ingen begrenseninger)

2. Man kan definere alt på forhånd og la objektene kommuniserer seg imellom (mye enklere å gjøre). Da begrenser man mye, og objektene kan bare utvikler seg så mye som de er programmert til å kunne. De kan heller ikke få noen nye egenskaper osv.

 

Hvis noen klarer å gjøre det første punkt, så har man lagd "terminator", "ai eller hva du vil. Ingen som har klart hittil, selv om man har klart mye mindre ting som er ganske fasinerende.

 

Det andre punktet kan du gjøre så avansert du vil egentlig.

 

F.eks kan du definere et objekt som har to metoder: moveObjekt() og fire(). Så kan du lage en del objekter utifra dette objekte og la disse implementer hver sine forskjellige versjoner av metodene. Videre så har man bare tilgang til noen events, som f.eks. HIT_BY_OBJ, HIT_EDGE, HIT_OBJ, ON_FIRE, ON_MOVE.

 

Så kan man definere hvordan hver objekt skal reagere på forskjellige hendelser. F.eks. kan et agressivt objekt implementeres slik:

 

ON(HIT_BY_OBJ)

returnFire()

traceTarget()

moveObjekt(TOWARDS_TARGET)

 

og man kan definerer et defansivt objekt slik f.eks.

 

ON(HIT_BY_OBJ)

moveObjekt(FLEE)

 

deretter definere man en verden, f.eks. bare et rom, som man definere slik at objektet ikke slipper ut. Man starter så et antall av objektene. I dette tilfelle f.eks. 8 agressive objekter og 2 defensive objekter. Disse blir satt ut i tilfeldige posisjoner.

 

Så starter man tiden. De agressive vil så kanskje prøve å skyte på alt de ser, og kanskje utslette alle de agressive, slik at bare de to defansive er igjen. Det vet man ikke, det kommer an på startposisjon og hvordan objektene er definert til å håndere hendelser.

 

Det er noen som har laget et slikt prosjekt, men husker ikke hvem og har mistet programet for lengst.

 

Og hvis man vil ha grafikk, så kan man bare få programmet til å dumpe all informasjonen og så få noen til å lage en grafikk pakke som wrapper all informasjonen og viser et nice output.

 

Men hvis noen har lyst til å gjøre et slikt prosjekt, så ta kontakt!! Jeg kan forsåvidt være med på et neural nettverk prosjekt også hvis folk vil prøve det.

Lenke til kommentar

Fikk løst å skrive litt kode.. :)

 

#include <iostream>

#include <vector>



using namespace std;





class Object {

public:

 inline string name() const { return(_name); };

 virtual void explode() {};



private:

 string _name;

};





class Energy {

public:

 virtual double energy() = 0;  

};





class Mass {

public:

 //  virtual void mass(double mass) = 0;  

 virtual double mass() = 0;

};





class Gravity {

 // fill this in later when I think I know what it is

};





class Time {

 // fill this in later when I think I know what it is

};





class Space { // same thing as Time?

 // fill this in later when I think I know what it is

};





class Atom : public Mass, public Energy, public Time, public Gravity, public Space, public Object {

public:

 Atom() : _mc(5) {};

 void split() { cerr << "Goodbye world" << endl; }; // I have no ide what's supposed to really happen here

 virtual double energy() { return(pow(_mc, 2)); }; // E = mc^2 ..or something 

 virtual double mass() { return(_mc); };

 

private:

 double _mc; // amount of mass

};





class Wobject : public vector<Atom*>, public Object { // world object

public:

 Wobject() { push_back(new Atom); }; // the objects in this world are very small by default

 virtual double energy()

 { 

   double sum = 0;

   for(vector<Atom*>::iterator i = begin(); i != end(); i++)

     sum += (*i)->energy();

   return(sum);

 };

 virtual double mass()

 {

   double sum = 0;

   for(vector<Atom*>::iterator i = begin(); i != end(); i++)

     sum += (*i)->mass();

   return(sum);

 };

};





class Bomb : public Wobject {

public:

 Bomb() {}; // a very small bomb

 void explode() { cerr << "Bang!" << endl; (*begin())->split(); }; // Actually, the sound comes afterwards - doesn't it?

};





class Lifeform {

public:

 virtual bool alive() = 0;

 virtual void die() = 0;

};





class Human : public Lifeform, public Wobject {

public:

 Human() : _alive(true) {}; // will we get a "chicken-and-egg" problem here? at what moment are we "alive"?

 virtual bool alive() { return(_alive); }; // if false; is the object still a human?

 virtual void die() { _alive = false; };



private:

 bool _alive;

};





class World : public vector<Atom*>, public vector<Object*>, public Object {

public:



 

private:

};





int main()

{

 World my_world;

 my_world.vector<Object*>::push_back(new Human);

 my_world.vector<Object*>::push_back(new Bomb);

 my_world.vector<Object*>::back()->explode();

 return(0);

}





/*

This was written as a joke and as an exercise for me in C++.

How can this code ever be intelligent?

It is a (very poor) model of the world as I see it right now. Maybe my perception of the world changes,

or maybe the world it self changes so it no longer matches the model.



I should learn to write code that evolves, that is alive, that changes with it's environment.

The code for Human (Lifeform) is different for each human - but this code must be generated at runtime

based on some simple basic rules over time. Maybe these rules lie in basic Physics?

A.I. and A.L. is the same thing I think.



I think - therefore I am, and to be is therefore to be intelligent. Or simething like that .. :)

*/

 

 

Fyll inn resten - de av dere som har tid til det; hva nå enn det er.. :roll:

--

Mvh,

Lars-Rune Nøstdal

Lenke til kommentar
Hei

Men hvis noen har lyst til å gjøre et slikt prosjekt, så ta kontakt!! Jeg kan forsåvidt være med på et neural nettverk prosjekt også hvis folk vil prøve det.

 

Vurderer å bruke et domene jeg har som ikke er i bruk for å ha en plass der vi kan samle opp alt som har med dette å gjøre. Og er såklart med på et slikt prosjekt ja :-)

Lenke til kommentar

det skal gå an å gjøre metode 2 som master_pingla nevnte. så lenge man setter egne begrensninger, trenger det ikke bli uoverkommelig vanskelig. tror noen er for opphengt av å lage en kopi av jordkloden. glem atomene, kvarkene og strengene (ja, leste et sted at kvarkene består av strenger... tror det var 9 stk, ring CERN hvis du lurer). skal det være gjennomførbart og noen skal gidde å lage dette, er det veldig viktig å sette klare begrensninger, ikke ta med alt man tenker på. bedre å lage det for enkelt, for deretter å utvide, enn å ta seg vann over hodet.

 

heller ingen grunn til å starte noen programmeringsspråk-krig. det holder å diskutere løsninger i pseudo-kode. men først må man gjøre som kilogram sa, sette seg ned og definere hva man vil ha med i det miljøet man vil lage, hvilke lover som gjelder, hvordan ting påvirker hverandre etc. dette er ganske krevende siden det hele må til en viss grad bli balansert.

 

Hva med å begynne med en firkantet 2D-verden hvor kantene "henger sammen" (som i civilization-spillene) , opprette noen få terrengtyper (vann, gress, stein), noen få dyr (1-3 forskjellige typer dyr) og gjøre alt så minimalt som mulig.

 

deretter kan man begynne med programmering av objekter, gi verdier på egenskaper (som også må balanseres gjennom flere alpha-testinger) som f.eks. gresset voksetempo, dyrenes sultfølelse, kåthet, etc , skape metoder som utfører ting på bakgrunn av verdiene på disse egenskapene , og til slutt events som utløser metodene, som også styres av verdiene på egenskapene.

 

for at det hele skal bli litt variert, så ser jeg for meg hyppig bruk av Math.rand()-funksjon, noe som vil være ganske uheldig. dette bør prøve å unngås i størst mulig grad, men ettersom alt kan jo heller ikke styres "naturlig", så noe må bare være tilfeldig.

 

3D-grafisk grensesnitt er nok også å ta hardt i. før man tenker på gui må man få orden på logikken. teksbasert / veldig primitiv grafikk er nok løsning nr 1.

 

det var i hvert fall mine tanker. til de av dere som sitter med litt større skapervilje enn meg og som har tenkt å gå løs på dette: lykke til! dere klarer det hvis dere vil!

Lenke til kommentar

Wooowwww.... blir bare sittende her med et stort dumt glis limt fast i trynet jeg..

 

men tok en titt på http://www.home.zonnet.nl/bvandam/ som nevnt tidligere....

 

"Until now you had to actually program your robots, but this is no longer necessary. This robot, if left alone, will program itself!"

 

betyr dette det jeg tror? er ikke helt sikker, fordi klokka er litt over 4 på natta nå..

 

 

....hadde jeg bare følt opp min en gang så glødene interesse for programering i c++.....

 

nå husker jeg ikke lenger en dritt.... ikke at jeg viste mye før heller...

 

men helt seriøst...denne tråden handler tross alt om ai.. har noen så mye som tengt på hva dette krever av maskinvare når det kommer til cpu7gpu?

 

meneskets hjerne er jo ufattelig mye mer kraftfull enn noen "standard" pc i dag.. skal ikke utale meg om disse super pcene til ibm og co, da jeg ikke vet noe om de.. men har lest ilustrert vitenskap i 7-8 år nå, og super pcene klarer på egenhånd å emulere atombombe-spregninger da..

 

så rent hardware messig kan det faktisk kanskje være mulig å emulere greiene.. for det er nok det man må basere seg på i første omgang.. emulering av ai.. noe annet vil være MEGET vanskelig..

 

men har man først en emulering å gå etter, så kan nok jobben for å få til ekte AI bli litt lettere..

 

men tar vel sikker feil alikevell.. synes det er bra at enkelte ildskjeler tar saken i egene hender(pcer) :D ...

 

Keep it up!! :woot:

Lenke til kommentar

Wow... Dette var en meget interessant tråd :) Dog ser det ut til at folk tenker vanvittig avansert her, noe som vil føre til psykt store programmer og astronomiske maskinkrav :D

 

Det første som renner meg i hue etter å ha lest denne tråden er en dataform av Cybugs (det er visst laget noen av arten allerede), små, simple roboter som baserer seg på enkle reaksjonsmønstere nedfelt i hardware (uten cpu eller andre former for "hjerne").

 

En typisk Cybug kan f ex settes til å unngå lys (den har lyssensorer), oppsøke lys e.l. eller f ex oppsøke lys når den er "sulten" (for opplading via solceller eller foringsstasjoner) for så å stikkke av igjen når den er "mett" (fullt batteri). Det finnes oxo add-ons som gir deg jegere og byttedyr (byttet har en IR-LED på ryggen og jegeren har tilsvarende IR-sensorer).

 

Jeg så en gang ett programm der skjermen var inndelt i 2 eller 3 matsoner, der "Buggene" hadde som mål å krysse rommet mellom matsonene. Disse "Buggene" var programmert ved hjelp av genetiske algoritmer der bare de sterkeste klarte å krysse fra en sone til den andre.

 

Jeg leste i denne tråden at et system som det som er foreslått her ville kreve en uhorvelig mengde regler for å fungere, noe jeg ikke er helt enig i. "Regelveldet" er et såkalt ekspertsystem, noe som i følge AI-forskere egner seg best til snevre og spesialiserte oppgaver (jeg vil tro at simulering av en verden ikke akkurat er noen spesialisert oppgave). For de som måtte lure; Ekspertsystemer er en form for AI som baserer seg på avsindig store databaser og trekker konklusjoner på grunnlag av det som er lagret i databasene. På grunn av informasjonsmengden som trengs brukes ekspertsystemer som regel bare til spesialiserte oppgaver. Sjakkcomputere er et ganske godt eksempel på slike systemer.

 

Nevrale nettverk er foreslått her, og selv om det krever mer ressurser å kjøre det så krever det ikke like stor lagringsplass som ekspertsystemer. Det er likevel verdt å merke seg at det kreves -mye- regnekraft og minne for å kjøre større modeller, så man må veie maskinkravene opp mot hvor "lur" maskinen skal være (og hvor god tid man har :wink: ).

 

For å få til en rimelig balanse mellom maskinkrav og "evolusjon" så ville jeg personlig ha holdt en knapp på en blanding av genetiske algoritmer og et ekspertsystem, evt fuzzy logic. Dette fordi man med genetiske algoritmer kan kjøre gjennom tusener av generasjoner pr sekund, samtidig som man kan foreta tilfeldige mutasjoner og således prøve å forhindre at den genetiske algoritmen kjører seg fast, noe den kan gjøre.

 

Før dere begynner å grave og spørre: Jeg er bare en ivrig amatør som har tilbrakt altfor mye tid med nesa i ei bok og foran pc'en med google som min trofaste følgesvenn :) Eventuelle grove feil bes sendes i tre eksemplarer til klageavdelingen, da dette er skrevet 06:55 etter ei natt jeg ikke hadde vett på å legge meg :D :D :D

 

EDIT: Fy svarte så lang denne posten ble :o

Lenke til kommentar
heller ingen grunn til å starte noen programmeringsspråk-krig. det holder å diskutere løsninger i pseudo-kode. men først må man gjøre som kilogram sa, sette seg ned og definere hva man vil ha med i det miljøet.

 

3D-grafisk grensesnitt er nok også å ta hardt i. før man tenker på gui må man få orden på logikken. teksbasert / veldig primitiv grafikk er nok løsning nr 1.

 

det var i hvert fall mine tanker. til de av dere som sitter med litt større skapervilje enn meg og som har tenkt å gå løs på dette: lykke til! dere klarer det hvis dere vil!

 

http://www.datanettet.com ;) dokumentasjonssaken

http://www.datanettet.com/articles.php?id=1&page=4 mini dokumentasjon om hva vi vil skal komme på skjermen av resultatet.

 

Plan: Først finne ut hvordan vi vil lage det (bruke dokumentasjonen til det) for så å se hvilke genier vi har i "crewet" slik at vi vet hva som kan lages.

Lenke til kommentar

Ikke for at jeg kan noe som helst om programmering (ok, så vidt rørt borti java, men det er en annen sak).. Uansett synes jeg denne tråden var litt interessant.

 

Så et veldig bra program på Discovery for en stund siden om en robot-bygger ved navn Mark Tilden. Han bygger nærmest helt analoge roobter som gjør mye rart. Orker ikke forklare så mye, men den som er interessert kan ta en titt under (siden har kanskje et litt useriøst preg men fyren er seriøs) eller gjøre et søk på nett.

 

http://www.discovery.com/stories/technolog.../robots1.2.html

Lenke til kommentar
heller ingen grunn til å starte noen programmeringsspråk-krig. det holder å diskutere løsninger i pseudo-kode. men først må man gjøre som kilogram sa, sette seg ned og definere hva man vil ha med i det miljøet.

 

3D-grafisk grensesnitt er nok også å ta hardt i. før man tenker på gui må man få orden på logikken. teksbasert / veldig primitiv grafikk er nok løsning nr 1.

 

det var i hvert fall mine tanker. til de av dere som sitter med litt større skapervilje enn meg og som har tenkt å gå løs på dette: lykke til! dere klarer det hvis dere vil!

 

http://www.datanettet.com ;) dokumentasjonssaken

http://www.datanettet.com/articles.php?id=1&page=4 mini dokumentasjon om hva vi vil skal komme på skjermen av resultatet.

 

Plan: Først finne ut hvordan vi vil lage det (bruke dokumentasjonen til det) for så å se hvilke genier vi har i "crewet" slik at vi vet hva som kan lages.

 

 

Interessant tema egentlig...... (lese hele etter skoletid :wink: )

 

Men på den nederste linken er det snakk om tekstbasert men også grafisk.

Får jammen ikke håpe det blir sensurert da siden det står spawnet fra 2 objekter :lol:

Om du/dere andre tenker det samme som meg :wink:

 

 

 

Men tenk da, ved en senere anledning, en ai som utviklet seg selv......i et spill også?

Det måtte da vel ha blitt realistisk eller hva?

Lenke til kommentar

Kan noen utvikle en ide jeg har fått, den er kanskje ikke så orginal, men uhyre intressan. Den baserer seg på å skape planteliv med AI.

Burde være relativt enkelt å skape en enkel vekst i 2d.

 

Noen som klarer dette?

 

Senere kan man utvikle programmet til å la planten få blomster og miste frø, som igjen trenger vann og næring.

Lenke til kommentar

Ok, jeg har forstått at atomer/elementærpartikler er umulig og få til men jeg mener alikevel at det er nødvendig med noen få, ganske enkle, grunnblokker for å ha en viss dynamisk-het. Så det jeg tenkte på var og bruke celler. Ikke celler som i vår verden men celler som er mye større som som bare fyller enkle funksjoner som muskel- og benceller. Jeg har testa dette litt i 2d (qbasic, faktisk :roll: ) bare for og se hvor vanskelig det er.

 

Det jeg tenkte på var og ha benceller som hver har den funksjonen at de alltid følger etter, altså er festet til en annen bencelle slik at stive former ble dannet. Muskelcellene måtte hatt evnen til og trekke seg sammen, dvs. redusere radius på cellen. I tillegg måtte vi hatt ledd men dette hadde jo bare vært og satt en verdi for den aktuelle cellen som sa hvordan den skulle forholde seg til andre celler.

 

Jeg forsto med en gang at det vil bli nødvendig med endel avansert (i alle fall for meg) matte men heldighvis er det jo endel smartinger her på forumet. :smile: Har funnet ut hvordan man regner ut avstanden mellom origo (senter) av to cirkler (pytagoras) men hvilke vinkler de skal sprette i osv. er "out of my leauge".

 

Jeg tror denne ideen kan ha visse fordeler, kombinert med f.eks. neurale nettverk (som jeg ikke kan noe særlig om :( ) da hele figuren kan reduseres til en dna-streng. Suksessen vil også være avhengig av utseende og dermed vil simulasjonen bli en god del stiligere og se på. Begynner og bli litt lei av det lille rektangelet som fyker rundt i mine simmer. :)

Lenke til kommentar

Her er noen linker som kanskje er til litt hjelp:

http://www.daimi.au.dk/~repsej/thesis/html...sis/node24.html

http://search-info.com/search/engine/index...tificial_Worlds

http://www.mindmaker.hu/~szepes/bookmark.htm

http://search.yahoo.com/search?p=evolution...n=20&fl=0&x=wrt

 

Kan desverre ikke påstå jeg finner så mange som driver med noe liknende det vi prøver på. Vi har jo tross alt ett meget bra ekspertpanel her og dermed svært bred kompetanse. :woot:

 

P.S. Denne posten var egentlig for "motivation only" :wink:

Lenke til kommentar
Vi må ikke tenke for mye på begrensinger av maskinvare, om noen år har kapasiteten fordoblet seg...

 

...Minst.. en eller annen "lov" en eller annen framsa er vel at kapasiteten vil fordoble seg hver 18 måned.. det var vel rundt 70tallet dette ble framsatt.. har ikke slått fei enda.. :woot:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...