gpt4 book ai didi

c - 蚁群优化的 TSP

转载 作者:行者123 更新时间:2023-11-30 19:46:48 26 4
gpt4 key购买 nike

我正在使用 C 语言中的蚁群优化来解决 TSP 问题。我认为我的实现是正确的,但我的程序不起作用。我知道我的代码中存在内存问题,因为当我运行程序时,控制台会写“核心已转储”。我使用 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 的链接

最佳答案

这是一段复杂的代码,很难理解用我不会说的语言编写的复杂代码。不管怎样,我尝试检查代码,发现了一处看起来可疑的地方。在函数 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);
}

编辑:我参与太多了。我认为最好花一些时间学习如何使用调试器,而不是查看代码并试图找到问题。这会有很大帮助。

关于c - 蚁群优化的 TSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23157355/

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