@@ -717,7 +717,7 @@ void SimulatedAnnealingCore<T>::fastSA()
717717 notch_weight_ = 0.0 ;
718718
719719 if (isValid ()) {
720- updateBestValidResult ();
720+ updateBestValidResult (cost );
721721 }
722722
723723 while (step <= max_num_step_) {
@@ -729,7 +729,7 @@ void SimulatedAnnealingCore<T>::fastSA()
729729 = cost < pre_cost
730730 || best_valid_result_.sequence_pair .pos_sequence .empty ();
731731 if (isValid () && keep_result) {
732- updateBestValidResult ();
732+ updateBestValidResult (cost );
733733 }
734734
735735 delta_cost = cost - pre_cost;
@@ -763,13 +763,14 @@ void SimulatedAnnealingCore<T>::fastSA()
763763 }
764764 calPenalty ();
765765
766- if (!isValid () && !best_valid_result_.sequence_pair .pos_sequence .empty ()) {
766+ if (!best_valid_result_.sequence_pair .pos_sequence .empty ()
767+ && (!isValid () || best_valid_result_.cost < calNormCost ())) {
767768 useBestValidResult ();
768769 }
769770}
770771
771772template <class T >
772- void SimulatedAnnealingCore<T>::updateBestValidResult()
773+ void SimulatedAnnealingCore<T>::updateBestValidResult(const float cost )
773774{
774775 best_valid_result_.sequence_pair .pos_sequence = pos_seq_;
775776 best_valid_result_.sequence_pair .neg_sequence = neg_seq_;
@@ -780,6 +781,8 @@ void SimulatedAnnealingCore<T>::updateBestValidResult()
780781 best_valid_result_.macro_id_to_width [macro_id] = macro.getWidth ();
781782 }
782783 }
784+
785+ best_valid_result_.cost = cost;
783786}
784787
785788template <class T >
0 commit comments