Проблемы реализации шоков в очень простой модели CGEPython

Программы на Python
Ответить
Anonymous
 Проблемы реализации шоков в очень простой модели CGE

Сообщение Anonymous »

Я новичок в Python и пытаюсь решить очень простую модель CGE. Однако при попытке шокировать экономику это решение дает точно такие же результаты. Я сомневаюсь, стоит ли мне писать код по-другому, использовать другой оптимизатор или что-то в этом роде.
Вот мой класс в файле py:
from types import SimpleNamespace
import numpy as np
from scipy import optimize
from scipy.optimize import fsolve

class SimpleEquilibriumModel:
def __init__(self):
# Define objects and dimensions
self.Y = 0 # Output (Endogenous)
self.L = 0 # Labor (Endogenous)
self.C = 0 # Consumption (Endogenous)
self.W = 0 # Wage (Endogenous)
self.P = 0 # Price (Endogenous)
self.A = 0 # Technology (Exogenous)
self.N = 0 # Population (Exogenous)

# Define equations
def E_L():
return self.L == self.Y / self.A

def E_NP():
return self.P * self.Y == self.W * self.L

def E_W():
return self.L == self.N

def E_C():
return self.C == self.W / self.P * self.N

def E_P():
return self.P == 1

def E_A():
return self.A == self.W / self.P

self.equations = [E_L, E_NP, E_W, E_C, E_P, E_A]

# Define national accounts parameter
self.NR = 1000

def solve(self):
# Initialization and calibration
self.W = 1
self.P = 1
self.L = self.NR
self.Y = self.NR
self.N = self.L
self.A = self.W / self.P

# Solve the model
from scipy.optimize import fsolve

def model_equations(x):
self.W, self.P, self.L, self.Y, self.N, self.A = x
return [E() for E in self.equations]

self.W, self.P, self.L, self.Y, self.N, self.A = fsolve(model_equations, [1, 1, self.L, self.Y, self.N, self.A])

self.C = self.W / self.P * self.N

return self.Y, self.L, self.C, self.W, self.P

def solve_shock(self, shock_A = None):
# Initialization and calibration
self.W == 2
self.P == 2
self.L = self.NR
self.Y = self.NR
self.N = self.L
self.A = (self.W / self.P)*shock_A

# Solve the model
def model_equations(x):
self.W, self.P, self.L, self.Y, self.N, self.A = x
return [E() for E in self.equations]

self.W, self.P, self.L, self.Y, self.N, self.A = fsolve(model_equations, [1, 1, self.L, self.Y, self.N, self.A])

self.C = self.W / self.P * self.N

return self.Y, self.L, self.C, self.W, self.P


Это мой код в блокноте:
from types import SimpleNamespace
import numpy as np
from scipy import optimize
from nynynyny import SimpleEquilibriumModel

output, employment, consumption, wage, price = model.solve()

print("Equilibrium output:", output)
print("Equilibrium employment:", employment)
print("Equilibrium consumption:", consumption)
print("Equilibrium wage:", wage)
print("Equilibrium price:", price)

output, employment, consumption, wage, price = model.solve_shock(shock_A = 1.1)

print("New equilibrium output:", output)
print("New equilibrium employment:", employment)
print("New equilibrium consumption:", consumption)
print("New equilibrium wage:", wage)
print("New equilibrium price:", price)

доходность:
Equilibrium output: 1000.0000018014192
Equilibrium employment: 1000.0000056491614
Equilibrium consumption: 999.9999869002581
Equilibrium wage: 0.9999999925494194
Equilibrium price: 1.0000000149011612
New equilibrium output: 1000.0
New equilibrium employment: 1000.0000149011612
New equilibrium consumption: 999.9999701976781
New equilibrium wage: 0.9999999850988388
New equilibrium price: 1.0000000149011612


Подробнее здесь: https://stackoverflow.com/questions/762 ... -cge-model
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»