107 lines
4.7 KiB
C++
107 lines
4.7 KiB
C++
#include "Genetic.hpp"
|
|
|
|
int main()
|
|
{
|
|
FILE *inputFile;
|
|
FILE *outputFile;
|
|
int decision;
|
|
|
|
int trainCounter;
|
|
int inputCounter;
|
|
int doubleCounter;
|
|
int groupCounter;
|
|
|
|
double trainInputs[30][5];
|
|
double testInputs[120][5];
|
|
double currentError;
|
|
Generation generation(50, 5);
|
|
|
|
inputFile = fopen("Data/train.data", "r");
|
|
for (inputCounter = 0; inputCounter < 30; inputCounter++)
|
|
for (doubleCounter = 0; doubleCounter < 5; doubleCounter++)
|
|
fscanf(inputFile, "%lf,", &trainInputs[inputCounter][doubleCounter]);
|
|
fclose(inputFile);
|
|
|
|
inputFile = fopen("Data/test.data", "r");
|
|
for (inputCounter = 0; inputCounter < 120; inputCounter++)
|
|
for (doubleCounter = 0; doubleCounter < 5; doubleCounter++)
|
|
fscanf(inputFile, "%lf,", &testInputs[inputCounter][doubleCounter]);
|
|
fclose(inputFile);
|
|
|
|
std::cout << "Inputs Are Getting Set: ";
|
|
std::cout << (generation.SetInputNeurons(4) ? "Successfull!" : "Failed!") << "\n";
|
|
std::cout << "Hidden 1 Are Getting Set: ";
|
|
std::cout << (generation.SetHiddenNeurons(0, 2) ? "Successfull!" : "Failed!") << "\n";
|
|
std::cout << "Hidden 2 Are Getting Set: ";
|
|
std::cout << (generation.SetHiddenNeurons(1, 2) ? "Successfull!" : "Failed!") << "\n";
|
|
std::cout << "Hidden 3 Are Getting Set: ";
|
|
std::cout << (generation.SetHiddenNeurons(2, 2) ? "Successfull!" : "Failed!") << "\n";
|
|
std::cout << "Hidden 4 Are Getting Set: ";
|
|
std::cout << (generation.SetHiddenNeurons(3, 2) ? "Successfull!" : "Failed!") << "\n";
|
|
std::cout << "Hidden 5 Are Getting Set: ";
|
|
std::cout << (generation.SetHiddenNeurons(4, 2) ? "Successfull!" : "Failed!") << "\n";
|
|
std::cout << "Outputs Are Getting Set: ";
|
|
std::cout << (generation.SetOutputNeurons(1) ? "Successfull!" : "Failed!") << "\n";
|
|
std::cout << "Networks Are Getting Connected: ";
|
|
std::cout << (generation.ConnectNetworks() ? "Successfull!" : "Failed!") << "\n";
|
|
|
|
std::cout << "Networks Are Getting Randomized: ";
|
|
generation.Randomize();
|
|
std::cout << "Done!\n";
|
|
|
|
do
|
|
{
|
|
std::cout << "\n[-1] Test\n[-2] Best to File\n[-3] Exit\nAny Positive Number for train count\nDecision: ";
|
|
std::cin >> decision;
|
|
|
|
switch (decision)
|
|
{
|
|
case -3:
|
|
std::cout << "Exiting...\n";
|
|
break;
|
|
case -2:
|
|
generation.WriteBestToFile();
|
|
break;
|
|
default:
|
|
for (trainCounter = 0; trainCounter < decision; trainCounter++)
|
|
{
|
|
std::cout << (trainCounter + 1) << "\n";
|
|
for (inputCounter = 0; inputCounter < 10; inputCounter++)
|
|
{
|
|
generation.ResetScores();
|
|
for (groupCounter = 0; groupCounter < 3; groupCounter++)
|
|
{
|
|
for (doubleCounter = 0; doubleCounter < 4; doubleCounter++)
|
|
generation.SetInput(trainInputs[inputCounter * 3 + groupCounter][doubleCounter], doubleCounter);
|
|
generation.SetTarget(trainInputs[inputCounter * 3 + groupCounter][4]);
|
|
generation.Fire();
|
|
generation.UpdateScores();
|
|
}
|
|
generation.SortByScore();
|
|
generation.NextGeneration();
|
|
}
|
|
}
|
|
std::cout << "Best Score -> " << generation.GetPredictionOfBestNetwork() << "\n";
|
|
std::cout << "Train is Over!\n";
|
|
// break; To test it after the train is done
|
|
case -1:
|
|
outputFile = fopen("Data/results.data", "w");
|
|
for (inputCounter = 0; inputCounter < 120; inputCounter++)
|
|
{
|
|
for (doubleCounter = 0; doubleCounter < 4; doubleCounter++)
|
|
generation.SetInput(testInputs[inputCounter][doubleCounter], doubleCounter);
|
|
generation.SetTarget(testInputs[inputCounter][4]);
|
|
|
|
generation.Fire();
|
|
currentError = testInputs[inputCounter][4] - generation.GetPredictionOfBestNetwork() < 0 ? generation.GetPredictionOfBestNetwork() - testInputs[inputCounter][4] : testInputs[inputCounter][4] - generation.GetPredictionOfBestNetwork();
|
|
fprintf(outputFile, "%lf,%lf,%lf\n", testInputs[inputCounter][4], generation.GetPredictionOfBestNetwork(), currentError);
|
|
}
|
|
fclose(outputFile);
|
|
std::cout << "Test is Over!\n";
|
|
break;
|
|
}
|
|
} while (decision != -3);
|
|
|
|
return 0;
|
|
}
|