Exemple #1
0
    def testNearZeroObjectivesAndDirectionCoordinates(self):
        multi_objectives = tf.constant([[3, 0, 0]], dtype=tf.float32)

        # direction with small non-zero coordinates.
        nonzero = 2 * multi_objective_scalarizer.HyperVolumeScalarizer.ALMOST_ZERO
        direction = [1, nonzero, nonzero]
        scalarizer = multi_objective_scalarizer.HyperVolumeScalarizer(
            direction, self._hv_params)
        self.assertAllClose(self.evaluate(scalarizer(multi_objectives)),
                            self.evaluate(tf.constant([0], dtype=tf.float32)))

        # direction with coordinates that are so small in magnitude that would be
        # considered zeros.
        direction = [1, 1e-30, 1e-30]
        scalarizer = multi_objective_scalarizer.HyperVolumeScalarizer(
            direction, self._hv_params)
        self.assertAllClose(self.evaluate(scalarizer(multi_objectives)),
                            self.evaluate(tf.constant([3], dtype=tf.float32)))

        # direction with absolute zero coordinates.
        direction = [1, 0, 0]
        scalarizer = multi_objective_scalarizer.HyperVolumeScalarizer(
            direction, self._hv_params)
        self.assertAllClose(self.evaluate(scalarizer(multi_objectives)),
                            self.evaluate(tf.constant([3], dtype=tf.float32)))
Exemple #2
0
 def testInvalidObjectives(self):
     with self.assertRaisesRegex(
             ValueError, 'The number of input objectives should be'):
         direction = [1, 0, 0]
         scalarizer = multi_objective_scalarizer.HyperVolumeScalarizer(
             direction, self._hv_params)
         multi_objectives = tf.constant([[1, 2, 3, 4]], dtype=tf.float32)
         scalarizer(multi_objectives)
Exemple #3
0
 def testNegativeObjectives(self):
     direction = [1, 0, 0]
     scalarizer = multi_objective_scalarizer.HyperVolumeScalarizer(
         direction, self._hv_params)
     multi_objectives = tf.constant([[-3, 2, 1], [-6, 5, 4]],
                                    dtype=tf.float32)
     self.assertAllEqual(
         self.evaluate(scalarizer(multi_objectives)),
         self.evaluate(tf.constant([0, 0], dtype=tf.float32)))
Exemple #4
0
 def testDirectionNormalization(self):
     multi_objectives = tf.constant([[3, 2, 1], [6, 5, 4]],
                                    dtype=tf.float32)
     for direction in [[1, 2, 2], [0.1, 0.2, 0.2]]:
         scalarizer = multi_objective_scalarizer.HyperVolumeScalarizer(
             direction, self._hv_params)
         self.assertAllClose(
             self.evaluate(scalarizer(multi_objectives)),
             self.evaluate(tf.constant([1.5, 6], dtype=tf.float32)))
Exemple #5
0
 def testAxisAlignedDirection(self):
     direction = [0, 1, 0]
     scalarizer = multi_objective_scalarizer.HyperVolumeScalarizer(
         direction, self._hv_params)
     multi_objectives = tf.constant([[3, 2, 1], [6, 5, 4]],
                                    dtype=tf.float32)
     self.assertAllEqual(
         self.evaluate(scalarizer(multi_objectives)),
         self.evaluate(tf.constant([2, 5], dtype=tf.float32)))
Exemple #6
0
 def testObjectiveTranformation(self):
     hv_params = copy.deepcopy(self._hv_params)
     hv_params[0] = multi_objective_scalarizer.HyperVolumeScalarizer.PARAMS(
         slope=-1, offset=2)
     direction = [1, 0, 0]
     scalarizer = multi_objective_scalarizer.HyperVolumeScalarizer(
         direction, hv_params)
     multi_objectives = tf.constant([[-3, 2, 1], [-6, 5, 4]],
                                    dtype=tf.float32)
     self.assertAllEqual(
         self.evaluate(scalarizer(multi_objectives)),
         self.evaluate(tf.constant([5, 8], dtype=tf.float32)))
Exemple #7
0
 def testDirectionWithWrongDimension(self):
     with self.assertRaisesRegex(ValueError,
                                 'direction has 2 elements but'):
         direction = [1, 0]
         multi_objective_scalarizer.HyperVolumeScalarizer(
             direction, self._hv_params)
Exemple #8
0
 def testZeroLengthDirection(self):
     with self.assertRaisesRegex(ValueError, 'nearly-zero vector'):
         direction = [0, 0, 0]
         multi_objective_scalarizer.HyperVolumeScalarizer(
             direction, self._hv_params)
Exemple #9
0
 def testDirectionWithNegativeCoordinates(self):
     with self.assertRaisesRegex(ValueError, 'has negative coordinates'):
         direction = [-1, 0, 0]
         multi_objective_scalarizer.HyperVolumeScalarizer(
             direction, self._hv_params)
Exemple #10
0
 def testInvalidParams(self):
     with self.assertRaisesRegex(ValueError, 'nearly-zero vector'):
         multi_objective_scalarizer.HyperVolumeScalarizer([], [])
     with self.assertRaisesRegex(ValueError, 'at least two objectives'):
         multi_objective_scalarizer.HyperVolumeScalarizer(
             [1], [self._hv_params[0]])