Студопедія
рос | укр

Головна сторінка Випадкова сторінка


КАТЕГОРІЇ:

АвтомобіліБіологіяБудівництвоВідпочинок і туризмГеографіяДім і садЕкологіяЕкономікаЕлектронікаІноземні мовиІнформатикаІншеІсторіяКультураЛітератураМатематикаМедицинаМеталлургіяМеханікаОсвітаОхорона праціПедагогікаПолітикаПравоПсихологіяРелігіяСоціологіяСпортФізикаФілософіяФінансиХімія






Plural forms of nouns


Дата добавления: 2015-09-15; просмотров: 573



#pragma comment (linker, "/STACK:16777216")

#include <vector>

#include <list>

#include <map>

#include <set>

#include <deque>

#include <stack>

#include <algorithm>

#include <sstream>

#include <iostream>

#include <iomanip>

#include <cstdio>

#include <cmath>

#include <cstdlib>

#include <cctype>

#include <cstring>

#include <numeric>

#include <complex>

#include <string>

#include <ctime>

 

using namespace std;

 

typedef long long LL;

typedef unsigned long long ULL;

typedef pair <int, int> pnt;

 

 

#define FI(i,a) for (int i=0; i<(a); ++i)

#define FOR(i,s,e) for (LL i=(s); i<(e); ++i)

#define MEMS(a,b) memset(a,b,sizeof(a))

#define pb push_back

#define mp make_pair

#define ALL(a) a.begin(),a.end()

#define V(t) vector < t >

#define sz size()

#define MAX(a,b) ((a)>(b)?(a):(b))

#define MIN(a,b) ((a)<(b)?(a):(b))

#define ABS(a) ((a)>(0)?(a):(-(a)))

 

#define dout(a) cerr << a << endl

#define sout(a) cerr << a << " "

 

const double pi = 3.14159265358979323846264338327950288419716939937511;

const double eps = 1e-11;

//*

char ch_ch_ch[1<<20];

string gs() {scanf("%s",ch_ch_ch); return string(ch_ch_ch);}

string gl() {gets(ch_ch_ch); return string(ch_ch_ch);}

inline int gi() {int x; scanf("%d",&x); return x;}

//*/

 

const int inf = 1000000000;

 

// code starts here

 

int iterNumber = 80;

int populationSize = 200;

const int bestToSelect = 30;

double mutationProbability = 0.2;

const double crossoverProbability = 1.0;

const double genomeWinningProbability = 1.0;

 

typedef V(int) Genome;

typedef V(Genome) Population;

 

 

V(V(double)) adj;

 

inline double pathLength(Genome v)

{

v.pb(v[0]);

double res = 0;

FI(i,(int)v.sz-1) res+=adj[v[i]][v[i+1]];

return res;

}

 

 

inline double fitness(Genome v)

{

return -pathLength(v);

}

 

bool revSortByFitness(const Genome &a, const Genome &b)

{

return fitness(a) > fitness(b);

}

 

 

inline void outPath(Genome v)

{

FI(i,v.sz) printf("%d -> ",v[i]);

printf("%d\n",v[0]);

}

 

inline void printInfo(int iteration, Population pop)

{

sort(ALL(pop),revSortByFitness);

printf("\nGeneration #%d\n",iteration);

double av = 0;

FI(i,pop.sz) av += pathLength(pop[i]);

av/=pop.sz;

printf("Average path length: %lf\n",av);

printf("Best path length: %lf\n",pathLength(pop[0]));

printf("Best path: "); outPath(pop[0]);

 

}

 

Population generateRandomPopulation(int n, int cnt)

{

Population pop(cnt);

Genome g(n);

FI(i,n) g[i] = i;

FI(i,cnt) {random_shuffle(ALL(g)); pop[i] = g;}

return pop;

}

 

inline Genome crossover(Genome a, Genome b)

{

Genome c(a.sz,0);

int pbeg = 0, pend = c.sz-1, itNum = 0;

int pA = pbeg, pB = pend;

bool *inherited = new bool[c.sz+1];

FI(i,c.sz+1) inherited[i]=0;

while (pbeg<=pend)

{

if (itNum & 1)

{

while (pB >= 0 && inherited[b[pB]]) pB--;

if (pB >= 0) {c[pend--] = b[pB]; inherited[b[pB]] = 1;}

} else

{

while (pA < a.sz && inherited[a[pA]]) pA++;

if (pA < a.sz) {c[pbeg++] = a[pA]; inherited[a[pA]] = 1;}

}

itNum^=1;

}

return c;

}

 

inline Population doCrossover(Population pop)

{

Population newPop = pop;

FI(i,pop.sz)

newPop.push_back(crossover(pop[i],pop[rand()%pop.sz]));

return newPop;

}

 

inline void mutate(Genome &v)

{

int p1 = rand()%v.sz;

int p2;

do {p2 = rand()%v.sz;

} while (p2==p1);

int val = v[p1];

for (int i = p1; i!=p2; i=(i+1)%v.sz) v[i] = v[(i+1)%v.sz];

v[p2] = val;

 

}

 

inline Population doMutation(Population pop)

{

FI(i,pop.sz) if ((rand()%10000)/10000.0 < mutationProbability)

mutate(pop[i]);

return pop;

}

 

inline Genome winner(Genome a, Genome b)

{

if (fitness(a) < fitness(b)) swap(a,b);

return a;

}

 

inline Population doSelection(Population pop)

{

sort(ALL(pop),revSortByFitness);

Population newPop;

 

/* simple selection (the best half)

FI(i,populationSize) newPop.push_back(pop[i]);

return newPop; //*/

 

FI(i,bestToSelect)

newPop.push_back(pop[i]);

int pos = bestToSelect;

FOR(i,bestToSelect,populationSize)

{

if (pos+1>=pop.sz) pos = 0;

newPop.push_back(winner(pop[pos],pop[pos+1]));

pos+=2;

}

 

return newPop;

}

 

Genome geneticSolve(V(V(double)) a, int n, int iterNumber)

{

printf("\nEVOLUTION STARTS...\n");

adj = a;

Population population = generateRandomPopulation(n,populationSize);

FI(it,iterNumber)

{

population = doCrossover(population);

population = doMutation(population);

population = doSelection(population);

printInfo(it,population);

}

printf("\nEND OF EVOLUTION\n");

sort(ALL(population),revSortByFitness);

return population[0];

}

 

void solution()

{

clock_t beg_time = clock();

 

/*cout << 30 << endl;

V(int) dist(30);

FI(j,30) dist[j] = min(j,30-j);

FI(i,30) {FI(j,30) printf("%d ",dist[(j+30-i)%30]); printf("\n");}

return;*/

 

printf("Enter population size: ");

cin >> populationSize;

printf("Enter mutation probability: ");

cin >> mutationProbability;

printf("Enter generations count: ");

cin >> iterNumber;

 

freopen("in.txt","r",stdin);

freopen("out.txt","w",stdout);

 

V(V(double)) a;

int n;

cin >> n;

a.resize(n, V(double)(n,0));

FI(i,n) FI(j,n) cin >> a[i][j];

V(int) res = geneticSolve(a,n,iterNumber);

 

printf("FINAL RESULT:\nLength: %lf\n",pathLength(res));

FI(i,n) printf("%d -> ",res[i]);

printf("%d\n",res[0]);

 

fprintf(stdout,"*** Time: %.3lf ***\n",1.0*(clock()-beg_time)/CLOCKS_PER_SEC);

 

 

}

// code ends here

 

int main(int argc, char** argv)

{

 

#ifdef TYTKO_ACM

// freopen("in.txt","r",stdin);

// freopen("in.txt", "w", stdout);

 

#else

// freopen("in.txt","r",stdin);

// freopen("out.out", "w", stdout);

// freopen("elect.in", "r", stdin);

#endif

 

solution();

 

#ifdef TYTKO_ACM

 

#endif

return 0;

}


<== предыдущая лекция | следующая лекция ==>
Lexica- grammatical exercises | Possessive Case
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | <== 23 ==> | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
Studopedia.info - Студопедия - 2014-2024 год . (0.206 сек.) російська версія | українська версія

Генерация страницы за: 0.206 сек.
Поможем в написании
> Курсовые, контрольные, дипломные и другие работы со скидкой до 25%
3 569 лучших специалисов, готовы оказать помощь 24/7