solve_simulated_annealing Subroutine

public subroutine solve_simulated_annealing(iproblem, n, x, rt, t, vm, xopt, fopt, nacc, nfcnev, ier) bind(C, name="solve_simulated_annealing")

solve optimization problem using simulated annealing from C

Arguments

Type IntentOptional Attributes Name
integer(kind=c_intptr_t), intent(in), value :: iproblem
integer(kind=c_int), intent(in), value :: n
real(kind=c_double), intent(inout), dimension(n) :: x
real(kind=c_double), intent(in), value :: rt
real(kind=c_double), intent(inout) :: t
real(kind=c_double), intent(inout), dimension(n) :: vm
real(kind=c_double), intent(out), dimension(n) :: xopt
real(kind=c_double), intent(out) :: fopt
integer(kind=c_int), intent(out) :: nacc
integer(kind=c_int), intent(out) :: nfcnev
integer(kind=c_int), intent(out) :: ier

Calls

proc~~solve_simulated_annealing~~CallsGraph proc~solve_simulated_annealing solve_simulated_annealing proc~int_pointer_to_f_pointer int_pointer_to_f_pointer proc~solve_simulated_annealing->proc~int_pointer_to_f_pointer proc~sa simulated_annealing_type%sa proc~solve_simulated_annealing->proc~sa proc~exprep exprep proc~sa->proc~exprep proc~func simulated_annealing_type%func proc~sa->proc~func proc~perturb_and_evaluate simulated_annealing_type%perturb_and_evaluate proc~sa->proc~perturb_and_evaluate proc~print_vector print_vector proc~sa->proc~print_vector proc~rand_init rand_init proc~sa->proc~rand_init proc~uniform_random_number uniform_random_number proc~sa->proc~uniform_random_number proc~perturb_variable simulated_annealing_type%perturb_variable proc~perturb_and_evaluate->proc~perturb_variable proc~bipareto bipareto proc~perturb_variable->proc~bipareto proc~cauchy cauchy proc~perturb_variable->proc~cauchy proc~triangular_dist triangular_dist proc~perturb_variable->proc~triangular_dist proc~truncated_normal truncated_normal proc~perturb_variable->proc~truncated_normal proc~uniform uniform proc~perturb_variable->proc~uniform proc~bipareto->proc~uniform_random_number proc~bipareto->proc~uniform proc~cauchy->proc~uniform_random_number proc~triangular_dist->proc~uniform_random_number proc~truncated_normal->proc~uniform proc~normal normal proc~truncated_normal->proc~normal proc~uniform->proc~uniform_random_number proc~normal->proc~uniform_random_number

Source Code

    subroutine solve_simulated_annealing(iproblem, n, x, rt, t, vm, &
                                         xopt, fopt, nacc, nfcnev, ier) &
      bind(C, name="solve_simulated_annealing")

        integer(c_intptr_t), intent(in), value :: iproblem
        integer(c_int), intent(in), value :: n
        real(c_double), dimension(n), intent(inout) :: x
        real(c_double), intent(in), value :: rt
        real(c_double), intent(inout) :: t
        real(c_double), dimension(n), intent(inout) :: vm
        real(c_double), dimension(n), intent(out) :: xopt
        real(c_double), intent(out) :: fopt
        integer(c_int), intent(out) :: nacc
        integer(c_int), intent(out) :: nfcnev
        integer(c_int), intent(out) :: ier

        type(c_sa_wrapper_type), pointer :: wrapper

        call int_pointer_to_f_pointer(iproblem, wrapper)

        if (associated(wrapper)) then
            call wrapper%optimize(x=x, rt=rt, t=t, vm=vm, &
                                  xopt=xopt, fopt=fopt, nacc=nacc, &
                                  nfcnev=nfcnev, ier=ier)
        else
            error stop 'error in solve_simulated_annealing: wrapper or SA class is not associated'
        end if

    end subroutine solve_simulated_annealing