2017-01-16 5 views
0

Merci à l'équipe optaplanner pour ce projet fantastique.Comment ajouter HardConstraint personnalisé dans VRP pour optaplanner?

je dois ajouter une contrainte dans le véhicule appelé capacityCap (un client est attribué au véhicule que si la « demande < = capacityCap ») J'ai ajouté une capacityCap variable dans Vehicle.java.

protected int capacityCap; 
public int getCapacityCap() { 
    return capacityCap; 
} 

public void setCapacityCap(int capacityCap) { 
    this.capacityCap = capacityCap; 
} 

et a ajouté bave pour cela dans vehicleRoutingScoreRules.drl

// Hard constraints 
rule "vehicleCapacityCap" 
when 
    $vehicle : Vehicle($capacityCap : capacityCap) 
    $customer : Customer(demand > $capacityCap); 
then 
    scoreHolder.addHardConstraintMatch(kcontext, -1); 
end 

Mais après l'exécution, il laisse tout le unassigned.Am client je faire quelque tort à bave?

UseCase pour cela: Si je veux attribuer à un ordre motard que si elle pèse moins de 5 kg.

S'il vous plaît demander si plus d'informations nécessaires. Merci

Répondre

2

Essayez cette

// Hard constraints 
rule "vehicleCapacityCap" 
when 
    $vehicle : Vehicle($capacityCap : capacityCap) 
    $customer : Customer(vehicle == $vehicle, demand > $capacityCap); 
then 
    scoreHolder.addHardConstraintMatch(kcontext, -1); 
end 
+0

encore il quitte l'ordre (client) non affecté. –

+0

Comment obtenez-vous que le client peut être désaffecté (je ne dis pas que c'est faux). Je pensais que dans la planification chaînée, toutes les entités doivent être initialisées en phase de construction. –

+0

Désolé, c'était mon tort, la bave que vous avez donné a parfaitement fonctionné. J'initialisais le capacityCap à tort. –