Sustainable Procurement Optimization Model by Using Python Code

Sustainable Procurement Optimization Model by Using Python Code

In today’s evolving business landscape, sustainability is no longer optional, it is a necessity. Organizations are under increasing pressure to align procurement practices with environmental, economic, and social sustainability objectives.

The Sustainable Procurement Optimization Model, implemented using Python, offers a robust solution to address these demands. Leveraging the power of linear programming, this model helps organizations minimize procurement costs while achieving sustainability goals, such as reducing carbon emissions, promoting recycling, and fostering long-term supplier improvements. This article explains the model’s design, its implementation in Python, and the actionable insights it provides.

What is the Sustainable Procurement Optimization Model?

The Sustainable Procurement Optimization Model is a decision-support framework that integrates sustainability into procurement strategies by balancing cost efficiency, environmental responsibility, and regulatory compliance. Drawing on principles from sustainable supply chain management (Seuring & Müller, 2008), circular economy theory (Ellen MacArthur Foundation, 2013), and carbon neutrality practices (Brundtland Report, 1987), the model provides a structured approach to sustainable decision-making.

Core Objectives of the Model

  1. Economic Efficiency: Minimize procurement, transportation, recycling, and carbon credit costs within defined budget limits.
  2. Environmental Goals: Reduce total emissions by adhering to carbon caps, utilizing carbon credits, and promoting recycling.
  3. Supplier Development: Support targeted investments in suppliers to enhance efficiency and reduce long-term costs.
  4. Regulatory Compliance: Meet mandatory carbon reduction targets and recycling benchmarks while adhering to budgetary and operational constraints.

The model leverages Python’s computational capabilities to deliver actionable insights that are scalable, adaptable, and aligned with global sustainability frameworks (UN Global Compact, 2021).

Theoretical Foundation and Relevance

Sustainable Procurement:

  • Defined by the UN Global Compact as the integration of environmental, social, and economic factors into purchasing decisions, sustainable procurement helps organizations meet development and sustainability goals (UNGC, 2021).
  • Carter & Rogers (2008) emphasized the critical role of sustainability in supply chains, identifying it as a key driver of long-term resilience and performance.

Circular Economy Principles:

  • Recycling and waste minimization components align with circular economy principles, reducing dependency on virgin materials and minimizing environmental impact (Ellen MacArthur Foundation, 2013).

Carbon Management:

  • Incorporating carbon caps and credits allows organizations to manage emissions while meeting compliance requirements (Brundtland Report, 1987; IPCC, 2018).

Linear Programming for Optimization:

  • Linear programming is a proven tool for solving complex multi-objective problems, enabling organizations to optimize resource allocation and decision-making under constraints (Linton et al., 2007).

Python Implementation of the Model

The Sustainable Procurement Optimization Model is implemented using Python and the pulp library, a popular tool for solving linear programming problems. Below is the step-by-step implementation.

Key Components of the Code

Decision Variables: Decision Variables:

  • purchase[s, r, t]: Quantity of goods purchased from supplier s for region r in time period t.
  • recycle[t]: Quantity of recycled materials used in time period t.
  • carbon_credits[t]: Number of carbon credits purchased in time t to offset emissions.
  • invest[s, t]: Binary variable indicating investment in supplier s during time t.

Objective Function:

Minimize total costs:

  • Procurement costs (adjusted for investments).
  • Transportation costs.
  • Recycling costs.
  • Carbon credit purchases.
  • Supplier investment expenses.

Constraints:

  • Demand Fulfillment: Ensure total procurement and recycling meet or exceed demand in all regions and time periods.
  • Budget Limits: Ensure total spending on procurement, recycling, and investments stays within the allocated budget.
  • Carbon Emission Caps: Limit emissions by using sustainable procurement practices and carbon credits.
  • Recycling Targets: Promote circular economy principles by enforcing a minimum recycling requirement.
  • Supplier Capacities: Ensure procurement does not exceed the capacity of individual suppliers.

from pulp import LpProblem, LpMinimize, LpVariable, lpSum, value
import matplotlib.pyplot as plt
import pandas as pd

# Parameters
suppliers = ["S1", "S2", "S3"]
regions = ["North America", "Europe", "Asia"]
time_periods = [1, 2, 3]
demand = {1: 300, 2: 400, 3: 350}
budget = 50000
base_cost = {"S1": 20, "S2": 25, "S3": 30}  # USD per unit
transport_cost = {
    ("S1", "North America"): 5, ("S1", "Europe"): 10, ("S1", "Asia"): 15,
    ("S2", "North America"): 6, ("S2", "Europe"): 8, ("S2", "Asia"): 12,
    ("S3", "North America"): 4, ("S3", "Europe"): 7, ("S3", "Asia"): 10,
}  # USD per unit
recycling_cost = 10  # USD per unit
carbon_credit_price = {1: 120, 2: 130, 3: 140}  # USD per unit
capacity = {"S1": 500, "S2": 400, "S3": 300}  # Units per period
base_emissions = {"S1": 5, "S2": 4, "S3": 3}  # kg CO2 per unit
recycling_emissions = 2  # kg CO2 per unit
carbon_cap = {1: 1500, 2: 1800, 3: 1600}  # kg CO2 per period
investment_cost = 1000  # USD per investment
cost_reduction_rate = 0.1  # 10% reduction in cost after investment
emission_reduction_rate = 0.2  # 20% reduction in emissions after investment
recycling_target = 0.4  # 40% of total demand must be recycled

# Decision Variables
purchase = {(s, r, t): LpVariable(f"purchase_{s}_{r}_{t}", 0) for s in suppliers for r in regions for t in time_periods}
invested_purchase = {(s, r, t): LpVariable(f"invested_purchase_{s}_{r}_{t}", 0) for s in suppliers for r in regions for t in time_periods}
invest = {(s, t): LpVariable(f"invest_{s}_{t}", 0, 1, cat="Binary") for s in suppliers for t in time_periods}
recycle = {t: LpVariable(f"recycle_{t}", 0) for t in time_periods}
carbon_credits = {t: LpVariable(f"carbon_credits_{t}", 0) for t in time_periods}

# Define Problem
problem = LpProblem("Sustainable_Procurement_Model_Extended", LpMinimize)

# Objective Function
problem += lpSum(
    base_cost[s] * (purchase[s, r, t] - invested_purchase[s, r, t]) +
    (base_cost[s] * (1 - cost_reduction_rate)) * invested_purchase[s, r, t] +
    transport_cost[(s, r)] * purchase[s, r, t] +
    recycling_cost * recycle[t] +
    carbon_credit_price[t] * carbon_credits[t] +
    investment_cost * invest[s, t]
    for s in suppliers for r in regions for t in time_periods
)

# Constraints for Auxiliary Variables
for s in suppliers:
    for r in regions:
        for t in time_periods:
            problem += invested_purchase[s, r, t] <= purchase[s, r, t], f"Invested_Limit_{s}_{r}_{t}"
            problem += invested_purchase[s, r, t] <= capacity[s] * invest[s, t], f"Capacity_Limit_{s}_{r}_{t}"

# Constraints
# Meet demand
for t in time_periods:
    problem += lpSum(purchase[s, r, t] for s in suppliers for r in regions) + recycle[t] >= demand[t], f"Demand_{t}"

# Budget constraint
problem += lpSum(
    base_cost[s] * purchase[s, r, t] +
    investment_cost * invest[s, t] +
    recycling_cost * recycle[t]
    for s in suppliers for r in regions for t in time_periods
) <= budget, "Budget_Limit"

# Carbon cap
for t in time_periods:
    total_emissions = lpSum(
        base_emissions[s] * (purchase[s, r, t] - invested_purchase[s, r, t]) +
        (base_emissions[s] * (1 - emission_reduction_rate)) * invested_purchase[s, r, t] +
        transport_cost[(s, r)] * purchase[s, r, t]
        for s in suppliers for r in regions
    ) + recycling_emissions * recycle[t]
    problem += total_emissions - carbon_credits[t] <= carbon_cap[t], f"Carbon_Cap_{t}"

# Recycling target
problem += lpSum(recycle[t] for t in time_periods) >= recycling_target * lpSum(demand.values()), "Recycling_Target"

# Supplier capacity
for s in suppliers:
    for t in time_periods:
        problem += lpSum(purchase[s, r, t] for r in regions) <= capacity[s], f"Capacity_{s}_{t}"

# Solve the Problem
problem.solve()

# Extract Results
results = {
    "Recycling": [recycle[t].varValue for t in time_periods],
    "Carbon Credits": [carbon_credits[t].varValue for t in time_periods],
    "Total Cost (USD)": value(problem.objective),
}

# Visualization
plt.figure(figsize=(10, 6))
plt.plot(time_periods, results["Recycling"], marker='o', label="Recycling (Units)", linestyle='-')
plt.plot(time_periods, results["Carbon Credits"], marker='s', label="Carbon Credits (Units)", linestyle='--')
plt.title("Recycling and Carbon Credits Over Time")
plt.xlabel("Time Period")
plt.ylabel("Units")
plt.legend()
plt.grid()
plt.show()

# Display Summary
results
        


Recycling: S1: 0.0
                   S2: 164.5 
                   S3: 255.5
 Carbon Credits: 
                   S1: 1.500 
                   S2:   884
                   S3:        0
 Total Cost (USD): 2,707,590        

Explanation of Results

Recycling and Carbon Credit Trends:

  • The line charts illustrate how recycling and carbon credits are utilized over time to meet sustainability goals.
  • High recycling indicates alignment with circular economy principles, while carbon credits offset any excess emissions.

Total Cost:

  • The model provides the minimum total cost of achieving the procurement and sustainability objectives, factoring in procurement, investment, recycling, and carbon credits.

Investment Impacts:

  • Investments in suppliers reduce both costs and emissions, which is reflected in the reduced base cost and emissions for the invested portion of procurement.

Actionable Insights:

  • Identify suppliers to prioritize for investments.
  • Optimize the use of recycling to minimize carbon credit dependency and costs.
  • Evaluate cost-effectiveness of meeting stricter carbon caps.

Conclusion

The Sustainable Procurement Optimization Model represents a practical and scalable approach to integrating sustainability into procurement strategies. Using Python and linear programming, the model enables organizations to minimize costs, reduce emissions, and promote recycling while meeting regulatory and sustainability requirements. By aligning procurement with sustainability principles, organizations can drive operational efficiency, foster supplier collaboration, and ensure long-term resilience in an increasingly sustainability-focused world.

References

  1. Brundtland, G. H. (1987). Our Common Future: Report of the World Commission on Environment and Development. United Nations.
  2. Carter, C. R., & Rogers, D. S. (2008). A framework of sustainable supply chain management: moving toward new theory. International Journal of Physical Distribution & Logistics Management, 38(5), 360-387.
  3. Ellen MacArthur Foundation (2013). Towards the Circular Economy.
  4. Intergovernmental Panel on Climate Change (2018). Global Warming of 1.5°C. United Nations.
  5. Linton, J. D., Klassen, R., & Jayaraman, V. (2007). Sustainable supply chains: An introduction. Journal of Operations Management, 25(6), 1075-1082.
  6. Seuring, S., & Müller, M. (2008). From a literature review to a conceptual framework for sustainable supply chain management. Journal of Cleaner Production, 16(15), 1699-1710.
  7. UN Global Compact (2021). A practical guide to sustainable procurement. United Nations Global Compact Network.

要查看或添加评论,请登录

BURAK OVACIK的更多文章

社区洞察

其他会员也浏览了