Browse Source

排程优化-退火合并优化

fangpy 7 months ago
parent
commit
f159d5f500

+ 31 - 3
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintProvider.java

@@ -45,6 +45,8 @@ public class ApsConstraintProvider implements ConstraintProvider {
                 tuihuoSp(constraintFactory),
                 sameEquipment(constraintFactory),
                 seriesZzLb(constraintFactory),
+
+                preNextProcessSameWorkShop(constraintFactory),
                 // SOFT
                 processNear(constraintFactory),
                 eqTimeCrossMinTuihuoSoft(constraintFactory),
@@ -2658,7 +2660,7 @@ public class ApsConstraintProvider implements ConstraintProvider {
                             ppMap.remove(hasMergeOldKey);
                         }
                     }
-                    return ppMap.size()*10000;
+                    return ppMap.size()*1000;
                 })
                 .asConstraint("mergeTuihuo");
     }
@@ -2998,11 +3000,37 @@ public class ApsConstraintProvider implements ConstraintProvider {
                     if(!equipmentpre.getId().equals(equipmentthis.getId())){
                         a = a + 10000;
                     }
-                    if(!equipmentpre.getWorkshopid().equals(equipmentthis.getWorkshopid())){
+                    /*if(!equipmentpre.getWorkshopid().equals(equipmentthis.getWorkshopid())){
                         a = a + 10000;
-                    }
+                    }*/
                     return a;
                 })
                 .asConstraint("preNextProcessSameEq");
     }
+
+    /**
+     * 前后工序可以在一个设备上的尽量在一个设备上
+     * @param constraintFactory
+     * @return
+     */
+    private Constraint preNextProcessSameWorkShop(ConstraintFactory constraintFactory) {
+        return constraintFactory.forEach(ProductionProcesses.class)
+                .filter(pro->{
+                    boolean a = false;
+                    if(pro.getPreviousProcesses() != null && pro.getPreviousProcesses().size()>0){
+                        a = true;
+                    }
+                    return a;
+                })
+                .penalize(HardMediumSoftScore.ONE_MEDIUM,(processes)->{
+                    int a = 0;
+                    Equipment equipmentthis = processes.getEquipment();
+                    Equipment equipmentpre = processes.getPreviousProcesses().get(0).getEquipment();
+                    if(!equipmentpre.getWorkshopid().equals(equipmentthis.getWorkshopid())){
+                        a = a + 5000;
+                    }
+                    return a;
+                })
+                .asConstraint("preNextProcessSameWorkShop");
+    }
 }