def __init__(self, job_resources: dict = {'num_cpus': 1}) -> None:
        """
        Parameters
        ----------
        job_resources: dict, default: {'num_cpus': 1}
            A resource in Ray is a key-value pair where the key denotes a 
            resource name and the value is a float quantity. Ray has native support for CPU,
            GPU, and memory resource types; `'num_cpus'`, `'num_gpus'`, and `'memory'`.
            
            Examples:
            - {'num_cpus': 1}: Use 1 CPU per task
            - {'num_cpus': 2, 'num_gpus': 0.5}: Use 2 CPUs and half a GPU per task
            - {'memory': 1000 * 1024 * 1024}: Reserve 1GB memory per task
            
            Read more here: 
            https://docs.ray.io/en/latest/ray-core/scheduling/resources.html
        """
        # Check ray availability at runtime
        try:
            import ray as _ray
        except ImportError:
            raise ImportError(
                "Ray must be installed! "
                "You can install Ray with one of:\n"
                "  pip install pymoo[parallelization]\n"
                "  pip install pymoo[full]\n"
                '  pip install "ray[default]"'
            )
        self.ray = _ray
        super().__init__()
        self.job_resources = job_resources

        Parameters
        ----------
        job_resources: dict, default: {'num_cpus': 1}
            A resource in Ray is a key-value pair where the key denotes a 
            resource name and the value is a float quantity. Ray has native support for CPU,
            GPU, and memory resource types; `'num_cpus'`, `'num_gpus'`, and `'memory'`.
            
            Examples:
            - {'num_cpus': 1}: Use 1 CPU per task
            - {'num_cpus': 2, 'num_gpus': 0.5}: Use 2 CPUs and half a GPU per task
            - {'memory': 1000 * 1024 * 1024}: Reserve 1GB memory per task
            
            Read more here: 
            https://docs.ray.io/en/latest/ray-core/scheduling/resources.html
        
pymoo/parallelization/ray.py