I am trying to build a dash app in Python to simulate a Q-Learning problem. Before implementing the algorithm I am just focusing on making the table work incrementing randomly the values and waiting 1 sec between each increment.
Q is a pandas dataframe here:
table = ff.create_table(Q, height_constant=20)
table.layout.width=300
def update_Q(Q):
for i in range(len(Q)):
for j in range(1, len(Q.columns)):
Q.iloc[i,j] += np.random.choice([0,1,2])
print(Q)
return Q
I am able to make it work with that print statement, the value of the table on the console is indeed getting updated.
However, in the browser it just get updated the first time, but then it remains static. Here is the code:
# Browser visualization
app.layout = html.Div([
html.H1(children='Frozen Lake: Q-Learning Demo'),
dcc.Graph(id='table', figure=table),
dcc.Interval(
id='time',
interval=1*1000, # in milliseconds
n_intervals=0)
]
)
@app.callback(Output(component_id = 'table', component_property='figure'),
[Input(component_id = 'time', component_property='n_intervals')])
def update_table(n):
# Update values
new_table = ff.create_table(update_Q(Q))
time.sleep(1)
return new_table
if __name__ == '__main__':
app.run_server()
What am I missing?