Skip to content

Commit 0c9e4ba

Browse files
committed
Added python notebooks for some things I've played wit recently.
1 parent 1d0d3ea commit 0c9e4ba

9 files changed

+1113
-0
lines changed

.DS_Store

0 Bytes
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
{
2+
"metadata": {
3+
"name": "",
4+
"signature": "sha256:fd533dbc93809e86c8794d97bdf6e20dbce954a6503e662c792d114cbca82522"
5+
},
6+
"nbformat": 3,
7+
"nbformat_minor": 0,
8+
"worksheets": [
9+
{
10+
"cells": [
11+
{
12+
"cell_type": "code",
13+
"collapsed": false,
14+
"input": [],
15+
"language": "python",
16+
"metadata": {},
17+
"outputs": [],
18+
"prompt_number": 0
19+
},
20+
{
21+
"cell_type": "code",
22+
"collapsed": false,
23+
"input": [
24+
"import random\n",
25+
"\n",
26+
"EMPTY = None\n",
27+
"SURFER = 'U'\n",
28+
"SWIMMER = 'W'\n",
29+
"MAX_ADJ = 8\n",
30+
"P = 0.333\n",
31+
"\n",
32+
"class Board:\n",
33+
" def __init__(self, size, nsurfers, nswimmers):\n",
34+
" self.size = size\n",
35+
" self.cells = [EMPTY for i in range(self.size*self.size)]\n",
36+
" assert(nswimmers+nsurfers <= size*size/2)\n",
37+
" for i in range(nsurfers):\n",
38+
" self.addAgent(SURFER)\n",
39+
" for i in range(nswimmers):\n",
40+
" self.addAgent(SWIMMER)\n",
41+
" \n",
42+
" def getIndex(self, x, y):\n",
43+
" return x*self.size+y\n",
44+
" \n",
45+
" def setCell(self, x, y, agentType):\n",
46+
" assert(not self.getAgent(x, y))\n",
47+
" assert(agentType in [EMPTY, SURFER, SWIMMER])\n",
48+
" self.cells[self.getIndex(x,y)] = agentType\n",
49+
" \n",
50+
" def addAgent(self, agentType):\n",
51+
" added = False\n",
52+
" while not added:\n",
53+
" x = random.randrange(self.size)\n",
54+
" y = random.randrange(self.size)\n",
55+
" if not self.getAgent(x, y):\n",
56+
" added = True\n",
57+
" self.setCell(x, y, agentType)\n",
58+
" \n",
59+
" def moveAgent(self, x, y):\n",
60+
" index = self.getIndex(x, y)\n",
61+
" a = self.cells[index]\n",
62+
" if a:\n",
63+
" self.cells[index] = EMPTY\n",
64+
" self.addAgent(a)\n",
65+
" \n",
66+
" def getAgent(self, x, y):\n",
67+
" return self.cells[self.getIndex(x,y)]\n",
68+
" \n",
69+
" def getAdjacent(self, x, y):\n",
70+
" index = self.getIndex(x, y)\n",
71+
" baseIndexes = [-1, 1, -self.size-1, -self.size+1, self.size+1, self.size-1]\n",
72+
" indexes = [(index+i)%(self.size*self.size) for i in baseIndexes]\n",
73+
" return [self.cells[i] for i in indexes if self.cells[i]]\n",
74+
" \n",
75+
" \n",
76+
" def echo(self):\n",
77+
" print \"*\"*10\n",
78+
" for i in range(self.size):\n",
79+
" l = \"\"\n",
80+
" for j in range(self.size):\n",
81+
" cell = self.cells[self.getIndex(i,j)]\n",
82+
" l += cell if cell else '-'\n",
83+
" l += ' '\n",
84+
" \n",
85+
" print l \n",
86+
" \n",
87+
"class Simulator:\n",
88+
" \n",
89+
" def __init__(self, board, max_iterations):\n",
90+
" self.board = board\n",
91+
" self.max_iterations = max_iterations\n",
92+
" \n",
93+
" def run(self):\n",
94+
" for i in range(self.max_iterations):\n",
95+
" #b.echo()\n",
96+
" if self.update():\n",
97+
" break;\n",
98+
" print \"Iterations=\",i\n",
99+
" \n",
100+
" # return true if nothing moved\n",
101+
" def update(self):\n",
102+
" agentsToMove = []\n",
103+
" for i in range(self.board.size):\n",
104+
" for j in range(self.board.size):\n",
105+
" a = self.board.getAgent(i, j)\n",
106+
" if a:\n",
107+
" adj = self.board.getAdjacent(i, j)\n",
108+
" same = sum([x==a for x in adj])\n",
109+
" nadj = len(adj)\n",
110+
" if nadj and float(same)/float(nadj) < P:\n",
111+
" agentsToMove.append((i, j))\n",
112+
"\n",
113+
" for a in agentsToMove:\n",
114+
" self.board.moveAgent(a[0], a[1])\n",
115+
" return len(agentsToMove) == 0\n",
116+
" \n",
117+
" \n",
118+
" \n",
119+
"DIM = 12\n",
120+
"SURFERS = int(1.0/3.0*DIM*DIM/2.0)\n",
121+
"SWIMMERS = int(2.0/3.0*DIM*DIM/2.0)\n",
122+
"ITERS = 10\n",
123+
"b = Board(DIM, SURFERS, SWIMMERS)\n",
124+
"b.echo()\n",
125+
"s = Simulator(b, ITERS)\n",
126+
"s.run()\n",
127+
"b.echo()\n"
128+
],
129+
"language": "python",
130+
"metadata": {},
131+
"outputs": [
132+
{
133+
"output_type": "stream",
134+
"stream": "stdout",
135+
"text": [
136+
"**********\n",
137+
"- W U W - - U U - - - W \n",
138+
"W U W - W U - W U - - - \n",
139+
"- W W - - - - W U - W U \n",
140+
"- W - W - W U W - W - W \n",
141+
"W - - U - - - U - - W - \n",
142+
"- U - - - - W W - - U W \n",
143+
"- W - W U W U - - - W - \n",
144+
"W W W U - - - W W W - W \n",
145+
"- U U W - - - - W U W W \n",
146+
"W - W - - W - U - U W U \n",
147+
"- - W W W W W W - - U U \n",
148+
"- - - - - - - - W - - - \n",
149+
"Iterations= 4\n",
150+
"**********\n",
151+
"- W U W - - U U - - W W \n",
152+
"W - W - W U U U U - - - \n",
153+
"- W W - - - U U U - W - \n",
154+
"- W - W - - - - - W - W \n",
155+
"W - - U U U U - - W W - \n",
156+
"- - - U U U W W - - - W \n",
157+
"- W - W U W - - - - W - \n",
158+
"W W W U W - - W W W - W \n",
159+
"- - U W - - - - W - W W \n",
160+
"W - W - - W - - - - - - \n",
161+
"- - W W W W W W - - U U \n",
162+
"- - - U - - W W W - - U \n"
163+
]
164+
}
165+
],
166+
"prompt_number": 2
167+
},
168+
{
169+
"cell_type": "code",
170+
"collapsed": false,
171+
"input": [],
172+
"language": "python",
173+
"metadata": {},
174+
"outputs": [],
175+
"prompt_number": 69
176+
},
177+
{
178+
"cell_type": "code",
179+
"collapsed": false,
180+
"input": [],
181+
"language": "python",
182+
"metadata": {},
183+
"outputs": [],
184+
"prompt_number": 69
185+
},
186+
{
187+
"cell_type": "code",
188+
"collapsed": false,
189+
"input": [],
190+
"language": "python",
191+
"metadata": {},
192+
"outputs": []
193+
}
194+
],
195+
"metadata": {}
196+
}
197+
]
198+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
{
2+
"metadata": {
3+
"name": "",
4+
"signature": "sha256:fd533dbc93809e86c8794d97bdf6e20dbce954a6503e662c792d114cbca82522"
5+
},
6+
"nbformat": 3,
7+
"nbformat_minor": 0,
8+
"worksheets": [
9+
{
10+
"cells": [
11+
{
12+
"cell_type": "code",
13+
"collapsed": false,
14+
"input": [],
15+
"language": "python",
16+
"metadata": {},
17+
"outputs": [],
18+
"prompt_number": 0
19+
},
20+
{
21+
"cell_type": "code",
22+
"collapsed": false,
23+
"input": [
24+
"import random\n",
25+
"\n",
26+
"EMPTY = None\n",
27+
"SURFER = 'U'\n",
28+
"SWIMMER = 'W'\n",
29+
"MAX_ADJ = 8\n",
30+
"P = 0.333\n",
31+
"\n",
32+
"class Board:\n",
33+
" def __init__(self, size, nsurfers, nswimmers):\n",
34+
" self.size = size\n",
35+
" self.cells = [EMPTY for i in range(self.size*self.size)]\n",
36+
" assert(nswimmers+nsurfers <= size*size/2)\n",
37+
" for i in range(nsurfers):\n",
38+
" self.addAgent(SURFER)\n",
39+
" for i in range(nswimmers):\n",
40+
" self.addAgent(SWIMMER)\n",
41+
" \n",
42+
" def getIndex(self, x, y):\n",
43+
" return x*self.size+y\n",
44+
" \n",
45+
" def setCell(self, x, y, agentType):\n",
46+
" assert(not self.getAgent(x, y))\n",
47+
" assert(agentType in [EMPTY, SURFER, SWIMMER])\n",
48+
" self.cells[self.getIndex(x,y)] = agentType\n",
49+
" \n",
50+
" def addAgent(self, agentType):\n",
51+
" added = False\n",
52+
" while not added:\n",
53+
" x = random.randrange(self.size)\n",
54+
" y = random.randrange(self.size)\n",
55+
" if not self.getAgent(x, y):\n",
56+
" added = True\n",
57+
" self.setCell(x, y, agentType)\n",
58+
" \n",
59+
" def moveAgent(self, x, y):\n",
60+
" index = self.getIndex(x, y)\n",
61+
" a = self.cells[index]\n",
62+
" if a:\n",
63+
" self.cells[index] = EMPTY\n",
64+
" self.addAgent(a)\n",
65+
" \n",
66+
" def getAgent(self, x, y):\n",
67+
" return self.cells[self.getIndex(x,y)]\n",
68+
" \n",
69+
" def getAdjacent(self, x, y):\n",
70+
" index = self.getIndex(x, y)\n",
71+
" baseIndexes = [-1, 1, -self.size-1, -self.size+1, self.size+1, self.size-1]\n",
72+
" indexes = [(index+i)%(self.size*self.size) for i in baseIndexes]\n",
73+
" return [self.cells[i] for i in indexes if self.cells[i]]\n",
74+
" \n",
75+
" \n",
76+
" def echo(self):\n",
77+
" print \"*\"*10\n",
78+
" for i in range(self.size):\n",
79+
" l = \"\"\n",
80+
" for j in range(self.size):\n",
81+
" cell = self.cells[self.getIndex(i,j)]\n",
82+
" l += cell if cell else '-'\n",
83+
" l += ' '\n",
84+
" \n",
85+
" print l \n",
86+
" \n",
87+
"class Simulator:\n",
88+
" \n",
89+
" def __init__(self, board, max_iterations):\n",
90+
" self.board = board\n",
91+
" self.max_iterations = max_iterations\n",
92+
" \n",
93+
" def run(self):\n",
94+
" for i in range(self.max_iterations):\n",
95+
" #b.echo()\n",
96+
" if self.update():\n",
97+
" break;\n",
98+
" print \"Iterations=\",i\n",
99+
" \n",
100+
" # return true if nothing moved\n",
101+
" def update(self):\n",
102+
" agentsToMove = []\n",
103+
" for i in range(self.board.size):\n",
104+
" for j in range(self.board.size):\n",
105+
" a = self.board.getAgent(i, j)\n",
106+
" if a:\n",
107+
" adj = self.board.getAdjacent(i, j)\n",
108+
" same = sum([x==a for x in adj])\n",
109+
" nadj = len(adj)\n",
110+
" if nadj and float(same)/float(nadj) < P:\n",
111+
" agentsToMove.append((i, j))\n",
112+
"\n",
113+
" for a in agentsToMove:\n",
114+
" self.board.moveAgent(a[0], a[1])\n",
115+
" return len(agentsToMove) == 0\n",
116+
" \n",
117+
" \n",
118+
" \n",
119+
"DIM = 12\n",
120+
"SURFERS = int(1.0/3.0*DIM*DIM/2.0)\n",
121+
"SWIMMERS = int(2.0/3.0*DIM*DIM/2.0)\n",
122+
"ITERS = 10\n",
123+
"b = Board(DIM, SURFERS, SWIMMERS)\n",
124+
"b.echo()\n",
125+
"s = Simulator(b, ITERS)\n",
126+
"s.run()\n",
127+
"b.echo()\n"
128+
],
129+
"language": "python",
130+
"metadata": {},
131+
"outputs": [
132+
{
133+
"output_type": "stream",
134+
"stream": "stdout",
135+
"text": [
136+
"**********\n",
137+
"- W U W - - U U - - - W \n",
138+
"W U W - W U - W U - - - \n",
139+
"- W W - - - - W U - W U \n",
140+
"- W - W - W U W - W - W \n",
141+
"W - - U - - - U - - W - \n",
142+
"- U - - - - W W - - U W \n",
143+
"- W - W U W U - - - W - \n",
144+
"W W W U - - - W W W - W \n",
145+
"- U U W - - - - W U W W \n",
146+
"W - W - - W - U - U W U \n",
147+
"- - W W W W W W - - U U \n",
148+
"- - - - - - - - W - - - \n",
149+
"Iterations= 4\n",
150+
"**********\n",
151+
"- W U W - - U U - - W W \n",
152+
"W - W - W U U U U - - - \n",
153+
"- W W - - - U U U - W - \n",
154+
"- W - W - - - - - W - W \n",
155+
"W - - U U U U - - W W - \n",
156+
"- - - U U U W W - - - W \n",
157+
"- W - W U W - - - - W - \n",
158+
"W W W U W - - W W W - W \n",
159+
"- - U W - - - - W - W W \n",
160+
"W - W - - W - - - - - - \n",
161+
"- - W W W W W W - - U U \n",
162+
"- - - U - - W W W - - U \n"
163+
]
164+
}
165+
],
166+
"prompt_number": 2
167+
},
168+
{
169+
"cell_type": "code",
170+
"collapsed": false,
171+
"input": [],
172+
"language": "python",
173+
"metadata": {},
174+
"outputs": [],
175+
"prompt_number": 69
176+
},
177+
{
178+
"cell_type": "code",
179+
"collapsed": false,
180+
"input": [],
181+
"language": "python",
182+
"metadata": {},
183+
"outputs": [],
184+
"prompt_number": 69
185+
},
186+
{
187+
"cell_type": "code",
188+
"collapsed": false,
189+
"input": [],
190+
"language": "python",
191+
"metadata": {},
192+
"outputs": []
193+
}
194+
],
195+
"metadata": {}
196+
}
197+
]
198+
}

0 commit comments

Comments
 (0)