Advertisement
Artashes

Untitled

Mar 31st, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.32 KB | None | 0 0
  1. public static void main(String[] args) throws Exception {
  2.  
  3.         for (int i = 0; i < z; i++) {
  4.             requirementSources.add(new RequirementSource(i, sourceLambda));
  5.         }
  6.  
  7.         for (int i = 0; i < k; i++) {
  8.             devices.add(new Device(i, serviceLambda));
  9.         }
  10.  
  11.         QueueService queueService = new QueueService(b);
  12.  
  13.         double tmp = 0.0;
  14.  
  15.         while (queueService.getExecutedCount() < n) {
  16.             Optional<RequirementSource> source = requirementSources.stream()
  17.                                                                    .filter(RequirementSource::isAbleToGenerateRequirement)
  18.                                                                    .min(Comparator.comparing(RequirementSource::getNextRequirementTime));
  19.  
  20.             Optional<Device> device = devices.stream()
  21.                                              .filter(Device::isAbleToExecuteRequirement)
  22.                                              .min(Comparator.comparing(Device::getNextExecuteTime));
  23.  
  24.  
  25.             double reqInSystem = (queueService.queueSize() + devices.stream().filter(Device::isAbleToExecuteRequirement).count());
  26.             if (source.isPresent() && device.isPresent()) {
  27.                 if (source.get().getNextRequirementTime() < device.get().getNextExecuteTime()) {
  28.                     tmp += reqInSystem * (source.get().getNextRequirementTime() - currentTime);
  29.                     currentTime = source.get().getNextRequirementTime();
  30.                     source.get().createRequirement(queueService);
  31.                 } else {
  32.                     tmp += reqInSystem * (device.get().getNextExecuteTime() - currentTime);
  33.                     currentTime = device.get().getNextExecuteTime();
  34.                     device.get().executeRequirement(queueService);
  35.                 }
  36.             } else if (source.isPresent()) {
  37.                 tmp += reqInSystem * (source.get().getNextRequirementTime() - currentTime);
  38.                 currentTime = source.get().getNextRequirementTime();
  39.                 source.get().createRequirement(queueService);
  40.             } else if (device.isPresent()) {
  41.                 tmp += reqInSystem * (device.get().getNextExecuteTime() - currentTime);
  42.                 currentTime = device.get().getNextExecuteTime();
  43.                 device.get().executeRequirement(queueService);
  44.             }
  45.  
  46.             List<Device> availableDevices = devices.stream()
  47.                                                    .filter(Device::isAbleToGetRequirement)
  48.                                                    .collect(Collectors.toList());
  49.  
  50.             while (queueService.notEmpty() && availableDevices.size() > 0) {
  51.                 queueService.sendRequirement(availableDevices.get(0), currentTime);
  52.                 availableDevices = devices.stream()
  53.                                           .filter(Device::isAbleToGetRequirement)
  54.                                           .collect(Collectors.toList());
  55.             }
  56.         }
  57.  
  58.         double u = queueService.getExecutedRequirements().stream()
  59.                                .map(x -> x.getTimeEndService() - x.getTimeExitSource())
  60.                                .mapToDouble(a -> a)
  61.                                .sum();
  62.  
  63.  
  64.         System.out.println("U: " + u / n);
  65.         System.out.println("N: " + tmp / currentTime);
  66.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement