In this case, you have a regulation goal that is not linear.
You may try to change the PID regulator setpoint value for temperature, to be the same as the actual temperature measured, as long as the temperature is below the maximum (95 degree C).
But I think there are 2 regulation loops here, one is for the temperature,
the other is for current 2 Ampere or PWM duty cycle 4500,
in order for the PID regulator algorithm to give any output at all.
You might try to make a scaled combination of temperature and current for PID input and setpoint,
PID Input = Temperature * ScaleT - Current * ScaleC;
PID Setpoint = minimum(Temperature, 95degreeC) * ScaleT - 2Ampere * ScaleC;
I did put in a minus sign in the scaling expression for the current,
because of the inverted behaviour of your PWM code, higher PWM input giving less current.
A negative scaling factor would have the same effect.
For testing regulation settings, you might try to run with a lower temperature limit,
maybe 35 degree C, temporarily to study how the regulation works.
And maybe put in some independent safety code,
to shut down completely in case the measured temperature exceed setpoint temperature + 10 degreeC.
Maybe using PWM regulation in this application might be overkill,
you might get by with something like:
if (temperature < 90)
PWM = 4500;
else if (temperature < 91)
PWM = 5500;
else if (temperature < 92)
PWM = 6500;
else if (temperature < 93)
PWM = 7500;
else if (temperature < 94)
PWM = 8500;
else if (temperature < 95)
PWM = 9500;
PWM = 9999;
But integrating and testing PID regulation code in your program, will be a more useful learning experience.