Skip to main content

Recycling Plant Simulator

Project description

McMaster Recycling Plant Simulator Package

Quick start

The following code is an example of how to use this package:

import random

from rcplant import *


def user_sorting_function(sensors_output):
    # random identification
    decision = {sensor_id: random.choice(list(Plastic)) for (sensor_id, value) in sensors_output.items()}

    return decision


def main():

    # simulation parameters
    conveyor_length = 1000  # cm
    conveyor_width = 100  # cm
    conveyor_speed = 10  # cm per second
    num_containers = 100
    sensing_zone_location_1 = 500  # cm
    sensing_zone_location_2 = 600  # cm
    sensors_sampling_frequency = 1  # Hz
    simulation_mode = 'training'

    sensors = [
        Sensor.create(SpectrumType.FTIR, sensing_zone_location_1),
        Sensor.create(SpectrumType.Raman, sensing_zone_location_2),
    ]

    conveyor = Conveyor.create(conveyor_speed, conveyor_length, conveyor_width)

    simulator = RPSimulation(
        sorting_function=user_sorting_function,
        num_containers=num_containers,
        sensors=sensors,
        sampling_frequency=sensors_sampling_frequency,
        conveyor=conveyor,
        mode=simulation_mode
    )

    elapsed_time = simulator.run()

    print(f'\nResults for running the simulation in "{simulation_mode}" mode:')

    for item_id, result in simulator.identification_result.items():
        print(result)

    print(f'Total missed containers = {simulator.total_missed}')
    print(f'Total sorted containers = {simulator.total_classified}')
    print(f'Total mistyped containers = {simulator.total_mistyped}')

    print(f'\n{num_containers} containers are processed in {elapsed_time:.2f} seconds')


if __name__ == '__main__':
    main()

You may modify the user_sorting_function function and implement new logic for sorting plastic containers.

API


RPSimulation

class RPSimulation:
    def __init__(
            self,
            sorting_function,
            num_containers: int,
            sensors: List[Sensor],
            sampling_frequency: int,
            conveyor: Conveyor,
            mode: str
    )

A manager class for the recycling plant simulator.

Input parameters:
  • sorting_function : A user-defined function that gets the output of the sensors and identifies the type of plastic, based on the given spectrum.
  • num_containers : Number of input containers needed to be sorted.
  • sensors : An array of sensors.
  • sampling_frequency: The sampling frequency of sensors. Acceptable values: 10, 5, 2, and 1 Hz. In testing mode, increasing the sampling frequency increases added noise to spectrum.
  • conveyor : A user-defined conveyor system.
  • mode: A selector to run the simulation in either training or testing configuration.

RPSimulation.run

def run(self)

A function to run the simulation.

Outputs:
  • RPSimulation.total_missed : Number of missed containers.
  • RPSimulation.classified : Number of classified containers.
  • RPSimulation.mistyped : Number of containers classified incorrectly.
Returns:
  • Amount of time required to process all containers [seconds].

Sensor

class Sensor:
    def __init__(self, sensor_type: SpectrumType, location_cm: int)

A class to define a new sensor.

Input parameters:
  • location_cm : Location of the sensor [centimeter].
  • sensor_type : Type of the sensor [SpectrumType].

Sensor.create

def create(cls, sensor_type: SpectrumType, location: int)

A factory method to create a new sensor.

Input parameters:
  • location : Location of the sensor [centimeter].
  • sensor_type : Type of the sensor [SpectrumType].
Returns

Conveyor

class Conveyor:
    def __init__(self, speed_cm_per_second: int, dimension:ConveyorDimension)

A class to define a new conveyor.

Input parameters:
  • speed_cm_per_second : Speed of the conveyor [centimeter per second].
  • dimension : Dimensions of the conveyor in centimeter.

Conveyor.create

def create(cls, speed_cm_per_second: int, length: int, width: int)

A factory method to create a new conveyor.

Input parameters:
  • speed_cm_per_second : Speed of the conveyor [centimeter per second].
  • length : Length of the conveyor in centimeter.
  • width : Width of the conveyor in centimeter.
Returns

Sorting_function

def sorting_function(sensors_output)

A user-defined function that identifies the type of plastic, based on the given spectrum.

Input parameters:
  • sensors_output : A dictionary with sensors information. The keys are the id of each sensor.
{
    sensor.id: {
        'type': type,
        'location': location,
        'spectrum': spectrum,
    }
}
Return value:
decision = {
    sensor_id: plastic_type
}

Plastic

class Plastic(enum.Enum):
    HDPE = 'HDPE'
    LDPE = 'LDPE'
    PP = 'PP'
    PS = 'PS'
    PC = 'PC'
    PVC = 'PVC'
    Polyester = 'Polyester'
    PET = 'PET'
    PU = 'PU'

An enum for all types of plastics


SpectrumType

class SpectrumType(enum.Enum):
    FTIR = 'FTIR'
    Raman = 'Raman'

An enum for all types of sensorss

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rcplant-1.0.2.tar.gz (2.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rcplant-1.0.2-py2-none-any.whl (2.2 MB view details)

Uploaded Python 2

File details

Details for the file rcplant-1.0.2.tar.gz.

File metadata

  • Download URL: rcplant-1.0.2.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for rcplant-1.0.2.tar.gz
Algorithm Hash digest
SHA256 e3acd1ba9c49598167645396b349a5eeca95274258d19ea81fc02a4b089319bc
MD5 ee1c12db213c46d20978d09ba31f3c35
BLAKE2b-256 a1cccf34ed048c7708bc7d79f7434ede0c074adee19d99a5943b6fbd2dab3060

See more details on using hashes here.

File details

Details for the file rcplant-1.0.2-py2-none-any.whl.

File metadata

  • Download URL: rcplant-1.0.2-py2-none-any.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for rcplant-1.0.2-py2-none-any.whl
Algorithm Hash digest
SHA256 9d90f9b2f12113ba21e78a3eed26096c9a6f94ce774b01b6bb85d1eb3ccf0633
MD5 d44435df28a0bfe0fbaab788f56c6a57
BLAKE2b-256 7d796626db4af223f9573dccb428ccdeb63637f0675ceb7c8e8c8aaaca094ccd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page