Dmtlant commited on
Commit
71515bf
·
verified ·
1 Parent(s): 30998ff

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -45
app.py CHANGED
@@ -108,55 +108,55 @@ if st.button("▶️ Запустить симуляцию"):
108
  # Плейсхолдер для графика
109
  plot_placeholder = st.empty()
110
 
 
111
  # Симуляция изменения последовательности
112
- for step in range(steps):
113
- if step != 0:
114
- # Мутация последовательности на каждом шаге
115
- seq = bio_mutate(seq)
116
- # Профиль торсионных углов для последовательности
117
- torsion_profile = np.array([ANGLE_MAP.get(nt, 0.0) for nt in seq])
118
- # Поиск локальных минимумов
119
- runs = find_local_min_runs(torsion_profile, min_run, max_run)
120
- # Сохранение статистик
121
- stat_bist_counts.append(len(runs))
122
- ent = compute_entropy(torsion_profile)
123
- stat_entropy.append(ent)
124
- acorr = compute_autocorr(torsion_profile)
125
 
126
- # Визуализация результатов
127
- fig, axs = plt.subplots(3, 1, figsize=(10, 8))
128
- plt.subplots_adjust(hspace=0.45)
129
- lags_shown = 6
130
 
131
- axs[0].cla() # Очищаем предыдущий график
132
- axs[1].cla() # Очищаем предыдущий график
133
- axs[2].cla() # Очищаем предыдущий график
 
134
 
135
- # График торсионного угла
136
- axs[0].plot(torsion_profile, color='royalblue', label="Торсионный угол")
137
- for start, end, val in runs:
138
- axs[0].axvspan(start, end, color="red", alpha=0.3)
139
- axs[0].plot(range(start, end+1), torsion_profile[start:end+1], 'ro', markersize=5)
140
- axs[0].set_ylim(-200, 200)
141
- axs[0].set_xlabel("Позиция")
142
- axs[0].set_ylabel("Торсионный угол (град.)")
143
- axs[0].set_title(f"Шаг {step}: {seq}\nЧисло машин: {len(runs)}, энтропия: {ent:.2f}")
144
- axs[0].legend()
145
 
146
- # График динамики числа 'биомашин'
147
- axs[1].plot(stat_bist_counts, '-o', color='crimson', markersize=4)
148
- axs[1].set_xlabel("Шаг")
149
- axs[1].set_ylabel("Число машин")
150
- axs[1].set_ylim(0, max(10, max(stat_bist_counts)+1))
151
- axs[1].set_title("Динамика: число 'биомашин'")
152
 
153
- # График автокорреляции
154
- axs[2].bar(np.arange(lags_shown), acorr[:lags_shown], color='teal', alpha=0.7)
155
- axs[2].set_xlabel("Лаг")
156
- axs[2].set_ylabel("Автокорреляция")
157
- axs[2].set_title("Автокорреляция углового профиля (структурность) и энтропия")
158
- axs[2].text(0.70,0.70, f"Энтропия: {ent:.2f}", transform=axs[2].transAxes)
159
 
160
- # Отображаем график в Streamlit
161
- plot_placeholder.pyplot(fig)
162
- time.sleep(0.5)
 
 
 
 
 
108
  # Плейсхолдер для графика
109
  plot_placeholder = st.empty()
110
 
111
+
112
  # Симуляция изменения последовательности
113
+ for step in range(steps):
114
+ if step != 0:
115
+ seq = bio_mutate(seq)
116
+ torsion_profile = np.array([ANGLE_MAP.get(nt, 0.0) for nt in seq])
117
+ runs = find_local_min_runs(torsion_profile, min_run, max_run)
118
+ stat_bist_counts.append(len(runs))
119
+ ent = compute_entropy(torsion_profile)
120
+ stat_entropy.append(ent)
121
+ acorr = compute_autocorr(torsion_profile)
 
 
 
 
122
 
123
+ fig, axs = plt.subplots(3, 1, figsize=(10, 8))
124
+ plt.subplots_adjust(hspace=0.45)
 
 
125
 
126
+ # Очищаем графики
127
+ axs[0].cla()
128
+ axs[1].cla()
129
+ axs[2].cla()
130
 
131
+ # График торсионного угла
132
+ axs[0].plot(torsion_profile, color='royalblue', label="Торсионный угол")
133
+ for start, end, val in runs:
134
+ axs[0].axvspan(start, end, color="red", alpha=0.3)
135
+ axs[0].plot(range(start, end+1), torsion_profile[start:end+1], 'ro', markersize=5)
136
+ axs[0].set_ylim(-200, 200)
137
+ axs[0].set_xlabel("Позиция")
138
+ axs[0].set_ylabel("Торсионный угол (град.)")
139
+ axs[0].set_title(f"Шаг {step}: {seq}\nЧисло машин: {len(runs)}, энтропия: {ent:.2f}")
140
+ axs[0].legend()
141
 
142
+ # График динамики числа 'биомашин'
143
+ axs[1].plot(stat_bist_counts, '-o', color='crimson', markersize=4)
144
+ axs[1].set_xlabel("Шаг")
145
+ axs[1].set_ylabel("Число машин")
146
+ axs[1].set_ylim(0, max(10, max(stat_bist_counts)+1))
147
+ axs[1].set_title("Динамика: число 'биомашин'")
148
 
149
+ # График автокорреляции
150
+ axs[2].bar(np.arange(6), acorr[:6], color='teal', alpha=0.7)
151
+ axs[2].set_xlabel("Лаг")
152
+ axs[2].set_ylabel("Автокорреляция")
153
+ axs[2].set_title("Автокорреляция углового профиля (структурность) и энтропия")
154
+ axs[2].text(0.70, 0.70, f"Энтропия: {ent:.2f}", transform=axs[2].transAxes)
155
 
156
+ # Отображаем график в Streamlit
157
+ plot_placeholder.pyplot(fig)
158
+
159
+ # Закрытие графика после отображения
160
+ plt.close(fig)
161
+
162
+ time.sleep(0.5)