You are missing a list of variables together with their meanings.
It is very nice that you introduce CLOCKmax, which I assume is the time that the shop is open.
However, can you explain why the number of arrivals is set to 600 while CLOCKmax is set to 60?.
If people come on average every three minutes, shouldn't 60 arrivals would be more than plenty?
One of the problems with using a huge list of arrivals and working with only a few entries is that 40
percent of the served arrivals did not get a shampoo and the mean arrival time is not 3.
Thank you for letting me know that you had other types of improvements but that you discarded for several reasons.
I agree that the customers wanting a shampoo would become angry if they are not prioritized, but also the shop could
loose money if shampooing gives for example just as much or more cash than a haircut.
Some comments in your code would also be nice to see.
You could use the shorter command convert(TraceTable[1 .. 10], array) to show the first ten elements.
For your improvement model, it would be nice to see a flow chart or put comments on your code.
In your improvement model, the task that NextType does is the same as the one that NextArrival does.
Your improvement model shows how to reduce the queue-length. How does reducing the queue-length and waiting time improve the business?.