Hi Geoffrey, I'm sorry but I have not had time to find a stable solution for diversification, I must conclude my thesis by April and I have not much time. For now I solved by calculating a value of penality in the move. But after graduation I will be happy to try to tackle the problem in a more efficient way :-) Doing a bit of debugging I noticed that either do not exclude the right moves. I try to explain better my problem. I have M vehicles and each has its own id (0, M-1). I have N customer and each of them has its own id (0,N-1). IDs are integer values. A move is uniquely identified by a triple of integers: the id of the customer, the id of the source vehicle and the id of the target vehicle. (Customer_id, source_route_id, destination_route_id) when I make this move I would consider taboo all the moves that report the customer in the source vehicle. If for example I have 5 vehicles and 20 customer a move could be: (6,0,1) so I would avoid all the moves of return, namely: (6,1,0), (6,2,0), (6,3,0), (6,4,0); I tried to do as you have suggested me (again if I understood correctly!) public Collection <? extends Object> getTabuProperties () ( return Arrays. <Integer> asList (customer_id, source_route_id); ) Only in this way excludes me all the moves that involve the customer and the vehicle source even if taken separately. Ex: I esculde also draws (6,1,4) or (7,0,3) Thank you from now for all the help you gave me already. regards, Marco |