Пример #1
0
 def test_gini2shares(self):
     gini0 = random.random()
     nbrackets = 10 ** random.randrange(3, 5)
     shares01 = list(gini2shares(gini=gini0, nbrackets=nbrackets))
     print "sum", sum(shares01)
     gini1 = calc_gini(shares01)
     # print "ginis:", gini0, gini1   TODO: better accuracy expected...
     self.assert_(fmath.feq(gini0, gini1, 1e-3))  # imposed and computed Gini shd be equal
     print "here"
     shares02 = list(gini2sharesPareto(gini=gini0, nbrackets=nbrackets))
     print "sum", sum(shares02)
     gini2 = calc_gini(shares02)
     # print "ginis:", gini0, gini1   TODO: better accuracy expected...
     self.assert_(fmath.feq(gini0, gini2, 1.0 / nbrackets))  # imposed and computed Gini shd be equal
     """
Пример #2
0
	def test_gini2shares(self):
		nshares = 30
		test_gini = random.random()
		shares = list( utilities.gini2sharesPower(test_gini, 30) )
		shares02 = np.diff( np.linspace(0, 1, nshares+1)**((1+test_gini)/(1-test_gini)) )
		self.assertTrue(np.allclose(shares, shares02))
		shares_gini = calc_gini(share*100 for share in shares)
		#print test_gini, shares_gini
		#TODO: improve accuracy
		self.assert_( abs(test_gini - shares_gini ) < 1e-02 )
Пример #3
0
 def test_calc_gini(self):
     #test that two Gini formulae give same result
     gini1 = calc_gini(self.wealths)
     gini2 = calc_gini2(self.wealths)
     gini3 = calc_gini3(self.wealths)
     gini4 = calc_gini4(self.wealths)
     #print "gini1:%f, gini2:%f"%(gini1, gini2)
     self.assert_(fmath.feq(gini1, gini2))
     self.assert_(fmath.feq(gini1, gini3))
     print gini1, gini4
     self.assert_(fmath.feq(gini1, gini4))
Пример #4
0
 def test_calc_gini(self):
     # test that two Gini formulae give same result
     gini1 = calc_gini(self.wealths)
     gini2 = calc_gini2(self.wealths)
     gini3 = calc_gini3(self.wealths)
     gini4 = calc_gini4(self.wealths)
     # print "gini1:%f, gini2:%f"%(gini1, gini2)
     self.assert_(fmath.feq(gini1, gini2))
     self.assert_(fmath.feq(gini1, gini3))
     print gini1, gini4
     self.assert_(fmath.feq(gini1, gini4))
Пример #5
0
	def record_history(self): #TODO: calc distribution over **indivs** or households??
		history = self.history
		#compute current wealth distribution
		dist = utilities.calc_gini( indiv.calc_wealth() for indiv in self.ppl.gen_indivs() )
		history['dist'].append(dist)
		history['ppl_size'].append(self.ppl.get_size())
		history['capital'].append( self.funds[0].calc_accts_value() )
		if hasattr(self.ppl, 'new_cohort_sexes'):
			freq = defaultdict(int)
			for s in self.ppl.new_cohort_sexes.split(';'):
				freq[len(s)] += 1
			history['sexes'].append( freq )
Пример #6
0
 def test_gini2shares(self):
     gini0 = random.random()
     nbrackets = 10**random.randrange(3, 5)
     shares01 = list(gini2shares(gini=gini0, nbrackets=nbrackets))
     print "sum", sum(shares01)
     gini1 = calc_gini(shares01)
     #print "ginis:", gini0, gini1   TODO: better accuracy expected...
     self.assert_(fmath.feq(gini0, gini1,
                            1e-3))  #imposed and computed Gini shd be equal
     print "here"
     shares02 = list(gini2sharesPareto(gini=gini0, nbrackets=nbrackets))
     print "sum", sum(shares02)
     gini2 = calc_gini(shares02)
     #print "ginis:", gini0, gini1   TODO: better accuracy expected...
     self.assert_(
         fmath.feq(gini0, gini2,
                   1. / nbrackets))  #imposed and computed Gini shd be equal
     print shares01[::100]
     print calc_gini(shares01)
     print shares02[::100]
     print calc_gini(shares02)
     fig, (ax1, ax2) = plt.subplots(1, 2)
     ax1.plot(shares01)
     ax2.plot(np.cumsum(shares01))
     ax2.plot(np.cumsum(shares02))
     plt.show()
     exit()
Пример #7
0
 def record_history(
         self):  #TODO: calc distribution over **indivs** or households??
     history = self.history
     #compute current wealth distribution
     dist = utilities.calc_gini(indiv.calc_wealth()
                                for indiv in self.ppl.gen_indivs())
     history['dist'].append(dist)
     history['ppl_size'].append(self.ppl.get_size())
     history['capital'].append(self.funds[0].calc_accts_value())
     if hasattr(self.ppl, 'new_cohort_sexes'):
         freq = defaultdict(int)
         for s in self.ppl.new_cohort_sexes.split(';'):
             freq[len(s)] += 1
         history['sexes'].append(freq)
Пример #8
0
	def test_gini2shares(self):
		gini0 = random.random()
		nbrackets = 10**random.randrange(3,5)
		shares01 = list(gini2shares(gini=gini0, nbrackets=nbrackets))
		print "sum", sum(shares01)
		gini1 = calc_gini(shares01)
		#print "ginis:", gini0, gini1   TODO: better accuracy expected...
		self.assert_(fmath.feq(gini0, gini1, 1e-3)) #imposed and computed Gini shd be equal
		print "here"
		shares02 = list( gini2sharesPareto(gini=gini0, nbrackets=nbrackets) )
		print "sum", sum(shares02)
		gini2 = calc_gini(shares02)
		#print "ginis:", gini0, gini1   TODO: better accuracy expected...
		self.assert_(fmath.feq(gini0, gini2, 1./nbrackets)) #imposed and computed Gini shd be equal
		print shares01[::100]
		print calc_gini(shares01)
		print shares02[::100]
		print calc_gini(shares02)
		fig, (ax1,ax2) = plt.subplots(1,2)
		ax1.plot(shares01)
		ax2.plot(np.cumsum(shares01))
		ax2.plot(np.cumsum(shares02))
		plt.show()
		exit()
Пример #9
0
    def adjust_kn(self, d, g):
        for consumer in self.consumers:
            consumer.adjust_kn(d, g)

    def get_unemployment(self):
        kn = self.kn
        return sum(f[1] == 0 for f in kn) / len(kn)


print

# health_threshold currently global: TODO
health_threshold = 1.0
health_threshold = 0.1
consumer = CompositeSolowConsumer(K0, N0)
for _ in range(1000):
    K, N = consumer.get_kn()
    Y = f(K, N)
    #print "K: %5.2f,  AN: %5.2f,  Y: %5.2f"%(K,N,Y)
    #print consumer.kn
    if not _ % 50:
        print "unemployment: ", consumer.get_unemployment(
        ), "inequality: ", calc_gini(c.k for c in consumer.consumers)
        #print [(c.health < health_threshold) for c in consumer.consumers]
    #TODO: d and g and alpha are currently global
    consumer.adjust_kn(d, gN + gA)  #timing crucial! (fix that?)
    consumer.receive(alpha * Y, 'rents')
    print
    consumer.receive((1 - alpha) * Y, 'wages')
    print
Пример #10
0
	def testGini(self):  #TODO: move this
		gini1 = calc_gini(self.wealths)
		gini2 = calc_gini2(self.wealths)
		print "gini1:%f, gini2:%f"%(gini1, gini2)
		self.assert_( abs(gini1-gini2)<1e-8 )