Add NetUnit save Gen
This commit is contained in:
parent
5342f1b928
commit
e50acd9cc5
@ -34,7 +34,7 @@ private:
|
|||||||
Rectangle likeBox;
|
Rectangle likeBox;
|
||||||
Rectangle disLikeBox;
|
Rectangle disLikeBox;
|
||||||
|
|
||||||
std::array<Unit, 2> unit = {0};
|
std::array<UiUnit, 2> unit = {0};
|
||||||
|
|
||||||
DnaManager manager;
|
DnaManager manager;
|
||||||
|
|
||||||
|
@ -12,25 +12,35 @@ enum Liked
|
|||||||
no
|
no
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Unit
|
struct UiUnit
|
||||||
{
|
{
|
||||||
Dna *dna;
|
Dna *dna;
|
||||||
Liked liked;
|
Liked liked;
|
||||||
int index;
|
int index;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct NetUnit
|
||||||
|
{
|
||||||
|
uint128 hash;
|
||||||
|
uint32_t index;
|
||||||
|
Liked liked;
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(24 == sizeof(NetUnit));
|
||||||
|
|
||||||
class DnaManager
|
class DnaManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void init();
|
void init();
|
||||||
void deinit();
|
void deinit();
|
||||||
Unit next();
|
UiUnit next();
|
||||||
void like(Unit unit);
|
void like(UiUnit unit);
|
||||||
int generation;
|
int generation;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void saveData();
|
void saveData();
|
||||||
void saveVec();
|
void saveVec();
|
||||||
|
void saveGen();
|
||||||
uint128 randSeed;
|
uint128 randSeed;
|
||||||
uint128 id;
|
uint128 id;
|
||||||
int queued;
|
int queued;
|
||||||
|
@ -72,13 +72,7 @@ int sendFile()
|
|||||||
|
|
||||||
serv_addr.sin_family = AF_INET;
|
serv_addr.sin_family = AF_INET;
|
||||||
serv_addr.sin_port = htons(PORT);
|
serv_addr.sin_port = htons(PORT);
|
||||||
|
serv_addr.sin_addr = ipAddr;
|
||||||
// Convert IPv4 and IPv6 addresses from text to binary form
|
|
||||||
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0)
|
|
||||||
{
|
|
||||||
TraceLog(LOG_ERROR, "Invalid address/ Address not supported");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
|
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
|
||||||
{
|
{
|
||||||
@ -119,13 +113,6 @@ int sendBuffer()
|
|||||||
serv_addr.sin_port = htons(PORT);
|
serv_addr.sin_port = htons(PORT);
|
||||||
serv_addr.sin_addr = ipAddr;
|
serv_addr.sin_addr = ipAddr;
|
||||||
|
|
||||||
// Convert IPv4 and IPv6 addresses from text to binary form
|
|
||||||
// if (inet_pton(AF_INET, "192.168.0.31", &serv_addr.sin_addr) <= 0)
|
|
||||||
// {
|
|
||||||
// TraceLog(LOG_ERROR, "Invalid address/ Address not supported");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
|
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
|
||||||
{
|
{
|
||||||
TraceLog(LOG_ERROR, "Connection Failed");
|
TraceLog(LOG_ERROR, "Connection Failed");
|
||||||
|
@ -18,8 +18,6 @@ constexpr float textMargin = 0.02f;
|
|||||||
|
|
||||||
void App::init(int screenWidth, int screenHeight)
|
void App::init(int screenWidth, int screenHeight)
|
||||||
{
|
{
|
||||||
SetTextLineSpacing(0);
|
|
||||||
|
|
||||||
this->screenWidth = screenWidth;
|
this->screenWidth = screenWidth;
|
||||||
this->screenHeight = screenHeight;
|
this->screenHeight = screenHeight;
|
||||||
this->canvas.init(screenWidth);
|
this->canvas.init(screenWidth);
|
||||||
|
@ -41,6 +41,8 @@ void DnaManager::init()
|
|||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
fread(&tmp, sizeof(tmp), 1, file);
|
fread(&tmp, sizeof(tmp), 1, file);
|
||||||
|
if (tmp >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now
|
||||||
|
continue;
|
||||||
liked.push_back(tmp);
|
liked.push_back(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,6 +50,8 @@ void DnaManager::init()
|
|||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
fread(&tmp, sizeof(tmp), 1, file);
|
fread(&tmp, sizeof(tmp), 1, file);
|
||||||
|
if (tmp >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now
|
||||||
|
continue;
|
||||||
disliked.push_back(tmp);
|
disliked.push_back(tmp);
|
||||||
}
|
}
|
||||||
fclose(file);
|
fclose(file);
|
||||||
@ -71,6 +75,7 @@ void DnaManager::init()
|
|||||||
{
|
{
|
||||||
DNA::newDna(&vector[i], &randSeed);
|
DNA::newDna(&vector[i], &randSeed);
|
||||||
}
|
}
|
||||||
|
saveVec();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +117,7 @@ void DnaManager::saveVec()
|
|||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
Unit DnaManager::next()
|
UiUnit DnaManager::next()
|
||||||
{
|
{
|
||||||
if (queued >= NUM_PER_GEN)
|
if (queued >= NUM_PER_GEN)
|
||||||
{
|
{
|
||||||
@ -124,7 +129,7 @@ Unit DnaManager::next()
|
|||||||
return {ret, Liked::tbd, index};
|
return {ret, Liked::tbd, index};
|
||||||
}
|
}
|
||||||
|
|
||||||
void DnaManager::like(Unit unit)
|
void DnaManager::like(UiUnit unit)
|
||||||
{
|
{
|
||||||
int found = -1;
|
int found = -1;
|
||||||
if (unit.index == showed)
|
if (unit.index == showed)
|
||||||
@ -155,6 +160,7 @@ void DnaManager::like(Unit unit)
|
|||||||
|
|
||||||
if (showed >= NUM_PER_GEN && queued >= NUM_PER_GEN) // if buffer was biger in the past showed could be more then NUM_PER_GEN so its changed to >= insted of ==
|
if (showed >= NUM_PER_GEN && queued >= NUM_PER_GEN) // if buffer was biger in the past showed could be more then NUM_PER_GEN so its changed to >= insted of ==
|
||||||
{
|
{
|
||||||
|
saveGen();
|
||||||
newGen();
|
newGen();
|
||||||
queued = 0;
|
queued = 0;
|
||||||
showed = 0;
|
showed = 0;
|
||||||
@ -164,6 +170,37 @@ void DnaManager::like(Unit unit)
|
|||||||
saveData();
|
saveData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DnaManager::saveGen()
|
||||||
|
{
|
||||||
|
std::vector<NetUnit> gen;
|
||||||
|
gen.resize(NUM_PER_GEN);
|
||||||
|
for (std::size_t i = 0; i < NUM_PER_GEN; i++)
|
||||||
|
{
|
||||||
|
unsigned int *hash = ComputeMD5((unsigned char *)&vector[i], sizeof(Dna));
|
||||||
|
gen[i].hash.a = hash[0];
|
||||||
|
gen[i].hash.b = hash[1];
|
||||||
|
gen[i].hash.c = hash[2];
|
||||||
|
gen[i].hash.d = hash[3];
|
||||||
|
|
||||||
|
gen[i].liked = Liked::tbd;
|
||||||
|
gen[i].index = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto &&i : liked)
|
||||||
|
{
|
||||||
|
gen[i].liked = Liked::yes;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto &&i : disliked)
|
||||||
|
{
|
||||||
|
gen[i].liked = Liked::no;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *fileName = TextFormat("gen%04d.bin", generation);
|
||||||
|
|
||||||
|
sys::saveDataToFile(fileName, gen.data(), sizeof(NetUnit) * NUM_PER_GEN);
|
||||||
|
}
|
||||||
|
|
||||||
void DnaManager::newGen()
|
void DnaManager::newGen()
|
||||||
{
|
{
|
||||||
if (liked.size() == 0)
|
if (liked.size() == 0)
|
||||||
@ -193,8 +230,6 @@ void DnaManager::newGen()
|
|||||||
{
|
{
|
||||||
for (auto &&i : disliked)
|
for (auto &&i : disliked)
|
||||||
{
|
{
|
||||||
if (i >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now
|
|
||||||
continue;
|
|
||||||
|
|
||||||
size_t p1 = mrand::getValue(0, liked.size() - 1, &randSeed);
|
size_t p1 = mrand::getValue(0, liked.size() - 1, &randSeed);
|
||||||
size_t p2 = mrand::getValue(0, liked.size() - 1, &randSeed);
|
size_t p2 = mrand::getValue(0, liked.size() - 1, &randSeed);
|
||||||
@ -203,9 +238,6 @@ void DnaManager::newGen()
|
|||||||
p2 = mrand::getValue(0, liked.size(), &randSeed);
|
p2 = mrand::getValue(0, liked.size(), &randSeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p1 >= NUM_PER_GEN || p2 >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now
|
|
||||||
continue;
|
|
||||||
|
|
||||||
p1 = liked[p1];
|
p1 = liked[p1];
|
||||||
p2 = liked[p2];
|
p2 = liked[p2];
|
||||||
Dna *p1p = &vector[p1];
|
Dna *p1p = &vector[p1];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user