The Montreal subway system has a very clever way of somewhat saving energy (and emitting less heat): the section of the track at the station stop is higher than the rest of the track.
This means that the train's kinetic energy is converted to/from potential energy whenever the train arrives/leaves the station stops.
I feel like in the long term, this may become a liability compared to regenerative braking and level tracks.
For example the Montreal metro currently only allows a train to leave a station when the platform of the next one is free, limiting the frequency of this very crowded system. With modern signaling, trains can creep up to the ones before them and reduce the time between them down to 40 seconds - but it's more difficult with all those slopes around.
It's also making extending platform lengths or moving/adding stations nearly impossible.
In Australia when it's flat, there were still collisions. Trains are very very heavy. The collision report recommendations had been to keep a long distance between trains. For trains ahead, the coming train would slow down and would come to a stop, if it's probably one train length ahead.
I'm not sure how long the distance is though. 40 seconds is really really hard to estimate with very very heavy trains and no weight sensors. Even AI/ML cannot predict this (re: no weight sensors).
If there were collisions the signalling was crap. Train intervals below one minute are definitely possible. For example the new Thameslink line in London will have (or already has?) intervals well below one minute.
Trains know their position very precisely, with errors less than 20cm, and their braking characteristics and error margins are well known, especially in tunnels where there are now wet leaves or snow on the tracks. Automatic train operation makes trains stop at precisely the same spot each time (for example to match train doors to gates), to the point where increased track wear becomes a concern.
Why would a computer need weight sensors? It knows exactly how hard the electric motor worked when it was accelerating the train and exactly how quickly the train accelerated. It should be able to come up with an entirely usable estimate of the train's weight.
Just as an aside, modern transit trains have weight sensors anyway which adjusts the pressure in the air suspension to make sure the train is exactly level with the platforms.