@@ -782,6 +782,41 @@ class CoptFullScheduler : public Scheduler<Graph_t> {
782782 model.SetObjective (expr - instance.synchronisationCosts (), COPT_MINIMIZE);
783783 }
784784
785+ RETURN_STATUS run_scheduler (BspScheduleCS<Graph_t> &schedule) {
786+ auto &instance = schedule.getInstance ();
787+ Envr env;
788+ Model model = env.CreateModel (" bsp_schedule" );
789+
790+ setupVariablesConstraintsObjective (instance, model);
791+
792+ if (use_initial_schedule) {
793+ loadInitialSchedule (model, instance);
794+ }
795+
796+ computeScheduleBase (schedule, model);
797+
798+ if (model.GetIntAttr (COPT_INTATTR_MIPSTATUS) == COPT_MIPSTATUS_OPTIMAL) {
799+
800+ constructBspScheduleFromSolution (schedule, true );
801+ return RETURN_STATUS::OSP_SUCCESS;
802+
803+ } else if (model.GetIntAttr (COPT_INTATTR_MIPSTATUS) == COPT_MIPSTATUS_INF_OR_UNB) {
804+
805+ return RETURN_STATUS::ERROR;
806+
807+ } else {
808+
809+ if (model.GetIntAttr (COPT_INTATTR_HASMIPSOL)) {
810+
811+ constructBspScheduleFromSolution (schedule, true );
812+ return RETURN_STATUS::BEST_FOUND;
813+
814+ } else {
815+ return RETURN_STATUS::TIMEOUT;
816+ }
817+ }
818+ }
819+
785820 public:
786821 CoptFullScheduler (unsigned steps = 5 )
787822 : allow_recomputation(false ), use_memory_constraint(false ), use_initial_schedule(false ), initial_schedule(0 ),
@@ -831,62 +866,34 @@ class CoptFullScheduler : public Scheduler<Graph_t> {
831866 return status;
832867 }
833868 }
834- virtual RETURN_STATUS computeSchedule (MaxBspSchedule<Graph_t> &schedule) {
869+ virtual RETURN_STATUS computeMaxBspSchedule (MaxBspSchedule<Graph_t> &schedule) {
835870
836871 MaxBspScheduleCS<Graph_t> schedule_cs (schedule.getInstance ());
837- RETURN_STATUS status = computeScheduleCS (schedule_cs);
872+ RETURN_STATUS status = computeMaxBspScheduleCS (schedule_cs);
838873 if (status == RETURN_STATUS::OSP_SUCCESS || status == RETURN_STATUS::BEST_FOUND) {
839874 schedule = std::move (schedule_cs);
840875 return status;
841876 } else {
842877 return status;
843878 }
844879 }
845- virtual RETURN_STATUS computeScheduleCS (BspScheduleCS<Graph_t> &schedule) override {
846-
847- auto &instance = schedule.getInstance ();
848-
880+
881+ virtual RETURN_STATUS computeMaxBspScheduleCS (MaxBspScheduleCS<Graph_t> &schedule) {
849882 allow_recomputation = false ;
883+ is_max_bsp = true ;
884+ return run_scheduler (schedule);
885+ }
850886
851- is_max_bsp = schedule.isMaxBsp ();
852-
853- Envr env;
854- Model model = env.CreateModel (" bsp_schedule_cs" );
855-
856- setupVariablesConstraintsObjective (instance, model);
857-
858- if (use_initial_schedule) {
859- loadInitialSchedule (model, instance);
860- }
861-
862- computeScheduleBase (schedule, model);
863-
864- if (model.GetIntAttr (COPT_INTATTR_MIPSTATUS) == COPT_MIPSTATUS_OPTIMAL) {
865-
866- constructBspScheduleFromSolution (schedule, true );
867- return RETURN_STATUS::OSP_SUCCESS;
868-
869- } else if (model.GetIntAttr (COPT_INTATTR_MIPSTATUS) == COPT_MIPSTATUS_INF_OR_UNB) {
870-
871- return RETURN_STATUS::ERROR;
872-
873- } else {
874-
875- if (model.GetIntAttr (COPT_INTATTR_HASMIPSOL)) {
876-
877- constructBspScheduleFromSolution (schedule, true );
878- return RETURN_STATUS::BEST_FOUND;
879887
880- } else {
881- return RETURN_STATUS::TIMEOUT ;
882- }
883- }
888+ virtual RETURN_STATUS computeScheduleCS (BspScheduleCS<Graph_t> &schedule) override {
889+ allow_recomputation = false ;
890+ is_max_bsp = false ;
891+ return run_scheduler (schedule);
884892 }
885893
886894 virtual RETURN_STATUS computeScheduleRecomp (BspScheduleRecomp<Graph_t> &schedule) {
887895
888896 allow_recomputation = true ;
889-
890897 is_max_bsp = false ;
891898
892899 Envr env;
0 commit comments