code: @Override
      public HardSoftScore calculateScore(CloudBalance cloudBalance) {
          int hardScore = 0;
          int softScore = 0;
          for (CloudComputer computer : cloudBalance.getComputerList()) {
              int cpuPowerUsage = 0;
              int memoryUsage = 0;
              int networkBandwidthUsage = 0;
              boolean used = false;
  
              // Calculate usage
              for (CloudProcess process : cloudBalance.getProcessList()) {
                  if (computer.equals(process.getComputer())) {
                      cpuPowerUsage += process.getRequiredCpuPower();
                      memoryUsage += process.getRequiredMemory();
                      networkBandwidthUsage += process.getRequiredNetworkBandwidth();
                      used = true;
                  }
              }
  
              // Hard constraints
              int cpuPowerAvailable = computer.getCpuPower() - cpuPowerUsage;
              if (cpuPowerAvailable < 0) {
                  hardScore += cpuPowerAvailable;
              }
              int memoryAvailable = computer.getMemory() - memoryUsage;
              if (memoryAvailable < 0) {
                  hardScore += memoryAvailable;
              }
              int networkBandwidthAvailable = computer.getNetworkBandwidth() - networkBandwidthUsage;
              if (networkBandwidthAvailable < 0) {
                  hardScore += networkBandwidthAvailable;
              }
  
              // Soft constraints
              if (used) {
                  softScore -= computer.getCost();
              }
          }
          return HardSoftScore.of(hardScore, softScore);
      }
docs: A very simple implementation. The double loop can easily be removed by using Maps as shown in
  {@link CloudBalancingMapBasedEasyScoreCalculator#calculateScore(CloudBalance)}.