Commit 6d4e146b authored by Tong Li's avatar Tong Li

bom

parent 06001699
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
package com.aps.common.util; package com.aps.common.util;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
...@@ -126,5 +127,16 @@ public class ProductionDeepCopyUtil { ...@@ -126,5 +127,16 @@ public class ProductionDeepCopyUtil {
} }
} }
public static <K, V> Map<K, V> deepCopyMap(Map<K, V> source) {
if (source == null) {
return new HashMap<>();
}
try {
String json = objectMapper.writeValueAsString(source);
return objectMapper.readValue(json, new TypeReference<Map<K, V>>() {});
} catch (Exception e) {
throw new RuntimeException("Map深拷贝失败", e);
}
}
} }
\ No newline at end of file
...@@ -127,6 +127,8 @@ public class Chromosome { ...@@ -127,6 +127,8 @@ public class Chromosome {
private ObjectiveWeights objectiveWeights; private ObjectiveWeights objectiveWeights;
// private Map<String,Material> materials = new HashMap<>();
private List<Material> materials = new ArrayList<>(); private List<Material> materials = new ArrayList<>();
private List<String> materialIds = new ArrayList<>(); private List<String> materialIds = new ArrayList<>();
......
package com.aps.service.Algorithm; package com.aps.service.Algorithm;
import com.aps.common.util.FileHelper;
import com.aps.common.util.ProductionDeepCopyUtil; import com.aps.common.util.ProductionDeepCopyUtil;
import com.aps.entity.Algorithm.*; import com.aps.entity.Algorithm.*;
import com.aps.entity.basic.*; import com.aps.entity.basic.*;
...@@ -30,12 +31,12 @@ public class GeneticDecoderBom { ...@@ -30,12 +31,12 @@ public class GeneticDecoderBom {
materialRequirementService=_materialRequirementService; materialRequirementService=_materialRequirementService;
} }
public int computeSemiFinishedAnchor(int semiGroupId, public int computeSemiFinishedAnchor(GeneticDecoder decoder,int semiGroupId,
Map<Integer, List<Entry>> entrysBygroupId, Map<Integer, List<Entry>> entrysBygroupId,
Map<String, OpMachine> opMachineKeyMap, Map<String, OpMachine> opMachineKeyMap,
Chromosome chromosome, Chromosome chromosome,
Map<Integer, GAScheduleResult> scheduleIndexById, Map<Integer, GAScheduleResult> scheduleIndexById,
Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache) { Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,Map<Long, Machine> machineIdMap,Map<Integer, Entry> entryIndexById) {
List<Entry> semiOps = entrysBygroupId.get(semiGroupId); List<Entry> semiOps = entrysBygroupId.get(semiGroupId);
if (semiOps == null || semiOps.isEmpty()) return 0; if (semiOps == null || semiOps.isEmpty()) return 0;
...@@ -58,23 +59,34 @@ public class GeneticDecoderBom { ...@@ -58,23 +59,34 @@ public class GeneticDecoderBom {
Entry firstTargetOp = targetOps.get(0); Entry firstTargetOp = targetOps.get(0);
if (Entry.SchedulingMode.FORWARD.name().equals( if (Entry.SchedulingMode.FORWARD.name().equals(
firstTargetOp.getSchedulingMode())) { firstTargetOp.getSchedulingMode())) {
int rootStart = forwardEstimateToOperation(targetOpId, targetGroupId,0, int rootStart = forwardEstimateToOperation(decoder,targetOpId, targetGroupId,0,
entrysBygroupId, opMachineKeyMap, chromosome, entrysBygroupId, opMachineKeyMap, chromosome,
scheduleIndexById, machineTasksCache,false); scheduleIndexById, machineTasksCache,machineIdMap,entryIndexById,false);
List<Integer> chainGroupIds = new ArrayList<>(intermediateGroupIds); List<Integer> chainGroupIds = new ArrayList<>(intermediateGroupIds);
chainGroupIds.add(targetGroupId); chainGroupIds.add(targetGroupId);
rootStart = correctByRawMaterialStockForChain(chainGroupIds,targetGroupId,targetOpId, rootStart = correctByRawMaterialStockForChain(chainGroupIds,targetGroupId,targetOpId,
rootStart, entrysBygroupId,chromosome); rootStart, entrysBygroupId,chromosome);
int anchor = rootStart; int anchor = rootStart;
// FileHelper.writeLogFile(" 成品开始 "+targetGroupId+" : "+rootStart);
if(anchor==0)
{
return -1;
}
for (int i = intermediateGroupIds.size() - 1; i >= 0; i--) { for (int i = intermediateGroupIds.size() - 1; i >= 0; i--) {
int start1= forwardEstimateToOperation(0, intermediateGroupIds.get(i),anchor, int sfGroupId= intermediateGroupIds.get(i);
int start1= forwardEstimateToOperation(decoder,0,sfGroupId ,anchor,
entrysBygroupId, opMachineKeyMap, chromosome, entrysBygroupId, opMachineKeyMap, chromosome,
scheduleIndexById, machineTasksCache,true); scheduleIndexById, machineTasksCache,machineIdMap,entryIndexById,true);
if(start1<0) {
// FileHelper.writeLogFile(" 半成品开始 "+sfGroupId+" : "+start1+" - "+anchor);
if(start1<=0) {
isFORWARD=true; isFORWARD=true;
break; break;
} }
...@@ -126,12 +138,14 @@ public class GeneticDecoderBom { ...@@ -126,12 +138,14 @@ public class GeneticDecoderBom {
} }
return -1; return -1;
} }
private int forwardEstimateToOperation(int targetOpId, int groupId,int startSecond, private int forwardEstimateToOperation(GeneticDecoder decoder, int targetOpId, int groupId,int startSecond,
Map<Integer, List<Entry>> entrysBygroupId, Map<Integer, List<Entry>> entrysBygroupId,
Map<String, OpMachine> opMachineKeyMap, Map<String, OpMachine> opMachineKeyMap,
Chromosome chromosome, Chromosome chromosome,
Map<Integer, GAScheduleResult> scheduleIndexById, Map<Integer, GAScheduleResult> scheduleIndexById,
Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,boolean isJit) { Map<Long, CopyOnWriteArrayList<GAScheduleResult>> machineTasksCache,
Map<Long, Machine> machineIdMap,
Map<Integer, Entry> entryIndexById,boolean isJit) {
List<Entry> ops = entrysBygroupId.get(groupId); List<Entry> ops = entrysBygroupId.get(groupId);
if (ops == null) return 0; if (ops == null) return 0;
...@@ -209,30 +223,35 @@ if(isJit) ...@@ -209,30 +223,35 @@ if(isJit)
if (machine != null&&!machine.getCapacityTypeName().equals("Infinite")) { if (machine != null&&!machine.getCapacityTypeName().equals("Infinite")) {
CopyOnWriteArrayList<GAScheduleResult> machineTasks = getMachineTasks(mId, chromosome, machineTasksCache); CopyOnWriteArrayList<GAScheduleResult> machineTasks = getMachineTasks(mId, chromosome, machineTasksCache);
CopyOnWriteArrayList<ScheduleResultDetail> geneDetails = estimateCalendarAwareDuration(machine,op,machineTasks, start, rawDur,mo.getProcessingTime(),isJit);
if(geneDetails!=null) {
start = geneDetails.stream() GAScheduleResult result= decoder.processOperationResult( op, mId, mo.getProcessingTime(), mo, chromosome, machineIdMap, machineTasksCache, entryIndexById, scheduleIndexById, start, false, isJit);
.mapToInt(ScheduleResultDetail::getStartTime)
.min()
.orElse(0); // CopyOnWriteArrayList<ScheduleResultDetail> geneDetails = estimateCalendarAwareDuration(machine,op,machineTasks, start, rawDur,mo.getProcessingTime(),isJit);
end = geneDetails.stream() if(result!=null) {
.mapToInt(ScheduleResultDetail::getEndTime) start = result.getStartTime();
.max() end = result.getEndTime();
.orElse(0);
}else { }else {
return -1; return -1;
} }
}else { }else {
if(isJit) if(isJit)
{ {
start=start-rawDur;
end=start; end=start;
start=start-rawDur;
}else { }else {
start=end; start=end;
end=start+rawDur; end=start+rawDur;
} }
// FileHelper.writeLogFile(" 半成品 " + op.getGroupId() + " - " + op.getSequence() + ",开始时间: " + start + ",结束时间: " + end + ",处理时间: " + rawDur );
} }
if (op.getId() == targetOpId) return start; if (op.getId() == targetOpId) return start;
......
...@@ -507,7 +507,20 @@ public class MachineCalculator { ...@@ -507,7 +507,20 @@ public class MachineCalculator {
if(timeSegments1==null) { if(timeSegments1==null) {
int i = 0; int i = 0;
CopyOnWriteArrayList<TimeSegment> usedSegments =new CopyOnWriteArrayList<>(); CopyOnWriteArrayList<TimeSegment> usedSegments =new CopyOnWriteArrayList<>();
double AvTotal = calculateTotalMinutesByIndex(timeSegments, currentTime, timeSegments.size(), isJit);
if(AvTotal<remainingTime)
{
return null;
}
while (remainingTime > 0) { while (remainingTime > 0) {
TimeSegment shift = timeSegments.get(i); TimeSegment shift = timeSegments.get(i);
Map<Integer, Object> outMap = CreateScheduleResultDetail(shift, currentTime, remainingTime, oneTime,isJit); Map<Integer, Object> outMap = CreateScheduleResultDetail(shift, currentTime, remainingTime, oneTime,isJit);
......
...@@ -1906,17 +1906,6 @@ if(targetOp.getSequence()>1) { ...@@ -1906,17 +1906,6 @@ if(targetOp.getSequence()>1) {
GeneticDecoder decoder = prepareDecodePass(chromosome, baseTime, globalParam, baseMaterialsSnapshot, true); GeneticDecoder decoder = prepareDecodePass(chromosome, baseTime, globalParam, baseMaterialsSnapshot, true);
decoder.decode(chromosome,false); decoder.decode(chromosome,false);
PostEditJitService postEditJitService = new PostEditJitService();
try {
if (postEditJitService.applyPostEditJitBias(chromosome, globalParam)) {
chromosome.setResultOld(ProductionDeepCopyUtil.deepCopyList(chromosome.getResult(),GAScheduleResult.class));
decoder = prepareDecodePass(chromosome, baseTime, globalParam, baseMaterialsSnapshot, false);
decoder.decode(chromosome,false, false);
}
} finally {
postEditJitService.clearTemporaryJitBias(chromosome);
}
KpiCalculator kpiCalculator=new KpiCalculator(chromosome); KpiCalculator kpiCalculator=new KpiCalculator(chromosome);
kpiCalculator.calculatekpi(); kpiCalculator.calculatekpi();
......
...@@ -260,7 +260,7 @@ public class PlanResultService { ...@@ -260,7 +260,7 @@ public class PlanResultService {
_sceneService.saveChromosomeToFile(chromosome, SceneId); _sceneService.saveChromosomeToFile(chromosome, SceneId);
WriteScheduleSummary(chromosome); // WriteScheduleSummary(chromosome);
return chromosome; return chromosome;
......
...@@ -40,7 +40,7 @@ public class PlanResultServiceTest { ...@@ -40,7 +40,7 @@ public class PlanResultServiceTest {
// sortService.test1(); // sortService.test1();
// nsgaiiUtils.Test(); // nsgaiiUtils.Test();
planResultService.execute2("6D7C59CF2576457EBCB5F6CCDF5AF342");//2000 // planResultService.execute2("6D7C59CF2576457EBCB5F6CCDF5AF342");//2000
// planResultService.execute2("15210B13B88A453F8B84AAC7F16C7541");//2000 // planResultService.execute2("15210B13B88A453F8B84AAC7F16C7541");//2000
...@@ -48,7 +48,7 @@ public class PlanResultServiceTest { ...@@ -48,7 +48,7 @@ public class PlanResultServiceTest {
// planResultService.execute2("E2CD1FC6FF9B4B19A59FEC7F846D4952");//600 // planResultService.execute2("E2CD1FC6FF9B4B19A59FEC7F846D4952");//600
// planResultService.execute2("EAF3C94B8F3345278F226C94FB0FED86");//bom // planResultService.execute2("EAF3C94B8F3345278F226C94FB0FED86");//bom
// planResultService.execute2("6D63146BE5C84A78B5AB044327BA55BD");//2000 // planResultService.execute2("6D63146BE5C84A78B5AB044327BA55BD");//2000
// planResultService.execute2("6D63146BE5C84A78B5AB044327BA55BD");//5000 planResultService.execute2("6D63146BE5C84A78B5AB044327BA55BD");//5000
// planResultService.execute2("C8B533BD8944405B9A2F8823C575C204");//500 // planResultService.execute2("C8B533BD8944405B9A2F8823C575C204");//500
// planResultService.execute2("EFDD34E4B5BC434BAEAE6A84DFCD4E7B");//20 // planResultService.execute2("EFDD34E4B5BC434BAEAE6A84DFCD4E7B");//20
// planResultService.execute2("00E0C5D3E4AD4F36B56C39395906618D"); // planResultService.execute2("00E0C5D3E4AD4F36B56C39395906618D");
......
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