Ich habe das in etwa verstanden (wir kommen aus der selben Branche, wobei das ja eher ein allgemeines mathematisches Problem ist)
Nochmal zum Verständnis:
Delphi-Quellcode:
procedure TFrame.CalcNB;
// Bandbreite;
var
I: integer;
begin
FNB := 0;
repeat ***
FIndexOfU := ..
for I := 1
to FElements.Count
do
begin
SimulateLoad(FElements.Item[I].Left, FElements.Item[I].Left);
SimulateLoad(FElements.Item[I].Right, FElements.Item[I].Right);
SimulateLoad(FElements.Item[I].Left, FElements.Item[I].Right);
SimulateLoad(FElements.Item[I].Right, FElements.Item[I].Left);
end;
until FB möglichst klein; ***
end;
Ich nehme an, bei
FIndexOfU :=
soll die Indextabelle in einer geänderten Reigenfolge neu aufgebaut werden. Passiert das durch Aufruf von CalcIndexOfU? Dann könnte man dort vielleicht nicht mit for I := 1 to FNodes.Count über die Nodes laufen, sondern immer möglichst benachbarte Nodes als nächstes einsetzen.
Ansonsten ist auch die Frage, ob die Rechenzeit, die man in eine aufwändige Bandbreitenoptimierung reinsteckt, später bei der eigentlichen Martixberechnung wieder reingeholt wird.