Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 3
Регистрация: 10.11.2015
Сообщений: 35

Редукция в генетическом алгоритме

23.12.2018, 19:53. Показов 726. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте! Имеется генетический алгоритм для решения Диофантова уравнения вида a+2b+3c+4d = 30. Не знаю как закодировать сюда редукцию (промежуточную популяцию должны составлять все особи предыдущего поколения + новые особи, плохие решения отбрасываются и получается популяция первоначального размера). Помогите, пожалуйста!
C++
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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;
 
    // Generate initial population.
    srand((unsigned)time(NULL));
 
    for (int i = 0; i<MAXPOP; i++) {// Fill the population with numbers between
        for (int j = 0; j<4; j++) {// 0 and the result.
            population[i].alleles[j] = rand() % (result + 1);
        }
    }
 
    if (fitness = CreateFitnesses()) {
        return fitness;
    }
 
    int iterations = 0;// Keep record of the iterations.
    while (fitness != 0 || iterations < 50) {// Repeat until solution found, or over 50 iterations.
        GenerateLikelihoods();// Create the likelihoods.
        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;// Create the crossover point (not first).
    int first = rand() % 100;// Which parent comes first?
 
    gene child = population[p1];// Child is all first parent initially.
 
    int initial = 0, final = 3;// The crossover boundaries.
    if (first < 50) initial = crossover;    // If first parent first. start from crossover.
    else final = crossover + 1;// Else end at crossover.
 
    for (int i = initial; i<final; i++) {// Crossover!
        child.alleles[i] = population[p2].alleles[i];
        if (rand() % 101 < 5) child.alleles[i] = rand() % (result + 1);
    }
 
    return child;// Return the kid...
}
 
void CDiophantine::CreateNewPopulation() {
    gene temppop[MAXPOP];
 
    for (int i = 0; i<25; 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);// Create a child.
    }
 
    for (int i = 0; i < 25; i++) population[i] = temppop[i];
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2018, 19:53
Ответы с готовыми решениями:

Редукция координат звезд
Необходимо выполнить редукцию координат звезд от эпохи 2000 года на сегодняшнюю эпоху...

Редукция лямбда-термов разными стратегиями
В соседнем разделе про Haskell на вчера появилась тема с подобным содержанием и примером, и мне захотелось навелосипедить программку,...

[Ada] Циклическая редукция и кусочно-линейный интеграл
Здравствуйте. Прошу помочь написать код на языке АДА по следующим двум темам: Циклическая редукция и Кусочно-линейный интеграл. ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2018, 19:53
Помогаю со студенческими работами здесь

Ошибка в алгоритме
В общем есть две меняющиеся величины одна постоянно растущая - аа, а другая - с имеет два значения либо 0, либо 1. Я пытаюсь отследить...

Ошибка в алгоритме
import java.util.Scanner; public class twenty_seven { public static void main(String args) { float sum,k=2,h,sum1=1; ...

Ошибка в алгоритме
Добрый вечер. Имеется следующая задача - Помогите, пожалуйста, найти прорехи в моем алгоритме. Вот так вот выделяются слова в html...

Ошибка в алгоритме
В метании молота состязается n спортcменов. Каждый из них сделал m бросков. Побеждает спортсмен, у которого максимален наилучший бросок....

ошибка в алгоритме
Вроде бы правильно, но что-то не так, не пойму что. В массиве А(300) найти суммы нечетных положительных чисел элементов в каждом десятке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru