Prześlij pliki do ''
This commit is contained in:
parent
ff8be9c68e
commit
007a0c2661
123
gmo.cpp
Normal file
123
gmo.cpp
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <iostream>
|
||||||
|
#include <ctime>
|
||||||
|
#include <string>
|
||||||
|
#include <math.h>
|
||||||
|
#include<bits/stdc++.h>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
string generateValue() {
|
||||||
|
|
||||||
|
char trash[100];
|
||||||
|
string x = itoa(((rand() % 10) * 100 + (rand() % 10) *10 + (rand() % 10)),trash,10);
|
||||||
|
if (x.size() == 2) {
|
||||||
|
x = "0" + x;
|
||||||
|
}
|
||||||
|
else if (x.size() == 1) {
|
||||||
|
x = "00" + x;
|
||||||
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string generateVegetable() {
|
||||||
|
|
||||||
|
string taste = generateValue();
|
||||||
|
string colour = generateValue();
|
||||||
|
string size = generateValue();
|
||||||
|
|
||||||
|
return taste + colour + size;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void generatePopulation(string * population,int length) {
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for(i=0;i<length;i++) {
|
||||||
|
population[i] = generateVegetable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int power(int x, int y) {
|
||||||
|
|
||||||
|
if (y == 0) return 1;
|
||||||
|
if (y == 1) return x;
|
||||||
|
|
||||||
|
int temp = power(x, y/2);
|
||||||
|
if (y%2 == 0) return temp * temp;
|
||||||
|
else return x * temp * temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int stringToInt(string str,int size) {
|
||||||
|
|
||||||
|
int x = 0;
|
||||||
|
int i;
|
||||||
|
reverse(str.begin(),str.end());
|
||||||
|
|
||||||
|
for(i=0;i<size;i++) {
|
||||||
|
x += (str[i] - '0') * power(10,i);
|
||||||
|
}
|
||||||
|
|
||||||
|
reverse(str.begin(),str.end());
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int fitness(string vegetable) {
|
||||||
|
|
||||||
|
int taste = stringToInt(vegetable.substr(0,3),3);
|
||||||
|
int colour = stringToInt(vegetable.substr(3,3),3);
|
||||||
|
int size = stringToInt(vegetable.substr(6,3),3);
|
||||||
|
|
||||||
|
return (taste+colour+size)/3;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Selection jeszcze nie dokonczone
|
||||||
|
void selection(string * population,string * nextGen, int populationSize, int nextGenSize) {
|
||||||
|
|
||||||
|
int i;
|
||||||
|
int fitnessTable[populationSize];
|
||||||
|
for(i=0;i<populationSize;i++) {
|
||||||
|
fitnessTable[i] = fitness(population[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sort(fitnessTable,fitnessTable+populationSize,greater<int>());
|
||||||
|
|
||||||
|
for(i=0;i<populationSize;i++) {
|
||||||
|
fitnessTable[i] = 1000 - fitnessTable[i];
|
||||||
|
cout << fitnessTable[i] << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
srand(time(0));
|
||||||
|
|
||||||
|
int i;
|
||||||
|
int size = 20;
|
||||||
|
string population[size];
|
||||||
|
|
||||||
|
generatePopulation(population,size);
|
||||||
|
|
||||||
|
string nextGen[5];
|
||||||
|
|
||||||
|
selection(population,nextGen,20,5);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user