Commit 23cc3c4a authored by Tong Li's avatar Tong Li

Merge remote-tracking branch 'origin/tl'

# Conflicts:
#	src/test/java/com/aps/demo/PlanResultServiceTest.java
parents 4148b970 b19aef0e
......@@ -327,41 +327,26 @@ public class GeneticAlgorithm {
{
FileHelper.writeLogFile("解码---------------"+population.size() );
GeneticDecoder decoder = new GeneticDecoder(_GlobalParam, param.getBaseTime(), machines, orders, materials, machineScheduler,orderMaterials);
GeneticDecoder decoder = new GeneticDecoder(_GlobalParam, param.getBaseTime(), machines, orders, materials, machineScheduler, orderMaterials);
if(1==2) {
CompletableFuture.allOf(population.stream()
.map(chromosome -> CompletableFuture.runAsync(() -> decode(decoder, chromosome, param, allOperations, globalOpList), decodeExecutor))
.toArray(CompletableFuture[]::new))
.join();
}
CompletableFuture.allOf(population.stream()
.map(chromosome -> CompletableFuture.runAsync(() -> decode(decoder,chromosome,param,allOperations,globalOpList), decodeExecutor))
.toArray(CompletableFuture[]::new))
.join();
if(1==2) {
if (population != null && population.size() > 0) {
population.parallelStream().forEach(chromosome -> {
chromosome.setResult(new ArrayList<>());
// 假设Machine类有拷贝方法,或使用MapStruct等工具进行映射
// chromosome.setInitMachines(ProductionDeepCopyUtil.deepCopyList(machines)); // 简单拷贝,实际可能需要深拷贝
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(machines,Machine.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setAllOperations(allOperations); // 简单拷贝,实际可能需要深拷贝
chromosome.setGlobalOpList(globalOpList); // 简单拷贝,实际可能需要深拷贝
//chromosome.setObjectiveWeights(_objectiveWeights);
chromosome.setBaseTime(param.getBaseTime());
// _sceneService.saveChromosomeToFile(chromosome, "12345679");
decoder.decodeChromosomeWithCache(chromosome);
if (chromosome.getFitness() == 0) {
chromosome.setFitness(_fitnessCalculator.calculateFitness(chromosome, _objectiveWeights));
}
population.forEach(chromosome -> {
decode(decoder, chromosome, param, allOperations, globalOpList);
});
}
}
//}
}
private void decode(GeneticDecoder decoder,Chromosome chromosome,ScheduleParams param, List<Entry> allOperations,List<GlobalOperationInfo> globalOpList) {
chromosome.setResult(new ArrayList<>());
_sceneService.saveChromosomeToFile(chromosome, "12345679");
// 假设Machine类有拷贝方法,或使用MapStruct等工具进行映射
// chromosome.setInitMachines(ProductionDeepCopyUtil.deepCopyList(machines)); // 简单拷贝,实际可能需要深拷贝
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(machines,Machine.class)); // 简单拷贝,实际可能需要深拷贝
......
......@@ -204,7 +204,7 @@ public class MachineCalculator {
i++;
}
}else {
times= CaldScheduleResultDetail(timeSegments1,machine,st,remainingTime,oneTime);
times= CaldScheduleResultDetail(timeSegments1,machine,st,remainingTime,oneTime);
}
return times;
......@@ -979,23 +979,22 @@ public class MachineCalculator {
private void RemoveMachineAvailable(Machine machine, ScheduleResultDetail geneDetails,TimeSegment targetSegment) {
// 关键修复2:加锁(若多线程访问),避免并发修改
synchronized (machine.getAvailability()) {
List<TimeSegment> availabilitySnapshot = new ArrayList<>(machine.getAvailability());
LocalDateTime geneEndTime = baseTime.plusSeconds(geneDetails.getEndTime());
LocalDateTime geneEndTime = baseTime.plusSeconds(geneDetails.getEndTime());
TimeSegment usedSegment = null;
if (targetSegment.getEnd().isAfter(geneEndTime)) {
TimeSegment usedSegment = new TimeSegment();
usedSegment.setStart(baseTime.plusSeconds(geneDetails.getStartTime()));
usedSegment.setEnd(geneEndTime);
usedSegment.setHoliday(false);
usedSegment.setKey(UUID.randomUUID().toString());
usedSegment.setType(SegmentType.REGULAR);
usedSegment.setUsed(true);
availabilitySnapshot.add(usedSegment);
geneDetails.setKey(usedSegment.getKey());
targetSegment.setStart(geneEndTime);
......@@ -1004,12 +1003,15 @@ public class MachineCalculator {
}
if(usedSegment!=null)
{
synchronized (machine.getAvailability()) {
availabilitySnapshot.sort(Comparator.comparing(TimeSegment::getStart));
machine.getAvailability().add(usedSegment);
machine.getAvailability().sort(Comparator.comparing(TimeSegment::getStart));
machine.setAvailability(availabilitySnapshot);
}
}
}
}
private void RemoveMachineAvailable1(Machine machine, ScheduleResultDetail geneDetails) {
......@@ -1055,7 +1057,7 @@ public class MachineCalculator {
public void AddMachineAvailable(Machine machine, List<ScheduleResultDetail> geneDetails) {
if (geneDetails == null || geneDetails.isEmpty()) return;
synchronized (machine.getAvailability()) {
List<String> keys= geneDetails.stream().
filter(t->t.getUsedSegment()==null||t.getUsedSegment().size()==0)
.map(ScheduleResultDetail::getKey)
......@@ -1074,7 +1076,7 @@ if(keys1!=null&&keys1.size()>0) {
.forEach(t->t.setUsed(false));
}
}
public void AddMachineAvailable1(Machine machine, List<ScheduleResultDetail> geneDetails) {
......
......@@ -44,7 +44,7 @@ public class PlanResultServiceTest {
// List<Integer> opids=new ArrayList<>();
// opids.add(1);
// planResultService.Move("B571EF6682DB463AB2977B1055A74112",opids,t,3403L);
// planResultService.Redecode("12345679");
// planResultService.Redecode("12345679");
// MaintenanceWindow maintenanceWindow=new MaintenanceWindow();
// maintenanceWindow.setStartTime(LocalDateTime.of(2025, 10, 21, 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