!pip install gekko
from gekko import GEKKORequirement already satisfied: gekko in ./.venv/lib/python3.10/site-packages (1.3.2)
Requirement already satisfied: numpy>=1.8 in ./.venv/lib/python3.10/site-packages (from gekko) (2.2.6)
Considere uma economia simplificada onde a produção \(Y\) é dada por uma tecnologia Cobb-Douglas que envolve capital \((K)\) e trabalho \((L)\) sem progresso tecnológico em cada período \(t\) do horizonte de planejamento. Suponha que a força de trabalho está disponível apenas em uma fração \(\gamma\) do tempo, de tal modo que a tecnologia de produção possa ser escrita como função da oferta de trabalho disponível na seguinte especificação:
\[Y(t) = K(t)^\alpha \left[L(t)*\gamma\right]^{1-\alpha}\]
Deixe \(T\) representar o tempo total disponível em cada período \(t\). Assim, em uma semana \(T = 7\), \(\gamma = 6/7\) representa uma escala de seis dias de trabalho e um dia de descanso.
Suponha que a força de trabalho cresce a uma taxa \(x\), de tal modo que:
\[L(t) = L(0)e^{x*t} \]
Considere que em cada período \(t\) o consumo é a razão entre o salário \(W(t)\) e o preço \(P(t)\), ou seja:
\[C(t) = \frac{W(t)}{P(t)}\]
Se o produtor representativo é racional, então o salário equivale ao produto marginal do trabalho, ou seja:
\[W(t) = (1-\alpha)P(t)\left(\frac{K(t)}{\gamma L(t)} \right)^{\alpha}\]
Considere que o planejador desta economia pode limitar um valor mínimo para o salário e deixe esse salário mínimo ser representado pelo salário inicial do horizonte de planejamento, ou seja:
\[W_{min} = W(0) = (1-\alpha)P(0)\left(\frac{K(0)}{\gamma L(0)} \right)^{\alpha}\]
Nessa economia simplificada, suponha que o capital se deprecia em cada período a uma taxa \(\delta\). Suponha também que esse capital pode ser reinvestido a uma taxa exógena de remuneração \(rk\). Considere também que em cada período uma fração \(S\) do produto é poupada e é dedicada à acumulação de capital. Assim, a regra de acumulação de capital pode ser definida da seguinte maneira:
\[K(t) = K(t-1)(1-\delta + rk) + Y(t)*S\]
Em equilíbrio o consumo da économia é dado por:
\[C(t) = Y(t)(1-S)\]
Como a ideia é realizar um exercício simplificado, suponha que a economia modelada possui os seguintes parâmetros:
\[ \begin{array}{c} \alpha = 0.65\\ x = 0.001\\ T = 7\\ \gamma = 6/T\\ S = 0.1\\ \delta = 0.15\\ rk = 0.14 \end{array} \]
Para o exercício simplificado, suponha que a economia possui os seguintes valores iniciais:
\[ \begin{array}{c} K(0) = 1\\ L(0) = 1\\ P(0) = 1\\ Y(0) = K(0)^{\alpha}\left(L(0)*\gamma\right)^{1-\alpha}\\ W(0) = (1-\alpha)P(0)\left(\frac{K(0)}{\gamma L(0)}\right)^\alpha\\ C(0) = Y(0)(1-S) \end{array} \]
Considere confrontar o cenário em que a escala de trabalho possui apenas um dia semanal dedicado ao descanso com o cennário em que o trabalhador descansa por dois dias. Nesse caso, o cenário em que \(\gamma = 6/T\) é confrontado com o caso em que \(\gamma = 5/T\). A ideia central do exercício é computar os valores das variáveis do modelo nos dois cenários e calcular o diferencial nas taxas de crescimento das variáveis entre os cenários em cada período.
O primeiro passo para a execução do exercício é instalar uma biblioteca dedicada à resolução de problemas de programação não linear. Sugere-se a utilização da biblioteca gekko.
!pip install gekko
from gekko import GEKKORequirement already satisfied: gekko in ./.venv/lib/python3.10/site-packages (1.3.2)
Requirement already satisfied: numpy>=1.8 in ./.venv/lib/python3.10/site-packages (from gekko) (2.2.6)
Agora considere calcular os valores ótimos em um loop de duas etapas, onde na primeira etapa \(\gamma = 6/T\) e na segunda etapa \(\gamma = 5/T\). O código detalhado para esta tarefa segue abaixo:
escala = [6,5] # indexação do loop
txy6 = [] # lista para calcular a variação do produto na escala 6x1
txy5 = [] # lista para calcular a variação do produto na escala 5x2
for j in escala: # abrindo o loop
m = GEKKO(remote=False) # Criando o modelo
t = 40 # horizonte de planejamento de 20 períodos
T = 7 # Semana de sete dias
# parâmetros
K0 = 1 # Valor inicial do capital
L0 = 1 # Valor inicial do trabalho
P0 = 1 # Valor inicial do nível de preços
alpha = 0.65 # Parâmetro da tecnologia de produção
x = 0.01 # taxa de crescimento da população
gamma = j/T # Escala de trabalho
S = 0.1 # Taxa de poupança
delta = 0.15 # Taxa de depreciação do capital
rk = 0.14 # taxa exógena de remuneração do capital
# valores iniciais
Y0 = (K0**alpha)*((L0*gamma)**(1-alpha)) # Valor inicial do produto
W0 = (1-alpha)*P0*((K0/(L0*gamma))**alpha) # Valor inicial do salário
C0 = Y0*(1-S) # Valor inicial do consumo
# variáveis
Y = m.Array(m.Var, t, lb=1e-6) # produto
L = m.Array(m.Var, t, lb=1e-6) # Trabalho
W = m.Array(m.Var, t, lb=W0) # Salário com lower bound no salário mínimo
K = m.Array(m.Var, t, lb=1e-6) # capital
C = m.Array(m.Var, t, lb=1e-6) # Consumo
P = m.Array(m.Var, t, lb=1e-6) # Preço
# condições iniciais FIXAS
m.Equation(K[0] == K0)
m.Equation(L[0] == L0)
# período inicial
m.Equation(Y[0] == (K[0]**alpha)*((L[0]*gamma)**(1-alpha)))
m.Equation(W[0] == (1-alpha)*P0*((K[0]/(L[0]*gamma))**alpha))
m.Equation(C[0] == Y[0]*(1-S))
# Escrevendo as equações do modelo
for i in range(1, t):
# trabalho
m.Equation(L[i] == L[i-1] * m.exp(x*t))
# capital
m.Equation(K[i] == K[i-1]*(1-delta + rk) + S*Y[i-1])
# produção
m.Equation(Y[i] == (K[i]**alpha)*((L[i]*gamma)**(1-alpha)))
# salário
m.Equation(W[i] == (1-alpha)*P[i]*((K[i]/(L[i]*gamma))**alpha))
# consumo
m.Equation(C[i] == Y[i]*(1-S))
m.options.SOLVER = 3 # definindo o solver (ipopt)
m.solve(disp=True) # resolvendo o modelo
# Calculando as taxas de crescimento do produto per capita
if j == 6:
for i in range(1,t):
txy6.append(100*(Y[i].value[0]/L[i].value[0] - Y[i-1].value[0]/L[i].value[0])/(Y[i-1].value[0]/L[i].value[0]))
else:
for i in range(1,t):
txy5.append(100*(Y[i].value[0]/L[i].value[0] - Y[i-1].value[0]/L[i].value[0])/(Y[i-1].value[0]/L[i].value[0])) ----------------------------------------------------------------
APMonitor, Version 1.0.3
APMonitor Optimization Suite
----------------------------------------------------------------
--------- APM Model Size ------------
Each time step contains
Objects : 0
Constants : 0
Variables : 240
Intermediates: 0
Connections : 0
Equations : 200
Residuals : 200
Number of state variables: 240
Number of total equations: - 200
Number of slack variables: - 0
---------------------------------------
Degrees of freedom : 40
solver 3 not supported
using default solver: APOPT
----------------------------------------------
Steady State Optimization with APOPT Solver
----------------------------------------------
Iter Objective Convergence
0 1.35580E+20 9.99999E-01
1 1.35574E+20 9.99999E-01
2 1.35570E+20 9.99999E-01
3 1.35566E+20 9.99999E-01
4 1.56400E+19 1.58920E+00
5 1.82347E+18 6.17019E-01
6 1.42022E+16 1.57147E+00
7 1.08960E+12 9.60158E-04
8 5.47809E-20 1.02671E-07
9 5.47809E-20 1.02671E-07
Successful solution
---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 3.960000000370201E-002 sec
Objective : 0.000000000000000E+000
Successful solution
---------------------------------------------------
----------------------------------------------------------------
APMonitor, Version 1.0.3
APMonitor Optimization Suite
----------------------------------------------------------------
--------- APM Model Size ------------
Each time step contains
Objects : 0
Constants : 0
Variables : 240
Intermediates: 0
Connections : 0
Equations : 200
Residuals : 200
Number of state variables: 240
Number of total equations: - 200
Number of slack variables: - 0
---------------------------------------
Degrees of freedom : 40
solver 3 not supported
using default solver: APOPT
----------------------------------------------
Steady State Optimization with APOPT Solver
----------------------------------------------
Iter Objective Convergence
0 1.17499E+20 9.99999E-01
1 1.17494E+20 9.99999E-01
2 1.17491E+20 9.99999E-01
3 1.17488E+20 9.99999E-01
4 1.34554E+19 1.71658E+00
5 1.63969E+18 6.49941E-01
6 1.38439E+16 1.45255E+00
7 1.38528E+12 1.07097E-03
8 7.31106E-20 1.76330E-07
9 7.31106E-20 1.76330E-07
Successful solution
---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 3.880000000935979E-002 sec
Objective : 0.000000000000000E+000
Successful solution
---------------------------------------------------
Tendo resolvido o modelo e calculado as taxas de crescimento para o produto per capita, o próximo passo é comparar essas taxas. Para tanto, considere calcular a diferença entre a taxa de crescimento do produto per capita no cenário da escala 6x1 com a taxa de crescimento do produto per capita no cenário da escala 5x2. O resultado mostrará o quanto a taxa de crescimento do produto per capita na escala 6x1 supera essa mesma taxa de crescimento na escala 5x2 em pontos percentuais. Esse procedimento é feito com base no código a seguir:
import matplotlib.pyplot as plt
dif_txy = []
for i in range(t-1):
dif_txy.append(txy6[i] - txy5[i])
plt.plot(range(1,t), dif_txy)
plt.title("Diferencial de crescimento do produto per capita (6x1 - 5x2)")
plt.xlabel("Tempo")
plt.ylabel("Diferencial de crescimento (pontos percentuais)")
plt.grid()
plt.xticks(range(0,t+5,5));
O resultado demonstra que em todos os períodos o produto cresce em uma magnitude superior quando os trabalhadores operam em uma escala 6x1. O diferencial de crescimento cresce no início do horizonte de planejamento mas arrefece a partir de um dado momento mostrando que haverá um ponto em que a perda de bem estar gerado pela redução da jornada de trabalho será máxima. A partir deste ponto, a diferença de crescimento econômico entre os dois cenários passa a decrescer, arrefecendo ao final do horizonte de planejamento. Essa simulação mostra que a redução da escala de trabalho pode gerar uma perda relativa de produção que será mais intensa nos períodos que sucedem a implementação desta medida. Além disso, dado o tempo necessário para a economia absorver os efeitos da redução da escala de trabalho, os resultados do exercício simplificado mostram que, em termos de ganho de produto talvez seja melhor não intervir no mercado de trabalho do que reduzir a escala semanal de seis para cinco dias de trabalho.
Se não há progresso tecnológico e se a escala de trabalho é reduzida sem que ocorram reduções salariais, a economia enfrentará um custo de oportunidade que se resume em um produto marginalmente menor ao longo do tempo em comparação com o caso em que a escala semanal de trabalho se mantém inalterada. Além disso, a perda de produto é maior nos períodos iniciais após a implementação da redução da jornada de trabalho e a economia levará muito tempo para que o crescimento econômico retorne aos seus padrões observados antes ra redução da escala semanal de trabalho.