Переглянути джерело

APS平台新模型约束优化

fangpy 1 рік тому
батько
коміт
03c978cc3a

+ 3 - 3
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/domain/ProductionProcesses.java

@@ -209,8 +209,8 @@ public class ProductionProcesses extends Step{
         this.equipmentType = equipmentType;
     }
 
-//    @PlanningVariable(valueRangeProviderRefs={"equipmentRange"})
-    @AnchorShadowVariable(sourceVariableName = "previousStep")
+    @PlanningVariable(valueRangeProviderRefs={"equipmentRange"})
+//    @AnchorShadowVariable(sourceVariableName = "previousStep")
     public Equipment getEquipment() {
         return equipment;
     }
@@ -222,7 +222,7 @@ public class ProductionProcesses extends Step{
         return startTime;
     }
 
-    @PlanningVariable(valueRangeProviderRefs = {"equipmentRange", "taskRange"},graphType = PlanningVariableGraphType.CHAINED)
+//    @PlanningVariable(valueRangeProviderRefs = {"equipmentRange", "taskRange"},graphType = PlanningVariableGraphType.CHAINED)
     public Step getPreviousStep() {
         return previousStep;
     }

+ 2 - 2
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/domain/Step.java

@@ -3,10 +3,10 @@ package com.rongwei.rwapsserver.aps.domain;
 import org.optaplanner.core.api.domain.entity.PlanningEntity;
 import org.optaplanner.core.api.domain.variable.InverseRelationShadowVariable;
 
-@PlanningEntity
+//@PlanningEntity
 public class Step extends ApsAbstractPersistable{
 
-    @InverseRelationShadowVariable(sourceVariableName = "previousStep")
+//    @InverseRelationShadowVariable(sourceVariableName = "previousStep")
     protected ProductionProcesses nextTask;
 
 }

+ 11 - 8
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/listener/TaskStartTimeListener.java

@@ -79,6 +79,9 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
      * @param process
      */
     private void setNextAllStartTime(ScoreDirector<ApsSolution> scoreDirector,ProductionProcesses process){
+        /*if("d49913c98e6945ca851f8231b62d9ea9".equals(process.getId()) && "0001be252874536843730b100021".equals(process.getEquipment().getId())){
+            System.out.println(process.getId());
+        }*/
         LocalDateTime startDateTime = startTimeSet(process);
         scoreDirector.beforeVariableChanged(process, "startTime");
         process.setStartTime(startDateTime);
@@ -89,7 +92,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
             }
         }
         // 前置任务最大等待时间修正
-        preProcessCheck(scoreDirector,process);
+//        preProcessCheck(scoreDirector,process);
     }
 
     private void preProcessCheck(ScoreDirector<ApsSolution> scoreDirector,ProductionProcesses process){
@@ -265,7 +268,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                     if(process.getEquipment().getProcessesList() != null && process.getEquipment().getProcessesList().size()>0){
 //                            System.out.println("process.getEquipment().getProcessesList():"+process.getEquipment().getProcessesList().size());
                         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());
@@ -367,7 +370,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                         if(process.getEquipment().getProcessesList() != null && process.getEquipment().getProcessesList().size()>0){
 //                            System.out.println("process.getEquipment().getProcessesList():"+process.getEquipment().getProcessesList().size());
                             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());
@@ -378,7 +381,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                         // 按照开始时间排序
                         allRunTimes.sort(Comparator.comparing(EquipmentRunTime::getStartRunTime));
 
-                        if(allRunTimes.size()>0){
+                        /*if(allRunTimes.size()>0){
                             for (EquipmentRunTime equipmentRunTime : allRunTimes) {
                                 if(proStartTime.compareTo(equipmentRunTime.getEndRunTime())>0 || proEndTime.compareTo(equipmentRunTime.getStartRunTime())<0){
                                     continue;
@@ -387,7 +390,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                                     proEndTime = proStartTime.plusMinutes(process.getProduceTime());
                                 }
                             }
-                        }
+                        }*/
 
                         toUpdateStartTime = proStartTime;
                     }
@@ -407,7 +410,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                 }
                 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());
@@ -417,7 +420,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                 }
                 allRunTimes.sort(Comparator.comparing(EquipmentRunTime::getStartRunTime));
 
-                if(allRunTimes.size()>0){
+                /*if(allRunTimes.size()>0){
                     for (EquipmentRunTime equipmentRunTime : allRunTimes) {
                         if(proStartTime.compareTo(equipmentRunTime.getEndRunTime())>0 || proEndTime.compareTo(equipmentRunTime.getStartRunTime())<0){
                             continue;
@@ -426,7 +429,7 @@ public class TaskStartTimeListener implements VariableListener<ApsSolution, Prod
                             proEndTime = proStartTime.plusMinutes(process.getProduceTime());
                         }
                     }
-                }
+                }*/
                 toUpdateStartTime = proStartTime;
             }
 

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

@@ -52,7 +52,7 @@ public class ProductionScheduleServiceImpl implements ProductionScheduleService
 
         // optaplanner 求解器配置实例化
         SolverFactory<ApsSolution> solverFactory = SolverFactory.create(new SolverConfig()
-//                .withEnvironmentMode(EnvironmentMode.FULL_ASSERT)
+                .withEnvironmentMode(EnvironmentMode.FULL_ASSERT)
                 .withSolutionClass(ApsSolution.class)
                 .withEntityClasses(ProductionProcesses.class)
                 .withConstraintProviderClass(ApsConstraintProvider.class)