123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- package com.rongwei.rwapsserver.aps;
- import cn.hutool.core.date.DateTime;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.util.ObjectUtil;
- import cn.hutool.json.JSONUtil;
- import com.rongwei.rwapsserver.aps.domain.*;
- import com.rongwei.rwapsserver.aps.score.ApsConstraintProvider;
- import lombok.extern.slf4j.Slf4j;
- import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
- import org.optaplanner.core.api.solver.SolutionManager;
- import org.optaplanner.core.api.solver.Solver;
- import org.optaplanner.core.api.solver.SolverFactory;
- import org.optaplanner.core.config.solver.SolverConfig;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.time.Duration;
- import java.time.LocalDateTime;
- import java.time.ZoneId;
- import java.time.temporal.TemporalAdjusters;
- import java.util.*;
- @Slf4j
- public class ApsBalancingApplication {
- public static void main(String[] args) {
- // testAps();
- /*String a = "1";
- String b = "1";
- System.out.println(a == b);*/
- /*ProductionProcesses p1 = new ProductionProcesses();
- ProductionProcesses p2 = new ProductionProcesses();
- p1.setId(1111);
- p2.setId(2222);
- p1.setNextProcesses(p2);
- p2.setPreviousProcesses(p1);
- System.out.println(p2.getPreviousProcesses().getId());*/
- /*Date date1 = DateUtil.parseDateTime("2024-02-22 20:01:23");
- LocalDateTime time2 = LocalDateTime.now();
- long a = DateUtil.between(Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()),date1, DateUnit.DAY);
- System.out.println("a:"+a);*/
- // System.out.println(JSONUtil.toJsonStr(getTestApsSolution()));
- /*Boolean a = null;
- if(a){
- System.out.println("1111");
- }
- System.out.println("2222");*/
- /*Map<String,Integer> map = new HashMap();
- Integer a = 3;
- map.put("1",a);
- ApsBalancingApplication application = new ApsBalancingApplication();
- application.testOne(map);
- System.out.println(map.get("1"));*/
- /*List<Map<String,Integer>> list = new ArrayList<>();
- Map<String,Integer> map = new HashMap();
- map.put("1",1);map.put("2",2);map.put("3",3);*/
- // System.out.println((int)Math.ceil((double) 3/2));
- /*Boolean a = true;
- while (a){
- for (int i=0;i<10;i++){
- if(i > 6){
- a = false;
- break;
- }
- }
- }
- System.out.println("1111111");*/
- /*LocalDateTime now = LocalDateTime.now();
- List<EquipmentRunTime> allRunTimes = new ArrayList<>();
- EquipmentRunTime eq1 = new EquipmentRunTime();
- eq1.setStartRunTime(now.plusMinutes(3));
- EquipmentRunTime eq2 = new EquipmentRunTime();
- eq2.setStartRunTime(now);
- EquipmentRunTime eq3 = new EquipmentRunTime();
- eq3.setStartRunTime(now.plusMinutes(1));
- allRunTimes.add(eq1);allRunTimes.add(eq2);allRunTimes.add(eq3);
- System.out.println(allRunTimes);
- allRunTimes.sort(Comparator.comparing(EquipmentRunTime::getStartRunTime));
- System.out.println(allRunTimes);*/
- // System.out.println(1280/100);
- /*ProductionProcesses a = new ProductionProcesses();
- a.setProduceTime(20);
- a.setStartTime(LocalDateTime.now());
- LocalDateTime endTime = a.getStartTime();
- System.out.println(a.getStartTime());
- endTime = endTime.plusMinutes(10);
- System.out.println(a.getStartTime());*/
- /*Date deliverydate = DateUtil.parseDateTime("2024-06-24 08:00:00");
- Integer deliverytime = 33;
- DateTime dateTime = DateUtil.offsetHour(deliverydate, -deliverytime);
- System.out.println(dateTime);*/
- /*Map<String,List<Integer>> equipmentPlanActualTime = new HashMap<>();
- List<Integer> planActualTimeList = new ArrayList<>();
- planActualTimeList.add(1);planActualTimeList.add(2);
- equipmentPlanActualTime.put("a",planActualTimeList);
- System.out.println(equipmentPlanActualTime);
- List<Integer> planActualTimeList1 = equipmentPlanActualTime.get("a");
- System.out.println(planActualTimeList1);
- planActualTimeList1.set(0,2);
- System.out.println(planActualTimeList1);
- System.out.println(equipmentPlanActualTime);*/
- /*ProductionProcesses a = new ProductionProcesses();
- a.setId("11111");
- System.out.println(ObjectUtil.cloneByStream(a).getId());*/
- /*String[] split = "1050^_^10500态热轧卷冷轧 厚6*宽1600mm 1吨^_^1600.00^_^6.0000^_^6.0000".split("\\^_\\^");
- BigDecimal i1 = new BigDecimal("1600");
- int cores = Runtime.getRuntime().availableProcessors();
- System.out.println(cores);*/
- /*BigDecimal thickness = new BigDecimal("1.2");
- System.out.println(thickness.setScale(0, RoundingMode.CEILING).intValue());
- Integer a = 1;Integer b = 1;
- System.out.println(a+b);*/
- /*LocalDateTime now = LocalDateTime.now();
- LocalDateTime nearestTenMinutes = now.minusSeconds(now.getSecond()) // 减去当前秒数
- .minusNanos(now.getNano()) // 减去当前纳秒数
- .plusMinutes(-now.getMinute() % 10) // 减去当前分钟数的余数,向下调整到最近的10的倍数
- .plusMinutes(10); // 加上调整后的分钟数的余数
- System.out.println(nearestTenMinutes);*/
- /*List<String> a = new ArrayList<>();
- a.add("1");
- List<String> b = a;
- b.add("2");
- System.out.println(a);*/
- /*BigDecimal a = new BigDecimal("516.78");
- System.out.println(a.intValue());*/
- System.out.println( 5 % 3);
- System.out.println( 5 / 3);
- System.out.println( 5 * 3);
- }
- public static void constraintTest(){
- // 构建约束校验器,入参:约束供应者实例,规划方案类,规划实体类
- /*ConstraintVerifier<ApsConstraintProvider, TimeTable> constraintVerifier = ConstraintVerifier.build(
- new ApsConstraintProvider(), TimeTable.class, Lesson.class);*/
- }
- public static void consTest(){
- /*ConstraintVerifier<ApsConstraintProvider, ApsSolution> constraintVerifier = ConstraintVerifier.build(
- new ApsConstraintProvider(), ApsSolution.class, ProductionProcesses.class);*/
- }
- public static void testAps(){
- log.info("app start...");
- Date startDate = DateUtil.parseDateTime("2024-03-06 17:00:12");
- LocalDateTime startTime = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
- // ApsConstraintProvider.startTimeLong = startDate.getTime();
- // ApsSolution.startTime = startTime;
- SolverFactory<ApsSolution> solverFactory = SolverFactory.create(new SolverConfig()
- .withSolutionClass(ApsSolution.class)
- .withEntityClasses(ProductionProcesses.class)
- .withConstraintProviderClass(ApsConstraintProvider.class)
- .withTerminationSpentLimit(Duration.ofSeconds(20)));
- Solver<ApsSolution> solver = solverFactory.buildSolver();
- // System.out.println("\nProcesses:\n" + unsolvedCloudBalance.toStringProcessList());
- // Display the computer list
- // System.out.println("\nComputers:\n" + unsolvedCloudBalance.toStringComputerList());
- ApsSolution apsSolution = getTestApsSolution();
- log.info("start to solve...");
- ApsSolution solvedBalance = solver.solve(getTestApsSolution());
- System.out.println("*****************************");
- System.out.println(solvedBalance);
- SolutionManager<ApsSolution, HardSoftScore> scoreManager = SolutionManager.create(solverFactory);
- System.out.println(scoreManager.explain(solvedBalance));
- System.out.println("*****************************");
- System.out.println(solvedBalance);
- // Display the result
- // System.out.println("\nSolved cloudBalance with 3 computers and 12 processes:\n" + toDisplayString(solvedCloudBalance));
- }
- public static ApsSolution getTestApsSolution(){
- ApsSolution unsolvedCloudBalance = new ApsSolution();
- // 设备列表初始化
- List<Equipment> equipmentList = new ArrayList<>();
- Equipment eq1 = new Equipment("1","均热炉");
- Equipment eq2 = new Equipment("2","均热炉");
- Equipment eq3 = new Equipment("3","卧式分切机");
- Equipment eq4 = new Equipment("4","卧式分切机");
- Equipment eq5 = new Equipment("5","卧式分切机");
- Equipment eq6 = new Equipment("6","厚纵剪");
- Equipment eq7 = new Equipment("7","厚纵剪");
- Equipment eq8 = new Equipment("8","氮气保护退火炉");
- equipmentList.add(eq1);
- equipmentList.add(eq2);
- equipmentList.add(eq3);
- equipmentList.add(eq4);
- equipmentList.add(eq5);
- equipmentList.add(eq6);
- equipmentList.add(eq7);
- equipmentList.add(eq8);
- unsolvedCloudBalance.setEquipmentList(equipmentList);
- // 工步初始化
- List<ProductionProcesses> processes = new ArrayList<>();
- // 订单初始化
- ProduceOrder produceOrder1 = new ProduceOrder("order1","订单1", DateUtil.parseDateTime("2024-03-06 19:20:12"));
- ProduceOrder produceOrder2 = new ProduceOrder("order2","订单2", DateUtil.parseDateTime("2024-03-06 19:20:12"));
- ProductionProcesses p1 = new ProductionProcesses("1","均热炉",Arrays.asList(new ProduceOrder[]{produceOrder1}),10);
- p1.setOptionalEquipments(Arrays.asList(new String[]{"1","2"}));
- ProductionProcesses p2 = new ProductionProcesses("2","卧式分切机",Arrays.asList(new ProduceOrder[]{produceOrder1}),12);
- p2.setOptionalEquipments(Arrays.asList(new String[]{"3","4","5"}));
- ProductionProcesses p6 = new ProductionProcesses("6","氮气保护退火炉",Arrays.asList(new ProduceOrder[]{produceOrder1,produceOrder2}),72);
- p6.setOptionalEquipments(Arrays.asList(new String[]{"8"}));
- p6.setMergeProcessMark("tuihuolu");
- // p1.setNextProcessesIds(Arrays.asList(new String[]{p2.getId()}));p2.setPreviousProcessesIds(Arrays.asList(new String[]{p1.getId()}));
- // p2.setNextProcessesIds(Arrays.asList(new String[]{p6.getId()}));
- p1.setNextProcesses(Arrays.asList(new ProductionProcesses[]{p2}));p2.setPreviousProcesses(Arrays.asList(new ProductionProcesses[]{p1}));
- p2.setNextProcesses(Arrays.asList(new ProductionProcesses[]{p6}));
- processes.add(p1);processes.add(p2);
- ProductionProcesses p3 = new ProductionProcesses("3","均热炉",Arrays.asList(new ProduceOrder[]{produceOrder2}),10);
- p3.setOptionalEquipments(Arrays.asList(new String[]{"1","2"}));
- ProductionProcesses p4 = new ProductionProcesses("4","卧式分切机",Arrays.asList(new ProduceOrder[]{produceOrder2}),12);
- p4.setOptionalEquipments(Arrays.asList(new String[]{"3","4","5"}));
- ProductionProcesses p5 = new ProductionProcesses("5","厚纵剪",Arrays.asList(new ProduceOrder[]{produceOrder2}),23);
- p5.setOptionalEquipments(Arrays.asList(new String[]{"6","7"}));
- // p3.setNextProcessesIds(Arrays.asList(new String[]{p4.getId()}));p4.setPreviousProcessesIds(Arrays.asList(new String[]{p3.getId()}));
- // p4.setNextProcessesIds(Arrays.asList(new String[]{p5.getId()}));p5.setPreviousProcessesIds(Arrays.asList(new String[]{p4.getId()}));
- // p5.setNextProcessesIds(Arrays.asList(new String[]{p6.getId()}));p6.setPreviousProcessesIds(Arrays.asList(new String[]{p2.getId(),p5.getId()}));
- p3.setNextProcesses(Arrays.asList(new ProductionProcesses[]{p4}));p4.setPreviousProcesses(Arrays.asList(new ProductionProcesses[]{p3}));
- p4.setNextProcesses(Arrays.asList(new ProductionProcesses[]{p5}));p5.setPreviousProcesses(Arrays.asList(new ProductionProcesses[]{p4}));
- p5.setNextProcesses(Arrays.asList(new ProductionProcesses[]{p6}));p6.setPreviousProcesses(Arrays.asList(new ProductionProcesses[]{p2,p5}));
- processes.add(p3);processes.add(p4);processes.add(p5);processes.add(p6);
- unsolvedCloudBalance.setProcessesList(processes);
- return unsolvedCloudBalance;
- }
- private void testOne(Map<String,Integer> map){
- map.put("1",map.get("1")+2);
- }
- }
|