Commit 2fe0847f authored by Tong Li's avatar Tong Li

遗传算法

parent f7bdf363
...@@ -303,6 +303,7 @@ public class GeneticDecoder { ...@@ -303,6 +303,7 @@ public class GeneticDecoder {
// 冲突检测和解决 // 冲突检测和解决
final int finalStartTime = startTime; final int finalStartTime = startTime;
final int finalEndTime = endTime; final int finalEndTime = endTime;
GAScheduleResult conflictingGene = chromosome.getResult().stream() GAScheduleResult conflictingGene = chromosome.getResult().stream()
.filter(g -> g.getMachineId() == machine.getId()) .filter(g -> g.getMachineId() == machine.getId())
.filter(g -> (finalStartTime < g.getEndTime() && finalEndTime > g.getStartTime())) .filter(g -> (finalStartTime < g.getEndTime() && finalEndTime > g.getStartTime()))
...@@ -315,6 +316,7 @@ public class GeneticDecoder { ...@@ -315,6 +316,7 @@ public class GeneticDecoder {
int conflictSetupTime = calculateSetupTimeForConflict(chromosome.getResult(),operation , machine, machineOption, conflictingGene); int conflictSetupTime = calculateSetupTimeForConflict(chromosome.getResult(),operation , machine, machineOption, conflictingGene);
int conflictEarliestStartTime = conflictSetupStartTime + conflictSetupTime; int conflictEarliestStartTime = conflictSetupStartTime + conflictSetupTime;
machineCalculator.AddMachineAvailable(machine,geneDetails);
geneDetails = machineCalculator.getNextAvailableTime(machine, conflictEarliestStartTime, -1, geneDetails = machineCalculator.getNextAvailableTime(machine, conflictEarliestStartTime, -1,
processingTimeTotal, chromosome.getResult(), false, true, true); processingTimeTotal, chromosome.getResult(), false, true, true);
......
...@@ -254,7 +254,7 @@ public class MachineCalculator { ...@@ -254,7 +254,7 @@ public class MachineCalculator {
machine.getAvailability().sort(Comparator.comparing(TimeSegment::getStart)); machine.getAvailability().sort(Comparator.comparing(TimeSegment::getStart));
} }
private void AddMachineAvailable(Machine machine, List<ScheduleResultDetail> geneDetails) { public void AddMachineAvailable(Machine machine, List<ScheduleResultDetail> geneDetails) {
if (geneDetails == null || geneDetails.isEmpty()) return; if (geneDetails == null || geneDetails.isEmpty()) return;
for (ScheduleResultDetail detail : geneDetails) { for (ScheduleResultDetail detail : geneDetails) {
......
package com.aps.service.Algorithm;
/**
* 作者:佟礼
* 时间:2025-11-30
*/
public class ScheduleUpdater {
}
...@@ -207,8 +207,9 @@ public class MachineSchedulerService { ...@@ -207,8 +207,9 @@ public class MachineSchedulerService {
&& containsDay(s.getDays(), date.getDayOfWeek())) && containsDay(s.getDays(), date.getDayOfWeek()))
.collect(Collectors.toList()); .collect(Collectors.toList());
if(shifts==null||shifts.size()==0) { if(shifts==null||shifts.size()==0) {
LocalDate sd= LocalDate.of(2020, 10, 1);
shifts = machine.getShifts().stream() shifts = machine.getShifts().stream()
.filter(s -> s.getDays() != null .filter(s ->sd.compareTo(s.getStartDate().toLocalDate())==0&& s.getDays() != null
&& containsDay(s.getDays(), date.getDayOfWeek())) && containsDay(s.getDays(), date.getDayOfWeek()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
......
...@@ -54,6 +54,10 @@ public class PlanResultService { ...@@ -54,6 +54,10 @@ public class PlanResultService {
@Autowired @Autowired
private ProdEquipmentService _prodEquipmentService; private ProdEquipmentService _prodEquipmentService;
@Autowired
private PlanResourceService _PlanResourceService;
@Autowired @Autowired
private ProdOrderProcessService _prodOrderProcessService; private ProdOrderProcessService _prodOrderProcessService;
...@@ -286,9 +290,6 @@ public class PlanResultService { ...@@ -286,9 +290,6 @@ public class PlanResultService {
} }
public void WriteScheduleSummary(Chromosome schedule) { public void WriteScheduleSummary(Chromosome schedule) {
// 写入日志 // 写入日志
FileHelper.writeLogFile(String.format("\n=== Schedule Summary === %f", schedule.getFitness())); FileHelper.writeLogFile(String.format("\n=== Schedule Summary === %f", schedule.getFitness()));
...@@ -415,10 +416,16 @@ public class PlanResultService { ...@@ -415,10 +416,16 @@ public class PlanResultService {
LambdaQueryWrapper<ProdEquipSpecialCal> ProdEquipSpecialCalWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ProdEquipSpecialCal> ProdEquipSpecialCalWrapper = new LambdaQueryWrapper<>();
ProdEquipSpecialCalWrapper.eq(ProdEquipSpecialCal::getSceneId, SceneId); ProdEquipSpecialCalWrapper.eq(ProdEquipSpecialCal::getSceneId, SceneId);
List<PlanResource> PlanResources= _PlanResourceService.lambdaQuery()
.eq(PlanResource::getIsdeleted,0)
.list();
List<ProdEquipSpecialCal> ProdEquipSpecialCals= _prodEquipSpecialCalService.list(ProdEquipSpecialCalWrapper); List<ProdEquipSpecialCal> ProdEquipSpecialCals= _prodEquipSpecialCalService.list(ProdEquipSpecialCalWrapper);
List<MesShiftWorkSched> MesShiftWorkScheds= _MesShiftWorkSchedService.list(); List<MesShiftWorkSched> MesShiftWorkScheds= _MesShiftWorkSchedService.lambdaQuery()
.eq(MesShiftWorkSched::getIsdeleted,0).list();
if (machines == null) { if (machines == null) {
...@@ -431,7 +438,7 @@ public class PlanResultService { ...@@ -431,7 +438,7 @@ public class PlanResultService {
machine.setMaintenanceWindows(new ArrayList<>()); machine.setMaintenanceWindows(new ArrayList<>());
} }
List<ProdEquipSpecialCal> machineProdEquipSpecialCals = ProdEquipSpecialCals.stream() List<ProdEquipSpecialCal> machineProdEquipSpecialCals = ProdEquipSpecialCals.stream()
.filter(t -> t.getEquipId() == machine.getId()) .filter(t -> t.getEquipId() == machine.getId()&&t.getReferenceType()==1)
.collect(Collectors.toList()); .collect(Collectors.toList());
List<Shift> shifts1=new ArrayList<>(); List<Shift> shifts1=new ArrayList<>();
for (ProdEquipSpecialCal machineProdEquipSpecialCal : machineProdEquipSpecialCals) { for (ProdEquipSpecialCal machineProdEquipSpecialCal : machineProdEquipSpecialCals) {
...@@ -448,8 +455,44 @@ public class PlanResultService { ...@@ -448,8 +455,44 @@ public class PlanResultService {
shifts1.add(shift); shifts1.add(shift);
} }
} }
List<PlanResource> PlanResources1 = PlanResources.stream()
.filter(t -> t.getReferenceId() == machine.getId())
.collect(Collectors.toList());
if(PlanResources1!=null&&PlanResources1.size()>0)
{
for (PlanResource PlanResource : PlanResources1) {
List<MesShiftWorkSched> ShiftWorkScheds = MesShiftWorkScheds.stream()
.filter(t -> (long) t.getWeekWorkSchedId() == PlanResource.getWorkSchedId())
.collect(Collectors.toList());
List<Shift> Shifts = mergeShiftData(ShiftWorkScheds);
for (Shift shift : Shifts) {
shift.setMachineId(machine.getId());
shift.setStartDate(LocalDateTime.of(2000, 1, 1, 0, 0, 0));
shift.setEndDate(LocalDateTime.of(2000, 1, 1, 0, 0, 0));
shifts1.add(shift);
}
}
}
machine.setShifts(shifts1); machine.setShifts(shifts1);
List<ProdEquipSpecialCal> Holidays = ProdEquipSpecialCals.stream()
.filter(t -> t.getEquipId() == machine.getId()&&t.getReferenceType()==2)
.collect(Collectors.toList());
List<Holiday> Holidays1=new ArrayList<>();
for (ProdEquipSpecialCal machineProdEquipSpecialCal : Holidays) {
Holiday holiday=new Holiday();
holiday.setStart(machineProdEquipSpecialCal.getStartDate());
holiday.setEnd(machineProdEquipSpecialCal.getEndDate());
Holidays1.add(holiday);
}
machine.setHolidays(Holidays1);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment