RosettaCodeData/Task/Evolutionary-algorithm/SequenceL/evolutionary-algorithm-2.se...

51 lines
1.2 KiB
Plaintext

#include <iostream>
#include <time.h>
#include "SL_Generated.h"
using namespace std;
int main(int argc, char** argv)
{
int threads = 0;
char* targetString = "METHINKS IT IS LIKE A WEASEL";
if(argc > 1) targetString = argv[1];
int C = 100;
if(argc > 2) C = atoi(argv[2]);
SL_FLOAT P = 0.05;
if(argc > 3) P = atof(argv[3]);
int seed = time(NULL);
if(argc > 4) seed = atoi(argv[4]);
int targetDims[] = {strlen(targetString), 0};
Sequence<char> target((void*)targetString, targetDims);
sl_init(threads);
Sequence<char> parent;
Sequence<char> newParent;
Sequence<int> parentRands;
sl_create(seed++, 1, 27, target.size(), threads, parentRands);
sl_initializeParent(parentRands, threads, parent);
Sequence< Sequence<int> > charRands;
Sequence< Sequence<SL_FLOAT> > rateRands;
cout << "Start:\t" << parent << endl;
for(int i = 1; !(parent == target); i++)
{
sl_create(seed++, 1, 27, C, target.size(), threads, charRands);
sl_create(seed++, 0.0, 1.0, C, target.size(), threads, rateRands);
sl_evolve(target, parent, C, P, rateRands, charRands, threads, newParent);
parent = newParent;
cout << "#" << i << ":\t" << parent << endl;
}
cout << "End:\t" << parent << endl;
sl_done();
return 0;
}