Commit 1d0d9fa2 authored by DESKTOP-VKRD9QF\Administration's avatar DESKTOP-VKRD9QF\Administration
parents 02cf8d24 08c5cbf1
...@@ -134,6 +134,7 @@ public class GeneticAlgorithm { ...@@ -134,6 +134,7 @@ public class GeneticAlgorithm {
// best.setOrderMaterials(orderMaterials); // best.setOrderMaterials(orderMaterials);
best.setMaterialIds(materialIds); best.setMaterialIds(materialIds);
best.setMaterials(null); best.setMaterials(null);
best.setScenarioID(sceneId);
// best.setOperatRel(_entryRel); // best.setOperatRel(_entryRel);
if(best.getInitMachines()==null) if(best.getInitMachines()==null)
...@@ -275,6 +276,7 @@ public class GeneticAlgorithm { ...@@ -275,6 +276,7 @@ public class GeneticAlgorithm {
best.setBaseTime(param.getBaseTime()); best.setBaseTime(param.getBaseTime());
best.setMaterialIds(materialIds); best.setMaterialIds(materialIds);
best.setMaterials(null); best.setMaterials(null);
best.setScenarioID(sceneId);
// best.setOperatRel(_entryRel); // best.setOperatRel(_entryRel);
if(best.getInitMachines()==null) if(best.getInitMachines()==null)
......
...@@ -268,7 +268,9 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -268,7 +268,9 @@ if(finishedOrder==null||finishedOrder.size()==0)
} }
finalSequence.add(orderid); finalSequence.add(orderid);
}else { }else {
int insertPos = Math.max(0, finalSequence.size() - rnd.nextInt(2)); int insertPos = Math.max(0, finalSequence.size());
// int insertPos = Math.max(0, finalSequence.size() - rnd.nextInt(2));
finalSequence.add(insertPos,orderid); finalSequence.add(insertPos,orderid);
} }
orderProcessCounter.put(orderid, scheduledCount); orderProcessCounter.put(orderid, scheduledCount);
...@@ -488,13 +490,17 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -488,13 +490,17 @@ if(finishedOrder==null||finishedOrder.size()==0)
int setupTime=0; int setupTime=0;
CopyOnWriteArrayList<GAScheduleResult> machineTasks=null; CopyOnWriteArrayList<GAScheduleResult> machineTasks=null;
// CopyOnWriteArrayList<GAScheduleResult> machineTasks =chromosome.getResult().stream() CopyOnWriteArrayList<GAScheduleResult> machineTasks1 =chromosome.getResult().stream()
// .filter(t -> t.getMachineId() == machine.getId()) .filter(t -> t.getMachineId() == machine.getId())
// .sorted(Comparator.comparingInt(GAScheduleResult::getStartTime)) .sorted(Comparator.comparingInt(GAScheduleResult::getStartTime))
// .collect(Collectors.toCollection(CopyOnWriteArrayList::new)); .collect(Collectors.toCollection(CopyOnWriteArrayList::new));
GAScheduleResult lastGeneOnMachine = machine.getLastGene(); GAScheduleResult lastGeneOnMachine = null;
if(machineTasks1!=null&&machineTasks1.size()>0)
{
lastGeneOnMachine=machineTasks1.get(machineTasks1.size()-1);
}
if(lastGeneOnMachine!=null) if(lastGeneOnMachine!=null)
{ {
earliestStartTime = Math.max(earliestStartTime,lastGeneOnMachine.getEndTime()); earliestStartTime = Math.max(earliestStartTime,lastGeneOnMachine.getEndTime());
...@@ -503,33 +509,30 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -503,33 +509,30 @@ if(finishedOrder==null||finishedOrder.size()==0)
// _globalParam.set_smoothChangeOver(false); // _globalParam.set_smoothChangeOver(false);
CopyOnWriteArrayList<ScheduleResultDetail> geneDetails=new CopyOnWriteArrayList<>(); CopyOnWriteArrayList<ScheduleResultDetail> geneDetails=new CopyOnWriteArrayList<>();
int bomtime=0; int bomtime=0;
if(machine.getId()==2063)
{
int i=0;
}
LocalDateTime startTime1 = baseTime.plus(earliestStartTime, ChronoUnit.SECONDS);
TimeSegment slot = machineCalculator.GetCurrentOrNextShift(machine, startTime1, "", false);
if(slot!=null)
{
earliestStartTime = slot.getStart().isAfter(startTime1)
?(int) ChronoUnit.SECONDS.between(baseTime, slot.getStart())
: earliestStartTime;
}
if((operation.getMaterialRequirements()!=null&&operation.getTargetFinishedOperationId()==null)||calbom) { if((operation.getMaterialRequirements()!=null&&operation.getTargetFinishedOperationId()==null)||calbom) {
int earliestStartTimeold=earliestStartTime; int earliestStartTimeold=earliestStartTime;
if (_globalParam.is_smoothChangeOver()) { if (_globalParam.is_smoothChangeOver()) {
Map<Integer, Object> reslte = calculateSetupTime(machine.getLastGene(), operation, machine, earliestStartTime, processingTimeTotal, _globalParam.is_smoothChangeOverInWeek(), chromosome.getAllOperations()); Map<Integer, Object> reslte = calculateSetupTime(lastGeneOnMachine, operation, machine, earliestStartTime, processingTimeTotal, _globalParam.is_smoothChangeOverInWeek(), chromosome.getAllOperations());
// setupTime = (int) reslte.get(1);//换型时间 // setupTime = (int) reslte.get(1);//换型时间
// int setupStartTime = (int) reslte.get(2);//换型开始时间 // int setupStartTime = (int) reslte.get(2);//换型开始时间
//earliestStartTime=(int)reslte.get(3);//上个任务的结束时间 //earliestStartTime=(int)reslte.get(3);//上个任务的结束时间
earliestStartTime = (int) reslte.get(4);//最早开工时间 earliestStartTime = (int) reslte.get(4);//最早开工时间
} }
LocalDateTime startTime1 = baseTime.plus(earliestStartTime, ChronoUnit.SECONDS);
TimeSegment slot = machineCalculator.GetCurrentOrNextShift(machine, startTime1, "", false);
if(slot!=null)
{
earliestStartTime = slot.getStart().isAfter(startTime1)
?(int) ChronoUnit.SECONDS.between(baseTime, slot.getStart())
: earliestStartTime;
}
bomtime= EditOperationBOMTime(operation,chromosome,earliestStartTime); bomtime= EditOperationBOMTime(operation,chromosome,earliestStartTime);
...@@ -540,11 +543,21 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -540,11 +543,21 @@ if(finishedOrder==null||finishedOrder.size()==0)
} }
machineTasks1 =chromosome.getResult().stream()
.filter(t -> t.getMachineId() == machine.getId())
.sorted(Comparator.comparingInt(GAScheduleResult::getStartTime))
.collect(Collectors.toCollection(CopyOnWriteArrayList::new));
if(machineTasks1!=null&&machineTasks1.size()>0)
{
lastGeneOnMachine=machineTasks1.get(machineTasks1.size()-1);
}
if (_globalParam.is_smoothChangeOver()) { if (_globalParam.is_smoothChangeOver()) {
//是否考虑换型时间 //是否考虑换型时间
Map<Integer,Object> reslte = calculateSetupTime(machine.getLastGene(), operation, machine,earliestStartTime,processingTimeTotal, _globalParam.is_smoothChangeOverInWeek(),chromosome.getAllOperations()); Map<Integer,Object> reslte = calculateSetupTime(lastGeneOnMachine, operation, machine,earliestStartTime,processingTimeTotal, _globalParam.is_smoothChangeOverInWeek(),chromosome.getAllOperations());
setupTime=(int)reslte.get(1);//换型时间 setupTime=(int)reslte.get(1);//换型时间
int setupStartTime=(int)reslte.get(2);//换型开始时间 int setupStartTime=(int)reslte.get(2);//换型开始时间
//earliestStartTime=(int)reslte.get(3);//上个任务的结束时间 //earliestStartTime=(int)reslte.get(3);//上个任务的结束时间
...@@ -828,6 +841,8 @@ return getOperationBOMTime(currentOp, chromosome); ...@@ -828,6 +841,8 @@ return getOperationBOMTime(currentOp, chromosome);
.filter(t -> t.getGroupId() == groupId) .filter(t -> t.getGroupId() == groupId)
.sorted(Comparator.comparing(Entry::getSequence)) .sorted(Comparator.comparing(Entry::getSequence))
.collect(Collectors.toList()); .collect(Collectors.toList());
for (Entry currentOp : orderOps) { for (Entry currentOp : orderOps) {
if(currentOp.isNewCreate()) { if(currentOp.isNewCreate()) {
...@@ -836,13 +851,11 @@ return getOperationBOMTime(currentOp, chromosome); ...@@ -836,13 +851,11 @@ return getOperationBOMTime(currentOp, chromosome);
GAScheduleResult existingResult = chromosome.getResult().stream()
.filter(r-> r.getOperationId() == currentOp.getId())
.findFirst().orElse(null);
Long machineId = existingResult.getMachineId();
Long machineId = currentOp.getSelectMachineID();
MachineOption machineOption= currentOp.getMachineOptions().stream() MachineOption machineOption= currentOp.getMachineOptions().stream()
...@@ -881,8 +894,6 @@ return getOperationBOMTime(currentOp, chromosome); ...@@ -881,8 +894,6 @@ return getOperationBOMTime(currentOp, chromosome);
.findFirst() .findFirst()
.orElse(null); .orElse(null);
AddMachineAvailable(machine,existingResult.getGeneDetails());
chromosome.getResult().remove(existingResult);
int actualEndTime = processWithSingleMachine(currentOp, machine, processTime, prevtime,opMachine, chromosome,true,prevendtime); int actualEndTime = processWithSingleMachine(currentOp, machine, processTime, prevtime,opMachine, chromosome,true,prevendtime);
...@@ -890,6 +901,51 @@ return getOperationBOMTime(currentOp, chromosome); ...@@ -890,6 +901,51 @@ return getOperationBOMTime(currentOp, chromosome);
} }
public void ClearorderOperationResult(Chromosome chromosome, int groupId){
List<Entry> orderOps = chromosome.getAllOperations().stream()
.filter(t -> t.getGroupId() == groupId)
.sorted(Comparator.comparing(Entry::getSequence))
.collect(Collectors.toList());
for (Entry currentOp : orderOps) {
GAScheduleResult existingResult = chromosome.getResult().stream()
.filter(r-> r.getOperationId() == currentOp.getId())
.findFirst().orElse(null);
if(existingResult==null)
{
continue;
}
Long machineId = existingResult.getMachineId();
Machine machine = chromosome.getMachines().stream()
.filter(m -> m.getId() == machineId)
.findFirst()
.orElse(null);
AddMachineAvailable(machine,existingResult.getGeneDetails());
chromosome.getResult().remove(existingResult);
List<OrderMaterialRequirement> MaterialRequirements = currentOp.getMaterialRequirements().stream()
.filter(t->!"MP".equals(t.getMaterialTypeName())
&& t.getProductOrderID() != null && !t.getProductOrderID().isEmpty()
)
.collect(Collectors.toList());
if(MaterialRequirements==null||MaterialRequirements.size()==0)
{
continue;
}
for (OrderMaterialRequirement orderMaterial:MaterialRequirements) {
List<Integer> orderids= orderMaterial.getProductOrderID();
if(orderids!=null&&orderids.size()>0) {
for (Integer orderid : orderids) {
ClearorderOperationResult(chromosome, orderid);
}
}
}
}
}
public void DelOrder(Chromosome chromosome, int groupid,OrderMaterialRequirement orderMaterialRequirement) { public void DelOrder(Chromosome chromosome, int groupid,OrderMaterialRequirement orderMaterialRequirement) {
List<Entry> allOperations = chromosome.getAllOperations(); List<Entry> allOperations = chromosome.getAllOperations();
List<GlobalOperationInfo> globalOpList= chromosome.getGlobalOpList(); List<GlobalOperationInfo> globalOpList= chromosome.getGlobalOpList();
......
...@@ -1296,8 +1296,12 @@ if(headers1==null) ...@@ -1296,8 +1296,12 @@ if(headers1==null)
List<Integer> orderids= orderMaterial.getProductOrderID(); List<Integer> orderids= orderMaterial.getProductOrderID();
if(orderids!=null&&orderids.size()>0) { if(orderids!=null&&orderids.size()>0) {
for (Integer orderid : orderids) { if((allneeded - needed)>0)
coder.EditorderOperation(chromosome, orderid, needed); {
for (Integer orderid : orderids) {
coder.ClearorderOperationResult(chromosome, orderid);
coder.EditorderOperation(chromosome, orderid, needed);
}
} }
}else { }else {
List<MaterialPurchase> materialPurchaseList=material.getMaterialPurchases(); List<MaterialPurchase> materialPurchaseList=material.getMaterialPurchases();
......
...@@ -776,7 +776,7 @@ public class PlanResultService { ...@@ -776,7 +776,7 @@ public class PlanResultService {
kpiCalculator.calculatekpi(); kpiCalculator.calculatekpi();
chromosomes.setScenarioID(SceneId); chromosomes.setScenarioID(SceneId);
chromosomes.setBaseTime(param.getBaseTime()); chromosomes.setBaseTime(param.getBaseTime());
chromosomes.setOperatRel(new CopyOnWriteArrayList<>(entryRel)); // chromosomes.setOperatRel(new CopyOnWriteArrayList<>(entryRel));
// 保存chromosomes到文件 // 保存chromosomes到文件
_sceneService.saveChromosomeToFile(chromosomes, SceneId); _sceneService.saveChromosomeToFile(chromosomes, SceneId);
...@@ -839,6 +839,7 @@ public class PlanResultService { ...@@ -839,6 +839,7 @@ public class PlanResultService {
job.getChangeOverTime(), job.getChangeOverTime(),
ConvertTime(job.getBomTime()), ConvertTime(job.getBomTime()),
TargetFinishedOperationIds TargetFinishedOperationIds
)); ));
// 追加基因详情 // 追加基因详情
......
...@@ -39,7 +39,7 @@ public class PlanResultServiceTest { ...@@ -39,7 +39,7 @@ public class PlanResultServiceTest {
// TestSortService sortService=new TestSortService(); // TestSortService sortService=new TestSortService();
// sortService.test1(); // sortService.test1();
// nsgaiiUtils.Test(); // nsgaiiUtils.Test();
planResultService.execute2("72F484E1E19C4F10A56EABE3A48AD6CD"); planResultService.execute2("921BC266191E4812A105E406BF91E812");
// planResultService.execute2("00E0C5D3E4AD4F36B56C39395906618D"); // planResultService.execute2("00E0C5D3E4AD4F36B56C39395906618D");
// planResultService.execute2("726D4C1A712B4B1393175BD44B775B66"); // planResultService.execute2("726D4C1A712B4B1393175BD44B775B66");
...@@ -49,7 +49,7 @@ public class PlanResultServiceTest { ...@@ -49,7 +49,7 @@ public class PlanResultServiceTest {
// opids.add(7); // opids.add(7);
// planResultService.Move("27065EA0ECD14A81B7FAAFEF52273F93",opids,t,1265l,0); // planResultService.Move("27065EA0ECD14A81B7FAAFEF52273F93",opids,t,1265l,0);
// planResultService.Redecode("27065EA0ECD14A81B7FAAFEF52273F93"); // planResultService.Redecode("27065EA0ECD14A81B7FAAFEF52273F93");
// planResultService.Redecode("00E0C5D3E4AD4F36B56C39395906618D"); // planResultService.Redecode("921BC266191E4812A105E406BF91E812");
// planResultService.Drag("27065EA0ECD14A81B7FAAFEF52273F93",opids,6,false,0l); // planResultService.Drag("27065EA0ECD14A81B7FAAFEF52273F93",opids,6,false,0l);
// MaintenanceWindow maintenanceWindow=new MaintenanceWindow(); // MaintenanceWindow maintenanceWindow=new MaintenanceWindow();
// maintenanceWindow.setStartTime(LocalDateTime.of(2026, 2, 4, 0, 0, 0)); // maintenanceWindow.setStartTime(LocalDateTime.of(2026, 2, 4, 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