![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Rocket |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Вот реализация генетического алгоритма. Вобщем, помогите исправить баг.
cout<<"Distribution tasks of the gadget: "<<endl;
out<<"Distribution tasks of the gadget: "<<endl;
for(int i = 0; i < nota; i++)
{
for(int j = 0; j < nog; j++)
{
cout <<Ma3x[i][j] <<' ';
out <<Ma3x[i][j] <<' ';
}
out <<endl;
cout <<endl;
}
cout <<endl;
Individ **Individ_1;
Individ vv = nog;
cout<<"Please, enter number of Individ: "<<endl;
cin>>noi;
out <<"Number of Individ: " <<noi<<endl;
cout <<"Please, enter number of Repetition: "<<endl;
cin >>nore;
out <<"Number of Repetition: " <<nore<<endl;
nore_1 = nore;
Кусок места, где происходит вылет из программы. Вывод матрицы срабатывает, а потом... Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Вывод матрицы срабатывает, а потом... ... а потом продолжает работать дальше. Показывай, какие данные вводишь...Единственное, что бросается в глаза: Ma3x = new int*[nota];
for(int i = 0; i < nota;i++) Ma3x[i] = new int[nog];
srand(time(0)+bb+tb);
for(int i = 0; i < nota; i++)
{
num = bb+rand()%(tb - bb);
//for(int j = 0; j < nota; j++) Ma3x[i][j] = num;
for(int j = 0; j < nog; j++) Ma3x[i][j] = num;
}
Я бы все-таки заменил закомментированную строку так, как показано ниже... Иначе у тебя могут инициализироваться не все элементы матрицы... |
Rocket |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
... а потом продолжает работать дальше. Показывай, какие данные вводишь... Единственное, что бросается в глаза: Ma3x = new int*[nota];
for(int i = 0; i < nota;i++) Ma3x[i] = new int[nog];
srand(time(0)+bb+tb);
for(int i = 0; i < nota; i++)
{
num = bb+rand()%(tb - bb);
//for(int j = 0; j < nota; j++) Ma3x[i][j] = num;
for(int j = 0; j < nog; j++) Ma3x[i][j] = num;
}
Я бы все-таки заменил закомментированную строку так, как показано ниже... Иначе у тебя могут инициализироваться не все элементы матрицы...хехе всё так и оказалось ![]() Добавлено через 5 мин. Вот в этом месте, где я провожу турнирный отбор особей, рандомайз мой всё время с равнивает с одной и той же особью предыдушего поколения...
srand(time(0)/RAND_MAX+random(1,nog));
ww = 0+rand()%noi;
out <<"Comparison with Individ" <<i <<',' <<ww<<endl;
cout <<"Comparison with Individ" <<i <<',' <<ww<<endl;
if(vv.get_Criterion_T() <= Individ_1[0][ww].get_Criterion_T()) Individ_1[1][j] = vv;
else Individ_1[1][j] = Individ_1[0][ww];
Как исправить этот момент? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Зачем ты на протяжении одной программы несколько раз инициализируешь датчик случайных чисел? Где-то было описание бага: при вызове srand() несколько раз функция rand() генерирует одинаковые значения... Сделай один вызов в самом начале программы, все остальные закомментируй и проверь...
|
Rocket |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Зачем ты на протяжении одной программы несколько раз инициализируешь датчик случайных чисел? Где-то было описание бага: при вызове srand() несколько раз функция rand() генерирует одинаковые значения... Сделай один вызов в самом начале программы, все остальные закомментируй и проверь... Так а я же с разными параметрами использую srand(). Или всё равно? |
Rocket |
![]()
Сообщение
#6
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Вот нашел ещё один косяк: последующее поколение полностью состоит из одинаковых особей. Чем это вызвано?...даа и ещё походу мутация барахлит)...
![]() Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Ты опять за свое? ОТКУДА ты взял ЭТОТ файл? Вот расскажи, ты что, действительно думаешь, что я не обратил внимание на то, что у тебя В ПРОГРАММЕ не выводится нигде строка: "Comparison with 1- Generation 2- Individ" в файл? Что выводится строка
out <<"***GENERATION*** " <<i+1<<endl;
, которая ну никак не выдаст в файлЦитата *** 2 - GENERATION: *** , ну хоть что ты с ней делай - не выдаст...Правил исходники - выкладывай новую версию, я не намерен догадываться, ЧТО ты там наисправлял... Не правил - значит спрашивай у того, кто выдумал такой выходной файл, ибо программа его сгенерировать просто не может!!! |
Rocket |
![]()
Сообщение
#8
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Ты опять за свое? ОТКУДА ты взял ЭТОТ файл? Вот расскажи, ты что, действительно думаешь, что я не обратил внимание на то, что у тебя В ПРОГРАММЕ не выводится нигде строка: "Comparison with 1- Generation 2- Individ" в файл? Что выводится строка out <<"***GENERATION*** " <<i+1<<endl;
, которая ну никак не выдаст в файл, ну хоть что ты с ней делай - не выдаст... Правил исходники - выкладывай новую версию, я не намерен догадываться, ЧТО ты там наисправлял... Не правил - значит спрашивай у того, кто выдумал такой выходной файл, ибо программа его сгенерировать просто не может!!! Ну я тут совсем чуть-чуть переделал, чтоб вывод был более понятен. Вот последний вариант, который у меня сейчас на руках... Прикрепленные файлы ![]() |
Rocket |
![]()
Сообщение
#9
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Перешёл к реализации генетического алгоритма с элитой (алгорит организации элиты - критический путь).
Вроде бы всё вобщем работает, только имеются ошибки: - при турнирном отборе в следущее поколение попадает особь с большим Т ( согласно алгоритму в следующее поколение должна попадать особь с меньшим Т) ; - элита не занимает место "0" особи поколения (по моему алгоритму она должна это делать); - не считается первое повторение Т. Чем вызваны эти ошибки? Помогите пожалуйста их исправить. Прикрепленные файлы ![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 1:34 |