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

遗传算法

parent f7bdf363
......@@ -303,6 +303,7 @@ public class GeneticDecoder {
// 冲突检测和解决
final int finalStartTime = startTime;
final int finalEndTime = endTime;
GAScheduleResult conflictingGene = chromosome.getResult().stream()
.filter(g -> g.getMachineId() == machine.getId())
.filter(g -> (finalStartTime < g.getEndTime() && finalEndTime > g.getStartTime()))
......@@ -315,6 +316,7 @@ public class GeneticDecoder {
int conflictSetupTime = calculateSetupTimeForConflict(chromosome.getResult(),operation , machine, machineOption, conflictingGene);
int conflictEarliestStartTime = conflictSetupStartTime + conflictSetupTime;
machineCalculator.AddMachineAvailable(machine,geneDetails);
geneDetails = machineCalculator.getNextAvailableTime(machine, conflictEarliestStartTime, -1,
processingTimeTotal, chromosome.getResult(), false, true, true);
......
......@@ -254,7 +254,7 @@ public class MachineCalculator {
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;
for (ScheduleResultDetail detail : geneDetails) {
......
package com.aps.service.Algorithm;
/**
* 作者:佟礼
* 时间:2025-11-30
*/
public class ScheduleUpdater {
}
......@@ -207,8 +207,9 @@ public class MachineSchedulerService {
&& containsDay(s.getDays(), date.getDayOfWeek()))
.collect(Collectors.toList());
if(shifts==null||shifts.size()==0) {
LocalDate sd= LocalDate.of(2020, 10, 1);
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()))
.collect(Collectors.toList());
}
......
......@@ -54,6 +54,10 @@ public class PlanResultService {
@Autowired
private ProdEquipmentService _prodEquipmentService;
@Autowired
private PlanResourceService _PlanResourceService;
@Autowired
private ProdOrderProcessService _prodOrderProcessService;
......@@ -286,9 +290,6 @@ public class PlanResultService {
}
public void WriteScheduleSummary(Chromosome schedule) {
// 写入日志
FileHelper.writeLogFile(String.format("\n=== Schedule Summary === %f", schedule.getFitness()));
......@@ -415,10 +416,16 @@ public class PlanResultService {
LambdaQueryWrapper<ProdEquipSpecialCal> ProdEquipSpecialCalWrapper = new LambdaQueryWrapper<>();
ProdEquipSpecialCalWrapper.eq(ProdEquipSpecialCal::getSceneId, SceneId);
List<PlanResource> PlanResources= _PlanResourceService.lambdaQuery()
.eq(PlanResource::getIsdeleted,0)
.list();
List<ProdEquipSpecialCal> ProdEquipSpecialCals= _prodEquipSpecialCalService.list(ProdEquipSpecialCalWrapper);
List<MesShiftWorkSched> MesShiftWorkScheds= _MesShiftWorkSchedService.list();
List<MesShiftWorkSched> MesShiftWorkScheds= _MesShiftWorkSchedService.lambdaQuery()
.eq(MesShiftWorkSched::getIsdeleted,0).list();
if (machines == null) {
......@@ -431,7 +438,7 @@ public class PlanResultService {
machine.setMaintenanceWindows(new ArrayList<>());
}
List<ProdEquipSpecialCal> machineProdEquipSpecialCals = ProdEquipSpecialCals.stream()
.filter(t -> t.getEquipId() == machine.getId())
.filter(t -> t.getEquipId() == machine.getId()&&t.getReferenceType()==1)
.collect(Collectors.toList());
List<Shift> shifts1=new ArrayList<>();
for (ProdEquipSpecialCal machineProdEquipSpecialCal : machineProdEquipSpecialCals) {
......@@ -448,8 +455,44 @@ public class PlanResultService {
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);
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