我正在搞乱遗传算法,并决定为我的健身功能尝试一种新的格式。 (现在非常琐碎)。
void calcfitness()
{
stringstream toi;
//Max fitness 72
int attack = 0, defense = 0,
speed = 0, energy = 0, disease = 0;
toi << genes [0]; toi >> attack; toi.clear();
toi << genes [1]; toi >> defense; toi.clear();
toi << genes [2]; toi >> speed; toi.clear();
toi << genes [3]; toi >> energy; toi.clear();
toi << genes [4]; toi >> disease; toi.clear();
fitness = (attack * 2) + (defense * 2) + speed + (energy * 3) - (disease * 5);
}
dna存储为一个字符串,我正在尝试使用stringstream将其提取到单个基因中。
时fitness =
行不使用加权(* 3,* 2等),它工作正常(虽然它比我使用的慢)。当我加入加权时,我得到了一个分段错误。程序在发生之前甚至没有到达main()。 怎么可能这给我一个段错误呢?据我所知,我并没有尝试访问任何我不拥有的内存。 我四处搜寻,我发现的所有类似问题都是由于指针超出了范围,但据我所知,这也不是问题所在。
有没有更好的方法来设置它?我试着做了
attack = genes [0];
但是将char的ASCII代码分配给攻击,而不是值本身。
以下是它所属的类的开头:
class Being
{
int id, var1, var2, var3, var4;
string genes;
public:
double fitness;
Being()
{
id = env.getcurid();
var1 = 0, var2 = 0, var3 = 0, var4 = 0;
genes = gengenes(DNASIZE);
fitness = 0;
}
非常感谢任何帮助。
谢谢。