Skip to content

🇬🇧 English · 🇪🇸 Español

Política arancelaria hicksiana y recuperación auditada del equilibrio

Seleccione metric="hicksian_ev" explícitamente en la búsqueda del arancel unilateral, en la búsqueda de Nash multilateral o en la matriz de pagos de bienestar. Esto usa contabilidad consistente, devoluciones fiscales de suma fija y la función de gasto de consumo. Los valores por defecto históricos y los alias ev, equivalent_variation y consumption conservan sus objetivos históricos. No seleccionan el nuevo cálculo. Al evaluar la absorción real con metric="geary_khamis" mediante evaluate_national_welfare, suministrar base_equilibrium ancla la valoración a los precios internacionales de referencia de Geary–Khamis del equilibrio base \(\pi^{\text{base}}\), deflacta el préstamo neto al exterior en unidades reales de inversión mediante restore_capital_formation(..., p_fd=...) y evalúa los vectores de estado crudos (p_sol, y_sol, r_sol, w_sol, T_sol, XN_sol) con el mismo mapa de contabilidad consistente que TradeEquilibriumResult, preservando la invariancia del bienestar de Geary–Khamis anclado a la base ante reescalados nominales de precios contrafactuales.

from puremacro.trade import (
    calibrate_trade_model, solve_policy_equilibrium, compute_unilateral_optimal_tariff,
    solve_multilateral_nash_tariffs, compute_welfare_payoff_matrix,
)
from puremacro.trade.data import synthetic_codes, synthetic_icio_table

# A seeded synthetic table: two countries, three sectors, three final uses.
countries, sectors = synthetic_codes(2, 3)
calibration = calibrate_trade_model(synthetic_icio_table(2, 3, seed=1),
                                    country_codes=countries, sector_codes=sectors)
home, partner = countries

# Choose an absolute tolerance appropriate for the calibration units.
ge_tol = 1e-5
base = solve_policy_equilibrium(calibration, sigma=2., tol=ge_tol)
options = dict(metric="hicksian_ev", base_equilibrium=base, sigma=2.,
               consumption_categories=(0,), ge_tol=ge_tol)
opt = compute_unilateral_optimal_tariff(
    calibration, country_idx=home, tariff_max=.30, num_grid=21, **options,
)
game = solve_multilateral_nash_tariffs(
    calibration, player_countries=[home, partner], tariff_max=.30,
    best_response_grid_size=13, tol=1e-4, regret_tol=1e-6, **options,
)
matrix = compute_welfare_payoff_matrix(
    calibration, player_a=home, player_b=partner,
    optimal_a=.10, optimal_b=.20, **options,
)

Los países nombrados deben existir en la calibración. sigma es la sustitución entre orígenes de los insumos intermedios; las cestas de uso final siguen siendo Leontief. Las categorías de consumo son (0,) por defecto. Seleccione categorías adicionales distintas de la inversión solo cuando pertenezcan a la función de utilidad declarada. Es bienestar de consumo condicional, que incluye el consumo público cuando los datos de entrada lo agregan.

Una sola base de comparación

Cada búsqueda mantiene fijos el mismo equilibrio sin aranceles, las preferencias, el numerario, los saldos externos y las categorías de consumo para cada candidato y cada desviación. Si se omite base_equilibrium, la búsqueda lo resuelve una vez. Una referencia suministrada debe superar el ge_tol solicitado, usar el sigma solicitado y tener aranceles intermedios y finales nulos. Los cambios en los impuestos domésticos quedan fuera de este experimento de política.

El cierre del ahorro externo forma parte de esa referencia. Las búsquedas unilateral, de Nash y de la matriz de pagos aceptan foreign_saving_units ("numeraire" por defecto, o "world_income") y lo transmiten a cada equilibrio que resuelven: la referencia, cada candidato y cada desviación. Un base_equilibrium suministrado debe haberse resuelto con el mismo cierre; en caso contrario, la búsqueda lanza ValueError. El cierre se registra en metadata["foreign_saving_units"]. Con saldos externos de referencia distintos de cero, el cierre en numerario hace que los pagos dependan de qué país se enumera primero, y "world_income" no (véase contabilidad consistente):

base = solve_policy_equilibrium(calibration, sigma=2., tol=ge_tol,
                                foreign_saving_units="world_income")
options.update(base_equilibrium=base, foreign_saving_units="world_income")

En la tabla de dos países del cuaderno 63 (sigma=2, categorías de consumo (0, 2), ge_tol=1e-9), la VE del país A por su propio arancel del 10% es el 2.540428% del consumo de referencia con "world_income", sea cual sea el país que se enumere primero. Con "numeraire" es el 2.630850% si A va primero y el 2.495185% si va B. En 4.3.0 las búsquedas lanzaban TypeError con esta opción.

Los campos y curvas de bienestar en niveles contienen la variación equivalente (VE) en unidades de valor de la calibración; la VE de referencia es cero. Las ganancias porcentuales usan el gasto de consumo seleccionado de referencia, nunca la VE de referencia. Los pagos de un bloque suman la VE monetaria de sus miembros; los bloques estratégicos no deben solaparse. El bienestar mundial incluye todos los países calibrados, también los que no son jugadores estratégicos. Los diagnósticos de términos de intercambio son índices a nivel de país; no están disponibles (NaN) para un bloque multipaís porque no hay definido un índice de comercio exterior del bloque.

Los metadatos de Nash distinguen player_regrets, en unidades de valor, de relative_max_regret, una fracción del gasto de consumo de referencia fijo de cada jugador. Así, regret_tol=1e-6 significa una millonésima de ese gasto, no una millonésima de la VE ni un punto porcentual. Estas convenciones se registran junto con la referencia y las ejecuciones del solver en los metadatos del resultado.

Qué establece la convergencia

El method="grid" unilateral evalúa la malla declarada. method="bounded" refina además cada intervalo con un máximo local muestreado, incluidos los intervalos extremos. El method="best_response" de Nash usa esta búsqueda de malla/refinamiento para cada jugador y después evalúa desviaciones unilaterales simultáneas en el perfil final. converged=True exige que tanto la brecha arancelaria de la mejor respuesta sin amortiguar como el arrepentimiento normalizado por el consumo cumplan sus tolerancias. Las actualizaciones amortiguadas pequeñas por sí solas no establecen la convergencia. Alcanzar max_iter puede devolver un candidato de equilibrio general auditado con converged=False y diagnósticos finitos de la desviación final.

Lea best_response_boundaries, el techo arancelario y la resolución de la malla. Una solución en la frontera está restringida por el intervalo impuesto. El refinamiento local puede pasar por alto picos estrechos no muestreados; estas comprobaciones no demuestran optimalidad global ni existencia o unicidad de un equilibrio de Nash del juego continuo.

Las etiquetas de frontera (metadata["boundary"] en la búsqueda unilateral, metadata["best_response_boundaries"] en Nash) valen "lower" o "upper" cuando una tasa está a menos de tol de 0 o de tariff_max, e "interior" en otro caso. Cuando las dos bandas de tolerancia se solapan (tariff_max <= 2 * tol, registrado como metadata["boundary_bands_overlap"]), gana la cota más cercana y el punto medio exacto es "interior". En 4.3.0 se comprobaba primero la cota inferior, de modo que con tariff_max <= tol una respuesta en el techo se etiquetaba como "lower". Los techos superiores a 2 * tol, incluidos todos los valores por defecto, no cambian. La ruta de Nash no hicksiana aplica la misma regla a sus best_response_boundaries.

La matriz de pagos usa las mismas dos acciones, cero y un arancel positivo fijo, para cada jugador en las cuatro celdas. Si se omite, la acción positiva es el óptimo unilateral del jugador frente a aranceles extranjeros nulos. Los nash_a o nash_b suministrados se aceptan solo como acciones fijas, explícitamente no verificadas como tasas de Nash. Tasas optimal_* y nash_* en conflicto lanzan un error. Los aranceles positivos mutuos no son automáticamente un equilibrio de Nash del juego continuo ni un dilema del prisionero.

Recuperación y desviaciones fallidas

solve_policy_equilibrium(method="auto") prueba Newton, el híbrido de SciPy y después la continuación por pseudo-longitud de arco de Keller. El primer intento puede usar un arranque en caliente aceptado previamente; los intentos posteriores reinician desde el estado calibrado. La continuación parte de aranceles nulos y usa los calendarios objetivo completos de insumos intermedios y de uso final. Todos los intentos conservan sigma, el cierre fiscal y la tolerancia solicitada. La recuperación no relaja el umbral de aceptación.

Antes de cualquier intento, un calendario Leontief (sigma=0) se examina con cotas de Collatz-Wielandt del radio espectral de la matriz de costes aumentada con aranceles B_tau = a * multiplier / (1 - t), con la cuña exacta del impuesto a la producción. Una cota inferior de al menos uno certifica que no existe un sistema de precios positivo: entonces se lanza PolicyEquilibriumError con una lista attempts vacía y las cotas en su atributo viability, sin ejecutar ningún solver. Cualquier otro resultado deja correr los intentos: viable, near_critical (cotas en [1 - 1e-6, 1); existe un sistema de precios, con precios muy grandes), unresolved (las cotas abarcan el umbral) y not_applicable para insumos intermedios CES (sigma > 0), donde la cota Leontief no certifica nada. El examen se registra en equilibrium.metadata["policy_viability"]. foreign_saving_units ("numeraire" por defecto, o "world_income") se transmite a cada intento; véase contabilidad consistente.

Un resultado aceptado debe declarar convergencia, conservar los calendarios y la tecnología solicitados y superar una reevaluación independiente de los campos reportados y de todos los residuos de equilibrio y contables, incluidos el mercado de bienes omitido y los saldos externos. Los métodos de los intentos, las semillas, los avisos, los errores y los residuos aceptados se registran en equilibrium.metadata["policy_solver_attempts"].

Si todos los intentos fallan, PolicyEquilibriumError expone attempts; las búsquedas de política adjuntan además el profile que falló. La búsqueda lanza la excepción de inmediato. No produce ningún pago ni certificado de mejor respuesta para esa desviación, no almacena en caché ningún estado fallido y nunca lo usa como siguiente arranque en caliente. Un fallo del refinamiento escalar también deja la optimización sin resolver. Use ge_method, ge_max_iter, ge_max_steps y ge_tol para controlar las soluciones del equilibrio de política con independencia de los límites de iteración del juego exterior. Las opciones desconocidas se rechazan.

ge_tol acota los residuos absolutos en las unidades de la calibración. Debe ser apropiado para su escala numérica: una tabla en millones de USD, como la tabla OCDE incluida (load_icio_data()), necesita un ge_tol solicitado explícitamente de alrededor de 1e-5. Una petición por debajo de la resolución de coma flotante puede fallar incluso en la referencia; la recuperación deliberadamente no relaja esa petición en silencio. Cambiar las unidades monetarias puede exigir cambiar la tolerancia absoluta del equilibrio general, mientras que el bienestar porcentual y el arrepentimiento normalizado son invariantes a las unidades.

Evidencia y alcance

Una ecuación de precios relativos CES de dos países derivada por separado, cuentas fiscales algebraicas y una minimización primal del gasto proporcionan la referencia. Los 1.681 perfiles de una malla arancelaria de 41 por 41 se evalúan de forma independiente. Las elecciones unilaterales, el candidato de Nash restringido, las desviaciones y los pagos con acciones fijas coinciden con esa referencia. Las pruebas ejercitan además un fallo real de Newton con recuperación híbrida, continuación forzada, recuperación agotada, falsa convergencia, cobertura de desviaciones fallidas, escalado de moneda y relajación diminuta.

Véanse el código de referencia y el cuaderno 63. El benchmark alcanza su techo del 40%; no identifica un arancel óptimo interior ni valida una predicción empírica de guerra comercial. Los instrumentos soportados son universal, final_only e intermediate_only. Los juegos con gradientes, otros cierres fiscales y los modelos flexibles/GPU no están disponibles para esta métrica. Evalúe calendarios arancelarios explícitos con el solver público y el evaluador de bienestar.