Skip to content

Instantly share code, notes, and snippets.

@halit
Created January 25, 2014 18:41
Show Gist options
  • Save halit/8621299 to your computer and use it in GitHub Desktop.
Save halit/8621299 to your computer and use it in GitHub Desktop.
Toy virtual economy
from faker import Faker
import random
fake = Faker()
pop = 100 # total population
mxval = 100 # max value
mnval = 1000 # min value
tu = 1000 # turn
limit = 100 # recursion limit
class Person(object):
def __init__(self):
self.name = fake.name()
self.value = random.choice(range(mxval, mnval))
self.change = False
self.rec = 0
def make_decision(self, person_list):
decision = random.choice([self.nothing, self.sale, self.buy])
from_person = random.choice(person_list)
value = random.choice(range(pop))
if not from_person.change:
decision(from_person, value, person_list)
else:
self.rec += 1
if self.rec > limit:
pass
else:
self.make_decision(person_list)
def sale(self, f, v, person_list):
if f.value - v > 0:
self.value += v
f.value -= v
self.change = True
f.change = True
else:
self.make_decision(person_list)
def buy(self, f, v, person_list):
if self.value - v > 0:
self.value -= v
f.value += v
self.change = True
f.change = True
else:
self.make_decision(person_list)
def nothing(self, f, v, person_list):
self.change = True
self.rec = 0
def clear_change(self):
self.change = False
return self
my_country = []
person_change_pool = []
for _ in range(pop):
my_country.append(Person())
for i in range(pop):
person_change_pool.append([(my_country[i].name, my_country[i].value)])
def turn(n):
for _ in range(n):
for i in range(pop):
my_country[i].rec = 0
my_country[i].make_decision(my_country)
person_change_pool[i].append(
(my_country[i].name, my_country[i].value)
)
map(lambda p: p.clear_change(), my_country)
turn(tu)
poors = []
riches = []
for person in person_change_pool:
if person[tu][1] > ((mxval + mnval) / 2.0):
riches.append(person[tu][0])
else:
poors.append(person[tu][0])
print "riches = " + str(len(riches))
print "poors = " + str(len(poors))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment