A smartlist defines a selection of files based on the evaluated criteria. The criteria are not reevaluated until the list is refreshed or reused in some way. Once you Play something in MC, the Playing Now playlist is populated with the selected file set. It is *this* list that remains static. To have the current playing now scrapped and filled with new content, you'll have to schedule something to refill Playing Now.
You can use the smartlist I've mentioned here as the basis for generating the correct files to populate Playing Now. And you can later call upon a scheduling tool to place new Playing Now content (using the same smartlist) to play next (after the currently playing track, or you could abort playback and replace all of Playing Now).
Play Doctor generates new content at intervals of 100 songs, but this period is too long to ensure your time period crossovers are honored.
The expression that accomplishes what you want is:
ifelse(
compare(formatdate(Now(), H.mm, 10), <, 10),
math(below([BPM], 100) & above([Intensity], 3)),
compare(formatdate(Now(), H.mm, 16), <, 16),
math(above([BPM], 99) & above([Intensity], 3)),
compare(formatdate(Now(), H.mm, 20), <, 20),
math(above([BPM], 69) & below([BPM], 100) & below([Intensity], 4)),
compare(formatdate(Now(), H.mm, 23.59), <, 23.59),
math(below([BPM], 70) & below([Intensity], 4)),
1, 0
)
This produces a 1 when the criteria are met and a 0 otherwise. To wrap it up into a smartlist, use the [=expression]=1 construct:
[=ifelse(compare(formatdate(Now(), H.mm, 10), <, 10), math(below([BPM], 100) & above([Intensity], 3)),compare(formatdate(Now(), H.mm, 16), <, 16), math(above([BPM], 99) & above([Intensity], 3)), compare(formatdate(Now(), H.mm, 20), <, 20), math(above([BPM], 69) & below([BPM], 100) & below([Intensity], 4)), compare(formatdate(Now(), H.mm, 23.59), <, 23.59), math(below([BPM], 70) & below([Intensity], 4)), 1, 0)]=1