2017-05-25 3 views
1

Quelque chose qui a récemment attiré mon attention a été une étape plus lente que d'autres lorsqu'un «nouveau meilleur score» est produit. C'est certainement le clonage de la solution qui se produit à chaque étape qui produit un «nouveau meilleur score».Solution Le clonage se produit à des étapes qui produisent un «nouveau meilleur score» d'affilée

Cela ne pose aucun problème si les étapes "new best score" ne sont pas alignées. Si par exemple nous avons 50 étapes dans une rangée, le processus de clonage de la solution sera exécuté 50 fois. Une façon plus intelligente serait de faire le processus de clonage à la fin de la séquence (une seule fois).

Est-ce quelque chose qui peut être implémenté facilement ou y a-t-il quelque chose qui pourrait l'empêcher? Une autre idée serait de faire le clonage à chaque étape du "nouveau meilleur score", mais seulement de cloner les instances d'entité de planification modifiées par le déplacement sélectionné comme une étape et de les ajouter à la meilleure solution.

Répondre

1

Si vous avez 50 étapes d'affilée, et que les 23 premières étapes améliorent la meilleure solution, devons-nous faire un clone de planification au cours de cette étape 23 de cette solution de travail? Oui, nous le faisons, car il n'y a aucune garantie que l'une des 27 prochaines étapes permettra d'améliorer le meilleur score, donc nous ne voulons pas perdre l'état de la solution à l'étape 23. Pas chaque étape améliore le meilleur score, certains aller à un score pire (en particulier avec l'acceptation tardive). Cela étant dit, dans Construction Heuristics - nous ne faisons pas de clones de planification intermédiaires car nous pouvons garantir que la solution ne fera que s'améliorer (plus les variables initialisées sont toujours meilleures).

Dans tous les cas, la meilleure façon de faire des clones de planification d'éclairage est de concevoir un modèle pour lequel la classe d'entités de planification n'a pas de références entrantes (à l'exception de la classe solution bien sûr)

+0

Geoffrey je suis Je ne suis pas sûr que vous ayez bien compris mon point. Le point avec les 50 étapes d'affilée était que chacune d'elles produise un «nouveau meilleur score» (nous sommes sûrs à 100% que la solution de travail est la meilleure à cause du score calculé) et à la 51ème étape cette séquence est stoppée un score pire. Ce qui est fait à l'intérieur d'une étape est un tas de mouvements de faire et défaire et ensuite à la fin de la marche elle-même. Donc, le clonage pourrait être fait après le dernier mouvement d'annulation et avant l'étape elle-même. –

+0

Même si une option "pickEarly" est activée ("FIRST_LAST_STEP_SCORE_IMPROVING" ou FIRST_BEST_SCORE_IMPROVING) où seul un déplacement est effectué, cela fonctionnera à nouveau, car si le pas est fait plus tôt, il sera à nouveau "nouveau meilleur score" étape. –

+0

La deuxième idée était de faire le clonage de la solution de manière «incrémentielle» (similaire au calcul de score incrémental). Comme le calcul de score incrémental fonctionne (en calculant d'abord le score pour toutes les entités), nous ne ferions (qu'une seule fois) le clonage de toute la solution. Fondamentalement, le clone après l'heuristique de construction. Donc, à ce stade, nous aurions une solution clonée entière et en recherche locale lors de l'étape (qui produit un «nouveau meilleur score») les instances d'entité du mouvement seront prises, clonées et mises à jour dans la solution clonée entière. Le score sera mis à jour également. –