Beispiel #1
0
void syncnet::create_connections(const double connectivity_radius, const bool enable_conn_weight) {
    double sqrt_connectivity_radius = connectivity_radius * connectivity_radius;

    if (enable_conn_weight == true) {
        std::vector<double> instance(size(), 0);
        distance_conn_weights = new std::vector<std::vector<double> >(size(), instance);
    }
    else {
        distance_conn_weights = nullptr;
    }

    double maximum_distance = 0;
    double minimum_distance = std::numeric_limits<double>::max();

    for (std::size_t i = 0; i < size(); i++) {
        for (std::size_t j = i + 1; j < size(); j++) {
            double distance = euclidean_distance_square( (*oscillator_locations)[i], (*oscillator_locations)[j] );

            if (distance <= sqrt_connectivity_radius) {
                m_connections->set_connection(j, i);
                m_connections->set_connection(i, j);
            }

            if (enable_conn_weight == true) {
                (*distance_conn_weights)[i][j] = distance;
                (*distance_conn_weights)[j][i] = distance;

                if (distance > maximum_distance) {
                    maximum_distance = distance;
                }

                if (distance < maximum_distance) {
                    maximum_distance = distance;
                }
            }
        }
    }

    if (enable_conn_weight == true) {
        double multiplier = 1;
        double subtractor = 0;

        if (maximum_distance != minimum_distance) {
            multiplier = maximum_distance - minimum_distance;
            subtractor = minimum_distance;
        }

        for (std::size_t i = 0; i < size(); i++) {
            for (std::size_t j = i + 1; j < size(); j++) {
                double value_weight = ((*distance_conn_weights)[i][j] - subtractor) / multiplier;

                (*distance_conn_weights)[i][j] = value_weight;
                (*distance_conn_weights)[j][i] = value_weight;
            }
        }
    }
}
Beispiel #2
0
// Compute the Euclidean distance.
float euclidean_distance(const float* a1, const float* a2, int length)
{
    float d = euclidean_distance_square(a1,a2,length);
    d = sqrt(d);
    return d;
}