本文整理汇总了C++中WorldMap::adjustPath方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldMap::adjustPath方法的具体用法?C++ WorldMap::adjustPath怎么用?C++ WorldMap::adjustPath使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldMap
的用法示例。
在下文中一共展示了WorldMap::adjustPath方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main() {
WorldMap* worldMap = new WorldMap(10, 1000.0, 1000.0);
//losuj zbior P punktow o licznosci N > 10(n+1), n - wymiar zadania
worldMap->generateRandomPaths(200,0);
//wyznacz punkt najlepszy i najgorszy
int best = worldMap->findBestPath();
int worst = worldMap->findWorstPath();
int n = 10;
vector<Town*> srodek;
vector<Town*> odbicie;
vector<Town*> ekspansja;
vector<Town*> kontrakcja;
vector<Town*> redukcja;
vector<int> sympleks;
double x;
struct drand48_data randBuffer;
srand48_r(time(NULL), &randBuffer);
vector<Town*> lepsza;
int utknal = 0;
int poprz_dlugosc = 0;
int iteracje = 0;
bool krecsie = true;
int iii;
bool znaleziono = false;
//clock_t tStart = clock();
double time = omp_get_wtime();
//#pragma omp parallel for private(iii, srodek, odbicie, sympleks, lepsza, utknal, ekspansja, kontrakcja, redukcja) num_threads(2) shared(worldMap, best, worst, znaleziono)
for(iii = 0; iii < 10000000; ++iii) {
if(znaleziono) {
iii = 10000001;
continue;
}
iteracje++;
//if(iteracje % 100 == 0) cout<<"\niteracja "<<iteracje<<" watek: "<<omp_get_thread_num ();
srodek.clear();
odbicie.clear();
sympleks.clear();
lepsza.clear();
ekspansja.clear();
kontrakcja.clear();
redukcja.clear();
//losuj ze zbioru P zbior n punktow i utworz n+1 wymiarowy sympleks
//pierwszy wierzcholek - najlepszy punkt
//# pragma omp atomic
sympleks.push_back(best);
//#pragma omp parallel for shared(worldMap, sympleks) private(x, randBuffer) num_threads(4)
for(int i = 1; i < n+1; ++i) {
drand48_r(&randBuffer, &x);
x = (int)(x*1000.0)%worldMap->Getpaths().size();
sympleks.push_back(x); //(worldMap->Getpaths())[x]
}
//wyznacz srodek sympleksu
//#pragma omp parallel for shared(worldMap, srodek) num_threads(4)
vector<Town*> currentBestPath = worldMap->GetbestPath();
for(int i = 0; i < currentBestPath.size();++i) {
int xSuma = (currentBestPath)[i]->GetX();
int ySuma = (currentBestPath)[i]->GetY();
for(int j = 1; j < n; ++j) {
xSuma += (worldMap->Getpaths())[sympleks[j]][i]->GetX();
ySuma += (worldMap->Getpaths())[sympleks[j]][i]->GetY();
}
xSuma /= n;
ySuma /= n;
//cout<<"\nwatek: "<<omp_get_thread_num ();
srodek.push_back(new Town(xSuma, ySuma, 7+i, "srodek"));
}
//operacja odbicia ostatniego punktu sympleksu wzgledem srodka sympleksu
//#pragma omp parallel for shared(worldMap, odbicie, srodek, sympleks) num_threads(4)
for(int i = 0; i < srodek.size(); ++i) {
int x = 2*srodek[i]->GetX() - ((worldMap->Getpaths())[sympleks[sympleks.size()-1]])[i]->GetX();
int y = 2*srodek[i]->GetY() - ((worldMap->Getpaths())[sympleks[sympleks.size()-1]])[i]->GetY();
Town* t = new Town(x,y,srodek[i]->Getid(),srodek[i]->Getname());
odbicie.push_back(t);
}
if(iii%10 == 0) {
for(int i = 0; i < odbicie.size(); ++i) {
int x = odbicie[i]->GetX() + 1.5 * (odbicie[i]->GetX() - srodek[i]->GetX());
int y = odbicie[i]->GetY() + 1.5 * (odbicie[i]->GetY() - srodek[i]->GetY());
Town* t = new Town(x,y,odbicie[i]->Getid(),odbicie[i]->Getname());
ekspansja.push_back(t);
}
lepsza = worldMap->adjustPath(ekspansja);
//.........这里部分代码省略.........