[Lua] Table in zufällige Reihenfolge bringen, Logikfehler im Code?

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):
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)
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 :)
 
Zuletzt bearbeitet:
Zurück
Oben