TSP by Ant Colony Optimization

时间:2014-04-18 15:36:45

标签: c ant mathematical-optimization traveling-salesman

我在C中使用蚁群优化来处理TSP问题。 我认为我的实施正确,但我的计划不起作用。 我知道我的代码中存在内存问题,因为当我运行我的程序时,控制台会写入" core dumped。" 我使用gdb来查找错误,当我编写调试命令时,我看到了类似的东西:

Program received signal SIGSEGV, Segmentation fault.
0x08049691 in odleglosc (miastoA=1668848019, miastoB=1062464331, graf=0x804d440) at trail.c:34
34      return graf[miastoA][miastoB];
(gdb) bt
0  0x08049691 in odleglosc (miastoA=1668848019, miastoB=1062464331, graf=0x804d440) at trail.c:34
1  0x080496f1 in Length (sciezka3=0x804f5a0, graf=0x804d440, size=22) at trail.c:42
2  0x0804919d in updateFeromon (feromon=0x804f380, mrow=0x804e8a0, graf=0x804d440, parowanie=0, 10000000000000001, iloscFeromonu=2, miasta=22, mrowki=4) at pheromon.c:40
3  0x080489e3 in main (argc=1, argv=0xbffff0f4) at main.c:55

来自pheromon.c的UpdateFeromon从trail.c调用一个Length函数,然后这个函数也从trail.c调用odleglosc。 miastoA和miasto的范围是0到21。 我不知道哪个函数改变了我的值(miastoA和miastoB)以及如何修复它。

这是我的代码http://speedy.sh/FTTZe/mrowki.tar

的链接

1 个答案:

答案 0 :(得分:0)

这是一个复杂的代码,很难理解用我不会说的语言编写的复杂代码。无论如何,我试图检查代码并看到一个看起来可疑的地方。在函数inicjalizujMrowki()中,您似乎在下面的第二个for循环中覆盖了mrow []值:

for(i=0; i<miasta; i++)
{
    mrow[i]=(int*)malloc(sizeof(int)*miasta);
}
for(j=0; j<mrowki;j++)
{
    int start =0;
    mrow[j]= losowaSciezka(start, miasta);
}

作为我调查的一般结果,miasta(无论是什么)是22(不是你在问题中指出的21),问题肯定是不正确的分配,因此上面的代码敲响了钟声的原因。

编辑: 在你上面的解释之后,我看到mrow确实是问题所在。我在手机上写这个,所以我不能直接给你代码,但我可以告诉你。将mrow视为指向数组指针数组的指针。所以初始化应该像这样(伪代码):

int **mrow;
**mrow = malloc(num_rows);
for (0 to num_rows-1) {
    *mrow = malloc(num_columns);
}

编辑:我太过分参与其中了。我认为最好不要查看代码并尝试找到问题,而是花些时间学习如何使用调试器。这对我们有很大的帮助。