def accept_grant(application):
        return random.choice([True, False])

The article is about grant termination, not the acceptance of applications.

turns out this function works just as well for that too

I think I'd have to reject it in review. The parameter is not used and should therefore be prepended with an underscore or literally be named "_" to signal such to a reader.

only 50% of the time

[deleted]

Is this the classic model?

No, that accepts far too many grants. You'd need to add weights=[1, 100] to it.