Почему моя программа печатает одно и то же значение?
Я написал программу для печати различных значений для функции De Jong 1 в 5 измерениях, но когда я ее компилирую, программа возвращает одно и то же значение. Сначала я генерирую двоичный вектор, а затем делю его на 5 векторов, которые представляют xi. Я вычисляю десятичное значение для каждого двоичного вектора с помощью функции BinToDec,а затем представляю значение в интервале [-5.12, 5.12] с помощью функции nr_interval.
Что я уже пробовал:
#include <bits/stdc++.h> using namespace std; #define CROSSOVER_RATE 0.3 #define MUTATION_RATE 0.01 #define POP_SIZE 50 #define CHROMO_LENGTH 150 #define GENE_LENGTH 30 int random_num(int start, int end) { int range = (end-start)+1; int random_int = start+(rand()%range); return random_int; } string GetRandomBits(int length) { srand(time(NULL)); string bits; for (int i=0; i<length; i++) { if (random_num(0,1) == 1) bits += "1"; else bits += "0"; } return bits; } int BinToDec(string bits) { int val = 0; int p=1; for (int i = bits.length(); i > 0; i--) { if (bits.at(i-1) == '1') {val += p;} p *= 2; } return val; } double nr_interval(int valoare, double a, double b) { double result; result=0.0; result=a+valoare*((b-a)/(pow(2,30)-1)); return result; } double De_Jong(string bits){ double x=0.0; for(size_t i=0; i<sizeof(bits); i=i+GENE_LENGTH) { x = x + nr_interval(BinToDec(bits.substr(0,i+GENE_LENGTH)),-5.12,5.12)* nr_interval(BinToDec(bits.substr(0,i+GENE_LENGTH)),-5.12,5.12); } return x; } int main(){ for(int x=1; x<=POP_SIZE;x++) { cout<<De_Jong(GetRandomBits(CHROMO_LENGTH)); cout<<endl; } //valoare=BinToDec(GetRandomBits(l)); //cout<<valoare; return 0; }