Je veux créer un score incrémental pour VRP avec une planification sur-contrainte. Je crée un véhicule factice supplémentaire, qui inclut tous les clients non planifiés. Le problème est lorsque optaplanner déplace le client vers un autre véhicule, il appelle afterVariableChanged avec le nom de variable previousStandstill et le véhicule pour ce client n'est pas actualisé. Alors je ne sais pas le véhicule pour ce client, je ne sais pas si j'ai besoin d'ajouter un coût doux ou non (pour un véhicule factice je ne pouvais pas ajouter de coût).Optaplanner VRP plan incrémental de score incrémental
Comment résoudre ce problème?
Exemple:
Optaplanner déplacer Customer1 de véhicule1 à véhicule2:
beforeVariableChanged: previousStandstill(Customer1), customer.GetVehicle() = Vehicle1
beforeVariableChanged: nextCustomer(Customer0), customer.GetVehicle() = Vehicle1
afterVariableChanged: nextCustomer(Customer0), customer.GetVehicle() = Vehicle1
afterVariableChanged: previousStandstill(Customer1), customer.GetVehicle() = Vehicle1
beforeVariableChanged: vehicle(Customer1), customer.GetVehicle() = Vehicle1
afterVariableChanged: vehicle(Customer1), customer.GetVehicle() = Vehicle2
Quand je reçois afterVariableChanged: previousStandstill (Customer1), dans customer.GetVehicle() J'ai ancienne valeur du véhicule et je n » Je ne sais pas si besoin d'ajouter un coût modéré (pour le coût du véhicule factice sont ignorés). Y at-il un moyen d'obtenir un véhicule réel dans afterVariableChanged - previousStandstill plutôt que dans afterVariableChanged - véhicule.
Oui, j'ai AnchorShadowVariable. Le problème est que la variable de véhicule dans Customer est mise à jour après l'appel afterVariableChanged avec le nom de variable previousStandstill – Kapeciu
Et la classe qui contient cette annotation a elle aussi une annotation PlanningEntity? Cela devrait fonctionner. –
Oui, c'est le cas. Le problème est le temps, lorsque le champ du véhicule est mis à jour. – Kapeciu