import streamlit as st import pandas as pd import numpy as np import plotly.express as px from sklearn.linear_model import LinearRegression from datetime import datetime, timedelta import streamlit as st from crewai import Agent, Task, Crew import os import random # Set up your OpenAI API key (ensure you handle your API keys securely in production) os.environ["OPENAI_API_KEY"] = "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" # Define your agents and tasks as per your setup # Environmental Analyst Agent environmental_agent = Agent( role="Environmental Analyst", goal="Analyze and propose environmentally sustainable designs.", backstory="An experienced environmentalist with a strong track record in developing sustainable urban plans that reduce environmental impact and promote eco-friendly living.", tool=["EcoImpactAnalysisTool", "RenewableEnergySimulator"] ) # Human Traffic Carbon Footprint Analyst Agent human_traffic_carbon_footprint_agent = Agent( role="Human Traffic Carbon Footprint Analyst", goal="Assess and mitigate the carbon footprint resulting from human traffic around buildings.", backstory="Dedicated to reducing urban carbon emissions, with expertise in traffic pattern analysis and sustainable transportation solutions.", tool=[ "TrafficSimulationTool", "CarbonEmissionCalculator", "SustainableTransportPlanner" ] ) # Define tasks for each agent assess_sustainability_task = Task( description="Assess environmental sustainability of urban design.", agent=environmental_agent ) mitigate_traffic_carbon_footprint_task = Task( description="Mitigate carbon footprint from human traffic.", agent=human_traffic_carbon_footprint_agent ) # Streamlit app interface st.title('Smart City Sustainability Analysis') # Predefined surprising city design concepts design_concepts = [ "A city where all buildings are floating on water to adapt to rising sea levels.", "An underground city designed to use geothermal energy and protect inhabitants from extreme weather conditions.", "A vertical city with skyscrapers connected by sky bridges and public transportation via drones.", "A city built within a gigantic biodome that regulates climate and ensures a perfect environment.", "A fully mobile city with buildings on wheels, allowing it to move to different areas as seasons change." ] def generate_city_design(): # Randomly choose a surprising design concept return random.choice(design_concepts) # User inputs for the analysis design_input = st.text_area("Enter your urban design concept:") if st.button('Analyze Design'): if design_input: # Assemble the crew with the defined tasks sustainability_crew = Crew( agents=[environmental_agent, human_traffic_carbon_footprint_agent], tasks=[assess_sustainability_task, mitigate_traffic_carbon_footprint_task], verbose=True ) # Run the crew to analyze the design result = sustainability_crew.kickoff() # Display the analysis results (this is a placeholder, adjust based on your actual result structure) st.subheader('Analysis Results') st.write(result) # Make sure to format the result in a user-friendly way else: st.write("Please enter a design concept to analyze.") # Define the Sensor class class Sensor: def __init__(self, location): self.location = location self.carbon_levels = [] def detect_carbon(self, carbon_emission): self.carbon_levels.append(carbon_emission) def get_average_carbon(self): return sum(self.carbon_levels) / len(self.carbon_levels) if self.carbon_levels else 0 # Define the AIAgent class class AIAgent: def analyze_data(self, sensor): average_carbon = sensor.get_average_carbon() return average_carbon, self.make_decision(average_carbon) def make_decision(self, average_carbon): if average_carbon > 50: return "Implement carbon reduction measures." else: return "Maintain current city operations." # Define the SmartCity class class SmartCity: def __init__(self, sensors, agent): self.sensors = sensors self.agent = agent def simulate_human_traffic(self): for sensor in self.sensors: carbon_emission = random.uniform(10, 100) sensor.detect_carbon(carbon_emission) def run_simulation(self): self.simulate_human_traffic() results = {} for sensor in self.sensors: avg_carbon, decision = self.agent.analyze_data(sensor) results[sensor.location] = (avg_carbon, decision) return results # Streamlit app starts here st.title('Smart City Carbon Emission Simulation') # Number of sensors input number_of_sensors = st.sidebar.number_input('Number of Sensors', min_value=1, value=3) # Create sensors and an AI agent sensors = [Sensor(location=f"Location {i+1}") for i in range(number_of_sensors)] agent = AIAgent() # Initialize the Smart City smart_city = SmartCity(sensors, agent) if st.button('Run Daily Simulation'): results = smart_city.run_simulation() for location, (avg_carbon, decision) in results.items(): st.write(f"**{location}** - Average Carbon Emission: {avg_carbon:.2f}") st.write(f"Decision: {decision}") else: st.write("Click the button to run the simulation for a day.") def get_sensor_data(traffic_density): # This function should be replaced with real sensor data acquisition logic return {'traffic_density': traffic_density} # Placeholder function to simulate analyzing sensor data def analyze_sensor_data(data): # This function should be replaced with real data analysis logic return {'groundedness': 0.9, 'hallucination': 0.1} # Placeholder function to simulate running simulations def run_simulation(parameters): # This function should be replaced with real simulation logic return {'simulation_result': 'Reduced traffic congestion by 30%'} # Placeholder function to simulate creating eBooks def create_ebook(ideas): # This function should be replaced with real eBook creation logic return 'eBook with innovative urban planning ideas generated.' # Streamlit application st.title('Smart City Design Tool') # Sensor data simulation inputs st.header('Sensor Data Input') traffic_density = st.slider('Select Traffic Density', min_value=0, max_value=100, value=50) # When the user clicks the 'Analyze Data' button, run the analysis and display the results if st.button('Analyze Data'): # Simulate getting sensor data based on inputs sensor_data = get_sensor_data(traffic_density) # Execute the crew to analyze the design and generate solutions analysis_results = analyze_sensor_data(sensor_data) hin = analysis_results['groundedness'] * analysis_results['hallucination'] simulation_parameters = {'traffic_density': sensor_data['traffic_density']} simulation_result = run_simulation(simulation_parameters) new_ideas = ['Urban Green Spaces', 'Renewable Energy Sources'] ebook = create_ebook(new_ideas) # Display the results st.write(f"HIN: {hin}") st.write(f"Simulation Result: {simulation_result['simulation_result']}") st.write(f"eBook Content: {ebook}") # Simulate sensor data def simulate_sensor_data(sensor_type, num_entries=100): timestamps = [datetime.now() - timedelta(minutes=15 * i) for i in range(num_entries)] if sensor_type == "temperature": data = np.random.normal(loc=25, scale=5, size=num_entries) # Average temp with some variation elif sensor_type == "humidity": data = np.random.uniform(low=30, high=70, size=num_entries) # Random humidity levels elif sensor_type == "energy": data = np.random.uniform(low=100, high=500, size=num_entries) # Energy usage in kWh elif sensor_type == "water": data = np.random.uniform(low=100, high=1000, size=num_entries) # Water usage in gallons else: data = np.random.rand(num_entries) # Generic data for other sensors return pd.DataFrame({"Timestamp": timestamps, "Value": data}) # AI analysis (simple linear regression for demonstration) def ai_analysis(df): df["Timestamp_ordinal"] = df["Timestamp"].map(datetime.toordinal) X = df[["Timestamp_ordinal"]] y = df["Value"] model = LinearRegression() model.fit(X, y) return model.predict(X) # Main app function def main(): st.title("Custom Green City Builder") # Sidebar for sensor selection sensor_type = st.sidebar.selectbox("Select Sensor Type", ["temperature", "humidity", "energy", "water", "other"]) # Simulate and display sensor data data = simulate_sensor_data(sensor_type) st.write(f"Simulated Data for {sensor_type.capitalize()} Sensor") st.line_chart(data.set_index("Timestamp")) # AI analysis and prediction if st.button("Run AI Analysis"): predictions = ai_analysis(data) data["Predictions"] = predictions fig = px.line(data, x="Timestamp", y=["Value", "Predictions"], labels={"value": "Sensor Readings", "variable": "Type"}) st.plotly_chart(fig) if __name__ == "__main__": main()