Beispiel #1
0
def test_anneal_minimize_raises_when_wrong_cooling_factor():
    with pytest.raises(ValueError):
        optimization.anneal_minimize(
            'initial',
            lambda s: 1.0 if s == 'initial' else 0.0,
            lambda s: 'better',
            lambda: 1.0,
            1.0,
            0.5,
            2.0,
            1,
        )
Beispiel #2
0
    def search(
        self,
        trace_func: Callable[[List[LineSequence], float, float, float, bool],
                             None] = None
    ) -> List[LineSequence]:
        """Issues new linear sequence search.

        Each call to this method starts new search.

        Args:
          trace_func: Optional callable which will be called for each simulated
            annealing step with arguments: solution candidate (list of linear
            sequences on the chip), current temperature (float), candidate cost
            (float), probability of accepting candidate (float), and acceptance
            decision (boolean).

        Returns:
          List of linear sequences on the chip found by this method.
        """
        def search_trace(state: _STATE, temp: float, cost: float,
                         probability: float, accepted: bool):
            if trace_func:
                trace_seqs, _ = state
                trace_func(trace_seqs, temp, cost, probability, accepted)

        seqs, _ = optimization.anneal_minimize(self._create_initial_solution(),
                                               self._quadratic_sum_cost,
                                               self._force_edges_active_move,
                                               self._rand.random_sample,
                                               trace_func=search_trace)
        return seqs
Beispiel #3
0
def test_anneal_minimize_calls_trace_func():
    trace_func = mock.Mock()

    optimization.anneal_minimize('initial',
                                 lambda s: 1.0 if s == 'initial' else 0.0,
                                 lambda s: 'better',
                                 lambda: 1.0,
                                 1.0,
                                 0.5,
                                 0.5,
                                 1,
                                 trace_func=trace_func)

    trace_func.assert_has_calls([
        mock.call('initial', 1.0, 1.0, 1.0, True),
        mock.call('better', 1.0, 0.0, 1.0, True)
    ])
Beispiel #4
0
def test_anneal_minimize_keeps_when_worse_and_discarded():
    assert (
        optimization.anneal_minimize(
            'initial',
            lambda s: 0.0 if s == 'initial' else 1.0,
            lambda s: 'better',
            lambda: 0.9,
            1.0,
            0.5,
            0.5,
            1,
        )
        == 'initial'
    )
Beispiel #5
0
def test_anneal_minimize_improves_when_better():
    assert (
        optimization.anneal_minimize(
            'initial',
            lambda s: 1.0 if s == 'initial' else 0.0,
            lambda s: 'better',
            lambda: 1.0,
            1.0,
            0.5,
            0.5,
            1,
        )
        == 'better'
    )