Commit e6d1ee93 authored by DESKTOP-VKRD9QF\Administration's avatar DESKTOP-VKRD9QF\Administration
parents 0b51cb1f c5fa84a8
...@@ -101,7 +101,9 @@ public class Chromosome { ...@@ -101,7 +101,9 @@ public class Chromosome {
private ObjectiveWeights objectiveWeights; private ObjectiveWeights objectiveWeights;
List<Material> materials; private List<Material> materials;
private List<String> materialIds;
/* /*
* 最早完工时间(最小化) 最小化总加工时间 最小总换型时间 * 最早完工时间(最小化) 最小化总加工时间 最小总换型时间
*/ */
......
...@@ -29,6 +29,9 @@ public class GeneticAlgorithm { ...@@ -29,6 +29,9 @@ public class GeneticAlgorithm {
private final MachineSchedulerService machineScheduler; private final MachineSchedulerService machineScheduler;
private final List<Order> orders; private final List<Order> orders;
private final List<Material> materials; private final List<Material> materials;
private final List<String> materialIds;
private static GlobalParam _GlobalParam; private static GlobalParam _GlobalParam;
private List<GroupResult> _entryRel; private List<GroupResult> _entryRel;
...@@ -49,7 +52,7 @@ public class GeneticAlgorithm { ...@@ -49,7 +52,7 @@ public class GeneticAlgorithm {
private String sceneId; private String sceneId;
public GeneticAlgorithm(GlobalParam globalParam,List<Machine> machines, List<Order> orders, public GeneticAlgorithm(GlobalParam globalParam,List<Machine> machines, List<Order> orders,
List<Material> materials, MachineSchedulerService machineScheduler,List<GroupResult> entryRel,MaterialRequirementService _materialRequirementService,SceneService sceneService,String _sceneId) { List<Material> materials,List<String> _materialIds, MachineSchedulerService machineScheduler,List<GroupResult> entryRel,MaterialRequirementService _materialRequirementService,SceneService sceneService,String _sceneId) {
this.machines = machines; this.machines = machines;
this.orders = orders; this.orders = orders;
this.materials = materials; this.materials = materials;
...@@ -59,6 +62,7 @@ public class GeneticAlgorithm { ...@@ -59,6 +62,7 @@ public class GeneticAlgorithm {
materialRequirementService=_materialRequirementService; materialRequirementService=_materialRequirementService;
_sceneService=sceneService; _sceneService=sceneService;
sceneId=_sceneId; sceneId=_sceneId;
materialIds=_materialIds;
} }
public void Init(double[] customWeights, boolean pureNSGAIIMode) { public void Init(double[] customWeights, boolean pureNSGAIIMode) {
...@@ -127,7 +131,9 @@ public class GeneticAlgorithm { ...@@ -127,7 +131,9 @@ public class GeneticAlgorithm {
if(population.size()<param.getTournamentSize()) if(population.size()<param.getTournamentSize())
{ {
best.setBaseTime(param.getBaseTime()); best.setBaseTime(param.getBaseTime());
best.setOrderMaterials(orderMaterials); // best.setOrderMaterials(orderMaterials);
best.setMaterialIds(materialIds);
best.setMaterials(null);
// best.setOperatRel(_entryRel); // best.setOperatRel(_entryRel);
if(best.getInitMachines()==null) if(best.getInitMachines()==null)
...@@ -267,7 +273,8 @@ public class GeneticAlgorithm { ...@@ -267,7 +273,8 @@ public class GeneticAlgorithm {
FileHelper.writeLogFile("迭代进化-----------结束-------"); FileHelper.writeLogFile("迭代进化-----------结束-------");
best.setBaseTime(param.getBaseTime()); best.setBaseTime(param.getBaseTime());
best.setOrderMaterials(orderMaterials); best.setMaterialIds(materialIds);
best.setMaterials(null);
// best.setOperatRel(_entryRel); // best.setOperatRel(_entryRel);
if(best.getInitMachines()==null) if(best.getInitMachines()==null)
......
...@@ -499,6 +499,22 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -499,6 +499,22 @@ 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()) {
...@@ -518,6 +534,10 @@ if(finishedOrder==null||finishedOrder.size()==0) ...@@ -518,6 +534,10 @@ if(finishedOrder==null||finishedOrder.size()==0)
earliestStartTime=bomtime; earliestStartTime=bomtime;
} }
} }
if(machine.getId()==2063)
{
int i=0;
}
......
...@@ -519,6 +519,13 @@ public class MachineCalculator { ...@@ -519,6 +519,13 @@ public class MachineCalculator {
// 计算有效时间 // 计算有效时间
CopyOnWriteArrayList<TimeSegment> timeSegments2= new CopyOnWriteArrayList<>(timeSegments.subList(1,timeSegments.size()-1)); CopyOnWriteArrayList<TimeSegment> timeSegments2= new CopyOnWriteArrayList<>(timeSegments.subList(1,timeSegments.size()-1));
if(timeSegments2==null||timeSegments2.size()==0)
{
int i=0;
}
LocalDateTime effectiveStart=timeSegments2.get(0).getStart(); LocalDateTime effectiveStart=timeSegments2.get(0).getStart();
LocalDateTime effectiveend=timeSegments2.get(timeSegments2.size()-1).getEnd(); LocalDateTime effectiveend=timeSegments2.get(timeSegments2.size()-1).getEnd();
...@@ -1032,7 +1039,7 @@ public class MachineCalculator { ...@@ -1032,7 +1039,7 @@ public class MachineCalculator {
/** /**
* 获取设备当前或下一个有效班次 * 获取设备当前或下一个有效班次
*/ */
private TimeSegment GetCurrentOrNextShift(Machine machine, LocalDateTime time, String prevtime, boolean checkprevtime) { public TimeSegment GetCurrentOrNextShift(Machine machine, LocalDateTime time, String prevtime, boolean checkprevtime) {
TimeSegment start = null; TimeSegment start = null;
if (!machine.getAvailability().isEmpty()) if (!machine.getAvailability().isEmpty())
......
...@@ -832,7 +832,7 @@ if(headers1==null) ...@@ -832,7 +832,7 @@ if(headers1==null)
if (MaterialRequirements != null&&MaterialRequirements.size()>0) { if (MaterialRequirements != null&&MaterialRequirements.size()>0) {
for (OrderMaterialRequirement orderMaterial : MaterialRequirements) { for (OrderMaterialRequirement orderMaterial : MaterialRequirements) {
double allneeded = parentQuantity * orderMaterial.getRequiredQuantity(); double allneeded = orderMaterial.getRequiredQuantity();
double needed = allneeded; double needed = allneeded;
...@@ -1277,7 +1277,7 @@ if(headers1==null) ...@@ -1277,7 +1277,7 @@ if(headers1==null)
Long CkeckLeadTime= material.getCkeckLeadTime(); Long CkeckLeadTime= material.getCkeckLeadTime();
List<MaterialSupply> sortedInTransit = material.getInTransit().stream() List<MaterialSupply> sortedInTransit = material.getInTransit().stream()
.filter(t -> t.getQuantity() > 0&&t.getArrivalTime().compareTo(earliestStartTime)<=0 ) .filter(t -> t.getQuantity() > 0&&t.getArrivalTime().compareTo(earliestStartTime)<=0 )
.sorted(Comparator.comparing(MaterialSupply::getArrivalTime)) .sorted(Comparator.comparing(MaterialSupply::getArrivalTime).reversed())
.collect(Collectors.toList()); .collect(Collectors.toList());
for (MaterialSupply supply : sortedInTransit) { for (MaterialSupply supply : sortedInTransit) {
...@@ -1418,7 +1418,7 @@ if(headers1==null) ...@@ -1418,7 +1418,7 @@ if(headers1==null)
return RoutingDiscreteParams; return RoutingDiscreteParams;
} }
private List<Material> GetMaterials(String sceneId) { public List<Material> GetMaterials(String sceneId) {
List<Material> materials=(List<Material>)GlobalCacheUtil.get(sceneId+materialsCacheKey); List<Material> materials=(List<Material>)GlobalCacheUtil.get(sceneId+materialsCacheKey);
if(materials==null) if(materials==null)
{ {
......
...@@ -23,6 +23,13 @@ import java.util.stream.IntStream; ...@@ -23,6 +23,13 @@ import java.util.stream.IntStream;
*/ */
public class ScheduleOperationService { public class ScheduleOperationService {
private MaterialRequirementService materialRequirementService;
public ScheduleOperationService(MaterialRequirementService _materialRequirementService) {
materialRequirementService=_materialRequirementService;
}
/** /**
* 移动工序方法 * 移动工序方法
* @param chromosome 染色体对象 * @param chromosome 染色体对象
...@@ -1214,7 +1221,7 @@ if(targetOp.getSequence()>1) { ...@@ -1214,7 +1221,7 @@ if(targetOp.getSequence()>1) {
chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(chromosome.getInitMachines(),Machine.class) ); chromosome.setMachines(ProductionDeepCopyUtil.deepCopyList(chromosome.getInitMachines(),Machine.class) );
GeneticDecoder decoder = new GeneticDecoder(globalParam,baseTime, chromosome.getMachines(), GeneticDecoder decoder = new GeneticDecoder(globalParam,baseTime, chromosome.getMachines(),
chromosome.getOrders(), null, machineScheduler,null,chromosome.getScenarioID()); chromosome.getOrders(), null, machineScheduler,materialRequirementService,chromosome.getScenarioID());
chromosome.setResultOld(ProductionDeepCopyUtil.deepCopyList(chromosome.getResult(),GAScheduleResult.class)); chromosome.setResultOld(ProductionDeepCopyUtil.deepCopyList(chromosome.getResult(),GAScheduleResult.class));
chromosome.getResult().clear(); chromosome.getResult().clear();
......
...@@ -39,7 +39,9 @@ public class PlanResultServiceTest { ...@@ -39,7 +39,9 @@ public class PlanResultServiceTest {
// TestSortService sortService=new TestSortService(); // TestSortService sortService=new TestSortService();
// sortService.test1(); // sortService.test1();
// nsgaiiUtils.Test(); // nsgaiiUtils.Test();
planResultService.execute2("18E5F8BE09B14EAE822651BFEF100900"); // planResultService.execute2("1BC8FFD1A7D54AE7AA75D2CBC7C08080");
// planResultService.execute2("00E0C5D3E4AD4F36B56C39395906618D");
// planResultService.execute2("726D4C1A712B4B1393175BD44B775B66"); // planResultService.execute2("726D4C1A712B4B1393175BD44B775B66");
// planResultService.execute2("265F24B6DF3C40E4B17D193B0CC8AAF2"); // planResultService.execute2("265F24B6DF3C40E4B17D193B0CC8AAF2");
// LocalDateTime t= LocalDateTime.of(2026, 02, 14, 1, 25, 52); // LocalDateTime t= LocalDateTime.of(2026, 02, 14, 1, 25, 52);
...@@ -47,7 +49,7 @@ public class PlanResultServiceTest { ...@@ -47,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("CA71321FE55B4437A3900315692F9220"); planResultService.Redecode("00E0C5D3E4AD4F36B56C39395906618D");
// 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(2025, 10, 21, 0, 0, 0)); // maintenanceWindow.setStartTime(LocalDateTime.of(2025, 10, 21, 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