当前位置: 首页>>代码示例>>C++>>正文


C++ WorldMap::adjustPath方法代码示例

本文整理汇总了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);
//.........这里部分代码省略.........
开发者ID:AniaWujek,项目名称:PORR,代码行数:101,代码来源:main.cpp


注:本文中的WorldMap::adjustPath方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。