import%20marimo%0A%0A__generated_with%20%3D%20%220.23.11%22%0Aapp%20%3D%20marimo.App(%0A%20%20%20%20width%3D%22medium%22%2C%0A%20%20%20%20app_title%3D%22Population%20Categories%20-%20Hawk%2FDove%20with%20Evolving%20Risk-Attitudes%22%2C%0A%20%20%20%20html_head_file%3D%22..%2Fdocs_head.html%22%2C%0A)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20from%20simulatingrisk.doc_utils%20import%20docs_header%0A%0A%20%20%20%20docs_header()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Population%20Categories%20-%20Hawk%2FDove%20with%20Evolving%20Risk-Attitudes%0A%0A%20%20%20%20In%20this%20simulation%2C%20agents%20periodically%20adjusted%20to%20adopt%20the%20most%20successful%20risk-attitude%20in%20their%20adjustment%20neighborhood.%20The%20simulation%20converges%20when%20those%20adjustments%20have%20stabilized%20and%20the%20number%20of%20agents%20still%20adjusting%20is%20zero%20or%20a%20small%20proportion%20of%20the%20population.%0A%0A%20%20%20%20To%20provide%20a%20high-level%20view%20of%20the%20population%2C%20we%20define%20a%20set%20of%20population%20category%20based%20on%20the%20primary%20and%20secondary%20majority%20of%20risk-attitudes%20for%20agents%20in%20the%20stabilized%20simulation.%20%20This%20notebook%20provides%20analysis%20of%20the%20final%20population%20category%20at%20convergence%20across%20all%20batch%20runs.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20altair%20as%20alt%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20polars%20as%20pl%0A%0A%20%20%20%20from%20simulatingrisk.hawkdovemulti%20import%20analysis_utils%0A%0A%20%20%20%20data_dir%20%3D%20Path(%22data%2Fdefault%2F%22)%0A%20%20%20%20return%20alt%2C%20analysis_utils%2C%20data_dir%2C%20mo%2C%20pl%0A%0A%0A%40app.cell%0Adef%20_(data_dir%2C%20pl)%3A%0A%20%20%20%20df%20%3D%20pl.scan_csv(%5Bstr(file)%20for%20file%20in%20data_dir.glob(%22*_model.csv%22)%5D).collect()%0A%20%20%20%20return%20(df%2C)%0A%0A%0A%40app.cell%0Adef%20_(df)%3A%0A%20%20%20%20status_by_dist%20%3D%20(%0A%20%20%20%20%20%20%20%20df.group_by(%22risk_distribution%22%2C%20%22status%22).len().rename(%7B%22len%22%3A%20%22count%22%7D)%0A%20%20%20%20)%0A%20%20%20%20return%20(status_by_dist%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20We%20know%20from%20other%20analysis%20that%20the%20initial%20risk%20distribution%20has%20a%20significant%20impact%20on%20the%20resulting%20risk%20attitudes%2C%20but%20that%20it%20does%20not%20significantly%20impact%20rates%20of%20convergence.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20status_by_dist)%3A%0A%20%20%20%20alt.Chart(status_by_dist).mark_bar().encode(%0A%20%20%20%20%20%20%20%20x%3D%22risk_distribution%3AN%22%2C%20y%3D%22count%22%2C%20color%3D%22status%3AN%22%0A%20%20%20%20).properties(%0A%20%20%20%20%20%20%20%20title%3D%22Simulation%20end%20state%20by%20risk%20distribution%22%2C%0A%20%20%20%20%20%20%20%20width%3D250%2C%0A%20%20%20%20%20%20%20%20height%3D400%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(df)%3A%0A%20%20%20%20%23%20filter%20and%20restrict%20further%20analysis%20to%20runs%20that%20converged%0A%20%20%20%20converged_df%20%3D%20df.filter(status%3D%22converged%22)%0A%20%20%20%20return%20(converged_df%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Here%20is%20a%20chart%20of%20the%20number%20of%20simulations%20ending%20in%20each%20population%20category%2C%20for%20all%20simulations%20that%20started%20with%20an%20initial%20uniform%20distribution%20of%20risk%20attitudes.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(analysis_utils%2C%20converged_df)%3A%0A%20%20%20%20%23%20output%20just%20the%20uniform%20distribution%20chart%20by%20itself%2C%20for%20inclusion%20in%20the%20paper%0A%0A%20%20%20%20uniform_riskdist_population_chart%20%3D%20analysis_utils.graph_population_risk_category(%0A%20%20%20%20%20%20%20%20analysis_utils.groupby_population_risk_category(%0A%20%20%20%20%20%20%20%20%20%20%20%20converged_df.filter(risk_distribution%3D%22uniform%22)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%0A%20%20%20%20uniform_riskdist_population_chart.properties(%0A%20%20%20%20%20%20%20%20title%3D%22Distribution%20of%20Convergence%20States%20across%20Simulation%20Runs%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20To%20see%20which%20parameters%20impact%20the%20final%20population%2C%20we%20graph%20population%20categories%20for%20simulations%20segmented%20by%20various%20parmeters.%0A%0A%20%20%20%20---%0A%0A%20%20%20%20%23%23%23%20Initial%20Risk-Attitude%20distribution%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20analysis_utils%2C%20converged_df)%3A%0A%20%20%20%20analysis_utils.graph_population_risk_category(%0A%20%20%20%20%20%20%20%20analysis_utils.groupby_population_risk_category(%0A%20%20%20%20%20%20%20%20%20%20%20%20converged_df%2C%20%22risk_distribution%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20).facet(%22risk_distribution%22%2C%20columns%3D3).properties(%0A%20%20%20%20%20%20%20%20title%3Dalt.TitleParams(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Distribution%20of%20Convergence%20States%20by%20Initial%20Risk%20Attitude%20Distribution%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20anchor%3D%22middle%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20).resolve_scale(y%3D%22shared%22).configure_legend(%0A%20%20%20%20%20%20%20%20orient%3D%22none%22%2C%20legendX%3D750%2C%20legendY%3D400%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20Grid%20Size%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20analysis_utils%2C%20converged_df)%3A%0A%0A%20%20%20%20gridsize_opulation_category_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20analysis_utils.graph_population_risk_category(%0A%20%20%20%20%20%20%20%20%20%20%20%20analysis_utils.groupby_population_risk_category(converged_df%2C%20%22grid_size%22)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.facet(%22grid_size%22)%0A%20%20%20%20%20%20%20%20.properties(%0A%20%20%20%20%20%20%20%20%20%20%20%20title%3Dalt.TitleParams(%22Distribution%20of%20Convergence%20States%20by%20Grid%20Size%22)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20gridsize_opulation_category_chart%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20Random%20play%20odds%0A%0A%20%20%20%20Likelihood%20on%20any%20given%20turn%20that%20an%20agent%20will%20choose%20play%20randomly.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20analysis_utils%2C%20converged_df)%3A%0A%0A%20%20%20%20analysis_utils.graph_population_risk_category(%0A%20%20%20%20%20%20%20%20analysis_utils.groupby_population_risk_category(%0A%20%20%20%20%20%20%20%20%20%20%20%20converged_df%2C%20%22random_play_odds%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20).facet(%22random_play_odds%22).properties(%0A%20%20%20%20%20%20%20%20title%3Dalt.TitleParams(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Distribution%20of%20Convergence%20States%20by%20Odds%20of%20Random%20Play%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20Initial%20Hawk%20Odds%0A%0A%20%20%20%20Odds%20that%20agents%20play%20hawk%20on%20the%20first%20turn%2C%20when%20they%20do%20not%20yet%20have%20any%20information%20about%20their%20neighbors.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20analysis_utils%2C%20converged_df)%3A%0A%0A%20%20%20%20analysis_utils.graph_population_risk_category(%0A%20%20%20%20%20%20%20%20analysis_utils.groupby_population_risk_category(converged_df%2C%20%22hawk_odds%22)%0A%20%20%20%20).facet(%22hawk_odds%22).properties(%0A%20%20%20%20%20%20%20%20title%3Dalt.TitleParams(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Distribution%20of%20Convergence%20States%20over%20odds%20of%20playing%20Hawk%20on%20the%20first%20round%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20With%20and%20without%20extreme%20risk%20attitudes%0A%0A%20%20%20%20Simulations%20were%20run%20with%20and%20without%20extreme%20risk-attitudes%2C%20which%20are%20the%20end%20points%20of%20our%20range%20of%20risk%20attitudes.%0A%20%20%20%20-%200%20%3A%20always%20hawk%0A%20%20%20%20-%209%20%3A%20always%20dove%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20analysis_utils%2C%20converged_df)%3A%0A%20%20%20%20analysis_utils.graph_population_risk_category(%0A%20%20%20%20%20%20%20%20analysis_utils.groupby_population_risk_category(%0A%20%20%20%20%20%20%20%20%20%20%20%20converged_df%2C%20%22include_endpoints%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20).facet(%22include_endpoints%22).properties(%0A%20%20%20%20%20%20%20%20title%3Dalt.TitleParams(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Distribution%20of%20Convergence%20States%20with%20and%20without%20extreme%20risk-attitudes%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
4890fe59df1e299611d5f22fe248febc