Explorar o código

排程优化-退火合并优化

fangpy hai 6 meses
pai
achega
dddcfeb4dd

+ 13 - 2
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintProvider.java

@@ -1867,9 +1867,20 @@ public class ApsConstraintProvider implements ConstraintProvider {
         ProductionProcesses rooprocess = productionProcesses.getRooprocess();
         if(rooprocess != null){
             if("铸轧".equals(rooprocess.getProcessType())){
-                startTime = rooprocess.getNextProcesses().get(0).getStartTime();
+                if("成退".equals(rooprocess.getNextProcesses().get(0).getProcessType()) || "中退".equals(rooprocess.getNextProcesses().get(0).getProcessType())
+                        || "小卷成退".equals(rooprocess.getNextProcesses().get(0).getProcessType())){
+                    startTime = null;
+                }else{
+                    startTime = rooprocess.getNextProcesses().get(0).getStartTime();
+                }
             }else{
-                startTime = rooprocess.getStartTime();
+                if ("成退".equals(rooprocess.getProcessType()) || "中退".equals(rooprocess.getProcessType()) || "小卷成退".equals(rooprocess.getProcessType())){
+                    if(rooprocess.getNextProcesses() != null && rooprocess.getNextProcesses().size()>0){
+                        startTime = rooprocess.getNextProcesses().get(0).getStartTime();
+                    }
+                }else{
+                    startTime = rooprocess.getStartTime();
+                }
             }
         }else{
             return 0L;

+ 68 - 58
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/service/impl/ApsServiceImpl.java

@@ -329,7 +329,7 @@ public class ApsServiceImpl implements ApsService {
                 .withEntityClasses(ProductionProcesses.class)
                 .withConstraintProviderClass(ApsConstraintProvider.class)
 //                .withTerminationSpentLimit(Duration.ofSeconds(runPlanSeconds1))
-                .withTerminationConfig(new TerminationConfig().withUnimprovedSecondsSpentLimit(120L))
+                .withTerminationConfig(new TerminationConfig().withUnimprovedSecondsSpentLimit(60L))
                 .withMoveThreadCount(cores)
         );
         Solver<ApsSolution> solver1 = solverFactory1.buildSolver();
@@ -596,36 +596,41 @@ public class ApsServiceImpl implements ApsService {
                     // 设置待合并退火的主ID
                     thps.get(i).setMergeThMainId(thps.get(0).getId());
                     otherThproces.add(thps.get(i));
-                    for (String previousProcessesId : thps.get(i).getPreviousProcessesIds()) {
-                        // 退火前一道作业设置下一作业ID
-                        ProductionProcesses prepro = allProMap.get(previousProcessesId);
-                        // 合并后关联关系重置
-                        if(!prepro.getNextProcessesIds().contains(thps.get(0).getId())){
-                            int i1 = prepro.getNextProcessesIds().indexOf(thps.get(i).getId());
-                            prepro.getNextProcessesIds().set(i1,thps.get(0).getId());
-                        }
-                        List<String> list = new ArrayList<>();
-                        Set<String> set = new LinkedHashSet<>();
-                        for (String nextProcessesId : prepro.getNextProcessesIds()) {
-                            set.add(nextProcessesId);
-                        }
-                        list.addAll(set);
-                        prepro.setNextProcessesIds(list);
-                        List<ProductionProcesses> nextpros = new ArrayList<>();
-                        for (String nextProcessesId : prepro.getNextProcessesIds()) {
-                            nextpros.add(allProMap.get(nextProcessesId));
-                        }
-                        prepro.setNextProcesses(nextpros);
+                    if(thps.get(i).getPreviousProcessesIds() != null && thps.get(i).getPreviousProcessesIds().size()>0){
+                        for (String previousProcessesId : thps.get(i).getPreviousProcessesIds()) {
+                            // 退火前一道作业设置下一作业ID
+                            ProductionProcesses prepro = allProMap.get(previousProcessesId);
+                            // 合并后关联关系重置
+                            if(!prepro.getNextProcessesIds().contains(thps.get(0).getId())){
+                                int i1 = prepro.getNextProcessesIds().indexOf(thps.get(i).getId());
+                                prepro.getNextProcessesIds().set(i1,thps.get(0).getId());
+                            }
+                            List<String> list = new ArrayList<>();
+                            Set<String> set = new LinkedHashSet<>();
+                            for (String nextProcessesId : prepro.getNextProcessesIds()) {
+                                set.add(nextProcessesId);
+                            }
+                            list.addAll(set);
+                            prepro.setNextProcessesIds(list);
+                            List<ProductionProcesses> nextpros = new ArrayList<>();
+                            for (String nextProcessesId : prepro.getNextProcessesIds()) {
+                                nextpros.add(allProMap.get(nextProcessesId));
+                            }
+                            prepro.setNextProcesses(nextpros);
 
-                        // 当前合并退火作业设置前一道作业
-                        if(!thps.get(0).getPreviousProcessesIds().contains(prepro.getId())){
-                            thps.get(0).getPreviousProcessesIds().add(prepro.getId());
-                        }
-                        List<ProductionProcesses> previousProces = new ArrayList<>();
-                        for (String pid : thps.get(0).getPreviousProcessesIds()) {
-                            previousProces.add(allProMap.get(pid));
+                            // 当前合并退火作业设置前一道作业
+                            if(thps.get(0).getPreviousProcessesIds() == null){
+                                thps.get(0).setPreviousProcessesIds(new ArrayList<>());
+                            }
+                            if(!thps.get(0).getPreviousProcessesIds().contains(prepro.getId())){
+                                thps.get(0).getPreviousProcessesIds().add(prepro.getId());
+                            }
+                            List<ProductionProcesses> previousProces = new ArrayList<>();
+                            for (String pid : thps.get(0).getPreviousProcessesIds()) {
+                                previousProces.add(allProMap.get(pid));
+                            }
+                            thps.get(0).setPreviousProcesses(previousProces);
                         }
-                        thps.get(0).setPreviousProcesses(previousProces);
                     }
 
                     // 退火后一道作业设置上一道作业ID
@@ -1115,37 +1120,42 @@ public class ApsServiceImpl implements ApsService {
                                         thps.get(0).getMergeRooprocess().add(thps.get(i).getRooprocess());
                                         otherThproces.add(thps.get(i));
                                         // 退火前一道作业设置下一作业ID
-                                        ProductionProcesses prepro = allProMap.get(thps.get(i).getPreviousProcessesIds().get(0));
-                                        // 历史关联关系备份
-                                        List<String> oldNextProcessesIds = new ArrayList<>();
-                                        oldNextProcessesIds.addAll(prepro.getNextProcessesIds());
-//                                        prepro.setOldNextProcessesIds(oldNextProcessesIds);
-                                        // 合并后关联关系重置
-                                        if(!prepro.getNextProcessesIds().contains(thps.get(0).getId())){
-                                            int i1 = prepro.getNextProcessesIds().indexOf(thps.get(i).getId());
-                                            prepro.getNextProcessesIds().set(i1,thps.get(0).getId());
-                                        }
-                                        List<String> list = new ArrayList<>();
-                                        Set<String> set = new LinkedHashSet<>();
-                                        for (String nextProcessesId : prepro.getNextProcessesIds()) {
-                                            set.add(nextProcessesId);
+                                        if(thps.get(i).getPreviousProcessesIds() == null){
+                                            int a12 = 111;
                                         }
-                                        list.addAll(set);
-                                        prepro.setNextProcessesIds(list);
-                                        List<ProductionProcesses> nextpros = new ArrayList<>();
-                                        for (String nextProcessesId : prepro.getNextProcessesIds()) {
-                                            nextpros.add(allProMap.get(nextProcessesId));
-                                        }
-                                        prepro.setNextProcesses(nextpros);
-                                        // 当前合并退火作业设置前一道作业
-                                        if(!thps.get(0).getPreviousProcessesIds().contains(prepro.getId())){
-                                            thps.get(0).getPreviousProcessesIds().add(prepro.getId());
-                                        }
-                                        List<ProductionProcesses> previousProces = new ArrayList<>();
-                                        for (String pid : thps.get(0).getPreviousProcessesIds()) {
-                                            previousProces.add(allProMap.get(pid));
+                                        if(thps.get(i).getPreviousProcessesIds() != null && thps.get(i).getPreviousProcessesIds().size()>0){
+                                            ProductionProcesses prepro = allProMap.get(thps.get(i).getPreviousProcessesIds().get(0));
+                                            // 历史关联关系备份
+                                            List<String> oldNextProcessesIds = new ArrayList<>();
+                                            oldNextProcessesIds.addAll(prepro.getNextProcessesIds());
+//                                        prepro.setOldNextProcessesIds(oldNextProcessesIds);
+                                            // 合并后关联关系重置
+                                            if(!prepro.getNextProcessesIds().contains(thps.get(0).getId())){
+                                                int i1 = prepro.getNextProcessesIds().indexOf(thps.get(i).getId());
+                                                prepro.getNextProcessesIds().set(i1,thps.get(0).getId());
+                                            }
+                                            List<String> list = new ArrayList<>();
+                                            Set<String> set = new LinkedHashSet<>();
+                                            for (String nextProcessesId : prepro.getNextProcessesIds()) {
+                                                set.add(nextProcessesId);
+                                            }
+                                            list.addAll(set);
+                                            prepro.setNextProcessesIds(list);
+                                            List<ProductionProcesses> nextpros = new ArrayList<>();
+                                            for (String nextProcessesId : prepro.getNextProcessesIds()) {
+                                                nextpros.add(allProMap.get(nextProcessesId));
+                                            }
+                                            prepro.setNextProcesses(nextpros);
+                                            // 当前合并退火作业设置前一道作业
+                                            if(!thps.get(0).getPreviousProcessesIds().contains(prepro.getId())){
+                                                thps.get(0).getPreviousProcessesIds().add(prepro.getId());
+                                            }
+                                            List<ProductionProcesses> previousProces = new ArrayList<>();
+                                            for (String pid : thps.get(0).getPreviousProcessesIds()) {
+                                                previousProces.add(allProMap.get(pid));
+                                            }
+                                            thps.get(0).setPreviousProcesses(previousProces);
                                         }
-                                        thps.get(0).setPreviousProcesses(previousProces);
                                         // 退火后一道作业设置上一道作业ID
                                         if(thps.get(i).getNextProcessesIds() != null && thps.get(i).getNextProcessesIds().size()>0){
                                             for (String nextProcessesId : thps.get(i).getNextProcessesIds()) {

+ 6 - 3
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/service/impl/ProductionScheduleServiceImpl.java

@@ -545,9 +545,12 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
                         otherThproce.setConflictRoptions(thpro.getConflictRoptions());
 
                         thpro.setOpeProducePcNum(1);
-                        List<String> preids = new ArrayList<>();
-                        preids.add(thpro.getPreviousProcessesIds().get(0));
-                        thpro.setPreviousProcessesIds(preids);
+                        if(thpro.getPreviousProcessesIds() != null && thpro.getPreviousProcessesIds().size()>0){
+                            List<String> preids = new ArrayList<>();
+                            preids.add(thpro.getPreviousProcessesIds().get(0));
+                            thpro.setPreviousProcessesIds(preids);
+                        }
+
                         if(thpro.getNextProcessesIds() != null && thpro.getNextProcessesIds().size()>0){
                             for (String nextProcessesId : otherThproce.getNextProcessesIds()) {
                                 int i = thpro.getNextProcessesIds().indexOf(nextProcessesId);