Put DNa functions in DNA namespace
This commit is contained in:
parent
3122817eee
commit
ca01498cb2
@ -53,8 +53,11 @@ struct Dna
|
||||
uint8_t colorSet;
|
||||
Branch branches[MAX_DEPTH];
|
||||
};
|
||||
void newDna(Dna *dna, uint128 *state);
|
||||
void makeChild(Dna *p1, Dna *p2, Dna *c, uint128 *state);
|
||||
void clone(Dna *p1, Dna *c, uint128 *state);
|
||||
void mutate(Dna *dna, uint32_t num, uint128 *state);
|
||||
namespace DNA
|
||||
{
|
||||
void newDna(Dna *dna, uint128 *state);
|
||||
void makeChild(Dna *p1, Dna *p2, Dna *c, uint128 *state);
|
||||
void clone(Dna *p1, Dna *c, uint128 *state);
|
||||
void mutate(Dna *dna, uint32_t num, uint128 *state);
|
||||
}
|
||||
#endif /* DNA_H */
|
||||
|
@ -5,9 +5,7 @@ struct uint128;
|
||||
namespace mrand
|
||||
{
|
||||
void setSeed(unsigned long long seed);
|
||||
// int getValue(int min, int max);
|
||||
float getFloat(uint128 *state);
|
||||
// float getFloat();
|
||||
int getValue(int min, int max, uint128 *state);
|
||||
uint32_t getInt();
|
||||
}
|
@ -6,59 +6,63 @@
|
||||
|
||||
#include <raymath.h>
|
||||
|
||||
void newDna(Dna *dna, uint128 *state)
|
||||
namespace DNA
|
||||
{
|
||||
uint8_t *array = (uint8_t *)dna;
|
||||
for (size_t i = 0; i < sizeof(Dna); i++)
|
||||
{
|
||||
array[i] = mrand::getValue(0, 255, state);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void makeChild(Dna *p1, Dna *p2, Dna *c, uint128 *state)
|
||||
{
|
||||
uint8_t *p1a = (uint8_t *)p1;
|
||||
uint8_t *p2a = (uint8_t *)p2;
|
||||
uint8_t *ca = (uint8_t *)c;
|
||||
for (size_t i = 0; i < sizeof(Dna); i++)
|
||||
void newDna(Dna *dna, uint128 *state)
|
||||
{
|
||||
int val = mrand::getValue(0, 1, state);
|
||||
if (val == 0)
|
||||
uint8_t *array = (uint8_t *)dna;
|
||||
for (size_t i = 0; i < sizeof(Dna); i++)
|
||||
{
|
||||
ca[i] = p1a[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
ca[i] = p2a[i];
|
||||
array[i] = mrand::getValue(0, 255, state);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void clone(Dna *p1, Dna *c, uint128 *state)
|
||||
{
|
||||
uint8_t *p1a = (uint8_t *)p1;
|
||||
void makeChild(Dna *p1, Dna *p2, Dna *c, uint128 *state)
|
||||
{
|
||||
uint8_t *p1a = (uint8_t *)p1;
|
||||
uint8_t *p2a = (uint8_t *)p2;
|
||||
uint8_t *ca = (uint8_t *)c;
|
||||
for (size_t i = 0; i < sizeof(Dna); i++)
|
||||
{
|
||||
int val = mrand::getValue(0, 1, state);
|
||||
if (val == 0)
|
||||
{
|
||||
ca[i] = p1a[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
ca[i] = p2a[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t *ca = (uint8_t *)c;
|
||||
for (size_t i = 0; i < sizeof(Dna); i++)
|
||||
void clone(Dna *p1, Dna *c, uint128 *state)
|
||||
{
|
||||
int val = mrand::getValue(0, 1, state);
|
||||
if (val == 0)
|
||||
uint8_t *p1a = (uint8_t *)p1;
|
||||
|
||||
uint8_t *ca = (uint8_t *)c;
|
||||
for (size_t i = 0; i < sizeof(Dna); i++)
|
||||
{
|
||||
ca[i] = p1a[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
ca[i] = mrand::getValue(0, 255, state);
|
||||
int val = mrand::getValue(0, 1, state);
|
||||
if (val == 0)
|
||||
{
|
||||
ca[i] = p1a[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
ca[i] = mrand::getValue(0, 255, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
void mutate(Dna *dna, uint32_t num, uint128 *state)
|
||||
{
|
||||
uint8_t *array = (uint8_t *)dna;
|
||||
for (size_t i = 0; i < num; i++)
|
||||
void mutate(Dna *dna, uint32_t num, uint128 *state)
|
||||
{
|
||||
int pos = mrand::getValue(0, sizeof(Dna), state);
|
||||
array[pos] = mrand::getValue(0, 255, state);
|
||||
uint8_t *array = (uint8_t *)dna;
|
||||
for (size_t i = 0; i < num; i++)
|
||||
{
|
||||
int pos = mrand::getValue(0, sizeof(Dna), state);
|
||||
array[pos] = mrand::getValue(0, 255, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -11,7 +11,7 @@ void DnaManager::init()
|
||||
vector.resize(NUM_PER_GEN);
|
||||
for (std::size_t i = 0; i < NUM_PER_GEN; i++)
|
||||
{
|
||||
newDna(&vector[i], &randSeed);
|
||||
DNA::newDna(&vector[i], &randSeed);
|
||||
queued.push_back(&vector[i]);
|
||||
}
|
||||
}
|
||||
@ -75,7 +75,7 @@ void DnaManager::newGen()
|
||||
{
|
||||
for (std::size_t i = 0; i < NUM_PER_GEN; i++)
|
||||
{
|
||||
newDna(&vector[i], &randSeed);
|
||||
DNA::newDna(&vector[i], &randSeed);
|
||||
queued.push_back(&vector[i]);
|
||||
}
|
||||
disliked.clear();
|
||||
@ -93,7 +93,7 @@ void DnaManager::newGen()
|
||||
|
||||
for (auto &&i : disliked)
|
||||
{
|
||||
clone(front, i, &randSeed);
|
||||
DNA::clone(front, i, &randSeed);
|
||||
queued.push_back(i);
|
||||
}
|
||||
|
||||
@ -115,7 +115,7 @@ void DnaManager::newGen()
|
||||
|
||||
Dna *p1p = liked[p1];
|
||||
Dna *p2p = liked[p2];
|
||||
makeChild(p1p, p2p, i, &randSeed);
|
||||
DNA::makeChild(p1p, p2p, i, &randSeed);
|
||||
queued.push_back(i);
|
||||
}
|
||||
}
|
||||
@ -124,7 +124,7 @@ void DnaManager::newGen()
|
||||
{
|
||||
for (auto &&i : queued)
|
||||
{
|
||||
mutate(i, NUM_OF_MUT, &randSeed);
|
||||
DNA::mutate(i, NUM_OF_MUT, &randSeed);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user