Prechádzať zdrojové kódy

APS平台新模型约束优化

fangpy 1 rok pred
rodič
commit
7314933d6d

+ 19 - 15
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/listener/TaskStartTimeListener.java

@@ -79,17 +79,22 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
      * @param process
      */
     private void setNextAllStartTime(ScoreDirector<ApsSolution> scoreDirector,ProductionProcesses process){
-        LocalDateTime startDateTime = startTimeSet(process);
-        scoreDirector.beforeVariableChanged(process, "startTime");
-        process.setStartTime(startDateTime);
-        scoreDirector.afterVariableChanged(process, "startTime");
-        if(process.getNextProcesses() != null && process.getNextProcesses().size()>0){
-            for (ProductionProcesses nextProcess : process.getNextProcesses()) {
-                setNextAllStartTime(scoreDirector,nextProcess);
+        if(process.getEquipment() != null){
+            LocalDateTime startDateTime = startTimeSet(process);
+            if(process.getId().equals("e75fb798c7074d5f9214396062330a6c") && process.getEquipment().getId().equals("0001be252874536843730b100020")){
+                System.out.println("startDateTime:"+startDateTime);
+            }
+            scoreDirector.beforeVariableChanged(process, "startTime");
+            process.setStartTime(startDateTime);
+            scoreDirector.afterVariableChanged(process, "startTime");
+            if(process.getNextProcesses() != null && process.getNextProcesses().size()>0){
+                for (ProductionProcesses nextProcess : process.getNextProcesses()) {
+                    setNextAllStartTime(scoreDirector,nextProcess);
+                }
             }
         }
         // 前置任务最大等待时间修正
-        preProcessCheck(scoreDirector,process);
+//        preProcessCheck(scoreDirector,process);
     }
 
     private void preProcessCheck(ScoreDirector<ApsSolution> scoreDirector,ProductionProcesses process){
@@ -327,17 +332,16 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                                 allRunTimes.add(copy);
                             }
                         }
-                        if(process.getEquipment().getProcessesList() != null && process.getEquipment().getProcessesList().size()>0){
-//                            System.out.println("process.getEquipment().getProcessesList():"+process.getEquipment().getProcessesList().size());
+                        /*if(process.getEquipment().getProcessesList() != null && process.getEquipment().getProcessesList().size()>0){
                             for (ProductionProcesses productionProcesses : process.getEquipment().getProcessesList()) {
-                                if(productionProcesses.getStartTime() != null && productionProcesses.getEndTime() != null){
+                                if(productionProcesses.getStartTime() != null && productionProcesses.getEndTime() != null && !productionProcesses.getId().equals(process.getId())){
                                     EquipmentRunTime copy = new EquipmentRunTime();
                                     copy.setStartRunTime(productionProcesses.getStartTime());
                                     copy.setEndRunTime(productionProcesses.getEndTime());
                                     allRunTimes.add(copy);
                                 }
                             }
-                        }
+                        }*/
                         // 按照开始时间排序
                         allRunTimes.sort(Comparator.comparing(EquipmentRunTime::getStartRunTime));
 
@@ -368,16 +372,16 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                         allRunTimes.add(copy);
                     }
                 }
-                if(process.getEquipment().getProcessesList() != null && process.getEquipment().getProcessesList().size()>0){
+                /*if(process.getEquipment().getProcessesList() != null && process.getEquipment().getProcessesList().size()>0){
                     for (ProductionProcesses productionProcesses : process.getEquipment().getProcessesList()) {
-                        if(productionProcesses.getStartTime() != null && productionProcesses.getEndTime() != null){
+                        if(productionProcesses.getStartTime() != null && productionProcesses.getEndTime() != null && !productionProcesses.getId().equals(process.getId())){
                             EquipmentRunTime copy = new EquipmentRunTime();
                             copy.setStartRunTime(productionProcesses.getStartTime());
                             copy.setEndRunTime(productionProcesses.getEndTime());
                             allRunTimes.add(copy);
                         }
                     }
-                }
+                }*/
                 allRunTimes.sort(Comparator.comparing(EquipmentRunTime::getStartRunTime));
 
                 if(allRunTimes.size()>0){

+ 16 - 19
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintProvider.java

@@ -12,6 +12,7 @@ import org.optaplanner.core.api.score.stream.*;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static org.optaplanner.core.api.score.stream.ConstraintCollectors.count;
 
@@ -606,7 +607,7 @@ public class ApsConstraintProvider implements ConstraintProvider {
         return constraintFactory.forEach(ProductionProcesses.class)
                 .groupBy(ProductionProcesses::getEquipmentId, ConstraintCollectors.toList())
                 .filter((equipmentId,processes) -> {
-                    if(processes != null && processes.size()>0){
+                    /*if(processes != null && processes.size()>0){
                         Equipment equipment = processes.get(0).getEquipment();
                         List<ProductionProcesses> plist = new ArrayList<>();
                         for (ProductionProcesses process : processes) {
@@ -619,28 +620,25 @@ public class ApsConstraintProvider implements ConstraintProvider {
                             plist.add(pro);
                         }
                         equipment.setProcessesList(plist);
-                    }
+                    }*/
 
-                    for (ProductionProcesses process : processes) {
-                        if(process.getStartTime() == null){
-                            return false;
-                        }
-                    }
-                    if(processes != null && processes.size()>1){
+                    List<ProductionProcesses> hasStartTimeProcess = processes.stream().filter(v -> v.getStartTime() != null).collect(Collectors.toList());
+
+                    if(hasStartTimeProcess != null && hasStartTimeProcess.size()>1){
                         // 安装开始时间排序
-                        Collections.sort(processes, Comparator.comparing(ProductionProcesses::getStartTime));
+                        Collections.sort(hasStartTimeProcess, Comparator.comparing(ProductionProcesses::getStartTime));
                         // 临时标记
                         Boolean a = false;
-                        for(int i=0;i<processes.size()-1;i++){
-                            if(processes.get(i).getSeriesProduceMark() != null && processes.get(i+1).getSeriesProduceMark() != null){
-                                if("铸轧".equals(processes.get(i).getProcessType())){
-                                    if(!processes.get(i).getSeriesProduceMark().equals(processes.get(i+1).getSeriesProduceMark())){
+                        for(int i=0;i<hasStartTimeProcess.size()-1;i++){
+                            if(hasStartTimeProcess.get(i).getSeriesProduceMark() != null && hasStartTimeProcess.get(i+1).getSeriesProduceMark() != null){
+                                if("铸轧".equals(hasStartTimeProcess.get(i).getProcessType()) && "铸轧".equals(hasStartTimeProcess.get(i+1).getProcessType())){
+                                    if(!hasStartTimeProcess.get(i).getSeriesProduceMark().equals(hasStartTimeProcess.get(i+1).getSeriesProduceMark())){
                                         a = true;
                                         break;
                                     }
-                                } else if ("冷轧".equals(processes.get(i).getProcessType())) {
-                                    String[] serspre = processes.get(i).getSeriesProduceMark().split("^_^");
-                                    String[] sersafter = processes.get(i+1).getSeriesProduceMark().split("^_^");
+                                } else if ("冷轧".equals(hasStartTimeProcess.get(i).getProcessType()) && "冷轧".equals(hasStartTimeProcess.get(i+1).getProcessType())) {
+                                    String[] serspre = hasStartTimeProcess.get(i).getSeriesProduceMark().split("^_^");
+                                    String[] sersafter = hasStartTimeProcess.get(i+1).getSeriesProduceMark().split("^_^");
                                     if(serspre.length == 3 && sersafter.length == 3){
                                         if(!serspre[0].equals(sersafter[0]) || !serspre[1].equals(sersafter[1])){
                                             a = true;
@@ -670,7 +668,7 @@ public class ApsConstraintProvider implements ConstraintProvider {
                 })
                 .penalize(HardSoftScore.ONE_SOFT,(equipmentId,processes)->{
                     int b = 0;
-                    for(int i=0;i<processes.size()-1;i++){
+                    /*for(int i=0;i<processes.size()-1;i++){
                         if(processes.get(i).getSeriesProduceMark() != null && processes.get(i+1).getSeriesProduceMark() != null){
                             if("铸轧".equals(processes.get(i).getProcessType())){
                                 if(!processes.get(i).getSeriesProduceMark().equals(processes.get(i+1).getSeriesProduceMark())){
@@ -700,9 +698,8 @@ public class ApsConstraintProvider implements ConstraintProvider {
                         }
                     }
                     if(b>0){
-//                        System.out.println("扣分:"+b);
                         return b;
-                    }
+                    }*/
                     return 1;
                 })
                 .asConstraint("seriesProduce");

+ 1 - 1
rw-aps-server/src/main/resources/logback-spring.xml

@@ -28,7 +28,7 @@
         <appender-ref ref="logFile" />
     </logger>
 
-    <!--<logger name="org.optaplanner" level="trace"/>-->
+<!--    <logger name="org.optaplanner" level="trace"/>-->
     <logger name="org.optaplanner" level="info"/>
 
     <root level="info">