Commit 8c7f2c64 authored by Tong Li's avatar Tong Li

修改物料list为map

parent f3e148e7
......@@ -139,4 +139,17 @@ public class ProductionDeepCopyUtil {
throw new RuntimeException("Map深拷贝失败", e);
}
}
public static <K, V> TreeMap<K, V> deepCopyTreeMap(TreeMap<K, V> source, Class<K> keyType, Class<V> valueType) {
if (source == null) {
return new TreeMap<>();
}
try {
String json = objectMapper.writeValueAsString(source);
return objectMapper.readValue(json,
objectMapper.getTypeFactory().constructMapType(TreeMap.class, keyType, valueType));
} catch (Exception e) {
throw new RuntimeException("TreeMap深拷贝失败", e);
}
}
}
\ No newline at end of file
......@@ -127,9 +127,9 @@ public class Chromosome {
private ObjectiveWeights objectiveWeights;
// private Map<String,Material> materials = new HashMap<>();
private TreeMap<String, Material> materials = new TreeMap<>();
private List<Material> materials = new ArrayList<>();
// private List<Material> materials = new ArrayList<>();
private List<String> materialIds = new ArrayList<>();
/*
......
......@@ -25,7 +25,7 @@ public class GeneticAlgorithm {
private List<Machine> machines;
private final MachineSchedulerService machineScheduler;
private final List<Order> orders;
private final List<Material> materials;
private final TreeMap<String, Material> materials;
private final List<String> materialIds;
......@@ -49,7 +49,7 @@ public class GeneticAlgorithm {
private String sceneId;
public GeneticAlgorithm(GlobalParam globalParam,List<Machine> machines, List<Order> orders,
List<Material> materials,List<String> _materialIds, MachineSchedulerService machineScheduler,List<GroupResult> entryRel,MaterialRequirementService _materialRequirementService,SceneService sceneService,String _sceneId) {
TreeMap<String, Material> materials,List<String> _materialIds, MachineSchedulerService machineScheduler,List<GroupResult> entryRel,MaterialRequirementService _materialRequirementService,SceneService sceneService,String _sceneId) {
this.machines = machines;
this.orders = orders;
this.materials = materials;
......@@ -398,7 +398,7 @@ public class GeneticAlgorithm {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(machines,Machine.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setOrders(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(orders), Order.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setOperatRel(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(_entryRel), GroupResult.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyList(materials,Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyTreeMap(materials, String.class,Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setAllOperations(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(allOperations), Entry.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setGlobalOpList(ProductionDeepCopyUtil.deepCopyList(globalOpList, GlobalOperationInfo.class) ); // 简单拷贝,实际可能需要深拷贝
......
......@@ -56,7 +56,7 @@ public class GeneticDecoder {
private final MachineSchedulerService machineScheduler;
private final List<Order> orders;
private int orderMaxID;
private final List<Material> materials;
private final TreeMap<String, Material> materials;
private List<Entry> _allOperations;
private GlobalParam _globalParam;
private MachineCalculator machineCalculator;
......@@ -74,7 +74,7 @@ public class GeneticDecoder {
public GeneticDecoder(GlobalParam globalParam,LocalDateTime baseTime, List<Machine> machines, List<Order> orders,
List<Material> materials, MachineSchedulerService machineScheduler, MaterialRequirementService _materialRequirementService,String _sceneId) {
TreeMap<String, Material> materials, MachineSchedulerService machineScheduler, MaterialRequirementService _materialRequirementService,String _sceneId) {
this.baseTime = baseTime;
this.machines = machines;
this.orders = orders;
......
......@@ -296,7 +296,7 @@ if(isJit)
int estimatedStartTime,
Map<Integer, List<Entry>> entrysBygroupId,
Chromosome chromosome) {
List<Material> materials = chromosome.getMaterials();
TreeMap<String, Material> materials = chromosome.getMaterials();
if (materials == null || materials.isEmpty()) return estimatedStartTime;
List<OrderMaterialRequirement> remove=new ArrayList<>();
......
......@@ -23,7 +23,7 @@ public class HillClimbing {
private List<Entry> allOperations;
private List<Order> orders;
private List<Material> materials;
private TreeMap<String, Material> materials;
private List<GroupResult> _entryRel;
......@@ -39,7 +39,7 @@ public class HillClimbing {
private FitnessCalculator fitnessCalculator;
public HillClimbing(List<Entry> allOperations, List<Order> orders,
List<Material> materials,List<GroupResult> entryRel, FitnessCalculator _fitnessCalculator) {
TreeMap<String, Material> materials,List<GroupResult> entryRel, FitnessCalculator _fitnessCalculator) {
this.allOperations = allOperations;
this.orders = orders;
......@@ -631,7 +631,7 @@ public class HillClimbing {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(machines,Machine.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setOrders(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(orders), Order.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setOperatRel(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(_entryRel), GroupResult.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyList(materials,Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyTreeMap(materials,String.class,Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setAllOperations(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(allOperations), Entry.class) ); // 简单拷贝,实际可能需要深拷贝
//chromosome.setObjectiveWeights(_objectiveWeights);
......
......@@ -25,7 +25,7 @@ public class HybridAlgorithm {
private List<Machine> machines;
private final MachineSchedulerService machineScheduler;
private final List<Order> orders;
private final List<Material> materials;
private final TreeMap<String, Material> materials;
private final List<String> materialIds;
......@@ -60,7 +60,7 @@ public class HybridAlgorithm {
public HybridAlgorithm(GlobalParam globalParam,List<Machine> machines, List<Order> orders,
List<Material> materials,List<String> _materialIds, MachineSchedulerService machineScheduler,List<GroupResult> entryRel,MaterialRequirementService _materialRequirementService,SceneService sceneService,String _sceneId) {
TreeMap<String, Material> materials,List<String> _materialIds, MachineSchedulerService machineScheduler,List<GroupResult> entryRel,MaterialRequirementService _materialRequirementService,SceneService sceneService,String _sceneId) {
this.machines = machines;
this.orders = orders;
this.materials = materials;
......@@ -428,7 +428,7 @@ public class HybridAlgorithm {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(machines,Machine.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setOrders(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(orders), Order.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setOperatRel(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(_entryRel), GroupResult.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyList(materials,Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyTreeMap(materials, String.class, Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setAllOperations(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(allOperations), Entry.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setGlobalOpList(ProductionDeepCopyUtil.deepCopyList(globalOpList, GlobalOperationInfo.class) ); // 简单拷贝,实际可能需要深拷贝
......@@ -485,7 +485,7 @@ public class HybridAlgorithm {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(machines,Machine.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setOrders(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(orders), Order.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setOperatRel(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(_entryRel), GroupResult.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyList(materials,Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyTreeMap(materials, String.class, Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setAllOperations(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(allOperations), Entry.class) ); // 简单拷贝,实际可能需要深拷贝
// chromosome.setGlobalOpList(ProductionDeepCopyUtil.deepCopyList(globalOpList, GlobalOperationInfo.class) ); // 简单拷贝,实际可能需要深拷贝
......
......@@ -37,7 +37,7 @@ import java.util.stream.IntStream;
@Service
public class MaterialRequirementService {
private List<Material> _materials;
private List< Material> _materials;
@Autowired
......@@ -208,6 +208,7 @@ public class MaterialRequirementService {
reslte.put(1,equipids);
}
List<Material> useMaterials1=(List<Material>) reslte1.get(2);
if(useMaterials1!=null) {
for (Material m:useMaterials1) {
String materialID1= m.getId();
......@@ -646,17 +647,14 @@ if(demand==null)
.collect(Collectors.toList());
List<Order> orders=chromosome.getOrders();
if (MaterialRequirements != null&&MaterialRequirements.size()>0) {
List<Material> _materials= GetMaterials(sceneId);
TreeMap<String, Material> _materials= GetMaterials(sceneId);
for (Routingsupporting component : MaterialRequirements) {
double allneeded = component.getSpentQty().doubleValue()/ component.getMainQty().doubleValue() * parentQuantity;
double needed = allneeded;
// 查找物料(流式处理替代First)
Material material = _materials.stream()
.filter(m -> m.getId().equals(component.getMaterialId()))
.findFirst()
.orElse(null);
Material material = _materials.get(component.getMaterialId());
if (material == null) {
return null;
}
......@@ -1179,7 +1177,7 @@ if(demand==null)
})
.collect(Collectors.toList());
List<Material> materials=chromosome.getMaterials();
TreeMap<String, Material> materials=chromosome.getMaterials();
List<OrderMaterialRequirement> remove=new ArrayList<>();
Map<String, OrderMaterialRequirement> totalNeededByMaterial = new HashMap<>();
......@@ -1211,7 +1209,7 @@ if(demand==null)
}
}
public LocalDateTime CalBom(Chromosome chromosome,int operationId,Map<String, OrderMaterialRequirement> MaterialRequirements,List<Material> materials,LocalDateTime earliestStartTime,boolean commitChanges,List<OrderMaterialRequirement> remove,Map<Integer, List<Entry>> entrysBygroupId,boolean isSf)
public LocalDateTime CalBom(Chromosome chromosome,int operationId,Map<String, OrderMaterialRequirement> MaterialRequirements,TreeMap<String, Material> materials,LocalDateTime earliestStartTime,boolean commitChanges,List<OrderMaterialRequirement> remove,Map<Integer, List<Entry>> entrysBygroupId,boolean isSf)
{
String sceneId=chromosome.getScenarioID();
Random rnd = new Random();
......@@ -1226,10 +1224,7 @@ if(demand==null)
resetRequirementCalc(orderMaterial);
// 查找物料(流式处理替代First)
Material material = materials.stream()
.filter(m -> m.getId().equals(orderMaterial.getMaterialId()))
.findFirst()
.orElse(null);
Material material = materials.get(orderMaterial.getMaterialId());
if (material == null) {
return useTime1;
}
......@@ -1287,10 +1282,7 @@ if(demand==null)
if (routingsupportingreplaces2 != null && routingsupportingreplaces2.size() > 0) {
for (RoutingSupportingReplace rsr : routingsupportingreplaces2) {
Material material1 = materials.stream()
.filter(m -> m.getId().equals(rsr.getTargetmaterialid()))
.findFirst()
.orElse(null);
Material material1 = materials.get(rsr.getTargetmaterialid());
if (material1 == null) {
break;
......@@ -1343,10 +1335,8 @@ if(demand==null)
.findFirst()
.orElse(null);
Material material1 = materials.stream()
.filter(m -> m.getId().equals(orderMaterial1.getMaterialId()))
.findFirst()
.orElse(null);
Material material1 = materials.get(orderMaterial1.getMaterialId())
;
if (material1 == null) {
break;
}
......@@ -1530,16 +1520,13 @@ if(demand==null)
private void MaterialInTransit(Material material,String materialId, OrderMaterialRequirement orderMaterial, double needed,LocalDateTime earliestStartTime, List<Material> materials, boolean commitChanges ){
private void MaterialInTransit(Material material,String materialId, OrderMaterialRequirement orderMaterial, double needed,LocalDateTime earliestStartTime, TreeMap<String, Material> materials, boolean commitChanges ){
// 处理在途物料
LocalDateTime earliestTime = null;
double useTransit = 0;
if (material == null) {
material = materials.stream()
.filter(m -> m.getId().equals(materialId))
.findFirst()
.orElse(null);
material = materials.get(materialId);
if (material == null) {
return ;
}
......@@ -1751,7 +1738,31 @@ if(demand==null)
return RoutingDiscreteParams;
}
public List<Material> GetMaterials(String sceneId) {
public TreeMap<String, Material> GetMaterialListToMap(List<Material> materiallist)
{
if(materiallist==null) return null;
TreeMap<String, Material> materials = materiallist.stream()
.collect(Collectors.toMap(
// 1. Key映射:取Material.code
Material::getId,
// 2. Value映射:Material → Material
material -> material,
// 3. Key重复时的处理规则(保留旧值/覆盖新值)
(oldValue, newValue) -> newValue,
// 4. 指定返回TreeMap(有序)
TreeMap::new
));
return materials;
}
public TreeMap<String, Material> GetMaterials(String sceneId) {
List<Material> materiallist=GetMaterialList(sceneId);
if(materiallist==null) return null;
return GetMaterialListToMap(materiallist);
}
public List<Material> GetMaterialList(String sceneId) {
List<Material> materials=(List<Material>)GlobalCacheUtil.get(sceneId+materialsCacheKey);
if(materials==null)
{
......
......@@ -49,8 +49,7 @@ public class PostEditJitService {
.collect(Collectors.groupingBy(Entry::getGroupId));
Map<String, Material> materialsById = chromosome.getMaterials() == null
? Collections.emptyMap()
: chromosome.getMaterials().stream()
.collect(Collectors.toMap(Material::getId, m -> m, (left, right) -> left));
: chromosome.getMaterials();
Map<Integer, Set<Integer>> childGroupsByParentOp = buildChildGroupIndex(chromosome.getAllOperations());
if (childGroupsByParentOp.isEmpty()) {
......
......@@ -1900,7 +1900,7 @@ if(targetOp.getSequence()>1) {
*/
public void redecode(Chromosome chromosome,LocalDateTime baseTime, GlobalParam globalParam)
{
List<Material> baseMaterialsSnapshot = resolveDecodeMaterials(chromosome);
TreeMap<String, Material> baseMaterialsSnapshot = resolveDecodeMaterials(chromosome);
chromosome.setResultOld(ProductionDeepCopyUtil.deepCopyList(chromosome.getResult(),GAScheduleResult.class));
GeneticDecoder decoder = prepareDecodePass(chromosome, baseTime, globalParam, baseMaterialsSnapshot, true);
......@@ -1927,7 +1927,7 @@ if(targetOp.getSequence()>1) {
}
private GeneticDecoder prepareDecodePass(Chromosome chromosome, LocalDateTime baseTime, GlobalParam globalParam,
List<Material> baseMaterialsSnapshot, boolean removeGeneratedOrders) {
TreeMap<String, Material> baseMaterialsSnapshot, boolean removeGeneratedOrders) {
if (removeGeneratedOrders) {
DelOrder(chromosome);
}
......@@ -1947,24 +1947,26 @@ if(targetOp.getSequence()>1) {
chromosome.getOrders(), null, machineScheduler,materialRequirementService,chromosome.getScenarioID());
}
private List<Material> resolveDecodeMaterials(Chromosome chromosome) {
List<Material> useMaterials = materialRequirementService.GetMaterials(chromosome.getScenarioID());
private TreeMap<String, Material> resolveDecodeMaterials(Chromosome chromosome) {
TreeMap<String, Material> useMaterials = materialRequirementService.GetMaterials(chromosome.getScenarioID());
if (useMaterials == null && chromosome.getMaterialIds() != null && chromosome.getMaterialIds().size() > 0) {
List<Material> materials = planResultService.InitMaterial();
useMaterials = materials.stream()
.filter(t -> chromosome.getMaterialIds().contains(t.getId()))
.collect(Collectors.toList());
useMaterials= materialRequirementService.GetMaterialListToMap(materials);
}
if (useMaterials == null) {
useMaterials = new ArrayList<>();
useMaterials = new TreeMap<>();
}
return ProductionDeepCopyUtil.deepCopyList(useMaterials, Material.class);
return ProductionDeepCopyUtil.deepCopyTreeMap(useMaterials, String.class, Material.class);
}
private void resetDecodeMaterials(Chromosome chromosome, List<Material> baseMaterialsSnapshot) {
List<Material> materialsForDecode = ProductionDeepCopyUtil.deepCopyList(baseMaterialsSnapshot, Material.class);
private void resetDecodeMaterials(Chromosome chromosome, TreeMap<String, Material> baseMaterialsSnapshot) {
TreeMap<String, Material> materialsForDecode = ProductionDeepCopyUtil.deepCopyTreeMap(baseMaterialsSnapshot, String.class, Material.class);
chromosome.setMaterials(materialsForDecode);
materialRequirementService.SetMaterials(chromosome.getScenarioID(), materialsForDecode);
materialRequirementService.SetMaterials(chromosome.getScenarioID(), materialsForDecode.entrySet().stream().map(Map.Entry::getValue)
.collect(Collectors.toList()));
}
public void DelOrder(Chromosome chromosome) {
......
......@@ -33,7 +33,7 @@ public class SimulatedAnnealing {
private List<Entry> allOperations;
private List<Order> orders;
private List<Material> materials;
private TreeMap<String, Material> materials;
private List<GroupResult> _entryRel;
......@@ -43,7 +43,7 @@ public class SimulatedAnnealing {
private Map<Integer, Entry> entrybyids;
public SimulatedAnnealing( List<Entry> allOperations, List<Order> orders,
List<Material> materials,List<GroupResult> entryRel, FitnessCalculator _fitnessCalculator) {
TreeMap<String, Material> materials,List<GroupResult> entryRel, FitnessCalculator _fitnessCalculator) {
this.allOperations = allOperations;
this.orders = orders;
......@@ -538,7 +538,7 @@ public class SimulatedAnnealing {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(machines,Machine.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setOrders(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(orders), Order.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setOperatRel(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(_entryRel), GroupResult.class) ); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyList(materials,Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyTreeMap(materials,String.class, Material.class)); // 简单拷贝,实际可能需要深拷贝
chromosome.setAllOperations(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(allOperations), Entry.class) ); // 简单拷贝,实际可能需要深拷贝
//chromosome.setObjectiveWeights(_objectiveWeights);
......
......@@ -37,13 +37,13 @@ public class TabuSearch {
private List<Machine> cachedMachines;
private List<Order> cachedOrders;
private List<GroupResult> cachedEntryRel;
private List<Material> cachedMaterials;
private TreeMap<String, Material> cachedMaterials;
private List<Entry> cachedAllOperations;
// 渴望准则:记录最优解的 fitness
private double[] bestFitness;
public TabuSearch(List<Entry> allOperations, List<Order> orders,
List<Material> materials,List<GroupResult> entryRel, FitnessCalculator _fitnessCalculator) {
TreeMap<String, Material> materials,List<GroupResult> entryRel, FitnessCalculator _fitnessCalculator) {
this.tabuList = new ArrayList<>();
// 工序越多,禁忌表越长(适配1000+工序)
......@@ -54,7 +54,7 @@ public class TabuSearch {
cachedAllOperations = ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(allOperations), Entry.class);
cachedOrders = ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(orders), Order.class);
cachedEntryRel = ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(entryRel), GroupResult.class);
cachedMaterials = ProductionDeepCopyUtil.deepCopyList(materials, Material.class);
cachedMaterials = ProductionDeepCopyUtil.deepCopyTreeMap(materials, String.class, Material.class);
}
......@@ -337,7 +337,7 @@ public class TabuSearch {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(cachedMachines, Machine.class));
chromosome.setOrders(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedOrders), Order.class));
chromosome.setOperatRel(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedEntryRel), GroupResult.class));
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyList(cachedMaterials, Material.class));
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyTreeMap(cachedMaterials,String.class, Material.class));
chromosome.setAllOperations(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedAllOperations), Entry.class));
// 加载锁定工单到ResultOld
......
......@@ -97,7 +97,7 @@ public class VariableNeighborhoodSearch {
private FitnessCalculator fitnessCalculator;
private List<Order> orders;
private List<Material> materials;
private TreeMap<String, Material> materials;
private List<GroupResult> _entryRel;
......@@ -119,7 +119,7 @@ public class VariableNeighborhoodSearch {
private List<Machine> cachedMachines;
private List<Order> cachedOrders;
private List<GroupResult> cachedEntryRel;
private List<Material> cachedMaterials;
private TreeMap<String, Material> cachedMaterials;
private List<Entry> cachedAllOperations;
private GeneticOperations geneticOperations;
......@@ -150,12 +150,12 @@ public class VariableNeighborhoodSearch {
}
public VariableNeighborhoodSearch( List<Entry> allOperations, List<Order> orders,
List<Material> materials,List<GroupResult> entryRel, FitnessCalculator fitnessCalculator) {
TreeMap<String, Material> materials,List<GroupResult> entryRel, FitnessCalculator fitnessCalculator) {
this(allOperations, orders, materials, entryRel, fitnessCalculator, 1);
}
public VariableNeighborhoodSearch( List<Entry> allOperations, List<Order> orders,
List<Material> materials,List<GroupResult> entryRel,
TreeMap<String, Material> materials,List<GroupResult> entryRel,
FitnessCalculator fitnessCalculator, int maxNoImproveRounds) {
this.maxNoImproveRounds = maxNoImproveRounds;
this.allOperations = allOperations;
......@@ -181,7 +181,7 @@ public class VariableNeighborhoodSearch {
cachedAllOperations = ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(allOperations), Entry.class);
cachedOrders = ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(orders), Order.class);
cachedEntryRel = ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(entryRel), GroupResult.class);
cachedMaterials = ProductionDeepCopyUtil.deepCopyList(materials, Material.class);
cachedMaterials = ProductionDeepCopyUtil.deepCopyTreeMap(materials, String.class, Material.class);
// 初始化邻域结构统计
......@@ -2091,7 +2091,7 @@ public class VariableNeighborhoodSearch {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(cachedMachines, Machine.class));
chromosome.setOrders(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedOrders), Order.class));
chromosome.setOperatRel(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedEntryRel), GroupResult.class));
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyList(cachedMaterials, Material.class));
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyTreeMap(cachedMaterials, String.class, Material.class));
chromosome.setAllOperations(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedAllOperations), Entry.class));
// 加载锁定工单到ResultOld
......@@ -2121,7 +2121,7 @@ public class VariableNeighborhoodSearch {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(cachedMachines, Machine.class));
chromosome.setOrders(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedOrders), Order.class));
chromosome.setOperatRel(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedEntryRel), GroupResult.class));
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyList(cachedMaterials, Material.class));
chromosome.setMaterials(ProductionDeepCopyUtil.deepCopyTreeMap(cachedMaterials,String.class, Material.class));
chromosome.setAllOperations(ProductionDeepCopyUtil.deepCopyList(new CopyOnWriteArrayList<>(cachedAllOperations), Entry.class));
// 加载锁定工单到ResultOld
......
......@@ -244,8 +244,11 @@ public class PlanResultService {
// 4.5 在排产前标记锁定期工单占用的设备时间段
lockedOrderProcessorService.markLockedOrdersOccupiedTime(machines, timeConfig.getBaseTime());
TreeMap<String, Material> materialmap= materialRequirementService.GetMaterialListToMap(Materials1);
// 5. 执行调度算法
HybridAlgorithm scheduler =new HybridAlgorithm(globalParam,machines,orders,Materials1,materialIds,machineScheduler,entryRel,materialRequirementService,_sceneService,SceneId); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
HybridAlgorithm scheduler =new HybridAlgorithm(globalParam,machines,orders,materialmap,materialIds,machineScheduler,entryRel,materialRequirementService,_sceneService,SceneId); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
param.initAdaptiveParams(entrys.size());
double[] customWeights = new double[] { 0.4, 0.1, 0.1, 0.1, 0.3 }; // 延迟时间权重提升到0.5
//完工时间、总流程时间、总换型时间、机器负载标准差、延迟时间
......@@ -1858,8 +1861,9 @@ public class PlanResultService {
machines= machines.stream().filter(t->machineIds.contains(t.getId())).collect(Collectors.toList());
// 5. 执行调度算法
GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders,Materials,null,machineScheduler,entryRel,materialRequirementService,_sceneService,SceneId); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
GeneticAlgorithm scheduler =new GeneticAlgorithm(globalParam,machines,orders, materialRequirementService.GetMaterialListToMap(Materials),null,machineScheduler,entryRel,materialRequirementService,_sceneService,SceneId); //new GeneticAlgorithm(products, machines, orders, machineScheduler);
param.initAdaptiveParams(entrys.size());
double[] customWeights = new double[] { 0.4, 0.1, 0.1, 0.1, 0.3 }; // 延迟时间权重提升到0.5
//完工时间、总流程时间、总换型时间、机器负载标准差、延迟时间
......
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