Spaces:
Build error
Build error
| import pandas as pd | |
| import streamlit as st | |
| import plotly.graph_objects as go | |
| from ASDM.ASDM import Structure | |
| def load_model(model_path): | |
| try: | |
| model = Structure(from_xmile=model_path) | |
| except FileNotFoundError: | |
| st.error(f"File {model_path} not found.") | |
| return None | |
| return model | |
| def run_simulation(model, simulation_time, re_investment): | |
| model.sim_specs['initial_time'] = 0 | |
| model.sim_specs['current_time'] = 0 | |
| model.sim_specs['dt'] = 1 | |
| model.sim_specs['simulation_time'] = simulation_time | |
| model.sim_specs['time_units'] = 'Months' | |
| model.clear_last_run() | |
| model.replace_element_equation('Percentage_of_savings_spent_on_cessation', re_investment) | |
| model.simulate() | |
| results = model.export_simulation_result() | |
| results_df = pd.DataFrame.from_dict(results) | |
| columns_to_plot = ["Current_smokers", "Ex_smokers", "Ex_smokers_starting_again"] | |
| return results_df['Months'], results_df[columns_to_plot] | |
| st.title('Smoking Cessation') | |
| st.markdown(""" | |
| This simulation estimates the effects of various reinvestment levels in a smoking cessation service within a population of 900 smokers. | |
| By varying the proportion of savings that are reinvested into the service, we can observe different outcomes in terms of current smokers, ex-smokers, | |
| and ex-smokers who start smoking again over time. | |
| """) | |
| st.subheader('Slide the Slider to Vary Re-Investment Levels') | |
| model = load_model('smoking cessation demo.stmx') | |
| if model is not None: | |
| re_investment = st.slider("Proportion of Savings Spent on Cessation", 0, 100, 45) | |
| simulation_time = st.slider("Select the number of months to simulate:", min_value=1, max_value=36, value=24) | |
| x_values, y_values = run_simulation(model, simulation_time, re_investment) | |
| st.subheader('Effects of Re-Investment on Smoking Levels') | |
| fig = go.Figure() | |
| for column in y_values.columns: | |
| fig.add_trace(go.Scatter(x=x_values, y=y_values[column], mode='lines', name=column)) | |
| fig.update_layout(xaxis_title='Months', yaxis_title='Number of Smokers', autosize=False, width=800, height=500) | |
| st.plotly_chart(fig) |