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
sensors_sampling_frequency = 1 # Hz
simulation_mode = 'training'
sensors = [
Sensor.create(SpectrumType.FTIR, sensing_zone_location_1),
]
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.
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.
- 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
ortesting
configuration.
def run(self)
A function to run the simulation.
- RPSimulation.
total_missed
: Number of missed containers. - RPSimulation.
classified
: Number of classified containers. - RPSimulation.
mistyped
: Number of containers classified incorrectly.
- Amount of time required to process all containers [seconds].
class Sensor:
def __init__(self, sensor_type: SpectrumType, location_cm: int, sensor_id: int = None)
A class to define a new sensor.
- location_cm : Location of the sensor [centimeter].
- sensor_type : Type of the sensor [SpectrumType].
- sensor_id : Sensor ID, which is used in sorting_function to identify each sensor. If no ID is provided, an ID will be generated based on the number of sensors.
def create(cls, sensor_type: SpectrumType, location: int, sensor_id: int = None)
A factory method to create a new sensor.
- location : Location of the sensor [centimeter].
- sensor_type : Type of the sensor [SpectrumType].
- sensor_id : Sensor ID, which is used in sorting_function to identify each sensor. If no ID is provided, an ID will be generated based on the number of sensors.
- A sensor object.
def reset_num(cls)
A class method to reset the number of created sensors. This would be helpful if you also want to reset IDs assigned to newly created sensors.
@property
def id(self)
Returns Sensor's ID.
class Conveyor:
def __init__(self, speed_cm_per_second: int, dimension:ConveyorDimension)
A class to define a new conveyor.
- speed_cm_per_second : Speed of the conveyor [centimeter per second].
- dimension : Dimensions of the conveyor in centimeter.
def create(cls, speed_cm_per_second: int, length: int, width: int)
A factory method to create a new conveyor.
- 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.
- A conveyor object.
def sorting_function(sensors_output)
A user-defined function that identifies the type of plastic, based on the given spectrum.
- sensors_output : A dictionary with sensors information. The keys are the id of each sensor.
{
sensor.id: {
'type': type,
'location': location,
'spectrum': spectrum,
}
}
- plastic_type dict: Plastic
decision = {
sensor_id: plastic_type
}
class Plastic(enum.Enum):
HDPE = 'HDPE'
LDPE = 'LDPE'
PP = 'PP'
PS = 'PS'
PC = 'PC'
PVC = 'PVC'
Polyester = 'Polyester'
PET = 'PET'
PU = 'PU'
Blank = 'background'
An enum for all types of plastics
class SpectrumType(enum.Enum):
FTIR = 'FTIR'
Raman = 'Raman'
An enum for all types of sensors