Artifictial Society Simulation

Started by
5 comments, last by Remi Noorlind 10 years, 10 months ago

I have read the sticky "For Beginners" post, but it didn't ansver my questions. So here's my problem.

I would like to create a 3D simulator. This is basically a sandbox game. Although I have no intention to enter game market with it. I will be just my personal project that I forever improve.

Expectations:

I want to make a simulation in where different agents interact with eachother. For example, agent like a deer will move around and search for randomly placed plant agents and bodies of water to eat and drink. Wolf agents would search other non-plant agents that are smaller than them and would kill and eat them and would also search water to drink. Alongside animals I would create a settlement of "sapient" agents. They would perform like a society. They would have different professions. Some are harvesters, who collect their respective materials (food, building materials, raw goods). Some process the materials to goods, which are sold or given to agents living in the settlement. Each agent has needs what increase over time, like in Sims. The levels of needs determine, what action are they going to take. For example, if a "sapient" agent hasn't got any money and is hungry, but is not of a hunter profession, that agent will try to steal food.

I care little for good graphics. As long as I can tell the difference a rabbit and a wolf, I am content. I do not desire to create endless world. I want to have a wolrdspace in what at least one settlement can excist without hunting away all the non-"sapient" agents.

Questions:

Is this project even feasible?

How should I begin?

Should I create an engine from scratch or should I use some open source or free engine for this simulator?

Advertisement
This is defiantly feasible, seeing as u don't ever plan on releasing the project u can start by thinking small.
If it was me I would forgo the graphics for the time being and begin by displaying each agent as a coloured dot on he screen. Also start with the basics, hunger, fatigue and lifespan. Make food readily available and then slowly add extra avenues and routines.


Sounds really fun though.
This is a very interesting idea. I've thought some about this as well, and as bluwind suggested: dumb down the graphics, or if you were me...throw them out entirely.

What you aim to do is create a model, this is distinct from the visual representations. Try to find alternative ways to probe your data that are non visual as well (that are text based) so that you can be sure things are going right. Finally, when the model is satisfactory: add graphics.
AfroFire | Brin"The only thing that interferes with my learning is my education."-Albert Einstein

From your posts I understand that you recommend me to build my simulation entirely myself. And that it would make me understand my engines every nook and cranny.

Btw, I have almost no experience in programming.

However, I do not want to build it for scientific purpose. I just want a realitic sandbox. My own little world. My backroom god experiment. If I ever reach 3D I definately would make it so that I can play it instead of just watching. So that I can be a part of the "sapient" settlement or a part of wolf pack or be running from "sapients" and wolves as a rabbit.

But what can you say about using a premade engine and building on top of it? I could just script the fecal matter out of Skyrim or source engine. Or these kinds of engines are not built for simulation, but rather for script narrated stories? Or they would require far too much power when tens or even hundreds of entities stats and actions must be processed at the same time?

Make your graphics sufficient to help you debug your object's behaviors (you to visualize the world situation and to be able to use the mouse to select one object to get information about its internal state and possibly the logic it runs)

Simple rectangles with a test entity type name inside it is good enough. Render a window into your world (which you can traverse with arrow keys initially)

Start deciding how complex your object behaviors will be, even NON sapient animals have conflicting goals that have to be resolved and you may be suprised by how much logic it will take to analyse the entities local situation figure which goals/solutions/actions are appropriate and pick the best one to carry out.

Figure out a common metric calculation for priority of the decisions (so you can use it across all the objects and then be able to reuse common behavior analysis and decision coding.

Make sure that periodicly the object's situation is reevaluated so it wont get stuck doing one thing when that thing is no longer the priority (this allows opportunistic behavior)

----------

start with plants which are largely reactive to their environmnet

then do animals that have basic survival behaviors

later harder will be objects that cooperate with each other (the complexity of their logic goes way up)

---

some file logging of execution of the behavior logic is a good idea so that you can trace what decisions were made (what the object saw as its situation and then the calculations to decide whats inmportant for it to consider an dthen to decide what to do ). I usually do this to a seperate window for one object Ive selected on the screen and add various control buttons to dump specific info about the object (including special debug code when I am trying to figure out what the logic doesnt do what I thought it would do)

--------------------------------------------[size="1"]Ratings are Opinion, not Fact

For your world, especially if you want 3D, you should probably go for a grid world representation, similiar to minecraft or dwarf fortress or just about any nontrivial simulation oriented game.

It has the advantage that each location is clearly defined as something (water, contains fish | floor, contains chair), you can perform pathfinding, you can find what objects are adjacent to another object without much of a performance hit and so on.

It is also easily representable as 2D.

You can start out with a x*y*1 grid, and later make it 3D by adding more levels to the z coordinate. You can always show only one layer at a time, or show the first object visible at a particular x,y location (so if you look from high, you will skip all the air and show the first visible object for each cell)

What i suggest you do:

-Make a simple model with a world that is a 2 dimensional grid.

-Add a way to set each tiles type, and possibly a way for each tile to store item(s)

-Add a system that lets you define a new tile type, how it interacts with other tile types and so on, and it will automatically work if you place on in the world (instead of hard coding everything in a giant switch statement or something)

-Add some agents that are in some tile position in the world and can move to adjacent tiles

o3o

If I start building this simulation, what programming language I should use? As I understand, the simulation is going to need quite a lot of processing power eventually, so I would like to know, what kind of programming languge is geared best for it? I understand that, at the beginning, it doesn't rally matter, but I don't want stay stuck with too small scale of simulation in the end. So is there even any difference?

This topic is closed to new replies.

Advertisement