ソースを参照

新模型探索

fangpengyuan 4 ヶ月 前
コミット
c9762f0444

+ 32 - 0
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintListProvider.java

@@ -43,6 +43,7 @@ public class ApsConstraintListProvider implements ConstraintProvider {
                 deliveryDate(constraintFactory),
 //                expecteddays(constraintFactory),
                 seriesProduce(constraintFactory),
+                freeTimeEquipment(constraintFactory),
 //                seriesProduceWashingFurnace(constraintFactory),
 //                mergeTuihuo(constraintFactory),
 //                tuihuoSp(constraintFactory),
@@ -83,6 +84,37 @@ public class ApsConstraintListProvider implements ConstraintProvider {
                 .asConstraint("optionalEquipment");
     }
 
+    /**
+     * 设备生产的任务都在可选设备范围内
+     * @param constraintFactory
+     * @return
+     */
+    private Constraint freeTimeEquipment(ConstraintFactory constraintFactory) {
+        return constraintFactory.forEach(Equipment.class)
+                .filter((equipment) -> {
+                    return true;
+                })
+                .penalize(HardMediumSoftScore.ONE_HARD,(equipment) -> {
+                    int b = 0;
+                    List<ProductionProcesses> tasks = new ArrayList<>();
+                    tasks.addAll(equipment.getTasks());
+
+                    if(tasks != null && tasks.size()>1){
+                        // 根据开始时间排序
+                        Collections.sort(tasks, Comparator.comparing(ProductionProcesses::getStartTime));
+                        for (int i = 0; i < tasks.size()-1; i++) {
+                            ProductionProcesses preTask = tasks.get(i);
+                            ProductionProcesses nextTask = tasks.get(i + 1);
+                            if(preTask.getEndTime().plusMinutes(60).compareTo(nextTask.getStartTime())<0){
+                                b = b + 20;
+                            }
+                        }
+                    }
+                    return b;
+                })
+                .asConstraint("freeTimeEquipment");
+    }
+
     /**
      * 不能超过最大开始时间
      * @param constraintFactory