Column
2021.7.18
人工生命のいる日常を見てみよう
「街を歩いていても人間しかいなくてつまらない…」
「他の生物といえば鳥や犬などの哺乳類ばかりで味気ない…」
なんだかモヤっとした気持ちを誰もが一度は抱きますよね。そんな味気ない毎日にスパイスを加えるべく、今回は”人工生命”を作ってみました。あ、本日はお日柄もよく。自己紹介遅れましたが、FabCafe Nagoyaのアシスタントディレクターのイチカワです。
人工生命とは?
- 自律性、意識、などあらゆる生命現象を対象とする研究領域。
1951年数学者ジョン・フォン・ノイマンによって提唱され、ノイマンの没後30年にコンピュータ科学者クリストファー・ラングトンによって正式な研究分野として確立される。 - 今回の人工生命は生成された二次元配列からある規則に従って生死を繰り返し、画面上に描画するシンプルなものでgame of life と呼ばれるもの。
二次元配列上の彼らは密集しすぎていたり孤立していると死んでしまう。
画面上に映る彼らはただの文様のようにしか見えないかも知れないが、ある規則に従い自律的に行動し生死を繰り返すという点で我々人間と同じ生命体である。 - 現れては消え、カラフルな色を描画して生死を繰り返す彼らから生きていることを今一度考えたい。
キラキラしていて綺麗ですね。これらはプログラムによって生成されている人工生命たちです。
せっかくなので店内でも彼らにはウニョウニョしてもらいましょう。
ぜひ皆さんも哺乳類で溢れかえった日常に、人工生命で彩りを加えてみてください。
リンクはこちら
*スマートフォンでご鑑賞ください
*上記の写真はイメージです。製作者の気分によって色やアルゴリズムが変化していきます。
仮想生物動物園とは
少し飽き飽きしてしまった日常に、スパイスとなるべく仮想の生命を導入してみる。その時に、私たち人類はどんな気持ちになるのか。FabCafe Nagoyaのアシスタントディレクター イチカワによる実践型コラムシリーズです。
中身はこんな感じです↓
<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”utf-8″ />
<!– keep the line below for OpenProcessing compatibility –>
<script src=”https://openprocessing.org/openprocessing_sketch.js”></script>
<script src=”https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js”></script>
<script src=”https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/addons/p5.sound.min.js”></script>
<script src=”mySketch.js”></script>
<link rel=”stylesheet” type=”text/css” href=”style.css”>
</head>
<body>
<script>
function make2DArray(cols, rows) {
let arr = new Array(cols);
for (let i = 0; i < arr.length; i++) {
arr[i] = new Array(rows);
}
return arr;
}
let grid;
let cols;
let rows;
let resolution = 5;
x = window.screen.width;
y = window.screen.height;
function setup() {
createCanvas(800,600);
cols = width / resolution;
rows = height / resolution;
grid = make2DArray(cols, rows);
for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
grid[i][j] = floor(random(2));
}
}
}
function draw() {
frameRate(40);
background(0);
for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
let x = i * resolution;
let y = j * resolution;
if (grid[i][j] == 1) {
fill(random(255),random(255),random(255));
stroke(0);
ellipse(x,y,resolution-1,resolution-1);
}
}
}
let next = make2DArray(cols, rows);
// Compute next based on grid
for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
let state = grid[i][j];
// Count live neighbors!
let sum = 0;
let neighbors = countNeighbors(grid, i, j);
if (state == 0 && neighbors == 3 ) {
next[i][j] = 1;
} else if (state == 1 && (neighbors < 2 || neighbors > 3) ) {
next[i][j] = 0;
} else {
next[i][j] = state;
}
}
}
grid = next;
}
function countNeighbors(grid, x, y) {
let sum = 0;
for (let i = -1; i < 2; i++) {
for (let j = -1; j < 2; j++) {
let col = (x + i + cols) % cols;
let row = (y + j + rows) % rows;
sum += grid[col][row];
}
}
sum -= grid[x][y];
return sum;
}
</script>
</body>
</html>
-
FabCafe Nagoya 編集部
FabCafe Nagoyaが作成した記事です。
こちらの記事に関するご意見やご感想は、以下よりお寄せください。
お問い合わせフォームFabCafe Nagoyaが作成した記事です。
こちらの記事に関するご意見やご感想は、以下よりお寄せください。
お問い合わせフォーム
-
FabCafe Nagoya 編集部
FabCafe Nagoyaが作成した記事です。
こちらの記事に関するご意見やご感想は、以下よりお寄せください。
お問い合わせフォームFabCafe Nagoyaが作成した記事です。
こちらの記事に関するご意見やご感想は、以下よりお寄せください。
お問い合わせフォーム