Parametric randcase

Hi
my input transaction has a variable called id and I’m trying to make a transaction sequence so that transaction ids are concentrated over some chosen ids.
for example consider I have a transaction sequence which contains 1000 number of transactions; my transaction id can take any number from 0 to 63 but I need most of them to be around 11, 24 and 60 so the end result has 200 transactions with id of 11, 100 with id of 24 , 500 with id of 60 and the rest of the transactions are evenly distributed.
to achieve this I needed something like randcase or dist but the problem is that the number of ids are parametric (for example it may be 128 instead of 64) and the other problem is that the number of ids that will get the high probabilities are also parametric (11 , 24 , 60 in this example but it may be 20,30,50,60 in another example).
I’ve tried something like this (its wrong but I hope it shows the idea):


constraint weighted{
foreach (trasactionSeq[i])
             randcase
                 for (int j=0 ; j<number_of_ids ; j++)
                      Weights[j]: trasactionSeq[i].id = j;
             endcase
}

which the weights array contains the weight of each id and will be given as input from top.
for example with 4 ids , if the weights array is [1,2,3,1] the probability of id == 0 is 1/7, id == 1 is 2/7 , id == 2 is 3/7 and id == 3 is 1/7.
any ideas ?

In reply to Morteza_Seyedi:

See if this solution can be adapted to your situation:

https://verificationacademy.com/forums/systemverilog/constraint-variable-distribution#answer-91272