Мы вот с другом задумались. У вас ведь задача получается с одним глобальным экстремумом? И локальные экстремумы совпадают с глобальным.
Можно ли вашу целевую функцию сделать функцией с двумя глобальными экстремумами. Чтобы задача интереснее была.
оффтопик. Вот часто говорят на два порядка, на три порядка. Вчера с другом вышел разговор, а что это значит? «На два порядка выше» — это значит примерно на 20 больше или больше примерно в 100 раз?
ну конечно… Только вот подорожает не только электроэнергия. А сразу все товары, для производства которых требуется куча электроэнергии. Алюминий например.
Они вообще там колоссальную базу говнокода создали, поэтому будет невозможно что-то изменить к лучшему в нем. Можно только переписать и назвать новый продукт старым именем.
1) ввели вторую цель той же длины #define GA_TARGET2 std::string(«Hello gnome!»)
2) изменили целевую функцию
population[i].fitness = 0;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target[j]));
}
population[i].fitness = fitness;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target2[j]));
}
population[i].fitness *= fitness;
Т.е. определили её как произведение модулей разности целевых векторов и особи.
И теперь алгоритм падает то к одному то ко второму экстремуму.
1) ввели вторую цель той же длины #define GA_TARGET2 std::string(«Hello gnome!»)
2) изменили целевую функцию
population[i].fitness = 0;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target[j]));
}
population[i].fitness = fitness;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target2[j]));
}
population[i].fitness *= fitness;
Т.е. определили её как произведение модулей разности целевых векторов и особи.
И теперь алгоритм падает то к одному то ко второму экстремуму.
Можно ли вашу целевую функцию сделать функцией с двумя глобальными экстремумами. Чтобы задача интереснее была.