Hi Geoffrey,

Today I tried to follow the process for selecting a tabu move through propertytabuList. correct me if I misunderstood:
  • Make a move
  • Create a collection of objects through the method getTabuProperties()
  • In the class AbstractTabuAccepter I check if at least one of these objects is contained in propertyTabuList. in this case the move is considered taboo (unless the aspiration criteria). [These objects are called from the method findTabu(moveScope) of Class PropertyTabuAccepter]
  • When I chose the move to do for the current step, I insert in propertyTabuList objects generated by the method getTabuProperties() [these objects are called from the method findNewTabu(stepScope) of Class PropertyTabuAccepter]
In this way, however, are not able to decide when I make a move which other moves I considered taboo.
For giving me this opportunity I'm trying a new way.
I tried to change :
  • the interface TabuPropertyEnabled adding a method representationMove()
  • the method findTabu(moveStep) of Class PropertyTabuAccepter internally calls representationMove().
In this way the cycle of selecting a move would be:
  • Make a move
  • create a representation of the move with the method representationMove()
  • if this representation is contained in propertyTabuList the move is considered taboo (unless the aspiration criterion). [These objects are called from the method findTabu(moveScope) of Class PropertyTabuAccepter]
  • When I chose the move to do for the current step, I insert in propertyTabuList objects generated by the method getTabuProperties() [these objects are called from the method findNewTabu(stepScope) of Class PropertyTabuAccepter]
Recalling the example that you had posted yesterday
If for example I have 5 vehicles and 20 customer and I want to move the customer 6 from the vehicle 0 to vehicle 1, then:
  • (6,0,1) => is the representation of the move [generated by representationMove()]
  • (6,1,0), (6,2,0), (6,3,0), (6,4,0) => are the moves that I want I considered taboo. [generated by getTabuProperties()]

By the first tests I noticed that in this way avoids the situation where at an step I make a move and at the one after a back move. Next week I will have to do some more detailed tests.

regards,
Marco