gpt4 book ai didi

c++ - 为遗传算法分配和检索按位存储值

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:30 25 4
gpt4 key购买 nike

我在为 GA/GP 开发类时遇到了这段代码,但未能理解它,因此无法调试程序。

typedef struct {
void *dataPointer;
int length;
} binary_data;

typedef struct {
organism *organisms; //This must be malloc'ed
int organismsCount;
int (*fitnessTest)(organism org);
int orgDnaLength;
unsigned int desiredFitness;
void (*progress)(unsigned int fitness);
} evolutionary_algorithm;

以上是直截了当的。然后我们尝试在测试它们的适应性等之前启动有机体......

int main(int argc, char *argv[])
{
srand(time(NULL));
int i;
evolutionary_algorithm ea;
ea.progress = progressDisplayer;
ea.organismsCount = 50;
ea.orgDnaLength = sizeof(unsigned int);

organism *orgs =(organism *) malloc(sizeof(organism) * ea.organismsCount);
for (i = 0; i < 50; i++)
{
organism newOrg;
binary_data newOrgDna;
newOrgDna.dataPointer = malloc(sizeof(unsigned int));
memset(newOrgDna.dataPointer, i, 1);
newOrgDna.length = sizeof(unsigned int);
newOrg.dna = newOrgDna;
orgs[i] = newOrg;
}

据我所知,memset() 尝试将二进制值写入该内存位置无效指针 (newOrgDna.dataPointer) 等。但我不知道如何重新组合所有这些二进制值以获得分配给 newOrg 的变量“dna”的整数值,以便我检查分配给单个生物体的整数值,并最终检查驻留在整个内存位置的整个种群已分配给“组织”。

正如您从上面猜测的那样,我对这种深层次细节的内存管理不是很熟悉,因此非常感谢您的帮助。

非常感谢

最佳答案

这段代码看起来有点奇怪。这一行:

newOrgDna.dataPointer = malloc(sizeof(unsigned int));

可能会分配 4 个字节(或 64 位机器上的 8 个字节)。奇怪的是,下面一行中的 memset 将只设置第一个字节。

要获得实际值(value),您可能会这样做:

char val = *((char*) newOrgDna.dataPointer);

但是,正如我所说,这段代码看起来有点不对劲。我会将其重写为:

for (i = 0; i < 50; i++)
{
organism newOrg;
binary_data newOrgDna;
unsigned int * data = (unsigned int*) malloc(sizeof(unsigned int));
*data = i;
newOrgDna.length = sizeof(*data);
newOrgDna.data = (void*) data; // I think that cast can be dropped
newOrg.dna = newOrgDna;
orgs[i] = newOrg;
}

然后无论你想从什么地方获取organism *的数据,你都可以这样做:

void f( organism * o )
{
assert( sizeof(unsigned int) == o->dna.length );
unsigned int data = *((unsigned int*) o->dna.data);
}

此外,这是一个 C 问题而不是 C++。

关于c++ - 为遗传算法分配和检索按位存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com