示例#1
0
def test_variational_study_optimize_and_extend_and_summary():
    numpy.random.seed(63351)

    study = VariationalStudy(
        'study',
        test_ansatz,
        test_objective,
        black_box_type=variational_black_box.XMON_SIMULATE_STATEFUL,
        target=-10.5)
    assert len(study.trial_results) == 0
    assert study.target == -10.5

    # Optimization run 1
    result = study.optimize(OptimizationParams(test_algorithm), 'run1')
    assert len(study.trial_results) == 1
    assert isinstance(result, OptimizationTrialResult)
    assert result.repetitions == 1

    # Extend optimization run 1
    study.extend_result('run1', repetitions=2)
    assert study.trial_results['run1'].repetitions == 3

    # Optimization run 2
    study.optimize(OptimizationParams(test_algorithm),
                   repetitions=2,
                   use_multiprocessing=True)
    result = study.trial_results[0]
    assert len(study.trial_results) == 2
    assert isinstance(result, OptimizationTrialResult)
    assert result.repetitions == 2

    # Optimization run 3
    study.optimize(OptimizationParams(test_algorithm,
                                      initial_guess=numpy.array([4.5, 8.8]),
                                      initial_guess_array=numpy.array(
                                          [[7.2, 6.3], [3.6, 9.8]]),
                                      cost_of_evaluate=1.0),
                   reevaluate_final_params=True,
                   save_x_vals=True)
    result = study.trial_results[1]
    assert len(study.trial_results) == 3
    assert isinstance(result, OptimizationTrialResult)
    assert result.repetitions == 1
    assert all(result.data_frame['optimal_parameters'].apply(
        lambda x: XmonSimulateVariationalBlackBox(test_ansatz, test_objective).
        evaluate(x)) == result.data_frame['optimal_value'])
    assert isinstance(result.results[0].cost_spent, float)

    # Try extending non-existent run
    with pytest.raises(KeyError):
        study.extend_result('run100')

    # Check that getting a summary works
    assert str(study).startswith('This study contains')
示例#2
0
def test_variational_black_box_evaluate_with_cost():
    black_box = XmonSimulateVariationalBlackBox(test_ansatz, test_objective)
    numpy.testing.assert_allclose(
        black_box.evaluate_with_cost(test_ansatz.default_initial_params(),
                                     2.0), 0.0)

    black_box_noisy = XmonSimulateVariationalBlackBox(test_ansatz,
                                                      test_objective_noisy)
    numpy.random.seed(33534)
    noisy_val = black_box_noisy.evaluate_with_cost(numpy.array([0.5, 0.0]),
                                                   10.0)
    assert -0.8 < noisy_val < 1.2
示例#3
0
def test_variational_black_box_evaluate():
    black_box = XmonSimulateVariationalBlackBox(test_ansatz, test_objective)
    numpy.testing.assert_allclose(
        black_box.evaluate(test_ansatz.default_initial_params()), 0.0)
    numpy.testing.assert_allclose(black_box.evaluate(numpy.array([0.0, 0.5])),
                                  1.0)
示例#4
0
def test_variational_black_box_noise_bounds():
    black_box = XmonSimulateVariationalBlackBox(test_ansatz, test_objective)
    assert black_box.noise_bounds(100) == (-numpy.inf, numpy.inf)
示例#5
0
def test_variational_black_box_bounds():
    black_box = XmonSimulateVariationalBlackBox(test_ansatz, test_objective)
    assert black_box.bounds == test_study.ansatz.param_bounds()
示例#6
0
def test_variational_black_box_dimension():
    black_box = XmonSimulateVariationalBlackBox(test_ansatz, test_objective)
    assert black_box.dimension == 2