アリの動きをシミュレートしてみた。
障害物(1pxの黒い点)を一定の間隔(density)で地図上に配置し、アリ(4px×4pxの赤い点)はランダムに4方向に動こうとする。もし行く先に障害物があればそれを右側に置いて前に進む。以後同様。実際にアリがこんなふうに進むかはとりあえず置いておきます。おそらく実際は、障害物を避け、安全な道を探し、最短経路も見つけたりもするのでしょう。
int map[][];
int X, Y, dir;
color black = color(0);
void setup(){
size(400, 400);
background(255);
map = new int[width][height];
float density = width * height* 0.3;
for(int i = 0; i < density; i++){
int x = int(random(0, width));
int y = int(random(0, height));
map[x][y] = 1;
}
for (int i = 0; i < width; i++){
for (int j = 0; j < height; j++){
if(map[i][j]==1) set(i, j, black);
}
}
do{
X = int(random(0, width));
Y = int(random(0, height));
}while(map[X][Y]==1);
}
void draw(){
background(255);
for (int i = 0; i < width; i++){
for (int j = 0; j < height; j++){
if(map[i][j]==1) set(i, j, black);
}
}
fill(255,0,0);
rect(X-2, Y-2, 4,4);
dir = int(random(4));
if(dir == 0){
if(map[X][Y-1] == 1){
map[X+1][Y-1] = 1;
map[X][Y-1] = 0;
}
Y--;
}
else if(dir == 1){
if(map[X+1][Y] == 1){
map[X+1][Y+1] = 1;
map[X+1][Y] = 0;
}
X++;
}
else if(dir == 2){
if(map[X][Y+1] == 1){
map[X-1][Y+1] = 1;
map[X][Y+1] = 0;
}
Y++;
}
else{
if(map[X-1][Y] == 1){
map[X-1][Y-1] = 1;
map[X-1][Y] = 0;
}
X--;
}
if(X-1<0) X = width; else if(X+1>width) X = 0;
else if(Y-1<0) X = height; else if(Y+1>height) Y = 0;
}
動かすとこんな感じ。左上にぽつんとある赤い点がアリ(のモデル)です。
うごうごと動いて、小さくて分かりにくいのですが、障害物を動かしていきます。

とは言え、アリがどんな行動特性を持っているかを知らない限り、リアルなシミュレーションはできませんね。