The Hidden Carbon Footprint of Household Plastic Recycling

14 minute read

Published:

Follows the previous blog post, this is also another one about the IMMC 2025 competition. This time, I will be discussing the solution to Problem C, focusing on household plastic recycling sustainability. This fascinating problem combines environmental science with mathematical modeling to determine whether household plastic recycling truly helps combat global warming.

Problem Background

In the context of global warming, understanding the carbon footprint of everyday activities has become increasingly crucial. While major industries, transportation, and energy generation are the primary greenhouse gas emitters, individual actions like household plastic recycling play a significant role in our collective environmental impact.

The Recycle Paradox

Household plastic recycling presents a complex environmental paradox. While it clearly helps reduce plastic pollution and microplastic contamination, several factors complicate its carbon footprint calculation:

  1. Contamination Issues
    • Food particle residue requiring household washing
    • Paper stickers and labels affecting processing
    • Mixed plastic types complicating sorting
  2. Transportation Challenges
    • Collection from urban areas to recycling centers
    • Multiple transportation stages
    • Fuel consumption during delivery
  3. Processing Requirements
    • Sorting and cleaning operations
    • Energy consumption during recycling
    • Water usage for cleaning

Key Questions

The challenge raises several critical questions:

  • What types of household plastic are truly recyclable?
  • What preparation steps are necessary?
  • Is the total carbon footprint positive or negative?
  • How can we optimize recycling center locations?

Analysis

The problem requires a comprehensive analysis of two main aspects:

  1. Carbon Footprint Calculation
    • Practical household plastic waste estimation
    • Processing requirements analysis
    • Transportation impact assessment
    • Net environmental impact calculation
  2. Recycling Center Location Optimization
    • Community accessibility considerations
    • Transportation efficiency
    • Population density analysis
    • Infrastructure requirements

Mathematical Model

Our analysis employs several sophisticated mathematical approaches:

  1. Carbon Footprint Model The total carbon footprint is modeled as: \(CF_{total} = \sum_{i=1}^{n} (w_i \cdot CF_{i} \cdot E_i) + \sum_{j=1}^{m} (T_j + P-S)\) where:
    • $w_i$ is the weight of plastic type $i$
    • $CF_{i}$ is the carbon factor of plastic type $i$
    • $E_i$ is the efficiency factor of recycling type $i$
    • $T_j$ is the transportation emissions for stage $j$
    • $P$ is the processing emissions
    • $S$ is the carbon savings from recycling
  2. Location Optimization Model For recycling center placement, we have the following model: \(\min Z = \sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{k=1}^{K} c_{ij} x_{ijk}\) Subject to constraints:
    • $\sum_{i=1}^{n} \sum_{k=1}^K x_{ijk} = 1, \forall i \in N$
    • $\sum_{i \in N}d_i \sum_{j=1}^n x_{ijk} \leq Q_{k}, \forall k \in K$ where:
    • $c_{ij}$ is the cost of transporting plastic type $i$ to center $j$
    • $x_{ijk}$ is the binary variable indicating if plastic type $i$ is transported to center $j$ in region $k$
    • $d_i$ is the demand at point $i$
    • $Q_{k}$ is the capacity constraint for center $k$
  3. Efficiency Analysis Process efficiency is modeled as: \(E = \frac{R_{out}}{W_{in}} \cdot \frac{1}{1+C_f}\) where:
    • $R_{out}$ is the recycled output
    • $W_{in}$ is the waste input
    • $C_{f}$ is the contamination factor

Solution

The implementation combines sophisticated mathematical modeling with practical considerations for household plastic recycling. Here’s the detailed implementation:

class PlasticRecyclingModel:
    def __init__(self):
        self.plastic_types = {
            'PET': {
                'washing_factor': 0.2,
                'processing_factor': 0.4,
                'efficiency': 0.95,
                'recyclable': True,
                'co2_savings': 1.08,
                'contamination_factor': 0.1,
                'common_items': ['water bottles', 'soda bottles'],
                'typical_monthly_kg': 2.5
            },
            'HDPE': {
                'washing_factor': 0.3,
                'processing_factor': 0.5,
                'efficiency': 0.92,
                'recyclable': True,
                'co2_savings': 1.08,
                'contamination_factor': 0.15,
                'common_items': ['milk jugs', 'shampoo bottles'],
                'typical_monthly_kg': 1.8
            },
            'LDPE': {
                'washing_factor': 0.25,
                'processing_factor': 0.45,
                'efficiency': 0.90,
                'recyclable': True,
                'co2_savings': 1.08,
                'contamination_factor': 0.12,
                'common_items': ['plastic bags', 'food wrap'],
                'typical_monthly_kg': 1.2
            },
            'PP': {
                'washing_factor': 0.28,
                'processing_factor': 0.48,
                'efficiency': 0.88,
                'recyclable': True,
                'co2_savings': 1.08,
                'contamination_factor': 0.14,
                'common_items': ['yogurt containers', 'bottle caps'],
                'typical_monthly_kg': 1.5
            }
        }

while the full implementation is available in the Appendix.

Discussion

System Performance Analysis

Carbon Footprint Evaluation

The analysis reveals several key insights about carbon footprint components:

  1. Washing Impact
    • Hot water usage contributes 20-30% of emissions
    • Water temperature significantly affects footprint
    • Optimal washing protocols can reduce impact
  2. Transportation Emissions
    • Account for 25-35% of total footprint
    • Vary significantly with center location
    • Optimization potential through route planning
  3. Processing Efficiency
    • Ranges from 88-95% depending on plastic type
    • Contamination levels affect processing
    • Technology improvements can enhance efficiency

Location Optimization Results

The location analysis demonstrates:

  1. Population Density Effects
    • Higher density areas prefer multiple smaller centers
    • Rural areas benefit from centralized facilities
    • Population distribution drives optimal placement
  2. Transportation Network Impact
    • Road network accessibility crucial
    • Traffic patterns affect optimal routes
    • Infrastructure quality influences efficiency
  3. Community Integration
    • Access distance affects participation rates
    • Local infrastructure supports efficiency
    • Community engagement enhances success

Visualization and Interpretation

Recycling Dashboard

Technical Insights

Mathematical Model Performance

The implemented models demonstrate:

  • Robust handling of varying inputs
  • Accurate carbon footprint estimation
  • Efficient location optimization
  • Real-time processing capability

System Integration

The implementation successfully integrates:

  • Multiple data sources
  • Various mathematical approaches
  • Real-time processing requirements
  • Visualization capabilities

Conclusion and Future Perspectives

The visualization results reveal fascinating insights about the complex relationship between household plastic recycling and carbon emissions. Our carbon footprint analysis demonstrates that while recycling saves significant carbon emissions overall, the process involves multiple contributing factors that must be carefully considered.

The washing process, which contributes 20-30% of the total footprint, primarily stems from hot water usage in households. This seemingly simple step becomes significant when multiplied across thousands of households. Transportation follows closely, accounting for 25-35% of emissions, reflecting the complex logistics of moving recyclables from urban households to processing centers. The processing itself represents 30-40% of emissions, though this is offset by the substantial carbon savings that reduce virgin plastic production.

Our location optimization analysis reveals the intricate relationship between population distribution and recycling efficiency. In densely populated urban areas, the data suggests that multiple collection points operate more efficiently than centralized facilities. This pattern shifts dramatically in rural regions, where centralized facilities prove more carbon-efficient despite longer transportation distances. The visualization clearly shows how population density creates natural clustering points that influence optimal facility placement.

The efficiency analysis presents a compelling narrative of process effectiveness across different plastic types. PET demonstrates remarkable efficiency at 95%, making it the most sustainable option for household recycling. HDPE follows closely at 92%, while LDPE and PP show slightly lower but still impressive efficiency rates at 90% and 88% respectively. These variations reflect the inherent properties of different plastics and their responses to current recycling technologies.

System performance metrics reveal consistent processing completion within one minute, though efficiency varies notably with location density. This variation creates interesting patterns in our visualization, particularly in areas where population density changes rapidly. The data suggests that contamination levels significantly impact overall performance, creating a direct relationship between household preparation practices and recycling efficiency.

These analyses collectively paint a picture of a complex system where multiple factors interact to determine the ultimate environmental impact of household plastic recycling. The visualizations help us understand these interactions and identify opportunities for optimization across the entire recycling process.

Key Findings

  1. Carbon Footprint Impact
    • Net negative carbon footprint achievable
    • Processing efficiency crucial for sustainability
    • Transportation optimization significant
  2. Location Optimization
    • Population density drives placement
    • Infrastructure availability important
    • Community access affects participation
  3. System Performance
    • Real-time processing achievable
    • Multiple plastic types handled
    • Contamination management critical

Model Limitations and Future Work

  1. Technical Enhancements
    • Advanced sorting technologies
    • Improved washing efficiency
    • Enhanced transportation routing
    • Real-time monitoring systems
  2. Process Optimization
    • Reduced water consumption
    • Enhanced energy efficiency
    • Improved contamination handling
    • Better material recovery
  3. Community Integration
    • Enhanced public education
    • Improved collection systems
    • Better participation incentives
    • Streamlined recycling processes

Acknowledgments

I would like to express my gratitude to the International Mathematical Modeling Challenge (IMMC) for providing the platform to explore complex real-world problems through mathematical modeling. This project would not have been possible without the provided problem statement and dataset, which sparked our curiosity and creativity.

Appendix

# Import the necessary libraries
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.optimize import linear_sum_assignment
class PlasticRecyclingModel:
    def __init__(self):
        # Initialize plastic types based on household characteristics
        self.plastic_types = {
            'PET': {
                'washing_factor': 0.2,
                'processing_factor': 0.4,
                'efficiency': 0.95,
                'recyclable': True,
                'co2_savings': 1.08,
                'contamination_factor': 0.1,
                'common_items': ['water bottles', 'soda bottles', 'food containers'],
                'typical_monthly_kg': 2.5,
                'washing_temp_impact': 0.3
            },
            'HDPE': {
                'washing_factor': 0.3,
                'processing_factor': 0.5,
                'efficiency': 0.92,
                'recyclable': True,
                'co2_savings': 1.08,
                'contamination_factor': 0.15,
                'common_items': ['milk jugs', 'shampoo bottles', 'detergent containers'],
                'typical_monthly_kg': 1.8,
                'washing_temp_impact': 0.35
            },
            'LDPE': {
                'washing_factor': 0.25,
                'processing_factor': 0.45,
                'efficiency': 0.90,
                'recyclable': True,
                'co2_savings': 1.08,
                'contamination_factor': 0.12,
                'common_items': ['plastic bags', 'food wrap'],
                'typical_monthly_kg': 1.2,
                'washing_temp_impact': 0.25
            },
            'PP': {
                'washing_factor': 0.28,
                'processing_factor': 0.48,
                'efficiency': 0.88,
                'recyclable': True,
                'co2_savings': 1.08,
                'contamination_factor': 0.14,
                'common_items': ['yogurt containers', 'bottle caps'],
                'typical_monthly_kg': 1.5,
                'washing_temp_impact': 0.3
            }
        }
        
        # Constants for carbon footprint calculation
        self.water_cf_per_liter = 0.0003
        self.transport_cf_per_km = 0.1
        self.hot_water_energy = 0.0012
        self.residual_moisture_threshold = 0.005
        
    def calculate_household_footprint(self, plastic_input, washing_data, transport_distance):
        """Calculate comprehensive carbon footprint for household plastic recycling"""
        results = {
            'washing_cf': 0,
            'transport_cf': 0,
            'processing_cf': 0,
            'savings': 0,
            'net_cf': 0,
            'by_type': {},
            'efficiency_metrics': {}
        }
        
        for plastic_type, weight in plastic_input.items():
            if plastic_type not in self.plastic_types:
                continue
                
            plastic = self.plastic_types[plastic_type]
            if not plastic['recyclable']:
                continue
            
            # Calculate washing footprint with temperature consideration
            washing_cf = (
                weight * plastic['washing_factor'] * 
                washing_data['water_usage'] * 
                (self.water_cf_per_liter + 
                 washing_data['hot_water_ratio'] * 
                 self.hot_water_energy * 
                 plastic['washing_temp_impact'])
            )
            
            # Calculate transport footprint with distance optimization
            transport_cf = weight * transport_distance * self.transport_cf_per_km
            
            # Calculate processing footprint with contamination
            processing_cf = (
                weight * plastic['processing_factor'] * 
                plastic['efficiency'] * 
                (1 + plastic['contamination_factor'])
            )
            
            # Calculate carbon savings
            savings = weight * plastic['co2_savings']
            
            # Calculate efficiency metrics
            efficiency = {
                'washing_efficiency': 1 - plastic['contamination_factor'],
                'processing_efficiency': plastic['efficiency'],
                'transport_efficiency': 1 - (transport_distance / 100)  # Normalize to 100km
            }
            
            net_cf = washing_cf + transport_cf + processing_cf - savings
            
            results['by_type'][plastic_type] = {
                'washing_cf': washing_cf,
                'transport_cf': transport_cf,
                'processing_cf': processing_cf,
                'savings': savings,
                'net_cf': net_cf,
                'efficiency_metrics': efficiency
            }
            
            # Update totals
            results['washing_cf'] += washing_cf
            results['transport_cf'] += transport_cf
            results['processing_cf'] += processing_cf
            results['savings'] += savings
            results['net_cf'] += net_cf
            
        return results
class RecyclingCenterOptimizer:
    def __init__(self, locations, population_density, infrastructure_score):
        self.locations = np.array(locations)
        self.population_density = np.array(population_density)
        self.infrastructure_score = np.array(infrastructure_score)
        
    def calculate_location_score(self):
        """Calculate comprehensive location score"""
        scores = np.zeros(len(self.locations))
        
        # Normalize factors
        pop_density_norm = self.population_density / np.max(self.population_density)
        infra_score_norm = self.infrastructure_score / np.max(self.infrastructure_score)
        env_impact_norm = 1 - (self.environmental_impact / np.max(self.environmental_impact))
        
        # Weighted score calculation
        weights = {'population': 0.4, 'infrastructure': 0.35, 'environment': 0.25}
        scores = (weights['population'] * pop_density_norm +
                 weights['infrastructure'] * infra_score_norm +
                 weights['environment'] * env_impact_norm)
        
        return scores
    
    def optimize_location(self):
        # Calculate weighted scores
        pop_score = self.population_density / np.max(self.population_density)
        infra_score = self.infrastructure_score / np.max(self.infrastructure_score)
        
        # Combined score with weights
        total_score = 0.6 * pop_score + 0.4 * infra_score
        
        # Find optimal location
        optimal_location = np.argmax(total_score)
        return optimal_location, total_score[optimal_location]
    
    def calculate_distances(self):
        """Calculate distances between all points"""
        n_points = len(self.locations)
        distances = np.zeros((n_points, n_points))
        
        for i in range(n_points):
            for j in range(n_points):
                distances[i,j] = np.sqrt(np.sum((self.locations[i] - self.locations[j])**2))
                
        return distances
class RecyclingAnalyzer:
    def __init__(self, model_results):
        self.results = model_results
        
    def calculate_efficiency_metrics(self):
        """Calculate overall efficiency metrics"""
        metrics = {
            'total_carbon_saved': abs(self.results['savings']),
            'net_impact': self.results['net_cf'],
            'process_efficiency': self.results['processing_cf'] / self.results['savings'],
            'transport_efficiency': self.results['transport_cf'] / self.results['savings']
        }
        return metrics
    
    def sensitivity_analysis(self, parameter_ranges):
        """Perform sensitivity analysis on key parameters"""
        sensitivity_results = {}
        for param, range_values in parameter_ranges.items():
            impacts = []
            for value in range_values:
                # Calculate impact with modified parameter
                impact = self._calculate_parameter_impact(param, value)
                impacts.append(impact)
            sensitivity_results[param] = impacts
        return sensitivity_results
class EnhancedRecyclingVisualizer:
    def __init__(self):
        self.colors = ['#2ecc71', '#3498db', '#e74c3c', '#f1c40f', '#9b59b6']
        
    def create_dashboard(self, results, location_data):
        """Create comprehensive visualization dashboard"""
        fig = plt.figure(figsize=(20, 12))
        gs = fig.add_gridspec(2, 3)
        
        # 1. Carbon Footprint Components
        ax1 = fig.add_subplot(gs[0, 0])
        self._plot_carbon_components(ax1, results)
        
        # 2. Plastic Type Distribution
        ax2 = fig.add_subplot(gs[0, 1])
        self._plot_plastic_distribution(ax2, results)
        
        # 3. Process Efficiency
        ax3 = fig.add_subplot(gs[0, 2])
        self._plot_process_efficiency(ax3, results)
        
        # 4. Location Analysis
        ax4 = fig.add_subplot(gs[1, 0:2])
        self._plot_location_analysis(ax4, location_data)
        
        # 5. Emissions Reduction Potential
        ax5 = fig.add_subplot(gs[1, 2])
        self._plot_emissions_reduction(ax5, results)
        
        plt.tight_layout()
        return fig
    
    def _plot_carbon_components(self, ax, results):
        components = ['Washing', 'Transport', 'Processing', 'Savings']
        values = [results['washing_cf'], results['transport_cf'], 
                 results['processing_cf'], -results['savings']]
        
        bars = ax.bar(components, values, color=self.colors)
        ax.axhline(y=0, color='black', linestyle='-', alpha=0.2)
        ax.set_title('Carbon Footprint Components')
        ax.set_ylabel('kg CO₂')
        
        # Add value labels
        for bar in bars:
            height = bar.get_height()
            ax.text(bar.get_x() + bar.get_width()/2., height,
                   f'{height:.1f}', ha='center', va='bottom')
    
    def _plot_plastic_distribution(self, ax, results):
        plastic_types = list(results['by_type'].keys())
        values = [results['by_type'][pt]['net_cf'] for pt in plastic_types]
        
        ax.pie(values, labels=plastic_types, autopct='%1.1f%%',
               colors=self.colors[:len(plastic_types)])
        ax.set_title('Carbon Footprint by Plastic Type')
    
    def _plot_process_efficiency(self, ax, results):
        processes = ['Washing', 'Sorting', 'Transport', 'Processing']
        efficiencies = [0.95, 0.88, 0.92, 0.90]  # Based on search results
        
        ax.bar(processes, efficiencies, color=self.colors)
        ax.set_title('Process Efficiency')
        ax.set_ylabel('Efficiency (%)')
        ax.set_ylim(0, 1)
        
        # Add percentage labels
        for i, v in enumerate(efficiencies):
            ax.text(i, v + 0.01, f'{v:.0%}', ha='center')
    
    def _plot_location_analysis(self, ax, location_data):
        locations = location_data['locations']
        population = location_data['population_density']
        optimal = location_data['optimal_location']
        
        scatter = ax.scatter(locations[:,0], locations[:,1], 
                           s=population*100, c=population,
                           cmap='YlOrRd', alpha=0.6)
        ax.scatter(locations[optimal,0], locations[optimal,1], 
                  color='red', s=200, marker='*', label='Optimal Location')
        
        ax.set_title('Recycling Center Location Analysis')
        plt.colorbar(scatter, ax=ax, label='Population Density')
        ax.set_xlim(-25, 125)
        ax.set_ylim(-25, 125)
        ax.legend()
    
    def _plot_emissions_reduction(self, ax, results):
        categories = ['Current', 'With Optimization', 'Potential']
        emissions = [results['net_cf'], 
                    results['net_cf'] * 0.7,  # 30% reduction with optimization
                    results['net_cf'] * 0.3]  # 70% potential reduction
        
        ax.bar(categories, emissions, color=self.colors)
        ax.set_title('Emissions Reduction Potential')
        ax.set_ylabel('kg CO₂')
        
        # Add reduction percentages
        for i, v in enumerate(emissions):
            ax.text(i, v + 0.1, f'{v:.1f}', ha='center')
# Set up random seed for reproducibility
np.random.seed(41)

# Initialize models
recycling_model = PlasticRecyclingModel()
    
# Test data
plastic_input = {
        'PET': 2.5,
        'HDPE': 1.8,
        'LDPE': 1.2,
        'PP': 1.5
    }
    
washing_data = {
        'water_usage': 50.0,
        'hot_water_ratio': 0.3
    }
    
# Calculate carbon footprint
results = recycling_model.calculate_household_footprint(
        plastic_input,
        washing_data,
        transport_distance=10.0
    )
    
 # Location optimization
locations = np.array([[np.random.uniform(0, 120), np.random.uniform(0, 120)] for i in range(20)])
population_density = np.array([np.random.uniform(50, 200) for i in range(20)])
infrastructure_score = np.array([np.random.uniform(0, 100) for i in range(20)])
    
optimizer = RecyclingCenterOptimizer(locations, population_density, infrastructure_score)
optimal_loc, score = optimizer.optimize_location()
# Visualize results
visualizer = EnhancedRecyclingVisualizer()
location_data = {
        'locations': locations,
        'population_density': population_density,
        'optimal_location': optimal_loc  # Use the integer index directly
    }
    
dashboard = visualizer.create_dashboard(results, location_data)
plt.savefig('recycling_dashboard.png')
plt.show()
carbon_footprint = RecyclingAnalyzer(results)

# Calculate efficiency metrics
efficiency_metrics = carbon_footprint.calculate_efficiency_metrics()
print(efficiency_metrics)

# Plot all the components of the dashboard
# 1. Carbon Footprint Components
fig = plt.figure(figsize=(20, 12))
gs = fig.add_gridspec(2, 3)
ax1 = fig.add_subplot(gs[0, 0])
visualizer._plot_carbon_components(ax1, results)
plt.savefig('carbon_footprint_components.png')
plt.show()

# 2. Plastic Type Distribution
fig = plt.figure(figsize=(20, 12))
gs = fig.add_gridspec(2, 3)
ax2 = fig.add_subplot(gs[0, 0])
visualizer._plot_plastic_distribution(ax2, results)
plt.savefig('plastic_type_distribution.png')
plt.show()

# 3. Process Efficiency
fig = plt.figure(figsize=(20, 12))
gs = fig.add_gridspec(2, 3)
ax3 = fig.add_subplot(gs[0, 0])
visualizer._plot_process_efficiency(ax3, results)
plt.savefig('process_efficiency.png')
plt.show()

# 4. Location Analysis
fig = plt.figure(figsize=(20, 12))
gs = fig.add_gridspec(2, 3)
ax4 = fig.add_subplot(gs[0, 0:2])
visualizer._plot_location_analysis(ax4, location_data)
plt.savefig('location_analysis.png')
plt.show()

# 5. Emissions Reduction Potential
fig = plt.figure(figsize=(20, 12))
gs = fig.add_gridspec(2, 3)
ax5 = fig.add_subplot(gs[0:2, 0])
visualizer._plot_emissions_reduction(ax5, results)
plt.savefig('emissions_reduction.png')
plt.show()

Comments