{"id":20803024,"url":"https://github.com/milocortes/simplest_mabm","last_synced_at":"2026-05-09T09:10:18.944Z","repository":{"id":136406134,"uuid":"592064721","full_name":"milocortes/SIMplest_MABM","owner":"milocortes","description":"Implementación y comparación de tiempos de ejecución del SIMplest Macroeconomic Agent Based Model (Caiani, EAEPE 2018 ) en C++, Rust y Python","archived":false,"fork":false,"pushed_at":"2023-01-24T17:38:50.000Z","size":3528,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-18T12:48:04.373Z","etag":null,"topics":["cpp","python","rust","rust-lang"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/milocortes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-22T20:09:01.000Z","updated_at":"2023-01-24T17:39:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"4fcbef9b-1b38-4e69-aa37-975b6b6ebf66","html_url":"https://github.com/milocortes/SIMplest_MABM","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocortes%2FSIMplest_MABM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocortes%2FSIMplest_MABM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocortes%2FSIMplest_MABM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milocortes%2FSIMplest_MABM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/milocortes","download_url":"https://codeload.github.com/milocortes/SIMplest_MABM/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243147100,"owners_count":20243746,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","python","rust","rust-lang"],"created_at":"2024-11-17T18:40:23.875Z","updated_at":"2026-05-09T09:10:13.919Z","avatar_url":"https://github.com/milocortes.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SIMplest_MABM\n\n## Introducción\n\nRust es un lenguaje de programación creado en 2010 por Mozilla. El lenguaje brinda seguridad de la memoria sin la necesidad de incorpora un recolector de basura. Esto es producto de la introducción del concepto de *borrow checker* que verifica que los accesos a datos son legales, lo que le permite a Rust prevenir problemas de seguridad sin imponer costos durante el tiempo de ejecución [(McNara, 2021)](https://www.manning.com/books/rust-in-action). A su vez, *borrow checker* se basa en tres conceptos interrelacionados : *lifetimes*, *ownership* y *borrowing*.  En septiembre de 2022, la versión 6.1 del kernel de Linux incorporó a Rust para escribir componentes del kernel.\n\nSi bien Rust es utilizado principalmente para System Programming, en la academia comienza a utilizarse el lenguaje como alternativa a C y C++ ([ver](https://www.nature.com/articles/d41586-020-03382-2)).\n\nEn esta implementación se realiza un comparativo entre tiempos de ejecución de un Modelo Macroeconómico Basado en Agentes propuesto por [Alessandro Caiani](https://sites.google.com/view/alessandro-caiani/teaching#h.p_NCwo3LmKcTZs) (\"the SIMplest model\"). Dicho modelo es desarrollado en Python, C++ y Rust. Se evaluan los tiempos de ejecución de las implementaciones con distintas cargas de trabajo.\n\n## Modelo\n\n### Supuestos\n\nEl modelo propuesto por [Alessandro Caiani](https://sites.google.com/view/alessandro-caiani/teaching#h.p_NCwo3LmKcTZs) supone lo siguiente:\n\n* No hay dinero privado:\n\t- No hay bancos ni créditos ni pagos de interés.\n* Economía cerrada:\n\t- No hay importaciones ni exportaciones.\n\t- No hay flujos de capital.\n* Economía con sólo trabajo como factor de la producción.\n\t- No hay capital. \n\t- No hay costos intermedios.\n\t\n### Sectores\n\n* Hogares:\n\t- Compran bienes de consumo y pagan impuestos.\n\t- Obtienen salario.\n\t- Acumulan activos.\n\t\n* Productores:\n\t- Venden bienes y servicios a los hogares y gobierno.\n\t- Pagan salarios e impuestos.\n\t\n* Gobierno:\n\t- Compran bienes y servicios a los productores.\n\t- Recaudan impuestos.\n\nEl activo del modelo es el dinero (*high powered money*).\n\nLas interrelaciones entre sectores queda expresada en las matrices de flujos y acervos.\n![Flujos](images/flujos.png)\n\n![Acervos](images/acervos.png)\n\n### Parámetros exógenos\n\n* Número de hogares.\n* Número de firmas.\n* Productividad laboral.\n* Propensión a consumir sobre el ingreso.\n* Propensión a consumir sobre la riqueza.\n* Tasa de impuestos.\n* Gasto real del gobierno.\n* Salarios.\n* Precios.\n\n## Definición de las ejecuciones de prueba\n\nComparamos las ejecuciones de modelo en Python y Rust para las siguientes cuatro pruebas:\n\n![Experimentos](images/experimentos.png)\n\n## Resultados \n\nPara las 4 pruebas realizadas, la implementación en Rust es entre 14 y 16 veces más rápida que la implementación en Python, mientras que C++ es entre 1.9 y 2.6 veces más rápido que Rust.\n\n![](images/tiempo_ejec_rust_python.png)\n\nLa siguiente tabla presenta el tiempo en segundos de cada implementación.\n\n| Tipo de experimento   |       C++ |   Python |     Rust |\n|:----------------|----------:|---------:|---------:|\n| Prueba 1        | 0.0573333 |  1.60367 | 0.110238 |\n| Prueba 2        | 0.292381  |  7.60152 | 0.451762 |\n| Prueba 3        | 0.659905  | 19.9071  | 1.17271  |\n| Prueba 4        | 1.48205   | 60.2753  | 3.88514  |\n\n\nPor su parte, la siguiente tabla presenta la razón de tiempo de ejecución de C++ y Rust vs Python.\n\n| Tipo de Experimento   |     C++ |    Rust |\n|:----------------|--------:|--------:|\n| Prueba 1        | 27.9709 | 14.5473 |\n| Prueba 2        | 25.9987 | 16.8264 |\n| Prueba 3        | 30.1666 | 16.9752 |\n| Prueba 4        | 40.6703 | 15.5143 |\n\n\nLas siguientes figuras muestran la tasa de desempleo estimada para cada implementación.\n\n![](images/Prueba_1_tasa_desempleo.png)\n![](images/Prueba_2_tasa_desempleo.png)\n![](images/Prueba_3_tasa_desempleo.png)\n![](images/Prueba_4_tasa_desempleo.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilocortes%2Fsimplest_mabm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmilocortes%2Fsimplest_mabm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilocortes%2Fsimplest_mabm/lists"}