60 selector.setGraph(dag);
62 unsigned int nb_changes_applied = 0;
63 Idx applied_change_with_positive_score = 0;
70 std::vector< bool > impacted_queues(dag.
size(),
false);
74 double best_score = 0;
75 double current_score = 0;
76 double delta_score = 0;
79 applied_change_with_positive_score = 0;
82 std::vector< std::pair< NodeId, double > > ordered_queues
83 = selector.nodesSortedByBestScore();
85 for (
Idx j = 0; j < dag.
size(); ++j) {
86 NodeId i = ordered_queues[j].first;
88 if (!selector.empty(i) && (!nb_changes_applied || (selector.bestScore(i) > 0))) {
93 switch (change.
type()) {
95 if (!impacted_queues[change.
node2()] && selector.isChangeValid(change)) {
96 if (selector.bestScore(i) > 0) {
97 ++applied_change_with_positive_score;
98 }
else if (current_score > best_score) {
99 best_score = current_score;
108 delta_score += selector.bestScore(i);
109 current_score += selector.bestScore(i);
111 impacted_queues[change.
node2()] =
true;
112 selector.applyChangeWithoutScoreUpdate(change);
113 ++nb_changes_applied;
119 if (!impacted_queues[change.
node2()] && selector.isChangeValid(change)) {
120 if (selector.bestScore(i) > 0) {
121 ++applied_change_with_positive_score;
122 }
else if (current_score > best_score) {
123 best_score = current_score;
132 delta_score += selector.bestScore(i);
133 current_score += selector.bestScore(i);
135 impacted_queues[change.
node2()] =
true;
136 selector.applyChangeWithoutScoreUpdate(change);
137 ++nb_changes_applied;
143 if ((!impacted_queues[change.
node1()]) && (!impacted_queues[change.
node2()])
144 && selector.isChangeValid(change)) {
145 if (selector.bestScore(i) > 0) {
146 ++applied_change_with_positive_score;
147 }
else if (current_score > best_score) {
148 best_score = current_score;
157 delta_score += selector.bestScore(i);
158 current_score += selector.bestScore(i);
161 impacted_queues[change.
node1()] =
true;
162 impacted_queues[change.
node2()] =
true;
163 selector.applyChangeWithoutScoreUpdate(change);
164 ++nb_changes_applied;
171 "edge modifications are not "
172 "supported by local search");
179 selector.updateScoresAfterAppliedChanges();
182 for (
auto iter = impacted_queues.begin(); iter != impacted_queues.end(); ++iter) {
189 if (applied_change_with_positive_score) {
191 nb_changes_applied = 0;
203 if (current_score > best_score) {