Arcadie
Гость
|
|
« : 25-05-2008 08:10 » |
|
struct gene { int alleles[4]; int fitness; int i; float likelihood;
// тестирует на равноправие operator==(gene gn) //{ for (i=0 ; i<4 ; i++) { if (gn.alleles[i] != alleles[i]) return false else return true;
}
return true;
};
выдает ошибки около 9 штук именно на цикле for
|
|
« Последнее редактирование: 25-05-2008 08:15 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 25-05-2008 08:18 » |
|
Arcadie, потому что красиваое форматирование рулит struct gene { int alleles[4]; int fitness; int i; float likelihood;
// тестирует на равноправие bool operator==(const gene& gn) const { for (i=0 ; i<4 ; i++) { if(gn.alleles[i] != alleles[i])return false; return true; }
return true; } };
и сразу видно, где нарушения синтаксиса остаётся невнятной логика - зачем цикл, если он всегода только один раз выполнится ?
|
|
« Последнее редактирование: 25-05-2008 08:20 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 25-05-2008 08:21 » |
|
кстати, я ещё подправил свой пост, если ты уже читал его
|
|
|
Записан
|
|
|
|
marat_
Шеф-повар
Опытный
Offline
|
|
« Ответ #3 : 25-05-2008 08:23 » |
|
Алексей1153++, не опытный не заметит
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 25-05-2008 08:24 » |
|
я бы поступил так: #pragma pack(push,1)
struct gene { int alleles[4]; int fitness; int i; float likelihood;
// тестирует на равноправие bool operator==(const gene& gn) const { return (0==memcmp(gn.alleles,alleles,sizeof(gn.alleles))); } }; #pragma pack(pop)
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 25-05-2008 08:25 » |
|
Алексей1153++, не опытный не заметит а что замечать то Когда форматирование понятное глазу - видно всё хорошо
|
|
|
Записан
|
|
|
|
Arcadie
Гость
|
|
« Ответ #6 : 25-05-2008 10:16 » |
|
class CDiophantine { public: CDiophantine(int, int, int, int, int); // конструктор с каэфициентом для a,b,c,d. int Solve(); // Возврат gene. gene GetGene(int i) { return population[i];}
protected: int ca,cb,cc,cd; int result; gene population[MAXPOP]; int Fitness(gene &); void GenerateLikelihoods(); // генерирование likelihoods. float MultInv(); int CreateFitnesses(); void CreateNewPopulation(); int GetIndex(float val);
gene Breed(int p1, int p2);
};
CDiophantine::CDiophantine(int a, int b, int c, int d, int res) : ca(a), cb(b), cc(c), cd(d), result(res) {//}
int CDiophantine::Solve() { int fitness = -1; srand((unsigned)time(NULL)); for(int i=0;i<MAXPOP;i++) { for (int j=0;j<4;j++) { population[i].alleles[j] = rand() % (result + 1); } } if (fitness = CreateFitnesses()) { return fitness; } int iterations = 0; / while (fitness != 0 || iterations < 50) { GenerateLikelihoods(); CreateNewPopulation(); if (fitness = CreateFitnesses()) { return fitness; }
iterations++; }
return -1; }
int CDiophantine::Fitness(gene &gn) { int total = ca * gn.alleles[0] + cb * gn.alleles[1] + cc * gn.alleles[2] + cd * gn.alleles[3];
return gn.fitness = abs(total - result); }
int CDiophantine::CreateFitnesses() { float avgfit = 0; int fitness = 0; for(int i=0;i<MAXPOP;i++) { fitness = Fitness(population[i]); avgfit += fitness; if (fitness == 0) { return i; } }
return 0; }
float CDiophantine::MultInv() { float sum = 0;
for(int i=0;i<MAXPOP;i++) { sum += 1/((float)population[i].fitness); }
return sum; }
void CDiophantine::GenerateLikelihoods() { float multinv = MultInv();
float last = 0; for(int i=0;i<MAXPOP;i++) { population[i].likelihood = last = last + ((1/((float)population[i].fitness) / multinv) * 100); } }
int CDiophantine::GetIndex(float val) { float last = 0; for(int i=0;i<MAXPOP;i++) { if (last <= val && val <= population[i].likelihood) return i; else last = population[i].likelihood; }
return 4; }
gene CDiophantine::Breed(int p1, int p2) { int crossover = rand() % 3+1; int first = rand() % 100; gene child = population[p1]; int initial = 0, final = 3; if (first < 50) initial = crossover; else final = crossover+1; for(int i=initial;i<final;i++) { child.alleles[i] = population[p2].alleles[i]; if (rand() % 101 < 5) child.alleles[i] = rand() % (result + 1); } return child;
}
void CDiophantine::CreateNewPopulation() { gene temppop[MAXPOP];
for(int i=0;i<MAXPOP;i++) { int parent1 = 0, parent2 = 0, iterations = 0; while(parent1 == parent2 || population[parent1] == population[parent2]) { parent1 = GetIndex((float)(rand() % 101)); parent2 = GetIndex((float)(rand() % 101)); if (++iterations > 25) break; } temppop[i] = Breed(parent1, parent2); }
for(i=0;i<MAXPOP;i++) population[i] = temppop[i]; } }
изза чего видается ошибка identifier Solve cannot have a type qualifier(int CDiophantine::Solve()) deklaration mising (конец)
|
|
« Последнее редактирование: 25-05-2008 10:20 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 25-05-2008 10:21 » |
|
опечатка в коде: int iterations = 0; / <--------- ТУТ
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 25-05-2008 10:23 » |
|
и тут
CDiophantine::CDiophantine(int a, int b, int c, int d, int res) : ca(a), cb(b), cc(c), cd(d), result(res) {//}
надо
CDiophantine::CDiophantine(int a, int b, int c, int d, int res) : ca(a), cb(b), cc(c), cd(d), result(res) {}
|
|
|
Записан
|
|
|
|
Arcadie
Гость
|
|
« Ответ #9 : 25-05-2008 10:48 » |
|
сечас выдает ошибку на последней } unexpected } и два Warning один на if (fitness = CreateFitnesses()) possible inncorect assigment
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 25-05-2008 11:05 » |
|
Arcadie, синтаксис учи обязательно! Ну чё в самом то деле , ругается на лишнюю скобку - удали лишнюю скобку if (fitness = CreateFitnesses())
компилятор говорит тебе - возможно, неверный аргумент. Скорее всего ты поставил "=" вместо "==" , а "=" у тебя ничего не возвращает (скорее всего)
|
|
|
Записан
|
|
|
|
Arcadie
Гость
|
|
« Ответ #11 : 25-05-2008 11:46 » |
|
спасибо тебе огромное
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 25-05-2008 11:48 » |
|
да не за что же
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #13 : 26-05-2008 06:30 » |
|
Arcadie, при копировании примеров, ты хоть проглядывай глазами что там написано вообще
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
|