add num_iterations parameter to teleportation

This commit is contained in:
Lingjie Zhu 2017-11-06 11:17:42 +08:00
parent 7f3e3818fd
commit f28ee88b70
3 changed files with 19 additions and 16 deletions

View File

@ -329,7 +329,7 @@ public:
* @brief Seeding by targeted number of proxies.
* @param method seeding method
* @param num_seed target number of proxies seed
* @param num_iterations number of iterations of coarse re-fitting
* @param num_iterations number of re-fitting iterations
* in incremental and hierarchical seeding
* @return number of proxies initialized
*/
@ -353,7 +353,7 @@ public:
* @brief Seeding by targeted error drop.
* @param method seeding method
* @param target_drop targeted error drop to initial state, usually in range (0, 1)
* @param num_iterations number of iterations of coarse re-fitting
* @param num_iterations number of re-fitting iterations
* @return number of proxies initialized
*/
std::size_t seeding_by_error(
@ -475,11 +475,11 @@ public:
* @pre current facet proxy map is valid
* @note after the addition, the facet proxy map remains valid
* @param num_proxies number of proxies to be added
* @param num_iterations the number of iterations of re-fitting
* @param num_iterations number of re-fitting iterations
* @return number of proxies added
*/
std::size_t add_proxies_furthest(const std::size_t num_proxies,
const std::size_t num_iterations) {
const std::size_t num_iterations = 5) {
std::size_t num_added = 0;
for (; num_added < num_proxies; ++num_added) {
if (!add_proxy_furthest())
@ -582,13 +582,16 @@ public:
/*!
* @brief Teleport the local minima to the worst region, this combines the merging and adding processes.
* The partitioning are updated.
* The re-fitting is performed after each teleportation.
* Here if we specify more than one proxy this means we teleport in a naive iterative fashion.
* @param num_proxies number of proxies request to teleport
* @param num_iterations number of re-fitting iterations
* @param if_test true if do the merge test before the teleportation (attempt to escape from local minima).
* @return number of proxies teleported.
*/
std::size_t teleport_proxies(const std::size_t &num_proxies, const bool &if_test = true) {
std::size_t teleport_proxies(const std::size_t num_proxies,
const std::size_t num_iterations = 5,
const bool if_test = true) {
std::size_t num_teleported = 0;
while (num_teleported < num_proxies) {
// find worst proxy
@ -638,7 +641,7 @@ public:
num_teleported++;
// coarse re-fitting
for (std::size_t i = 0; i < 5; ++i) {
for (std::size_t i = 0; i < num_iterations; ++i) {
partition();
fit();
}
@ -941,12 +944,12 @@ private:
/*!
* @brief Incremental initialize proxies.
* @param num_seed number of proxies seed
* @param num_iterations number of iterations of coarse re-fitting
* @param num_iterations number of re-fitting iterations
* before each incremental proxy insertion
* @return number of proxies initialized
*/
std::size_t seed_incremental(const std::size_t num_seed,
const std::size_t num_iterations = 5) {
const std::size_t num_iterations) {
proxies.clear();
if (num_faces(*m_pmesh) < num_seed)
return 0;
@ -963,12 +966,12 @@ private:
/*!
* @brief Hierarchical initialize proxies.
* @param num_seed number of proxies seed
* @param num_iterations number of iterations of coarse re-fitting
* @param num_iterations number of re-fitting iterations
* before each hierarchical proxy insertion
* @return number of proxies initialized
*/
std::size_t seed_hierarchical(const std::size_t num_seed,
const std::size_t num_iterations = 5) {
const std::size_t num_iterations) {
proxies.clear();
if (num_faces(*m_pmesh) < num_seed)
return 0;
@ -997,7 +1000,7 @@ private:
/*!
* @brief Initialize by targeted error drop.
* @param target_drop targeted error drop to initial state, usually in range (0, 1)
* @param num_iterations number of iterations of coarse re-fitting
* @param num_iterations number of re-fitting iterations
* @return number of proxies initialized
*/
std::size_t seed_error_random(const FT target_drop,
@ -1035,7 +1038,7 @@ private:
/*!
* @brief Initialize by targeted error drop.
* @param target_drop targeted error drop to initial state, usually in range (0, 1)
* @param num_iterations number of iterations of coarse re-fitting
* @param num_iterations number of re-fitting iterations
* @return number of proxies initialized
*/
std::size_t seed_error_incremental(const FT target_drop,
@ -1070,7 +1073,7 @@ private:
/*!
* @brief Initialize by targeted error drop.
* @param target_drop targeted error drop to initial state, usually in range (0, 1)
* @param num_iterations number of iterations of coarse re-fitting
* @param num_iterations number of re-fitting iterations
* @return number of proxies initialized
*/
std::size_t seed_error_hierarchical(const FT target_drop,

View File

@ -76,7 +76,7 @@ int main()
// merge and teleport the proxies from local minimal
std::cout << "teleport" << std::endl;
l2_approx.teleport_proxies(3, false);
l2_approx.teleport_proxies(3);
for (std::size_t i = 0; i < 10; ++i)
l2_approx.run_one_step();
if (l2_approx.get_proxies_size() != 16)

View File

@ -77,7 +77,7 @@ int main()
// teleport until merge test failed
std::vector<FT> error;
std::size_t count = 0;
while(l21_vsa.teleport_proxies(1, true) == 1) {
while(l21_vsa.teleport_proxies(1) == 1) {
FT sum_err(0);
for (std::size_t i = 0; i < 10; ++i)
sum_err += l21_vsa.run_one_step();