Commit ff663b04 authored by Tong Li's avatar Tong Li

bug

parent 19477178
......@@ -74,9 +74,9 @@ public class HillClimbing {
*/
public Chromosome searchAll(Chromosome chromosome, List<Machine> machines, GeneticDecoder decoder) {
Chromosome current = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
decoder.DelOrder(current);
Chromosome best = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
Chromosome best = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
decoder.DelOrder(current);
// 构建位置索引映射:groupId_sequence -> position
Map<String, Integer> positionIndex = buildPositionIndex(current);
......@@ -88,6 +88,7 @@ public class HillClimbing {
Map<Integer, Entry> entryIndex = buildEntryIndex(current, entrys);
boolean improved = false;
for (Double priority : sortedPriorities) {
decoder.DelOrder(current);
List<Entry> priorityOps = priorityGroups.get(priority);
if (priorityOps.isEmpty()) {
continue;
......@@ -238,7 +239,7 @@ public class HillClimbing {
current =ProductionDeepCopyUtil.deepCopy(best, Chromosome.class);
positionIndex = buildPositionIndex(current);
entryIndex = buildEntryIndex(current, entrys);
decoder.DelOrder(current);
//decoder.DelOrder(current);
}
}
}
......
......@@ -100,7 +100,7 @@ public class SimulatedAnnealing {
log("模拟退火+爬山法 - 开始执行",true);
Chromosome current = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
decoder.DelOrder(current);
Chromosome best = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
writeKpi(best);
......@@ -134,7 +134,7 @@ public class SimulatedAnnealing {
for (int i = 0; i < maxIterations; i++) {
totalIterations = i + 1;
boolean improved = false;
decoder.DelOrder(current);
// 1. 使用智能策略生成邻域解(找瓶颈工序/设备)
Chromosome neighbor = vns.generateNeighbor(current);
......@@ -168,7 +168,7 @@ public class SimulatedAnnealing {
log(String.format("模拟退火+爬山法 - 迭代%d:找到更优解(微小),fitness=%.4f", totalIterations, best.getFitness()),true);
}
}
decoder.DelOrder(current);
}
if (!improved) {
......@@ -243,7 +243,6 @@ public class SimulatedAnnealing {
decode(decoder, current,machines);
decoder.DelOrder(current);
Chromosome best = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
writeKpi(best);
// 初始化解码
......@@ -279,6 +278,7 @@ public class SimulatedAnnealing {
totalIterations = i + 1;
boolean improved = false;
log(String.format("模拟退火 - 迭代%d:", totalIterations));
decoder.DelOrder(current);
// 1. 使用智能策略生成邻域解(找瓶颈工序/设备)
Chromosome neighbor = vns.generateNeighbor(current);
......@@ -320,7 +320,7 @@ public class SimulatedAnnealing {
log(String.format("模拟退火 - 迭代%d:找到更优解(微小),fitness=%.4f", totalIterations, best.getFitness()));
}
}
decoder.DelOrder(current);
// decoder.DelOrder(current);
}
if (!improved) {
......
......@@ -9,6 +9,7 @@ import com.aps.entity.basic.*;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
/**
* 禁忌搜索算法
......@@ -66,7 +67,7 @@ public class TabuSearch {
log("禁忌搜索 - 开始执行",true);
Chromosome current = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
decoder.DelOrder(current);
// decoder.DelOrder(current);
Chromosome best = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
this.bestFitness = best.getFitnessLevel().clone();
writeKpi(best);
......@@ -79,7 +80,7 @@ public class TabuSearch {
int significantImproveCount = 0;
int noImprovementCount = 0;
int maxNoImprovement = 5; // 优化:5次无改进则停止
int maxIterations = Math.min(cachedAllOperations.size(), 20); // 优化:最多20次迭代
int maxIterations =1;// Math.min(cachedAllOperations.size(), 20); // 优化:最多20次迭代
// 改进率监控
int stagnantWindow = 10;
......@@ -94,7 +95,7 @@ public class TabuSearch {
for (int i = 0; i < maxIterations; i++) {
iterations++;
decoder.DelOrder(current);
// 使用 VNS 生成邻域解(成功率排序后的策略)
Chromosome neighbor = vns.generateNeighbor(current);
......@@ -180,8 +181,9 @@ public class TabuSearch {
} else {
// 没有改进
noImprovementCount++;
}
decoder.DelOrder(current);
} else {
// 不接受,无改进计数+1
noImprovementCount++;
......
......@@ -317,7 +317,7 @@ public class VariableNeighborhoodSearch {
// 深拷贝当前染色体
Chromosome current = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
geneticOperations.DelOrder(current);
// geneticOperations.DelOrder(current);
Chromosome best = ProductionDeepCopyUtil.deepCopy(chromosome, Chromosome.class);
writeKpi(best);
......@@ -339,7 +339,7 @@ public class VariableNeighborhoodSearch {
while (noImproveRoundCount < maxNoImproveRounds) {
totalRounds++;
log("变邻域搜索 - 轮次" + totalRounds + ", K===" + k);
geneticOperations.DelOrder(current);
NeighborhoodStructure neighborhood = neighborhoods.get(k);
// 找到对应的统计对象
......@@ -399,7 +399,7 @@ public class VariableNeighborhoodSearch {
break;
}
}
geneticOperations.DelOrder(current);
} else {
k++; // 尝试下一个邻域
// 检查是否完成一轮
......
......@@ -285,6 +285,9 @@ public class PlanResultService {
KpiCalculator kpiCalculator=new KpiCalculator(chromosome);
kpiCalculator.calculatekpi();
// 添加锁定期工单到调度结果中
// 这里会从 Dispatch 表加载锁定期工单,并添加到 chromosome.result 中
lockedOrderProcessorService.addLockedOrdersToResult(chromosome);
......
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