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 | تم التطوير باستخدام خوارزميات التعلم العميق")