Commit 15136f5f authored by Tong Li's avatar Tong Li

bug

parent f1da4f73
...@@ -125,6 +125,14 @@ public class GeneticAlgorithm { ...@@ -125,6 +125,14 @@ public class GeneticAlgorithm {
if(population.size()<param.getTournamentSize()) if(population.size()<param.getTournamentSize())
{ {
best.setBaseTime(param.getBaseTime());
best.setOrderMaterials(orderMaterials);
best.setOperatRel(_entryRel);
if(best.getInitMachines()==null)
{
best.setInitMachines(ProductionDeepCopyUtil.deepCopyList(machines,Machine.class));
}
LocalDateTime endtime1=LocalDateTime.now(); LocalDateTime endtime1=LocalDateTime.now();
FileHelper.writeLogFile(String.format("排产-------总方案数%d----结束---%s----耗时%d----",population.size(),allOperations.get(0).getSceneId(),DateTimeUtil.diffDuration(starttime,endtime1).getSeconds()) ); FileHelper.writeLogFile(String.format("排产-------总方案数%d----结束---%s----耗时%d----",population.size(),allOperations.get(0).getSceneId(),DateTimeUtil.diffDuration(starttime,endtime1).getSeconds()) );
return best; return best;
......
...@@ -382,6 +382,8 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -382,6 +382,8 @@ if(finishedOrder==null||finishedOrder.size()==0)
int teardownTime = machineOption.getTeardownTime(); int teardownTime = machineOption.getTeardownTime();
int preTime = machineOption.getPreTime(); int preTime = machineOption.getPreTime();
int setupTime = calculateSetupTime(chromosome.getResult(), operation, machine, machineOption); int setupTime = calculateSetupTime(chromosome.getResult(), operation, machine, machineOption);
...@@ -393,29 +395,6 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -393,29 +395,6 @@ if(finishedOrder==null||finishedOrder.size()==0)
// 确定任务的最早开始时间(基于前一道工序的完整结束时间,包含后处理) // 确定任务的最早开始时间(基于前一道工序的完整结束时间,包含后处理)
int earliestStartTime = prevOperationEndTime; int earliestStartTime = prevOperationEndTime;
// 检查设备上是否有前一个任务
GAScheduleResult lastGeneOnMachine = chromosome.getResult().stream()
.filter(g -> g.getMachineId() == machine.getId())
.max(Comparator.comparingInt(GAScheduleResult::getEndTime))
.orElse(null);
if (lastGeneOnMachine != null) {
int machineAvailableTime = lastGeneOnMachine.getEndTime();
if (setupTime > 0) {
if (_globalParam.is_smoothSetup()) {
machineAvailableTime += setupTime;
// 平滑模式:换型在非工作时间进行,不额外占用设备时间
// System.out.println(" 平滑模式换型:在非工作时间进行,设备可用时间不变");
} else {
// 标准模式:换型需要额外占用设备时间
machineAvailableTime += setupTime;
// System.out.println(" 标准模式换型:需要额外占用设备 " + setupTime + " 分钟");
}
}
earliestStartTime = Math.max(earliestStartTime, machineAvailableTime);
}
// System.out.println(" 最终最早开始时间: " + earliestStartTime + // System.out.println(" 最终最早开始时间: " + earliestStartTime +
// " (前序工序结束含后处理: " + prevOperationEndTime + ", 设备可用: " + // " (前序工序结束含后处理: " + prevOperationEndTime + ", 设备可用: " +
...@@ -442,7 +421,6 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -442,7 +421,6 @@ if(finishedOrder==null||finishedOrder.size()==0)
CopyOnWriteArrayList<ScheduleResultDetail> geneDetails = machineCalculator.getNextAvailableTime(machine, earliestStartTime, -1, CopyOnWriteArrayList<ScheduleResultDetail> geneDetails = machineCalculator.getNextAvailableTime(machine, earliestStartTime, -1,
processingTimeTotal, chromosome.getResult(), operation.IsInterrupt!=1, true,processingTime, operation.getQuantity(), true); processingTimeTotal, chromosome.getResult(), operation.IsInterrupt!=1, true,processingTime, operation.getQuantity(), true);
...@@ -457,11 +435,22 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -457,11 +435,22 @@ if(finishedOrder==null||finishedOrder.size()==0)
.mapToInt(ScheduleResultDetail::getEndTime) .mapToInt(ScheduleResultDetail::getEndTime)
.max() .max()
.orElse(0); .orElse(0);
//换型时间是否占用设备加工时间
//10:00 开始上班 前面的任务:24:00 结束 开始换型 休息时间 10小时
// 换型时间 12小时
// 换型时间 - 中间休息时间 =2小时
//开工时间需往后延 2小时
// 冲突检测和解决 //设置时间平滑
final int finalStartTime = startTime; //前处理,准备工时 是否可以在前序未完工就开始时间, 就是
final int finalEndTime = endTime;
// 冲突检测和解决
final int finalStartTime = startTime;//10:00 12
final int finalEndTime = endTime;//15:00
// 7:00-9:00 1
//7:00-11:00 2
// 10<9&&15>7 1
// 10<11&&15>7 2 有任务
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()))
...@@ -470,7 +459,7 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -470,7 +459,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
if (conflictingGene != null) { if (conflictingGene != null) {
// System.out.println(" ⚠️ 检测到时间冲突,重新调度"); // System.out.println(" ⚠️ 检测到时间冲突,重新调度");
int conflictSetupStartTime = conflictingGene.getEndTime(); int conflictSetupStartTime = conflictingGene.getEndTime(); //11:00
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;
...@@ -843,6 +832,7 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -843,6 +832,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
return baseTime.plusSeconds(minute).format(java.time.format.DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm")); return baseTime.plusSeconds(minute).format(java.time.format.DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm"));
} }
private int calculateSetupTime(List<GAScheduleResult> existingGenes, Entry operation, Machine machine, MachineOption machineOption) { private int calculateSetupTime(List<GAScheduleResult> existingGenes, Entry operation, Machine machine, MachineOption machineOption) {
GAScheduleResult lastGeneOnMachine = existingGenes.stream() GAScheduleResult lastGeneOnMachine = existingGenes.stream()
.filter(g -> g.getMachineId() == machine.getId()) .filter(g -> g.getMachineId() == machine.getId())
.max(Comparator.comparingInt(GAScheduleResult::getEndTime)) .max(Comparator.comparingInt(GAScheduleResult::getEndTime))
......
...@@ -550,6 +550,8 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0)); ...@@ -550,6 +550,8 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
{ {
Chromosome chromosome= _sceneService.loadChromosomeFromFile(SceneId); Chromosome chromosome= _sceneService.loadChromosomeFromFile(SceneId);
ScheduleOperationService ScheduleOperation=new ScheduleOperationService(); ScheduleOperationService ScheduleOperation=new ScheduleOperationService();
WriteScheduleSummary(chromosome);
GlobalParam globalParam=new GlobalParam(); GlobalParam globalParam=new GlobalParam();
ScheduleOperation.redecode(chromosome, chromosome.getBaseTime(), globalParam); ScheduleOperation.redecode(chromosome, chromosome.getBaseTime(), globalParam);
WriteScheduleSummary(chromosome); WriteScheduleSummary(chromosome);
......
...@@ -37,14 +37,14 @@ public class PlanResultServiceTest { ...@@ -37,14 +37,14 @@ public class PlanResultServiceTest {
// NSGAIIUtils nsgaiiUtils=new NSGAIIUtils(); // NSGAIIUtils nsgaiiUtils=new NSGAIIUtils();
// nsgaiiUtils.Test(); // nsgaiiUtils.Test();
//planResultService.execute2("C5FB5EF2A7334A0A92F826F4937E1008"); planResultService.execute2("C5FB5EF2A7334A0A92F826F4937E1008");
// planResultService.execute2("726D4C1A712B4B1393175BD44B775B66"); // planResultService.execute2("726D4C1A712B4B1393175BD44B775B66");
// planResultService.execute2("265F24B6DF3C40E4B17D193B0CC8AAF2"); // planResultService.execute2("265F24B6DF3C40E4B17D193B0CC8AAF2");
LocalDateTime t= LocalDateTime.of(2026, 02, 14, 1, 25, 52); // LocalDateTime t= LocalDateTime.of(2026, 02, 14, 1, 25, 52);
List<Integer> opids=new ArrayList<>();//BCA6FA43FFA444D3952CF8F6E1EA291B // List<Integer> opids=new ArrayList<>();//BCA6FA43FFA444D3952CF8F6E1EA291B
opids.add(9); // opids.add(9);
planResultService.Move("27065EA0ECD14A81B7FAAFEF52273F93",opids,t,1265l,0); // planResultService.Move("27065EA0ECD14A81B7FAAFEF52273F93",opids,t,1265l,0);
// planResultService.Redecode("12345679"); // planResultService.Redecode("27065EA0ECD14A81B7FAAFEF52273F93");
// MaintenanceWindow maintenanceWindow=new MaintenanceWindow(); // MaintenanceWindow maintenanceWindow=new MaintenanceWindow();
// maintenanceWindow.setStartTime(LocalDateTime.of(2025, 10, 21, 0, 0, 0)); // maintenanceWindow.setStartTime(LocalDateTime.of(2025, 10, 21, 0, 0, 0));
// maintenanceWindow.setEndTime(LocalDateTime.of(2025, 10, 31, 0, 0, 0)); // maintenanceWindow.setEndTime(LocalDateTime.of(2025, 10, 31, 0, 0, 0));
......
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