I wouldn't go so far as to call PID outdated. But there certainly is room for improvement. One way in which I have auto-tuned PID control loops is to use the Nelder-Mead method which is a form of hill climbing simplex algorithm. It has the benefit of being able to converge and reconverge on a target parameter that moves over time.
From this paper:
For example in our case of PID parameters tuning {KP,
KI, KD} a simplex is tetrahedron. Nelder–Mead
generates a new test position of simplex by extrapolating the behavior
of the objective function measured at each test point arranged as the
simplex. The algorithm then chooses to replace one of these test
points with the new test point and so the technique progresses.
My particular application was for motor control. We had two loops, a PID current control loop and a PI velocity control loop. We set our vertices to P, I, and D respectively and ran statistics on the output of the loop. We then ran the reflection, expansion, contraction, and reduction over and over again until the current or velocity control targets generated were within a few standard deviations.
With our product, the VP was very concerned with how the motor "sounded". And as it turned out, it "sounded" better when the current target bounced a bit more than was mathematically optimal. So, our tuning was done "live" in that we let the algorithm seek while the motor was running so that user's perception of the motor sound was also taken into account. After we found parameters that we liked, they were hard-coded and not changed.
This probably would not be ideal for you since you state, "putting the system in oscillation even as a part of auto-tuning is not acceptable to the users". Our system would most certainly oscillate and do other horrible things while it was auto-tuning.
However, you could run two copies of the PID controller. One that was "live" and actually controlling the process. And a second that was constantly being auto-tuned while being fed the same inputs as the "live" controller. When the output of the auto-tuned controller became "better" or more stable, you could swap the coefficients into the "live" controller. The controller would then perform corrections to the process until the desired performance was achieved. This would prevent oscillations that can be perceived by the user during auto-tuning. But if the inputs change drastically and the PID controller is no longer optimal, the auto-tuning can swap in new coefficients as they become available.
Best Answer
There are several methodologies to tune a PID, some can be fully automated and rely on some level of system identification. But most of them are just rules of thumb.
For temperature control, you want to avoid the integral term as much as you can. It is necessary to remove steady state error, but any time spent far from the set point is time that the I term is increasing, and once you reach the desired temperature you need to spend the same error area in the opposite direction to decrease it back to where the other terms take control.
Work with a pure PD control, and if that is not good enough then introduce a small amount of an I term, making sure that the integral of the temperature ramp-up time error times the I gain does not overwhelm the contribution of the PD terms. The more I you introduce, the more D you are likely to need to accelerate the response. This is not likely to be steady-state optimal, but it would ensure the least controller overshoot.
Think of I as the history of the system while D is the prediction of its future trend.
You can start with a pure proportional control, set a proportional gain that provides 100% air when the error is 5°C below the target and 0% when it is 5°C above the target. This might be enough for your purposes and could result in a stable system if the system inertia is low enough. Increase the gain to reduce the error (this is likely to result in oscillations) and add a derivative term to keep the system stable. Only add an integral term is the resulting steady-state error of the stable system is too large for your application.