Guten Abend Habos 
Ich bin gerade dabei das Traveling-Salesman-Problem mittles dem EDGE-2-Algo zu lösen. Das mache ich in Lua um mir die OOP in Lua näher zu bringen. Anfangs erstelle ich zufällige Lösungen indem ich die die Liste meiner Städte in eine "zufällige" Reihenfolge bringe, wobei jede Stadt(also jeder Wert im Table) nur einmal vorkommen darf.
Bis jetzt wollte ich das so lösen (Hier mein Constructor):
(Auf Pastebin auch in Farbe)
Das schlägt jedoch fehl, Output mit debug-option:
Irgendetwas führt zum Verschlucken von Werten im Table cities. Ich stehe grad total am Schlauch, sieht wer raus was ich falsch mache oder kennt vlt sogar eine bessere Methode das zu lösen?
LG Sim
Ich bin gerade dabei das Traveling-Salesman-Problem mittles dem EDGE-2-Algo zu lösen. Das mache ich in Lua um mir die OOP in Lua näher zu bringen. Anfangs erstelle ich zufällige Lösungen indem ich die die Liste meiner Städte in eine "zufällige" Reihenfolge bringe, wobei jede Stadt(also jeder Wert im Table) nur einmal vorkommen darf.
Bis jetzt wollte ich das so lösen (Hier mein Constructor):
Code:
function ind:new(cities, norandom)
if norandom then return setmetatable({order = cities or {}}, mtind) end
local order = {}
local len = #cities
if debug then print("#cities","i") end
for i=1,len do
-- Zufällige Stadt soll an die erste freie Stelle des neuen Tables.
if debug then print(#cities, i) end
ran = math.random(#cities)
order[i] = cities[ran]
-- Danach wird sie aus dem ursprünglichen Table gelöscht, da keine Stadt doppelt vorkommen darf.
cities[ran] = nil
-- Die Werte des ursprüngliche Tables werden "zusammengeschoben".
len2 = #cities
for i2 = ran, len2 do cities[i2] = cities[i2+1] end
end
return setmetatable({order = order}, mtind)
end
(Auf Pastebin auch in Farbe)
Das schlägt jedoch fehl, Output mit debug-option:
Code:
#cities Laufvariable i
15 1
14 2
13 3
12 4
11 5
10 6
9 7
8 8
7 9
6 10
3 11 <-- Sprung von #cities von 6 auf 3?!
1 12
0 13
lua: ./tspapi.lua:36: bad argument #1 to 'random' (interval is empty)
LG Sim
Zuletzt bearbeitet: