Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import numpy as np | |
| import pandas as pd | |
| import tensorflow as tf | |
| from tensorflow.keras.models import Sequential | |
| from tensorflow.keras.layers import LSTM, Dense | |
| from sklearn.preprocessing import MinMaxScaler | |
| import plotly.express as px | |
| # إعدادات الصفحة | |
| st.set_page_config( | |
| page_title="Aviator Predictor", | |
| layout="wide", | |
| initial_sidebar_state="collapsed" | |
| ) | |
| # إعدادات النموذج | |
| WINDOW_SIZE = 2 # تم التخفيض لتقليل استهلاك الذاكرة | |
| EPOCHS = 30 # تم التخفيض لتسريع التدريب | |
| # إعداد حالة الجلسة | |
| if "values" not in st.session_state: | |
| st.session_state.values = [] | |
| if "model" not in st.session_state: | |
| st.session_state.model = None | |
| if "scaler" not in st.session_state: | |
| st.session_state.scaler = MinMaxScaler(feature_range=(0, 1)) | |
| # وظائف التحكم | |
| def prepare_data(data): | |
| scaled_data = st.session_state.scaler.fit_transform(np.array(data).reshape(-1,1)) | |
| X, y = [], [] | |
| for i in range(len(scaled_data)-WINDOW_SIZE): | |
| X.append(scaled_data[i:i+WINDOW_SIZE, 0]) | |
| y.append(scaled_data[i+WINDOW_SIZE, 0]) | |
| return np.array(X), np.array(y) | |
| def build_model(): | |
| model = Sequential([ | |
| LSTM(32, activation='relu', input_shape=(WINDOW_SIZE, 1)), # تم التبسيط | |
| Dense(1) | |
| ]) | |
| model.compile( | |
| optimizer='adam', | |
| loss='mse' | |
| ) | |
| return model | |
| # واجهة المستخدم | |
| st.title("🛩 Aviator Predictor Pro") | |
| st.markdown("أدخل القيم (مثال: 1.23) ثم اضغط إضافة") | |
| col1, col2 = st.columns([3, 1]) | |
| with col1: | |
| new_value = st.number_input("القيمة الجديدة:", format="%.2f", key="input", step=0.1) | |
| with col2: | |
| if st.button("➕ إضافة"): | |
| st.session_state.values.append(float(new_value)) | |
| st.rerun() | |
| if st.button("🗑️ مسح البيانات"): | |
| st.session_state.values = [] | |
| st.session_state.model = None | |
| st.rerun() | |
| # عرض البيانات | |
| if len(st.session_state.values) > 0: | |
| st.subheader("📊 التطور التاريخي") | |
| df = pd.DataFrame({'القيم': st.session_state.values}) | |
| fig = px.line(df, y='القيم', markers=True) | |
| st.plotly_chart(fig, use_container_width=True) | |
| # التدريب والتنبؤ | |
| if len(st.session_state.values) >= WINDOW_SIZE + 1: | |
| try: | |
| X, y = prepare_data(st.session_state.values) | |
| X = X.reshape((X.shape[0], X.shape[1], 1)) | |
| if st.session_state.model is None: | |
| st.session_state.model = build_model() | |
| history = st.session_state.model.fit( | |
| X, y, | |
| epochs=EPOCHS, | |
| verbose=0 | |
| ) | |
| last_sequence = st.session_state.scaler.transform( | |
| np.array(st.session_state.values[-WINDOW_SIZE:]).reshape(-1,1) | |
| ).reshape(1, WINDOW_SIZE, 1) | |
| prediction = st.session_state.scaler.inverse_transform( | |
| st.session_state.model.predict(last_sequence, verbose=0) | |
| )[0][0] | |
| st.success(f"التنبؤ للجولة القادمة: {prediction:.2f}x") | |
| st.info(f"آخر {WINDOW_SIZE} قيم: {st.session_state.values[-WINDOW_SIZE:]}") | |
| except Exception as e: | |
| st.error(f"حدث خطأ تقني: {str(e)}") | |
| elif len(st.session_state.values) > 0: | |
| needed = WINDOW_SIZE + 1 - len(st.session_state.values) | |
| st.warning(f"أدخل {needed} قيم أخرى لبدء التنبؤات") | |
| st.markdown("---") | |
| st.caption("الإصدار 4.0 | تم التطوير باستخدام خوارزميات التعلم العميق") |