ThatYour problem is going a lot of directions.
If you have known worker attributes, like doctor, engineer, or accountant, you could have mirror document classification, and use MLmachine learning to classify.
If you are going to measure performance then, you wouldwill need to need get a sample from each user. Take likeFor example, take the top 1/4$\frac{1}{4}$ performance and have a target vector for the user. Map a document to a usersuser's strength. If that user is over queued then-queued, pick the next highest 1/4$\frac{1}{4}$ and so on. Use like You could use cosine similarity that givesto give you a score.
This getscan get tricky, as you may want to normalize on productivity. You may get a document that a high productivity user is better at, but a low productivity user is OK at. ABy way of analogy, an american football player may be the best receiver and half back, but you might have a good backup receiver and no good backup halfback, so you have themlet your backup play receiver.
Static parameters would be different, and I am not sure you should use them if you have a performance measure. IMy guess would be to queue before you have performance for a worker. But even at 4 documents, you havecan select a top 1/4$\frac{1}{4}$.
You could also create clusters and measure a useruser's performance versus the cluster. ThisThis is the easiest approach to queuing, as you just take the next document out of the cluster that is a usersuser's best cluster. You only need a few cross cluster-cluster workers to level queues. The down sideThe downside is, if you have like 20 clusters, it would take a while to get user performance versus cluster, so you would need to use static attributes until you get a valid sampling.