我正在编写的程序的目的是实现一个遗传算法来开发随机游戏Piglet的游戏策略.首先,我有一个包含所有策略的数组,并且我将一个索引传递给'fitness'函数.只是为了检查一切工作正常,我打印了策略(此时为了简化这些测试,在此时只有1个人口).好吧..它有点工作; 我有一个10x10x10的零和一些它应该做的数组,但程序进行打印数字; 有时是零块,有时是大块的可笑块.我认为我对健身的呼吁可能是问题..我从未见过/被告知这是可能的,但我不明白为什么它不会,所以试一试.
这是代码:
#include#include #include #define STRATS 1 double fitness(int strategy[10][10][10]){ for (int i=0; i<10; ++i) { printf("\n\n"); for (int j=0; j<10; ++j) { printf("\n"); for (int k=0; k<10; ++k) { printf("%d ", strategy[i][j][k]); } } } return 0; } int main () { int strategies[STRATS][10][10][10]; /*[strategy reference][i][j][k]*/ int fitnesses[STRATS]; /*Generate initial strategies*/ for (int s=0; s 这是我完成实际需要后得到的一些随机输出的片段:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -17958193 16777223 3 7 9 1856 133 0 25 792 1163157343 21592 0 0 1606418432 32767 245760 0 0 0 245760 0 7 5 9 0 1702125407 29816 0 0 1163157343 21592 0 0 1606422528 32767 146750 0 4096 4 0 0 -2147482624 0 0 0 1951620959 1667855457 1953066569 0 1163157343 21592 0 0 1606569278 32767 1025 0 150846 0 0 0 0 0 0 0 1935892319 1852404340 103 0 1163157343 21592 0 0 1606570304 32767 35849 0 151872 3 0 0 2 0 0 0 1868783455 7631726 0 0 1163157343 21592 0 0 1606606176 32767 192 0 187744 5 0 0 0 0 0 0 1868848991 1819303782 1936417647 7627124 1163157343 21592 0 0 1606606368 32767 2988 0 187936 4 0 0 15 0 0 0 1868848991 2019778406 1970429793 6911086 1163157343 21592 0 0 1606609360 32767 1956 0 190928 4 0 0 15 0 0 0 1667719007 2019909475
chux - Reins.. 5
失败,因为代码访问其内存之外.
#define STRATS 1 ... int strategies[STRATS][10][10][10]; ... // for (int s=0; s<20; ++s) { for (int s=0; s也许改成
#define STRATS (20)
失败,因为代码访问其内存之外.
#define STRATS 1 ... int strategies[STRATS][10][10][10]; ... // for (int s=0; s<20; ++s) { for (int s=0; s<STRATS; ++s) {
也许改成 #define STRATS (20)