Commit bb843694 authored by Tong Li's avatar Tong Li

遗传算法-优化

parent a17d29cb
......@@ -216,6 +216,19 @@ public class ResourceGanttController {
return R.ok(result);
}
@PostMapping("/orderdel")
@Operation(summary = "删除订单", description = "删除订单")
public R<Chromosome> delOrder(@RequestBody Map<String, Object> params) {
log.info("delOperation 请求参数: {}", params);
String sceneId = ParamValidator.getString(params, "sceneId", "场景ID");
String orderid = ParamValidator.getString(params, "orderId", "订单ID");
ParamValidator.validateSceneExists(sceneService, sceneId);
Chromosome result = planResultService.DelOrder(sceneId, orderid);
return R.ok(result);
}
@PostMapping("/operationlocked")
@Operation(summary = "工单锁定", description = "订工单锁定")
public R<Chromosome> lockedOperation(@RequestBody Map<String, Object> params) {
......
......@@ -19,13 +19,13 @@ import java.util.stream.Collectors;
* 时间:2025-12-10
*/
public class KpiCalculator {
private Chromosome chromosome;
private Chromosome chromosome;
private LocalDateTime baseTime;
public KpiCalculator(Chromosome _chromosome)
{
chromosome=_chromosome;
baseTime=_chromosome.getBaseTime();
}
public KpiCalculator(Chromosome _chromosome)
{
chromosome=_chromosome;
baseTime=_chromosome.getBaseTime();
}
public void calculatekpi() {
calculateMachine();
calculateOrder();
......@@ -45,7 +45,7 @@ public class KpiCalculator {
double machineActualWorkTime = chromosome.getMachines().stream()
.mapToDouble(Machine::getActualWorkTime)
.sum();
double machineallWorkTime= calculateAllTimeSegmentsTotalDuration();
double machineallWorkTime= calculateAllTimeSegmentsTotalDuration();
chromosome.setMachineWaitTime((machineallWorkTime-machineActualWorkTime)/60/60);
// 订单按时完成的数量
......@@ -128,15 +128,16 @@ public class KpiCalculator {
private void calculateMachine() {
// 按设备ID分组工序列表(对应C# GroupBy + ToList)
Map<Long, List<GAScheduleResult>> machineTasks = chromosome.getResult().stream()
List<GAScheduleResult> list= chromosome.getResult();
Map<Long, List<GAScheduleResult>> machineTasks = list.stream()
.collect(Collectors.groupingBy(GAScheduleResult::getMachineId));
// 计划工作时间:最后一个任务结束时间 - 第一个任务开始时间
int firstTaskStart = chromosome.getResult().stream()
int firstTaskStart = list.stream()
.mapToInt(GAScheduleResult::getStartTime)
.max()
.orElse(0);
int lastTaskEnd = chromosome.getResult().stream()
int lastTaskEnd = list.stream()
.mapToInt(GAScheduleResult::getEndTime)
.max()
.orElse(0);
......@@ -187,9 +188,9 @@ public class KpiCalculator {
* @return 订单ID与延迟时间(小时)的Map
*/
private void calculateOrder() {
List<GAScheduleResult> list= chromosome.getResult();
// 按GroupId(订单ID)分组 - 对应C#的GroupBy
Map<String, List<GAScheduleResult>> orderGroups = chromosome.getResult().stream()
Map<String, List<GAScheduleResult>> orderGroups = list.stream()
.collect(Collectors.groupingBy(GAScheduleResult::getOrderId));
for (Map.Entry<String, List<GAScheduleResult>> entry : orderGroups.entrySet()) {
......@@ -214,7 +215,7 @@ public class KpiCalculator {
.mapToDouble(GAScheduleResult::getProcessingTime)
.sum();
Order order= chromosome.getOrders().stream()
Order order= chromosome.getOrders().stream()
.filter(t->t.getOrderId()==orderId)
.findFirst()
.orElse(null);
......
......@@ -628,9 +628,58 @@ public class ScheduleOperationService {
}
public void DelOrder(Chromosome chromosome, int orderId, GlobalParam globalParam) {
public void DelOrder(Chromosome chromosome, String orderId, GlobalParam globalParam) {
List<Entry> allOperations = chromosome.getAllOperations();
List<GlobalOperationInfo> globalOpList= chromosome.getGlobalOpList();
List<Order> orders = chromosome.getOrders();
List<Integer> OperationSequencing= chromosome.getOperationSequencing();
List<GAScheduleResult> ScheduleResults = chromosome.getResult();
Order sourceorder=orders.stream()
.filter(o -> o.getOrderId().equals(orderId) )
.findFirst()
.orElseThrow(() -> new NoSuchElementException("Order not found: " + orderId));
List<Entry> sourceOps = allOperations.stream()
.filter(o -> o.getOrderId().equals(orderId) )
.sorted(Comparator.comparing(Entry::getSequence))
.collect(Collectors.toList());
int GroupId=0;
for (Entry entry : sourceOps) {
GroupId= entry.GroupId;
OptionalInt index = IntStream.range(0, allOperations.size())
.filter(h -> entry.getId()==allOperations.get(h).getId())
.findFirst();
allOperations.remove(index.orElse(0));
OptionalInt index1 = IntStream.range(0, globalOpList.size())
.filter(h -> entry.getId()==globalOpList.get(h).getOp().getId())
.findFirst();
globalOpList.remove(index1.orElse(0));
chromosome.getMachineSelection().remove(index1.orElse(0));
OptionalInt OperationIndex = IntStream.range(0, OperationSequencing.size())
.filter(i -> OperationSequencing.get(i).equals(entry.GroupId)) // 过滤出值为1的索引
.findFirst();
int targetOpIndex= OperationIndex.getAsInt();
OperationSequencing.remove(targetOpIndex);
OptionalInt OperationIndex1 = IntStream.range(0, ScheduleResults.size())
.filter(i -> ScheduleResults.get(i).getOperationId()==entry.getId()) // 过滤出值为1的索引
.findFirst();
//锁定需要删除
ScheduleResults.remove(OperationIndex1.getAsInt());
}
int i=0;
for (GlobalOperationInfo globalOp : globalOpList) {
globalOp.setGlobalOpId(i);
i++;
}
// chromosome.getOperatRel().remove(GroupId-1);
orders.remove(sourceorder);
redecode(chromosome, chromosome.getBaseTime(), globalParam);
}
......
......@@ -414,9 +414,9 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
// WriteScheduleSummary(chromosome);
ScheduleOperationService ScheduleOperation=new ScheduleOperationService();
WriteScheduleSummary(chromosome);
ScheduleOperation.moveOperation(chromosome,opId, (int)ChronoUnit.SECONDS.between(chromosome.getBaseTime(), newStartTime),newMachineId, globalParam);
// WriteScheduleSummary(chromosome);
WriteScheduleSummary(chromosome);
_sceneService.saveChromosomeToFile(chromosome, SceneId);
return chromosome;
......@@ -456,6 +456,26 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
return chromosome;
}
public Chromosome DelOrder(String SceneId,String orderId) {
GlobalParam globalParam=new GlobalParam();
Chromosome chromosome= _sceneService.loadChromosomeFromFile(SceneId);
//this.baseTime=param.getBaseTime();
// WriteScheduleSummary(chromosome);
ScheduleOperationService ScheduleOperation=new ScheduleOperationService();
ScheduleOperation.DelOrder(chromosome,orderId, globalParam);
// WriteScheduleSummary(chromosome);
_sceneService.saveChromosomeToFile(chromosome, SceneId);
return chromosome;
}
public Chromosome LockOperation(String SceneId,int opId,boolean isLocked) {
......
......@@ -10,6 +10,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
......@@ -24,7 +25,10 @@ public class PlanResultServiceTest {
@Test
public void testExecute() {
planResultService.execute2("");
LocalDateTime t= LocalDateTime.of(2025, 10, 31, 6, 51, 11);
planResultService.Move("86ED02C9BAB54BB6B8F413938A3F2869",1,t,3402L);
}
@Test
......
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