import numpy as np import pandas as pd import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler # Function to preprocess data def preprocess_data(data): # Convert date column to datetime data['date'] = pd.to_datetime(data['date']) # Create a sequence feature data['sequence'] = np.arange(len(data)) # Scale the demand values scaler = MinMaxScaler() data['demand_scaled'] = scaler.fit_transform(data['demand'].values.reshape(-1, 1)) return data, scaler # Function for demand forecasting def forecast_demand(data, model_type='LSTM'): data, scaler = preprocess_data(data) X = data[['sequence']] y = data['demand_scaled'] # Split the data into train and test sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) if model_type == 'LSTM': # Reshape the input data for LSTM X_train = X_train.values.reshape(-1, 1, 1) X_test = X_test.values.reshape(-1, 1, 1) model = Sequential() model.add(LSTM(64, input_shape=(1, 1))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(X_train, y_train, epochs=50, batch_size=32, verbose=0) forecast = model.predict(X_test) # Inverse scale the forecasted values forecast = scaler.inverse_transform(forecast) elif model_type == 'RandomForest': model = RandomForestRegressor(n_estimators=100, random_state=42) model.fit(X_train, y_train) forecast = model.predict(X_test) # Inverse scale the forecasted values forecast = scaler.inverse_transform(forecast.reshape(-1, 1)).squeeze() # Inverse scale the actual test values y_test = scaler.inverse_transform(y_test.values.reshape(-1, 1)).squeeze() return forecast, y_test # Gradio interface import gradio as gr def run_app(): with gr.Blocks() as demo: gr.Markdown("# Intelligent Inventory and Supply Chain Management") with gr.Tab("Demand Forecasting"): with gr.Row(): model_type = gr.Radio(["LSTM", "RandomForest"], label="Model Type") with gr.Row(): data_upload = gr.File(label="Upload Data") forecast_button = gr.Button("Forecast Demand") with gr.Row(): forecast_plot = gr.Plot() forecast_output = gr.Dataframe(label="Forecasted Demand") forecast_button.click(forecast_demand_wrapper, inputs=[data_upload, model_type], outputs=[forecast_plot, forecast_output]) demo.launch() if __name__ == "__main__": run_app()